hybrid logging default config set
[ta/config-manager.git] / cmdatahandlers / src / cmdatahandlers / caas / config.py
1 # Copyright 2019 Nokia
2
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
6 #
7 #     http://www.apache.org/licenses/LICENSE-2.0
8 #
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
14
15 from cmdatahandlers.api import config
16 from cmdatahandlers.api import utils
17 from cmdatahandlers.api import configerror
18 from serviceprofiles import profiles
19 import yaml
20 import jinja2
21
22 CAAS_CONFIG_FILE_PATH = "/etc/cmframework/config/"
23 CAAS_CONFIG_FILE = "caas.yaml"
24 DEFAULT_CAAS_DNS_DOMAIN = "rec.io"
25 VNF_EMBEDDED_SOFT_EVICTION_THRESHOLD = "300Mi"
26 BM_SOFT_EVICTION_THRESHOLD = "4Gi"
27 VNF_EMBEDDED_HARD_EVICTION_THRESHOLD = "200Mi"
28 BM_HARD_EVICTION_THRESHOLD = "2Gi"
29
30
31 class Config(config.Config):
32     valid_redundancy_models = ['non-redundant', 'active-cold-standby']
33
34     def __init__(self, confman):
35         super(Config, self).__init__(confman)
36         self.ROOT = 'cloud.caas'
37         self.DOMAIN = 'caas'
38
39     def init(self):
40         pass
41
42     def validate(self):
43         print("validate")
44
45     def flavour_set(self):
46         hostsconf = self.confman.get_hosts_config_handler()
47         caas_masters = []
48         for host in hostsconf.get_hosts():
49             if 'caas_master' in hostsconf.get_service_profiles(host):
50                 caas_masters.append(host)
51
52         if len(caas_masters) > 1:
53             return "multi"
54         else:
55             return "single"
56
57     def set_dynamic_config(self):
58         if utils.is_virtualized():
59             self.config[self.ROOT]['vnf_embedded_deployment'] = self.get_vnf_flag()
60         user_conf = self.confman.get_users_config_handler()
61         self.config[self.ROOT]['helm_home'] = "/home/" + user_conf.get_admin_user() + "/.helm"
62         self.config[self.ROOT]['flavour'] = self.flavour_set()
63         if not self.config[self.ROOT].get('dns_domain', ""):
64             self.config[self.ROOT]['dns_domain'] = DEFAULT_CAAS_DNS_DOMAIN
65
66     def set_static_config(self):
67         try:
68             template = jinja2.Environment(
69                 loader=jinja2.FileSystemLoader(
70                     CAAS_CONFIG_FILE_PATH)).get_template(CAAS_CONFIG_FILE)
71             with open(CAAS_CONFIG_FILE_PATH + CAAS_CONFIG_FILE) as config_file:
72                 data = yaml.load(config_file)
73             self.config[self.ROOT].update(
74                 self._template_config(template, self.config[self.ROOT], data))
75         except jinja2.exceptions.TemplateNotFound:
76             return
77         except Exception:
78             raise configerror.ConfigError("Unexpected issue occured!")
79
80     def _template_config(self, template, base_config, initial_data):
81         config_data = initial_data.copy()
82         config_data.update(base_config)
83         outputText = template.render(config_data)
84         previousOutputText = ""
85         while outputText != previousOutputText:
86             config_data = yaml.load(outputText)
87             config_data.update(base_config)
88             outputText = template.render(config_data)
89             previousOutputText = outputText
90         return yaml.load(outputText)
91
92     def add_defaults(self):
93         if not self.config.get('cloud.caas', ''):
94             return
95         self.set_dynamic_config()
96         self.set_static_config()
97
98     def is_vnf_embedded_deployment(self):
99         return self.get_caas_only() and self.get_vnf_flag()
100
101     def get_vnf_flag(self):
102         return bool(self.config.get(self.ROOT, {}).get('vnf_embedded_deployment',
103                                                   False))
104
105     def get_caas_only(self):
106         return self.is_caas_deployment() and not self.is_openstack_deployment()
107
108     def is_openstack_deployment(self):
109         return bool(self.get_controller_hosts())
110
111     def is_caas_deployment(self):
112         return bool(self.get_caas_master_hosts())
113
114     def is_hybrid_deployment(self):
115         return self.is_caas_deployment() and self.is_openstack_deployment()
116
117     def get_caas_master_hosts(self):
118         service_profiles_lib = profiles.Profiles()
119         return self._get_hosts_for_service_profile(service_profiles_lib.get_caasmaster_service_profile())
120
121     def _get_hosts_for_service_profile(self, profile):
122         hostsconf = self.confman.get_hosts_config_handler()
123         return hostsconf.get_service_profile_hosts(profile)
124
125     def get_controller_hosts(self):
126         service_profiles_lib = profiles.Profiles()
127         return self._get_hosts_for_service_profile(service_profiles_lib.get_controller_service_profile())
128
129     def get_apiserver_in_hosts(self):
130         return self.config.get(self.ROOT, {}).get('apiserver_in_hosts', '')
131
132     def get_registry_url(self):
133         return self.config.get(self.ROOT, {}).get('registry_url', '')
134
135     def get_update_registry_url(self):
136         return self.config.get(self.ROOT, {}).get('update_registry_url', '')
137
138     def get_swift_url(self):
139         return self.config.get(self.ROOT, {}).get('swift_url', '')
140
141     def get_swift_update_url(self):
142         return self.config.get(self.ROOT, {}).get('swift_update_url', '')
143
144     def get_ldap_master_url(self):
145         return self.config.get(self.ROOT, {}).get('ldap_master_url', '')
146
147     def get_ldap_slave_url(self):
148         return self.config.get(self.ROOT, {}).get('ldap_slave_url', '')
149
150     def get_chart_repo_url(self):
151         return self.config.get(self.ROOT, {}).get('chart_repo_url', '')
152
153     def get_tiller_url(self):
154         return self.config.get(self.ROOT, {}).get('tiller_url', '')
155
156     def get_apiserver_svc_ip(self):
157         return self.config.get(self.ROOT, {}).get('apiserver_svc_ip', '')
158
159     def get_caas_parameter(self, parameter):
160         return self.config.get(self.ROOT, {}).get(parameter, '')
161
162     def get_kubernetes_domain(self):
163         return 'kubernetes.default.svc.{}'.format(
164             self.config.get(self.ROOT, {}).get('dns_domain', ''))
165
166     def get_caas_soft_eviction_threshold(self):
167         if self.is_vnf_embedded_deployment():
168             return VNF_EMBEDDED_SOFT_EVICTION_THRESHOLD
169         else:
170             return BM_SOFT_EVICTION_THRESHOLD
171
172     def get_caas_hard_eviction_threshold(self):
173         if self.is_vnf_embedded_deployment():
174             return VNF_EMBEDDED_HARD_EVICTION_THRESHOLD
175         else:
176             return BM_HARD_EVICTION_THRESHOLD