def get_data(self, request, stack_id): assignment = None try: assignments = neutron.networktemplateassignment_list( request, **{'stack_id': stack_id}) if not assignments: raise Exception('Network template associationg not found.') assignment = assignments[0] template = neutron.networktemplate_get(request, assignment.template_id) stack = heat.stack_get(request, stack_id) resources = heat.resources_list(request, stack.stack_name) if stack.stack_status == 'DELETE_COMPLETE': # returning 404 to the ajax call removes the # row from the table on the ui raise Http404 rowdata = { 'template_id': assignment.template_id, 'template_name': template.name, 'stack_id': stack_id, 'heat_stack_name': stack.stack_name, 'description': stack.description, 'status': stack.status, 'stack_status': stack.stack_status, 'stack_status_reason': stack.stack_status_reason, 'resources': mark_safe('<br>'.join([ ('%s (%s)' % (r.resource_name, r.resource_type)).replace( ' ', ' ') for r in resources ])) } return rowdata except Http404: try: # remove corresponding network template if assignment: neutron.networktemplateassignment_delete( request, assignment.id) msg = _('Removed template association for stack_id %s') % \ stack_id LOG.debug(msg) messages.success(request, msg) except Exception as e: msg = _('Network template association removal failed ' 'due to %s') % e LOG.error(msg) messages.error(request, msg) raise except Exception as e: raise
def resources(self, with_joins=True): """Return a list of all Overcloud Resources :param with_joins: should we also retrieve objects associated with each retrieved Resource? :type with_joins: bool :return: list of all Overcloud Resources or an empty list if there are none :rtype: list of tuskar_ui.api.Resource """ try: resources = [r for r in heat.resources_list(self._request, self.stack_name)] except heatclient.exc.HTTPInternalServerError: # TODO(lsmola) There is a weird bug in heat, that after # stack-create it returns 500 for a little while. This can be # removed once the bug is fixed. resources = [] if not with_joins: return [Resource(r, request=self._request) for r in resources] nodes_dict = utils.list_to_dict(node.Node.list(self._request, associated=True), key_attribute='instance_uuid') joined_resources = [] for r in resources: joined_resources.append( Resource(r, node=nodes_dict.get(r.physical_resource_id, None), request=self._request)) # TODO(lsmola) I want just resources with nova instance # this could be probably filtered a better way, investigate return [r for r in joined_resources if r.node is not None]
def d3_data(request, stack_id=''): try: stack = heat.stack_get(request, stack_id) except Exception: stack = Stack() stack.id = stack_id stack.stack_name = request.session.get('stack_name', '') stack.stack_status = 'DELETE_COMPLETE' stack.stack_status_reason = 'DELETE_COMPLETE' try: resources = heat.resources_list(request, stack.stack_name) except Exception: resources = [] d3_data = {"nodes": [], "stack": {}} if stack: stack_image = mappings.get_resource_image(stack.stack_status, 'stack') stack_node = { 'stack_id': stack.id, 'name': stack.stack_name, 'status': stack.stack_status, 'image': stack_image, 'image_size': 60, 'image_x': -30, 'image_y': -30, 'text_x': 40, 'text_y': ".35em", 'in_progress': (stack.status == 'IN_PROGRESS'), 'info_box': sro.stack_info(stack, stack_image) } d3_data['stack'] = stack_node if resources: for resource in resources: resource_image = mappings.get_resource_image( resource.resource_status, resource.resource_type) resource_status = mappings.get_resource_status( resource.resource_status) if resource_status in ('IN_PROGRESS', 'INIT'): in_progress = True else: in_progress = False resource_node = { 'name': resource.resource_name, 'status': resource.resource_status, 'image': resource_image, 'required_by': resource.required_by, 'image_size': 50, 'image_x': -25, 'image_y': -25, 'text_x': 35, 'text_y': ".35em", 'in_progress': in_progress, 'info_box': sro.resource_info(resource) } d3_data['nodes'].append(resource_node) return json.dumps(d3_data)
def resources(self, with_joins=True, role=None): """Return list of OS::Nova::Server Resources Return list of OS::Nova::Server Resources associated with the Stack and which are associated with a Role :param with_joins: should we also retrieve objects associated with each retrieved Resource? :type with_joins: bool :return: list of all Resources or an empty list if there are none :rtype: list of tuskar_ui.api.heat.Resource """ if role: roles = [role] else: roles = self.plan.role_list resource_dicts = [] # A provider resource is deployed as a nested stack, so we have to # drill down and retrieve those that match a tuskar role for role in roles: resource_group_name = role.provider_resource_group_name try: resource_group = heat.resource_get(self._request, self.id, resource_group_name) group_resources = heat.resources_list( self._request, resource_group.physical_resource_id) for group_resource in group_resources: if not group_resource.physical_resource_id: # Skip groups who has no physical resource. continue nova_resources = heat.resources_list( self._request, group_resource.physical_resource_id) resource_dicts.extend([{ "resource": resource, "role": role } for resource in nova_resources]) except heatclient.exc.HTTPNotFound: pass if not with_joins: return [ Resource(rd['resource'], request=self._request, stack=self, role=rd['role']) for rd in resource_dicts ] nodes_dict = utils.list_to_dict(node.Node.list(self._request, associated=True), key_attribute='instance_uuid') joined_resources = [] for rd in resource_dicts: resource = rd['resource'] joined_resources.append( Resource(resource, node=nodes_dict.get(resource.physical_resource_id, None), request=self._request, stack=self, role=rd['role'])) # TODO(lsmola) I want just resources with nova instance # this could be probably filtered a better way, investigate return [r for r in joined_resources if r.node is not None]
def resources(self, with_joins=True, role=None): """Return list of OS::Nova::Server Resources Return list of OS::Nova::Server Resources associated with the Stack and which are associated with a Role :param with_joins: should we also retrieve objects associated with each retrieved Resource? :type with_joins: bool :return: list of all Resources or an empty list if there are none :rtype: list of tuskar_ui.api.heat.Resource """ if role: roles = [role] else: roles = self.plan.role_list resource_dicts = [] # A provider resource is deployed as a nested stack, so we have to # drill down and retrieve those that match a tuskar role for role in roles: resource_group_name = role.provider_resource_group_name try: resource_group = heat.resource_get(self._request, self.id, resource_group_name) group_resources = heat.resources_list( self._request, resource_group.physical_resource_id) for group_resource in group_resources: if not group_resource.physical_resource_id: # Skip groups who has no physical resource. continue nova_resources = heat.resources_list( self._request, group_resource.physical_resource_id) resource_dicts.extend([{"resource": resource, "role": role} for resource in nova_resources]) except heatclient.exc.HTTPNotFound: pass if not with_joins: return [Resource(rd['resource'], request=self._request, stack=self, role=rd['role']) for rd in resource_dicts] nodes_dict = utils.list_to_dict(node.Node.list(self._request, associated=True), key_attribute='instance_uuid') joined_resources = [] for rd in resource_dicts: resource = rd['resource'] joined_resources.append( Resource(resource, node=nodes_dict.get(resource.physical_resource_id, None), request=self._request, stack=self, role=rd['role'])) # TODO(lsmola) I want just resources with nova instance # this could be probably filtered a better way, investigate return [r for r in joined_resources if r.node is not None]