コード例 #1
0
    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
        }
コード例 #2
0
 def get_image(self, identifier=None):
     result = None
     images = []
     if identifier is None:
         raise a10_ex.IdentifierUnspecifiedError(
             "Parameter identifier must specify image id or name")
     img_filter = (lambda x: x is not None and (
         (hasattr(x, "name") and x.name is not None and identifier in x.name
          ) or (hasattr(x, "id") and x.id == identifier)))
     try:
         images = self._nova_api.glance.list()
     except Exception as ex:
         raise a10_ex.ImageNotFoundError(
             "Unable to retrieve images from nova.  Error %s" % (ex))
     filtered = filter(img_filter, images)
     if filtered:
         result = filtered[0]
     return result