def post(self): # TODO: Currently all Heat parameters are hardcoded in # template. params = {} rcs = pecan.request.dbapi.get_heat_data() heat = heat_client() nova_utils = NovaClient() template_body = render( 'overcloud.yaml', dict(resource_classes=rcs, nova_util=nova_utils)) if heat.validate_template(template_body): if heat.exists_stack(): res = heat.update_stack(template_body, params) else: res = heat.create_stack(template_body, params) if res: for rc in rcs: [ pecan.request.dbapi.update_rack_state( r, 'CREATE_IN_PROGRESS') for r in rc.racks ] pecan.response.status_code = 202 return {} else: raise wsme.exc.ClientSideError( _("Cannot update the Heat overcloud template")) else: raise wsme.exc.ClientSideError( _("The overcloud Heat template" + "could not be validated"))
def post(self): # TODO(): Currently all Heat parameters are hardcoded in # template. params = {} rcs = pecan.request.dbapi.get_heat_data() heat = heat_client() nova_utils = NovaClient() template_body = render('overcloud.yaml', dict(resource_classes=rcs, nova_util=nova_utils)) if heat.validate_template(template_body): if heat.exists_stack(): res = heat.update_stack(template_body, params) else: res = heat.create_stack(template_body, params) if res: for rc in rcs: [pecan.request.dbapi.update_rack_state( r, 'CREATE_IN_PROGRESS') for r in rc.racks] pecan.response.status_code = 202 return {} else: raise wsme.exc.ClientSideError(_( "Cannot update the Heat overcloud template" )) else: raise wsme.exc.ClientSideError(_("The overcloud Heat template" "could not be validated"))
def get_all(self): """Retrieve a list of all racks.""" result = [] links = [] db_api = pecan.request.dbapi heat_stack = False if heat_client().exists_stack(): heat_stack = heat_client().get_stack() for rack in db_api.get_racks(None): if heat_stack: db_api.update_rack_state(rack, heat_stack.stack_status) links = [Link.build('self', pecan.request.host_url, 'racks', rack.id)] result.append(Rack.convert_with_links(rack, links)) return result
def get_all(self): """Retrieve a list of all racks.""" result = [] links = [] db_api = pecan.request.dbapi heat_stack = False if heat_client().exists_stack(): heat_stack = heat_client().get_stack() for rack in db_api.get_racks(None): if heat_stack: db_api.update_rack_state(rack, heat_stack.stack_status) links = [ _make_link('self', pecan.request.host_url, 'racks', rack.id) ] result.append(Rack.convert_with_links(rack, links)) return result
def post(self): # TODO(): Currently all Heat parameters are hardcoded in # template. params = {} params['AdminToken']=CONF.overcloud['OVERCLOUD_ADMIN_TOKEN'] params['AdminPassword']=CONF.overcloud['OVERCLOUD_ADMIN_PASSWORD'] params['CinderPassword']=CONF.overcloud['OVERCLOUD_CINDER_PASSWORD'] params['GlancePassword']=CONF.overcloud['OVERCLOUD_GLANCE_PASSWORD'] params['HeatPassword']=CONF.overcloud['OVERCLOUD_HEAT_PASSWORD'] params['NeutronPassword']=CONF.overcloud['OVERCLOUD_NEUTRON_PASSWORD'] params['NovaPassword']=CONF.overcloud['OVERCLOUD_NOVA_PASSWORD'] params['NovaComputeLibvirtType']=CONF.overcloud['OVERCLOUD_LIBVIRT_TYPE'] rcs = pecan.request.dbapi.get_heat_data() heat = heat_client() nova_utils = NovaClient() for resource in rcs: service_type = resource.service_type image_id = getattr(resource, "image_id", None) if image_id: if service_type == 'compute': params['NovaImage'] = image_id elif service_type in ('not_compute', 'controller'): params['notcomputeImage'] = image_id template_body = render('overcloud.yaml', dict(resource_classes=rcs, nova_util=nova_utils)) if heat.validate_template(template_body): if heat.exists_stack(): res = heat.update_stack(template_body, params) else: res = heat.create_stack(template_body, params) if res: for rc in rcs: [pecan.request.dbapi.update_rack_state( r, 'CREATE_IN_PROGRESS') for r in rc.racks] pecan.response.status_code = 202 return {} else: raise wsme.exc.ClientSideError(_( "Cannot update the Heat overcloud template" )) else: raise wsme.exc.ClientSideError(_("The overcloud Heat template" "could not be validated"))
def get_all(self): heat = heat_client() return heat.get_stack().to_dict()
class RacksController(rest.RestController): """REST controller for Rack.""" @wsme.validate(Rack) @wsme_pecan.wsexpose(Rack, body=Rack, status_code=201) def post(self, rack): """Create a new Rack.""" try: result = pecan.request.dbapi.create_rack(rack) links = [ _make_link('self', pecan.request.host_url, 'racks', result.id) ] except Exception as e: LOG.exception(e) raise wsme.exc.ClientSideError(_("Invalid data")) # 201 Created require Location header pointing to newly created # resource # # FIXME(mfojtik): For some reason, Pecan does not return 201 here # as configured above # pecan.response.headers['Location'] = str(links[0].href) pecan.response.status_code = 201 return Rack.convert_with_links(result, links) @wsme.validate(Rack) @wsme_pecan.wsexpose(Rack, wtypes.text, body=Rack, status_code=200) def put(self, rack_id, rack): """Update the Rack""" try: result = pecan.request.dbapi.update_rack(rack_id, rack) links = [ _make_link('self', pecan.request.host_url, 'racks', result.id) ] # # TODO(mfojtik): Update the HEAT template at this point # except Exception as e: LOG.exception(e) raise wsme.exc.ClientSideError(_("Invalid data")) return Rack.convert_with_links(result, links) @wsme_pecan.wsexpose([Rack]) def get_all(self): """Retrieve a list of all racks.""" result = [] links = [] db_api = pecan.request.dbapi heat_stack = False if heat_client().exists_stack(): heat_stack = heat_client().get_stack() for rack in db_api.get_racks(None): if heat_stack: db_api.update_rack_state(rack, heat_stack.stack_status) links = [ _make_link('self', pecan.request.host_url, 'racks', rack.id) ] result.append(Rack.convert_with_links(rack, links)) return result @wsme_pecan.wsexpose(Rack, unicode) def get_one(self, rack_id): """Retrieve information about the given Rack.""" db_api = pecan.request.dbapi try: rack = db_api.get_rack(rack_id) except exception.TuskarException, e: response = api.Response(Error(faultcode=e.code, faultstring=str(e)), status_code=e.code) return response heat_stack = False if heat_client().exists_stack(): heat_stack = heat_client().get_stack() if heat_stack: db_api.update_rack_state(rack, heat_stack.stack_status) links = [_make_link('self', pecan.request.host_url, 'racks', rack.id)] return Rack.convert_with_links(rack, links)