Revision 9c74cc19

b/snf-cyclades-app/synnefo/api/ports.py
107 107

  
108 108
    network = util.get_network(net_id, user_id, non_deleted=True)
109 109

  
110
    ipaddress = None
110 111
    if network.public:
111
        raise api.faults.Forbidden('forbidden')
112
        fixed_ips = api.utils.get_attribute(port_dict, "fixed_ips",
113
                                            required=True)
114
        fip_address = api.utils.get_attribute(fixed_ips[0], 'ip_address',
115
                                              required=True)
116
        ipaddress = util.get_floating_ip_by_address(user_id, fip_address,
117
                                                      for_update=True)
118
        if ipaddress.network.id != network.id:
119
            raise api.faults.Conflict("The given ip is not on the \
120
                                       given network")
112 121

  
113 122
    vm = util.get_vm(dev_id, user_id, non_deleted=True, non_suspended=True)
114 123

  
......
127 136
            sg = util.get_security_group(int(gid))
128 137
            sg_list.append(sg)
129 138

  
130
    new_port = ports.create(network, vm, security_groups=sg_list)
139
    new_port = ports.create(network, vm, ipaddress, security_groups=sg_list)
131 140

  
132 141
    response = render_port(request, port_to_dict(new_port), status=201)
133 142

  
b/snf-cyclades-app/synnefo/api/tests/ports.py
127 127
        response = self.post(PORTS_URL, params=json.dumps(request))
128 128
        self.assertEqual(response.status_code, 404)
129 129

  
130
    def test_create_port(self):
131
        net = dbmf.NetworkFactory.create()
130
    def test_create_port_private_net(self):
131
        net = dbmf.NetworkFactory.create(public=False)
132 132
        subnet1 = dbmf.IPv4SubnetFactory.create(network=net)
133 133
        subnet2 = dbmf.IPv6SubnetFactory.create(network=net)
134 134
        sg1 = dbmf.SecurityGroupFactory.create()
......
146 146
                             user=net.userid)
147 147
        self.assertEqual(response.status_code, 201)
148 148

  
149
    def test_create_port_public_net_no_ip(self):
150
        net = dbmf.NetworkFactory.create(public=True)
151
        vm = dbmf.VirtualMachineFactory.create(userid=net.userid)
152
        request = {
153
            "port": {
154
                "name": "port1",
155
                "network_id": str(net.id),
156
                "device_id": str(vm.id),
157
            }
158
        }
159
        response = self.post(PORTS_URL, params=json.dumps(request),
160
                             user=net.userid)
161
        self.assertEqual(response.status_code, 400)
162

  
163
    def test_create_port_public_net_wrong_ip(self):
164
        net = dbmf.NetworkFactory.create(public=True)
165
        vm = dbmf.VirtualMachineFactory.create(userid=net.userid)
166
        request = {
167
            "port": {
168
                "name": "port1",
169
                "network_id": str(net.id),
170
                "device_id": str(vm.id),
171
                "fixed_ips" : [{"ip_address":"8.8.8.8"}]
172
            }
173
        }
174
        response = self.post(PORTS_URL, params=json.dumps(request),
175
                             user=net.userid)
176
        self.assertEqual(response.status_code, 404)
177

  
178
    def test_create_port_public_net_conflict(self):
179
        net = dbmf.NetworkFactory.create(public=True)
180
        fip = dbmf.FloatingIPFactory(nic=None, userid=net.userid)
181
        vm = dbmf.VirtualMachineFactory.create(userid=net.userid)
182
        request = {
183
            "port": {
184
                "name": "port1",
185
                "network_id": str(net.id),
186
                "device_id": str(vm.id),
187
                "fixed_ips" : [{"ip_address":fip.address}]
188
            }
189
        }
190
        response = self.post(PORTS_URL, params=json.dumps(request),
191
                             user=net.userid)
192
        self.assertEqual(response.status_code, 409)
193

  
194
    def test_create_port_public_net_taken_ip(self):
195
        net = dbmf.NetworkFactory.create(public=True)
196
        fip = dbmf.FloatingIPFactory(network=net, userid=net.userid)
197
        vm = dbmf.VirtualMachineFactory.create(userid=net.userid)
198
        request = {
199
            "port": {
200
                "name": "port1",
201
                "network_id": str(net.id),
202
                "device_id": str(vm.id),
203
                "fixed_ips" : [{"ip_address":fip.address}]
204
            }
205
        }
206
        response = self.post(PORTS_URL, params=json.dumps(request),
207
                             user=net.userid)
208
        self.assertEqual(response.status_code, 400)
209

  
210
    def test_create_port_public_net(self):
211
        net = dbmf.NetworkFactory.create(public=True)
212
        fip = dbmf.FloatingIPFactory(network=net, nic=None, userid=net.userid)
213
        vm = dbmf.VirtualMachineFactory.create(userid=net.userid)
214
        request = {
215
            "port": {
216
                "name": "port1",
217
                "network_id": str(net.id),
218
                "device_id": str(vm.id),
219
                "fixed_ips" : [{"ip_address":fip.address}]
220
            }
221
        }
222
        response = self.post(PORTS_URL, params=json.dumps(request),
223
                             user=net.userid)
224
        print response.content
225
        self.assertEqual(response.status_code, 200)
226

  
149 227
    def test_add_nic_to_deleted_network(self):
150 228
        user = 'userr'
151 229
        vm = dbmf.VirtualMachineFactory(name='yo', userid=user,

Also available in: Unified diff