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
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)
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
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)
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