def _handle_missing_networks(self, not_found):
     msg_format = "Network {0} was not found by ID or name."
     msgs = []
     for net in not_found:
         msgs.append(msg_format.format(net))
     ex_msg = "\n".join(msgs)
     LOG.exception(ex_msg)
     raise a10_ex.NetworksNotFoundError(ex_msg)
Example #2
0
    def test_create_instance_network_not_available_throws_exception(self):
        self.neutron_api.list_networks.return_value = {"networks": [None]}
        self.neutron_api.list_networks.side_effect = a10_ex.NetworksNotFoundError(
        )
        fake_instance = self.fake_instance
        fake_instance["networks"] = ["fakenet"]

        with self.assertRaises(a10_ex.NetworksNotFoundError):
            self.target.create_instance(fake_instance)
    def _create_instance(self, context):
        server = self._build_server(context)

        image_id = context.get("image", None)
        flavor_id = context.get("flavor", None)
        net_ids = context.get("networks")
        image = self.get_image(identifier=image_id)
        flavor = self.get_flavor(identifier=flavor_id)

        networks = self.get_networks(net_ids)

        if image is None:
            raise a10_ex.ImageNotFoundError(
                MISSING_ERR_FORMAT.format("Image", image_id))

        if flavor is None:
            raise a10_ex.FlavorNotFoundError(
                MISSING_ERR_FORMAT.format("Flavor", flavor_id))

        if networks is None:
            msg = map(lambda x: MISSING_ERR_FORMAT.format("Network", x),
                      net_ids)
            raise a10_ex.NetworksNotFoundError(msg)

        server["image"] = image.id
        server["flavor"] = flavor.id
        server["nics"] = [{'net-id': x['id']} for x in networks]

        created_instance = self._nova_api.servers.create(**server)

        # Next 6 lines -  Added due to insane API on the other side
        if hasattr(created_instance.manager, 'client'):
            # This craziness works around a bug in Liberty.
            created_instance.manager.client.last_request_id = None
        self._create_server_spinlock(created_instance)

        # Get the IP address of the first interface (should be management)
        ip_address = self._get_ip_addresses_from_instance(
            created_instance.addresses, networks[0]['name'])

        return {
            'name': server['name'],
            'instance': created_instance,
            'ip_address': ip_address,
            'nova_instance_id': created_instance.id
        }