# Licensed 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. from oslo_config import cfg from magnum.common import keystone from magnum.drivers.heat import template_def CONF = cfg.CONF """kubernetes ports """ KUBE_SECURE_PORT = '6443' KUBE_INSECURE_PORT = '8080' class K8sApiAddressOutputMapping(template_def.OutputMapping): def set_output(self, stack, cluster_template, cluster): if self.cluster_attr is None: return output_value = self.get_output_value(stack) if output_value is not None: # TODO(yuanying): port number is hardcoded, this will be fix protocol = 'https' port = KUBE_SECURE_PORT if cluster_template.tls_disabled: protocol = 'http' port = KUBE_INSECURE_PORT params = { 'protocol': protocol, 'address': output_value, 'port': port, } value = "%(protocol)s://%(address)s:%(port)s" % params setattr(cluster, self.cluster_attr, value) class K8sTemplateDefinition(template_def.BaseTemplateDefinition): """Base Kubernetes template.""" def __init__(self): super(K8sTemplateDefinition, self).__init__() self.add_parameter('master_flavor', cluster_attr='master_flavor_id') self.add_parameter('minion_flavor', cluster_attr='flavor_id') self.add_parameter('number_of_minions', cluster_attr='node_count') self.add_parameter('external_network', cluster_template_attr='external_network_id', required=True) self.add_parameter('fixed_network', cluster_template_attr='fixed_network') self.add_parameter('fixed_subnet', cluster_template_attr='fixed_subnet') self.add_parameter('network_driver', cluster_template_attr='network_driver') self.add_parameter('volume_driver', cluster_template_attr='volume_driver') self.add_parameter('tls_disabled', cluster_template_attr='tls_disabled', required=True) self.add_parameter('registry_enabled', cluster_template_attr='registry_enabled') self.add_parameter('cluster_uuid', cluster_attr='uuid', param_type=str) self.add_parameter('insecure_registry_url', cluster_template_attr='insecure_registry') self.add_parameter('kube_version', cluster_attr='coe_version') self.add_output('api_address', cluster_attr='api_address', mapping_type=K8sApiAddressOutputMapping) self.add_output('kube_minions_private', cluster_attr=None) self.add_output('kube_masters_private', cluster_attr=None) def get_params(self, context, cluster_template, cluster, **kwargs): extra_params = kwargs.pop('extra_params', {}) scale_mgr = kwargs.pop('scale_manager', None) if scale_mgr: hosts = self.get_output('kube_minions_private') extra_params['minions_to_remove'] = ( scale_mgr.get_removal_nodes(hosts)) extra_params['discovery_url'] = self.get_discovery_url(cluster) osc = self.get_osc(context) extra_params['magnum_url'] = osc.magnum_url() if cluster_template.tls_disabled: extra_params['loadbalancing_protocol'] = 'HTTP' extra_params['kubernetes_port'] = 8080 extra_params['octavia_enabled'] = keystone.is_octavia_enabled() label_list = ['flannel_network_cidr', 'flannel_backend', 'flannel_network_subnetlen', 'system_pods_initial_delay', 'system_pods_timeout', 'admission_control_list', 'prometheus_monitoring', 'grafana_admin_passwd', 'kube_dashboard_enabled', 'etcd_volume_size', 'cert_manager_api', 'ingress_controller', 'ingress_controller_role', 'kubelet_options', 'kubeapi_options', 'kubeproxy_options', 'kubecontroller_options', 'kubescheduler_options', 'influx_grafana_dashboard_enabled'] for label in label_list: extra_params[label] = cluster.labels.get(label) if cluster_template.registry_enabled: extra_params['swift_region'] = CONF.docker_registry.swift_region extra_params['registry_container'] = ( CONF.docker_registry.swift_registry_container) return super(K8sTemplateDefinition, self).get_params(context, cluster_template, cluster, extra_params=extra_params, **kwargs)