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')
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)"
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
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)"
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
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'))
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 "-"
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
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'))
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 "-"
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
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
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
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
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)"
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)"
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
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
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 _("-")
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
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 _("-")
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'))
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 _("-")
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'))
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 []
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 []
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_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
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
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)
def get_image(self, request, id): return glance.image_get(request, id)
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)
def get_image(self, request, id): return glance.image_get(request, id)
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}
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}
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)