Пример #1
0
def backup_instance(request, instance_id_list, image_path):

    for instance_id in instance_id_list:
        # Create a snapshot of an instance
        snapshot_name = 'snapshot_of_' + instance_id
        image_id = nova.snapshot_create(request, instance_id, snapshot_name)

        # Waiting for creating snapshot
        image = glance.image_get(request, image_id)
        while image.status != 'active':
            time.sleep(5)
            image = glance.image_get(request, image_id)

        # Download image data
        image_data = glance.glanceclient(request).images.data(image.id)

        image_filename = u.join_path(image_path, instance_id+'.raw')
        f = io.open(image_filename, 'wb')
        for chunk in image_data:
            f.write(chunk)

        glance.image_delete(request, image.id)

        # TODO: Transform image format from raw to qcow2
        os.system('qemu-img convert -f raw -O qcow2 ' + image_filename + ' ' + image_filename + '.qcow2')
Пример #2
0
 def image_name(self):
     import glanceclient.exc as glance_exceptions
     from openstack_dashboard.api import glance
     try:
         image = glance.image_get(self.request, self.image['id'])
         return image.name
     except glance_exceptions.ClientException:
         return "(not found)"
Пример #3
0
 def image(self, plan):
     image_id = plan.parameter_value(self.image_id_parameter_name)
     if image_id:
         try:
             return glance.image_get(self._request, image_id)
         except glance_exceptions.HTTPNotFound:
             LOG.error("Couldn't obtain image with id %s" % image_id)
             return None
Пример #4
0
 def image_name(self):
     import glanceclient.exc as glance_exceptions
     from openstack_dashboard.api import glance
     try:
         image = glance.image_get(self.request, self.image['id'])
         return image.name
     except glance_exceptions.ClientException:
         return "(not found)"
Пример #5
0
 def image(self, plan):
     image_id = plan.parameter_value(self.image_id_parameter_name)
     if image_id:
         try:
             return glance.image_get(self._request, image_id)
         except glance_exceptions.HTTPNotFound:
             LOG.error("Couldn't obtain image with id %s" % image_id)
             return None
Пример #6
0
 def delete(self, request, obj_id):
     try:
         properties = glance.image_get(request, obj_id).properties
         properties.pop('murano_image_info', None)
         glance.image_update(request, obj_id, properties=properties,
                             purge_props=True)
     except Exception:
         exceptions.handle(request, _('Unable to remove metadata'),
                           redirect=reverse('horizon:murano:images:index'))
Пример #7
0
 def image_vm_mode(self):
     if not self.image:
         return ""
     if hasattr(self.image, 'properties'):
         return getattr(self.image, "properties", {}).get("hypervisor_type", "-")
     else:
         try:
             image = glance.image_get(self.request, self.image['id'])
             return getattr(image, "properties", {}).get("hypervisor_type", "-")
         except glance_exceptions.ClientException:
             return "-"
Пример #8
0
def create_snapshot(request, instance_id, status_check_interval):
    """Create Snapshot"""
    instance = nova.server_get(request, instance_id)
    snapshot_id = nova.snapshot_create(request, instance.id, instance.name)
    LOG.debug("Target instance name : {} ({})".format(instance.name,
                                                      instance.id))
    LOG.debug("Snapshot id : {}".format(snapshot_id))
    image = glance.image_get(request, snapshot_id)
    LOG.debug("Snapshot Image : {}".format(image))
    # TODO : from oslo_service.loopingcall import FixedIntervalLoopingCall should be applied
    while True:
        image = glance.image_get(request, snapshot_id)
        if (image or image.status) is None:
            LOG.error("Instance Snapshot Fail")
            break
        LOG.debug("Instance Snapshot Status : {}".format(image.status))
        sleep(status_check_interval)
        if image.status == "active":
            LOG.debug("Instance Snapshot Complete : {}".format(image))
            break
    return image
Пример #9
0
 def delete(self, request, obj_id):
     try:
         properties = glance.image_get(request, obj_id).properties
         properties.pop('murano_image_info', None)
         glance.image_update(request,
                             obj_id,
                             properties=properties,
                             purge_props=True)
     except Exception:
         exceptions.handle(request,
                           _('Unable to remove metadata'),
                           redirect=reverse('horizon:murano:images:index'))
Пример #10
0
 def image_name(self):
     if not self.image:
         return "-"
     if hasattr(self.image, 'name'):
         return self.image.name
     if 'name' in self.image:
         return self.image['name']
     else:
         try:
             image = glance.image_get(self.request, self.image['id'])
             return image.name
         except glance_exceptions.ClientException:
             return "-"
Пример #11
0
    def get_context_data(self, request):
        cluster_id = self.tab_group.kwargs['cluster_id']
        cluster_info = {}
        try:
            sahara = saharaclient.client(request)
            cluster = sahara.clusters.get(cluster_id)
            for info_key, info_val in cluster.info.items():
                for key, val in info_val.items():
                    if str(val).startswith(('http://', 'https://')):
                        cluster.info[info_key][key] = build_link(val)

            try:
                base_image = glance.image_get(request,
                                              cluster.default_image_id)
            except Exception:
                exceptions.handle(
                    request, _("Unable to fetch base image details"))
                base_image = {}

            if getattr(cluster, 'cluster_template_id', None):
                cluster_template = saharaclient.safe_call(
                    sahara.cluster_templates.get,
                    cluster.cluster_template_id)
            else:
                cluster_template = None
            try:
                if getattr(cluster, 'neutron_management_network', None):
                    net_id = cluster.neutron_management_network
                    network = neutron.network_get(request, net_id)
                    net_name = network.name_or_id
                else:
                    net_name = None
            except Exception:
                exceptions.handle(
                    request, _("Unable to fetch network details"))
                net_name = None

            cluster_info.update({"cluster": cluster,
                                 "base_image": base_image,
                                 "cluster_template": cluster_template,
                                 "network": net_name})

            if saharaclient.VERSIONS.active == '2':
                cluster_info["cluster"].hadoop_version = (
                    cluster_info["cluster"].plugin_version
                )
        except Exception as e:
            LOG.error("Unable to fetch cluster details: %s" % str(e))

        return cluster_info
Пример #12
0
def image_get(request, image_id):
    """Returns an Image object with metadata

    Returns an Image object populated with metadata for image
    with supplied identifier.

    :param image_id: list of objects to be put into a dict
    :type  image_id: list

    :return: object
    :rtype: glanceclient.v1.images.Image
    """
    image = glance.image_get(request, image_id)
    return image
Пример #13
0
def image_get(request, image_id):
    """Returns an Image object with metadata

    Returns an Image object populated with metadata for image
    with supplied identifier.

    :param image_id: list of objects to be put into a dict
    :type  image_id: list

    :return: object
    :rtype: glanceclient.v1.images.Image
    """
    image = glance.image_get(request, image_id)
    return image
Пример #14
0
    def get_context_data(self, request):
        cluster_id = self.tab_group.kwargs['cluster_id']
        cluster_info = {}
        try:
            sahara = saharaclient.client(request)
            cluster = sahara.clusters.get(cluster_id)
            for info_key, info_val in cluster.info.items():
                for key, val in info_val.items():
                    if str(val).startswith(('http://', 'https://')):
                        cluster.info[info_key][key] = build_link(val)

            try:
                base_image = glance.image_get(request,
                                              cluster.default_image_id)
            except Exception:
                exceptions.handle(request,
                                  _("Unable to fetch base image details"))
                base_image = {}

            if getattr(cluster, 'cluster_template_id', None):
                cluster_template = saharaclient.safe_call(
                    sahara.cluster_templates.get, cluster.cluster_template_id)
            else:
                cluster_template = None
            try:
                if getattr(cluster, 'neutron_management_network', None):
                    net_id = cluster.neutron_management_network
                    network = neutron.network_get(request, net_id)
                    net_name = network.name_or_id
                else:
                    net_name = None
            except Exception:
                exceptions.handle(request,
                                  _("Unable to fetch network details"))
                net_name = None

            cluster_info.update({
                "cluster": cluster,
                "base_image": base_image,
                "cluster_template": cluster_template,
                "network": net_name
            })

            if saharaclient.VERSIONS.active == '2':
                cluster_info["cluster"].hadoop_version = (
                    cluster_info["cluster"].plugin_version)
        except Exception as e:
            LOG.error("Unable to fetch cluster details: %s" % str(e))

        return cluster_info
Пример #15
0
 def image_name(self):
     import glanceclient.exc as glance_exceptions
     from openstack_dashboard.api import glance
     if not self.image:
         return "(not found)"
     if hasattr(self.image, 'name'):
         return self.image.name
     if 'name' in self.image:
         return self.image['name']
     else:
         try:
             image = glance.image_get(self.request, self.image['id'])
             return image.name
         except glance_exceptions.ClientException:
             return "(not found)"
Пример #16
0
 def image_name(self):
     import glanceclient.exc as glance_exceptions
     from openstack_dashboard.api import glance
     if not self.image:
         return "(not found)"
     if hasattr(self.image, 'name'):
         return self.image.name
     if 'name' in self.image:
         return self.image['name']
     else:
         try:
             image = glance.image_get(self.request, self.image['id'])
             return image.name
         except glance_exceptions.ClientException:
             return "(not found)"
Пример #17
0
 def image_name(self):
     if not self.image:
         return None
     if hasattr(self.image, 'name'):
         return self.image.name
     if 'name' in self.image:
         return self.image['name']
     try:
         image = glance.image_get(self.request, self.image['id'])
         self.image['name'] = image.name
         return image.name
     except (glance_exceptions.ClientException,
             horizon_exceptions.ServiceCatalogException):
         self.image['name'] = None
         return None
Пример #18
0
 def image_name(self):
     if not self.image:
         return None
     elif hasattr(self.image, 'name'):
         return self.image.name
     elif 'name' in self.image:
         return self.image['name']
     else:
         try:
             image = glance.image_get(self.request, self.image['id'])
             self.image['name'] = image.name
             return image.name
         except (glance_exceptions.ClientException,
                 horizon_exceptions.ServiceCatalogException):
             self.image['name'] = None
             return None
Пример #19
0
    def image_name(self):
        import glanceclient.exc as glance_exceptions  # noqa
        from openstack_dashboard.api import glance  # noqa

        if not self.image:
            return _("-")
        if hasattr(self.image, "name"):
            return self.image.name
        if "name" in self.image:
            return self.image["name"]
        else:
            try:
                image = glance.image_get(self.request, self.image["id"])
                return image.name
            except glance_exceptions.ClientException:
                return _("-")
Пример #20
0
def upload_image_to_glance(request, image_name, image_file_path, image_format,
                           interval):
    image = glance.image_create(request,
                                name=image_name,
                                is_public="False",
                                disk_format=image_format,
                                data=open(image_file_path, 'rb'),
                                container_format="bare")
    while True:
        image = glance.image_get(request, image.id)
        LOG.debug("Image Upload Status : {}".format(image.status))
        if image.status == "active":
            break
        sleep(interval)
    LOG.debug("Image Upload Complete")
    return image
Пример #21
0
    def image_name(self):
        import glanceclient.exc as glance_exceptions  # noqa
        from openstack_dashboard.api import glance  # noqa

        if not self.image:
            return _("-")
        if hasattr(self.image, 'name'):
            return self.image.name
        if 'name' in self.image:
            return self.image['name']
        else:
            try:
                image = glance.image_get(self.request, self.image['id'])
                return image.name
            except (glance_exceptions.ClientException,
                    horizon_exceptions.ServiceCatalogException):
                return _("-")
Пример #22
0
    def handle(self, request, data):
        LOG.debug('Marking image with specified metadata: {0}'.format(data))

        image_id = data['image']
        properties = glance.image_get(request, image_id).properties
        properties['murano_image_info'] = json.dumps({
            'title': data['title'],
            'type': data['type']
        })

        try:
            img = glance.image_update(request, image_id, properties=properties)
            messages.success(request, _('Image successfully marked'))
            return img
        except Exception:
            exceptions.handle(request, _('Unable to mark image'),
                              redirect=reverse('horizon:murano:images:index'))
Пример #23
0
    def image_name(self):
        import glanceclient.exc as glance_exceptions  # noqa
        from openstack_dashboard.api import glance  # noqa

        if not self.image:
            return _("-")
        if hasattr(self.image, 'name'):
            return self.image.name
        if 'name' in self.image:
            return self.image['name']
        else:
            try:
                image = glance.image_get(self.request, self.image['id'])
                return image.name
            except (glance_exceptions.ClientException,
                    horizon_exceptions.ServiceCatalogException):
                return _("-")
Пример #24
0
    def handle(self, request, data):
        LOG.debug('Marking image with specified metadata: {0}'.format(data))

        image_id = data['image']
        properties = glance.image_get(request, image_id).properties
        properties['murano_image_info'] = json.dumps({
            'title': data['title'],
            'type': data['type']
        })

        try:
            img = glance.image_update(request, image_id, properties=properties)
            messages.success(request, _('Image successfully marked'))
            return img
        except Exception:
            exceptions.handle(request, _('Unable to mark image'),
                              redirect=reverse('horizon:murano:images:index'))
Пример #25
0
def list_clusters(request):
    token = request.user.token.id
    resp = requests.get(get_savanna_address(request) + "/clusters",
                        headers={"x-auth-token": token})
    if resp.status_code == 200:
        clusters_arr = resp.json()["clusters"]
        clusters = []
        for cl in clusters_arr:
            id = cl["id"]
            name = cl["name"]
            base_image_id = cl["base_image_id"]
            base_image_name = glance.image_get(request, base_image_id).name
            node_templates = cl["node_templates"]
            status = cl["status"]
            nodes = cl["nodes"]
            cluster = Cluster(id, name, _format_templates(node_templates),
                              base_image_name, status, len(nodes))
            clusters.append(cluster)
        return clusters
    else:
        return []
Пример #26
0
def list_clusters(request):
    token = request.user.token.id
    resp = requests.get(
        get_savanna_address(request) + "/clusters",
        headers={"x-auth-token": token})
    if resp.status_code == 200:
        clusters_arr = resp.json()["clusters"]
        clusters = []
        for cl in clusters_arr:
            id = cl["id"]
            name = cl["name"]
            base_image_id = cl["base_image_id"]
            base_image_name = glance.image_get(request, base_image_id).name
            node_templates = cl["node_templates"]
            status = cl["status"]
            nodes = cl["nodes"]
            cluster = Cluster(id, name, _format_templates(node_templates),
                base_image_name, status, len(nodes))
            clusters.append(cluster)
        return clusters
    else:
        return []
Пример #27
0
    def get_context_data(self, request):
        cluster_id = self.tab_group.kwargs['cluster_id']
        cluster_info = {}
        try:
            sahara = saharaclient.client(request)
            cluster = sahara.clusters.get(cluster_id)

            for info_key, info_val in cluster.info.items():
                for key, val in info_val.items():
                    if str(val).startswith(('http://', 'https://')):
                        cluster.info[info_key][key] = build_link(val)

            base_image = glance.image_get(request,
                                          cluster.default_image_id)

            if getattr(cluster, 'cluster_template_id', None):
                cluster_template = helpers.safe_call(
                    sahara.cluster_templates.get,
                    cluster.cluster_template_id)
            else:
                cluster_template = None

            if getattr(cluster, 'neutron_management_network', None):
                net_id = cluster.neutron_management_network
                network = neutron.network_get(request, net_id)
                network.set_id_as_name_if_empty()
                net_name = network.name
            else:
                net_name = None

            cluster_info.update({"cluster": cluster,
                "base_image": base_image,
                "cluster_template": cluster_template,
                "network": net_name})
        except Exception as e:
            LOG.error("Unable to fetch cluster details: %s" % str(e))

        return cluster_info
Пример #28
0
    def get_context_data(self, request):
        cluster_id = self.tab_group.kwargs['cluster_id']
        cluster_info = {}
        try:
            sahara = saharaclient.client(request)
            cluster = sahara.clusters.get(cluster_id)

            for info_key, info_val in cluster.info.items():
                for key, val in info_val.items():
                    if str(val).startswith(('http://', 'https://')):
                        cluster.info[info_key][key] = build_link(val)

            base_image = glance.image_get(request, cluster.default_image_id)

            if getattr(cluster, 'cluster_template_id', None):
                cluster_template = helpers.safe_call(
                    sahara.cluster_templates.get, cluster.cluster_template_id)
            else:
                cluster_template = None

            if getattr(cluster, 'neutron_management_network', None):
                net_id = cluster.neutron_management_network
                network = neutron.network_get(request, net_id)
                network.set_id_as_name_if_empty()
                net_name = network.name
            else:
                net_name = None

            cluster_info.update({
                "cluster": cluster,
                "base_image": base_image,
                "cluster_template": cluster_template,
                "network": net_name
            })
        except Exception as e:
            LOG.error("Unable to fetch cluster details: %s" % str(e))

        return cluster_info
def get_cloudlet_type(instance):
    import glanceclient.exc as glance_exceptions
    from openstack_dashboard.api import glance
    request = instance.request
    image_id = instance.image['id']
    metadata = instance.metadata
    try:
        image = glance.image_get(request, image_id)
        if hasattr(image, 'properties') != True:
            return None
        properties = getattr(image, 'properties')
        if properties == None or \
                properties.get(CLOUDLET_TYPE.PROPERTY_KEY_CLOUDLET) == None:
            return None

        # now it's either resumed base instance or synthesized instance
        # synthesized instance has meta that for overlay URL
        if metadata.get('overlay_url') != None:
            return CLOUDLET_TYPE.IMAGE_TYPE_OVERLAY
        else:
            return CLOUDLET_TYPE.IMAGE_TYPE_BASE_DISK
    except glance_exceptions.ClientException:
        return None
Пример #30
0
def get_cloudlet_type(instance):
    import glanceclient.exc as glance_exceptions
    from openstack_dashboard.api import glance
    request = instance.request
    image_id = instance.image['id']
    metadata = instance.metadata
    try:
        image = glance.image_get(request, image_id)
        if hasattr(image, 'properties') != True:
            return None
        properties = getattr(image, 'properties')
        if properties == None or \
                properties.get(CLOUDLET_TYPE.PROPERTY_KEY_CLOUDLET) == None:
            return None

        # now it's either resumed base instance or synthesized instance
        # synthesized instance has meta that for overlay URL
        if metadata.get('overlay_url') != None:
            return CLOUDLET_TYPE.IMAGE_TYPE_OVERLAY
        else:
            return CLOUDLET_TYPE.IMAGE_TYPE_BASE_DISK
    except glance_exceptions.ClientException:
        return None
Пример #31
0
    def create_volume(self, request, ticket):
        data = json.loads(ticket.context)
        admin_id = request.user.tenant_id

        self.add_role(request, ticket)

        # code refrence project/volumes/volumes/forms.py
        usages = quotas.tenant_quota_usages(request, ticket.project_id)
        # TODO(xuanmingyi) must test
        availableGB = usages['gigabytes']['available']
        availableVol = usages['volumes']['available']

        snapshot_id = None
        image_id = None
        volume_id = None
        source_type = data.get('volume_source_type', None)
        az = data.get('available_zone', None) or None
        if (data.get("snapshot_source", None) and
                source_type in [None, 'snapshot_source']):
            # Create from Snapshot
            # TODO(xuanmingyi) why?
            auth_views.switch(request, ticket.project_id)
            snapshot = animbus_cinder.volume_snapshot_get(
                request,
                data["snapshot_source"])
            auth_views.switch(request, admin_id)
            snapshot_id = snapshot.id
            if (data['size'] < snapshot.size):
                error_message = _('The volume size cannot be less than '
                                  'the snapshot size (%sGB)') % snapshot.size
                raise ValidationError(error_message)
            az = None
        elif (data.get("image_source", None) and
                source_type in [None, "image_source"]):
            image = glance.image_get(request,
                                     data["image_source"])
            image_id = image.id
            image_size = functions.bytes_to_gigabytes(
                image.size)
            if (data['size'] < image_size):
                error_message = _(
                    'The volume size cannot be less than '
                    'the image size (%s)') % filesizeformat(image.size)
                raise ValidationError(error_message)
            properties = getattr(image, 'properties', {})
            min_disk_size = (getattr(image, 'min_disk', 0) or
                             properties.get('min_disk', 0))
            if (min_disk_size > 0 and data['size'] < min_disk_size):
                error_message = _(
                    'The volume size cannot be less than '
                    'the image minimum disk size (%sGB)') % min_disk_size
                raise ValidationError(error_message)
        elif (data.get("volume_source", None) and
              source_type in [None, 'volume_source']):
            auth_views.switch(request, ticket.project_id)
            volume = animbus_cinder.volume_get(request, data["volume_source"])
            auth_views.switch(request, admin_id)
            volume_id = volume.id

            if data['size'] < volume.size:
                error_message = _(
                    'The volume size cannot be less than '
                    'the source volume size (%sGB)') % volume.size
                raise ValidationError(error_message)
        else:
            if type(data['size']) is str:
                data['size'] = int(data['size'])

        if availableGB < data['size']:
            error_message = _('A volume of %(req)iGB cannot be created as '
                              'you only have %(avail)iGB of your quota '
                              'available.')
            params = {'req': data['size'],
                      'avail': availableGB}
            raise ValidationError(error_message, params)
        elif availableVol <= 0:
            error_message = _('You are already using all of your available'
                              ' volumes.')
            raise ValidationError(error_message)
        auth_views.switch(request, ticket.project_id)

        volume = animbus_cinder.volume_create(request,
                                              data['size'],
                                              data['name'],
                                              data['description'],
                                              data['type'],
                                              snapshot_id=snapshot_id,
                                              image_id=image_id,
                                              metadata={},
                                              availability_zone=az,
                                              source_volid=volume_id,
                                              project_id=ticket.project_id)

        auth_views.switch(request, admin_id)
Пример #32
0
 def get_image(self, request, id):
     return glance.image_get(request, id)
Пример #33
0
 def image(self, plan):
     image_id = plan.parameter_value(self.image_id_parameter_name)
     if image_id:
         return glance.image_get(self._request, image_id)
Пример #34
0
 def get_image(self, request, id):
     return glance.image_get(request, id)
Пример #35
0
 def get_context_data(self, request):
     cluster = get_cluster(request, self.tab_group.kwargs['cluster_id'])
     base_image_name = glance.image_get(request,
         cluster["base_image_id"]).name
     return {"cluster": cluster, "base_image_name": base_image_name}
Пример #36
0
 def get_context_data(self, request):
     cluster = get_cluster(request, self.tab_group.kwargs['cluster_id'])
     base_image_name = glance.image_get(request,
         cluster["base_image_id"]).name
     return {"cluster": cluster, "base_image_name": base_image_name}
Пример #37
0
 def image(self, plan):
     image_id = plan.parameter_value(self.image_id_parameter_name)
     if image_id:
         return glance.image_get(self._request, image_id)