| # Licensed to the Apache Software Foundation (ASF) under one |
| # or more contributor license agreements. See the NOTICE file |
| # distributed with this work for additional information |
| # regarding copyright ownership. The ASF licenses this file |
| # to you under the Apache License, Version 2.0 (the |
| # "License"); you may not use this file except in compliance |
| # with the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, |
| # software distributed under the License is distributed on an |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| # KIND, either express or implied. See the License for the |
| # specific language governing permissions and limitations |
| # under the License. |
| # |
| import json |
| import logging |
| import os |
| import openserverless.config as cfg |
| import openserverless.util as util |
| import openserverless.kustomize as kus |
| import openserverless.time_util as tutil |
| import openserverless.template as ntp |
| import urllib.parse |
| |
| class RouteData: |
| _data = {} |
| |
| def __init__(self, apihost): |
| runtime = cfg.get('openserverless.kube') |
| tls = cfg.get('components.tls') and not runtime=='kind' |
| |
| url = urllib.parse.urlparse(apihost) |
| hostname = url.hostname |
| |
| self._data = { |
| "hostname":hostname, |
| "tls":tls, |
| "route_timeout_seconds":tutil.duration_in_second(util.get_controller_http_timeout()), |
| 'namespace':'openserverless' |
| } |
| |
| def dump(self): |
| logging.debug(json.dumps(self._data)) |
| |
| def with_service_name(self,value: str): |
| self._data['service_name']=value |
| |
| def with_route_name(self,value: str): |
| self._data['route_name']=value |
| |
| def with_service_kind(self,value: str): |
| self._data['service_kind']=value |
| |
| def with_service_port(self,value: str): |
| self._data['service_port']=value |
| |
| def with_context_path(self,value: str): |
| self._data['context_path']=value |
| |
| def with_path_type(self,value: str): |
| self._data['path_type']=value |
| |
| def with_namespace(self,value: str): |
| self._data['namespace']=value |
| |
| def with_rewrite_target(self,value: str): |
| self._data['rewrite_target']=value |
| self._data['needs_rewrite']=True |
| |
| def with_needs_rewrite(self,value: bool): |
| self._data['needs_rewrite']=value |
| |
| def build_route_spec(self, where: str, out_template : str, tpl = "generic-openshift-route-tpl.yaml"): |
| logging.info(f"*** Building route template using host {self._data['hostname']} endpoint for {self._data['route_name']} via template {tpl}") |
| return kus.processTemplate(where, tpl, self._data, out_template) |
| |
| def render_template(self,namespace,tpl= "generic-openshift-route-tpl.yaml"): |
| logging.info(f"*** Rendering route template using host {self._data['hostname']} endpoint for {self._data['route_name']} via template {tpl}") |
| """ |
| uses the given template to render a final route template and returns the path to the template |
| """ |
| if not util.validate_namespace(namespace): |
| raise ValueError(f"Invalid namespace {namespace}") |
| out = f"/tmp/__{namespace}_{tpl}" |
| file = ntp.spool_template(tpl, out, self._data) |
| return os.path.abspath(file) |