Beispiel #1
0
    def on_get(self, req, resp):
        leave_kubectl = req.get_param_as_bool('leave_kubectl')
        design_ref = req.get_param('design_ref', required=True)
        # The required IP address to be used by Kubernetes itself
        ip = req.get_param('ip', required=True)
        # The optional IP address to configure as externally-routable
        external_ip = req.get_param('external_ip', default='127.0.0.1')
        hostname = req.get_param('hostname', required=True)
        # NOTE(sh8121att): Set a default here for backward compatability
        dns_domain = req.get_param('domain', default='local')

        dynamic_labels = _get_param_list(req, 'labels.dynamic')
        static_labels = _get_param_list(req, 'labels.static')

        join_ips = _get_join_ips()

        try:
            config = Configuration.from_design_ref(
                design_ref,
                allow_missing_substitutions=False,
                leave_kubectl=leave_kubectl)
        except exceptions.DeckhandException:
            LOG.exception('Caught Deckhand render error for configuration')
            raise

        if config.get_path('KubernetesNode:.', SENTINEL) != SENTINEL:
            raise exceptions.ExistingKubernetesNodeDocumentError(
                'Existing KubernetesNode documents found')

        node_document = {
            'schema': 'promenade/KubernetesNode/v1',
            'metadata': {
                'name': hostname,
                'schema': 'metadata/Document/v1',
                'layeringDefinition': {
                    'abstract': False,
                    'layer': 'site'
                },
            },
            'data': {
                'hostname': hostname,
                'domain': dns_domain,
                'ip': ip,
                'external_ip': external_ip,
                'join_ips': join_ips,
                'labels': {
                    'dynamic': dynamic_labels,
                    'static': static_labels,
                },
            },
        }
        config.append(node_document)

        builder = Builder(config)
        script = builder.build_node_script(hostname)

        resp.body = script
        resp.content_type = 'text/x-shellscript'
        resp.status = falcon.HTTP_200
Beispiel #2
0
 def on_post(self, req, resp):
     href = req.get_param('href', required=True)
     try:
         config = Configuration.from_design_ref(href)
         validation.check_design(config)
         msg = "Promenade validations succeeded"
         return self._return_msg(resp, falcon.HTTP_200, message=msg)
     except exceptions.ValidationException as e:
         msg = "Promenade validations failed: %s" % str(e)
         return self._return_msg(
             resp, falcon.HTTP_400, status="Invalid", message=msg)
Beispiel #3
0
    def on_get(self, req, resp):
        leave_kubectl = req.get_param_as_bool('leave_kubectl')
        design_ref = req.get_param('design_ref', required=True)
        ip = req.get_param('ip', required=True)
        hostname = req.get_param('hostname', required=True)

        dynamic_labels = _get_param_list(req, 'labels.dynamic')
        static_labels = _get_param_list(req, 'labels.static')

        join_ip = _get_join_ip()

        try:
            config = Configuration.from_design_ref(
                design_ref,
                allow_missing_substitutions=False,
                leave_kubectl=leave_kubectl)
        except exceptions.DeckhandException:
            LOG.exception('Caught Deckhand render error for configuration')
            raise

        if config.get_path('KubernetesNode:.', SENTINEL) != SENTINEL:
            raise exceptions.ExistingKubernetesNodeDocumentError(
                'Existing KubernetesNode documents found')

        node_document = {
            'schema': 'promenade/KubernetesNode/v1',
            'metadata': {
                'name': hostname,
                'schema': 'metadata/Document/v1',
                'layeringDefinition': {
                    'abstract': False,
                    'layer': 'site'
                },
            },
            'data': {
                'hostname': hostname,
                'ip': ip,
                'join_ip': join_ip,
                'labels': {
                    'dynamic': dynamic_labels,
                    'static': static_labels,
                },
            },
        }
        config.append(node_document)

        builder = Builder(config)
        script = builder.build_node_script(hostname)

        resp.body = script
        resp.content_type = 'text/x-shellscript'
        resp.status = falcon.HTTP_200
Beispiel #4
0
    def on_post(self, req, resp):
        result = ValidationMessage()
        try:
            json_data = self.req_json(req)
            href = json_data.get('href', None)
            config = Configuration.from_design_ref(
                href, allow_missing_substitutions=False)
            result = validation.check_design(config)
        except exceptions.InvalidFormatError as e:
            msg = "Invalid JSON Format: %s" % str(e)
            result.add_error_message(msg, name=e.title)
        except Exception as e:
            result.add_error_message(str(e), name=e.title)

        result.update_response(resp)
Beispiel #5
0
    def on_get(self, req, resp):
        design_ref = req.get_param('design_ref', required=True)
        ip = req.get_param('ip', required=True)
        hostname = req.get_param('hostname', required=True)

        dynamic_labels = _get_param_list(req, 'labels.dynamic')
        static_labels = _get_param_list(req, 'labels.static')

        join_ip = _get_join_ip()

        config = Configuration.from_design_ref(design_ref)
        node_document = {
            'schema': 'promenade/KubernetesNode/v1',
            'metadata': {
                'name': hostname,
                'schema': 'metadata/Document/v1',
                'layeringDefinition': {
                    'abstract': False,
                    'layer': 'site'
                },
            },
            'data': {
                'hostname': hostname,
                'ip': ip,
                'join_ip': join_ip,
                'labels': {
                    'dynamic': dynamic_labels,
                    'static': static_labels,
                },
            },
        }
        config.append(node_document)

        builder = Builder(config)
        script = builder.build_node_script(hostname)

        resp.body = script
        resp.content_type = 'text/x-shellscript'
        resp.status = falcon.HTTP_200