Esempio n. 1
0
    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"))
Esempio n. 2
0
    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"))
Esempio n. 3
0
    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
Esempio n. 4
0
    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
Esempio n. 5
0
    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"))
Esempio n. 6
0
 def get_all(self):
     heat = heat_client()
     return heat.get_stack().to_dict()
Esempio n. 7
0
 def get_all(self):
     heat = heat_client()
     return heat.get_stack().to_dict()
Esempio n. 8
0
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)