def delete(self, resadapter_name, name):
        try:
            ResourceAdapterConfigurationApi().delete(cherrypy.request.db,
                                                     resadapter_name, name)

            response = None
        except ResourceAdapterNotFound as exc:
            self.handleException(exc)

            response = self.notFoundErrorResponse(
                str(exc), code=self.getTortugaStatusCode(exc))
        except TortugaException as exc:
            self.handleException(exc)

            response = self.errorResponse(str(exc),
                                          code=self.getTortugaStatusCode(exc))
        except Exception:  # noqa pylint: disable=broad-except
            # Unhandled server exception
            self._logger.exception('delete() failed')

            response = self.errorResponse(
                'Internal server error',
                http_status=http.client.INTERNAL_SERVER_ERROR)

        return self.formatResponse(response)
    def create(self, resadapter_name, name):
        postdata = cherrypy.request.json

        try:
            try:
                validator = RegexValidator(pattern='[a-zA-Z0-9-_]+')
                validator.validate(name)

            except FieldValidationError as ex:
                raise TortugaValidationError('Invalid name: {}'.format(ex))

            if not postdata or (postdata and 'configuration' not in postdata):
                raise InvalidArgument(
                    'Malformed arguments: missing \'configuration\' value')

            ResourceAdapterConfigurationApi().create(cherrypy.request.db,
                                                     resadapter_name, name,
                                                     postdata['configuration'])

            response = None

        except ResourceAlreadyExists as exc:
            self.handleException(exc)

            response = self.errorResponse(str(exc),
                                          code=self.getTortugaStatusCode(exc),
                                          http_status=http.client.CONFLICT)

        except ResourceAdapterNotFound as exc:
            self.handleException(exc)

            response = self.notFoundErrorResponse(
                str(exc), code=self.getTortugaStatusCode(exc))

        except TortugaException as exc:
            self.handleException(exc)

            response = self.errorResponse(str(exc),
                                          code=self.getTortugaStatusCode(exc))

        except Exception:
            # Unhandled server exception
            self._logger.exception('create() failed')

            response = self.errorResponse(
                'Internal server error',
                http_status=http.client.INTERNAL_SERVER_ERROR)

        return self.formatResponse(response)
    def validate(self, resadapter_name: str, name: str):
        try:
            #
            # Do a lookup to make sure the configuration profile does in
            # fact exist
            #
            ResourceAdapterConfigurationApi().get(cherrypy.request.db,
                                                  resadapter_name, name)

            #
            # Get the resource adapter class
            #
            ra_class: Type[ResourceAdapter] = get_resourceadapter_class(
                resadapter_name)
            ra = ra_class()
            ra.session = cherrypy.request.db

            #
            # Validate the configuration
            #
            ra.validate_config(name)

            response = {}

        except (ResourceAdapterNotFound, ResourceNotFound) as exc:
            self.handleException(exc)
            response = self.notFoundErrorResponse(str(exc))

        except ConfigurationValidationError as exc:
            response = {}
            for k, v in exc.errors.items():
                response[k] = str(v)

        except TortugaException as exc:
            self.handleException(exc)
            response = self.errorResponse(str(exc),
                                          code=self.getTortugaStatusCode(exc))

        except Exception:
            self._logger.exception('validate() failed')
            response = self.errorResponse(
                'Internal server error',
                http_status=http.client.INTERNAL_SERVER_ERROR)

        return self.formatResponse(response)
Пример #4
0
def _update_resource_adapter_configuration(adapter_cfg, profile_name):
    normalized_cfg = []
    for key, value in adapter_cfg.items():
        normalized_cfg.append({
            'key': key,
            'value': value,
        })

    api = ResourceAdapterConfigurationApi()

    # check for resource adapter configuration
    with DbManager().session() as session:
        try:
            api.get(session, 'AWS', profile_name)

            print_statement(
                'Updating AWS resource adapter configuration profile [{0}]',
                profile_name)

            # remove potentially conflicting configuration items
            if 'user_data_script_template' in adapter_cfg:
                normalized_cfg.append({
                    'key': 'cloud_init_script_template',
                    'value': None
                })
            elif 'cloud_init_script_template' in adapter_cfg:
                normalized_cfg.append({
                    'key': 'user_data_script_template',
                    'value': None
                })

            api.update(session, 'AWS', profile_name, normalized_cfg)
        except ResourceNotFound:
            print_statement(
                'Creating AWS resource adapter configuration profile [{0}]',
                profile_name)

            api.create(session, 'AWS', profile_name, normalized_cfg)
Пример #5
0
    def _write_config_to_db(self, adapter_cfg: Dict[str, str],
                            profile_name: str):
        normalized_cfg = []
        for key, value in adapter_cfg.items():
            normalized_cfg.append({
                'key': key,
                'value': value,
            })

        api = ResourceAdapterConfigurationApi()
        with DbManager().session() as session:
            try:
                api.get(session, self.adapter_type, profile_name)
                print('Updating resource adapter configuration '
                      'profile: {}'.format(profile_name))
                api.update(session, self.adapter_type, profile_name,
                           normalized_cfg)

            except ResourceNotFound:
                print('Creating resource adapter configuration '
                      'profile {}'.format(profile_name))
                api.create(session, self.adapter_type, profile_name,
                           normalized_cfg)