[k8splugin] Add support to move CMPv2 keystore in place of AAFCertMan
[dcaegen2/platform/plugins.git] / k8s / configure / configure.py
1 # ============LICENSE_START=======================================================
2 # org.onap.dcae
3 # ================================================================================
4 # Copyright (c) 2018-2020 AT&T Intellectual Property. All rights reserved.
5 # Copyright (c) 2019 Pantheon.tech. All rights reserved.
6 # Copyright (c) 2020 Nokia. All rights reserved.
7 # ================================================================================
8 # Licensed under the Apache License, Version 2.0 (the "License");
9 # you may not use this file except in compliance with the License.
10 # You may obtain a copy of the License at
11 #
12 #      http://www.apache.org/licenses/LICENSE-2.0
13 #
14 # Unless required by applicable law or agreed to in writing, software
15 # distributed under the License is distributed on an "AS IS" BASIS,
16 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 # See the License for the specific language governing permissions and
18 # limitations under the License.
19 # ============LICENSE_END=========================================================
20
21 _CONFIG_PATH = "/opt/onap/config.txt"   # Path to config file on the Cloudify Manager host
22 _CONSUL_KEY = "k8s-plugin"              # Key under which CM configuration is stored in Consul
23
24 # Default configuration values
25 DCAE_NAMESPACE = "dcae"
26 CONSUL_DNS_NAME = "consul"
27 DEFAULT_K8S_LOCATION = "central"
28 DEFAULT_MAX_WAIT = 1800
29
30 FB_LOG_PATH = "/var/log/onap"
31 FB_DATA_PATH = "/usr/share/filebeat/data"
32 FB_CONFIG_PATH = "/usr/share/filebeat/filebeat.yml"
33 FB_CONFIG_SUBPATH = "filebeat.yml"
34 FB_CONFIG_MAP = "filebeat-conf"
35 FB_IMAGE = "docker.elastic.co/beats/filebeat:5.5.0"
36
37 TLS_CERT_PATH = "/opt/app/osaaf"
38 TLS_IMAGE = "nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tls-init-container:2.1.0"
39 TLS_COMP_CERT_PATH = "/opt/dcae/cacert"
40 TLS_CA_CONFIGMAP = "dcae-cacert-configmap"
41
42 EXT_TLS_IMAGE = "nexus3.onap.org:10001/onap/org.onap.aaf.certservice.aaf-certservice-client:1.2.0"
43 EXT_TLS_REQUEST_URL = "https://aaf-cert-service:8443/v1/certificate/"
44 EXT_TLS_TIMEOUT = "30000"
45 EXT_TLS_COUNTRY = "US"
46 EXT_TLS_ORGANIZATION = "Linux-Foundation"
47 EXT_TLS_STATE = "California"
48 EXT_TLS_ORGANIZATIONAL_UNIT = "ONAP"
49 EXT_TLS_LOCATION = "San-Francisco"
50 EXT_TLS_CERT_SECRET_NAME = "aaf-cert-service-client-tls-secret"
51 EXT_TLS_KEYSTORE_PASSWORD = "secret"
52 EXT_TLS_TRUSTSTORE_PASSWORD = "secret"
53
54 TRUST_STORE_MERGER_IMAGE = "nexus3.onap.org:10001/onap/org.onap.dcae.truststore-merger:1.2.0"
55 CBS_BASE_URL = "https://config-binding-service:10443/service_component_all"
56
57 def _set_defaults():
58     """ Set default configuration parameters """
59     return {
60         "namespace" : DCAE_NAMESPACE,                   # k8s namespace to use for DCAE
61         "consul_dns_name" : CONSUL_DNS_NAME,            # k8s internal DNS name for Consul
62         "default_k8s_location" : DEFAULT_K8S_LOCATION,  # default k8s location to deploy components
63         "image_pull_secrets" : [],                      # list of k8s secrets for accessing Docker registries
64         "max_wait": DEFAULT_MAX_WAIT,                   # Default maximum time to wait for component to become healthy (secs)
65         "filebeat": {                                   # Configuration for setting up filebeat container
66             "log_path" : FB_LOG_PATH,                   # mount point for log volume in filebeat container
67             "data_path" : FB_DATA_PATH,                 # mount point for data volume in filebeat container
68             "config_path" : FB_CONFIG_PATH,             # mount point for config volume in filebeat container
69             "config_subpath" : FB_CONFIG_SUBPATH,       # subpath for config data in filebeat container
70             "config_map" : FB_CONFIG_MAP,               # ConfigMap holding the filebeat configuration
71             "image": FB_IMAGE                           # Docker image to use for filebeat
72         },
73         "tls": {                                        # Configuration for setting up TLS
74             "cert_path" : TLS_CERT_PATH,                # mount point for certificate volume in TLS init container
75             "image": TLS_IMAGE,                         # Docker image to use for TLS init container
76             "component_cert_dir": TLS_COMP_CERT_PATH    # default mount point for certificate volume in component container
77         },
78         "external_cert": {
79             "image_tag": EXT_TLS_IMAGE,                           # Docker image to use for external TLS init container
80             "request_url" : EXT_TLS_REQUEST_URL,                  # URL to Cert Service API
81             "timeout" : EXT_TLS_TIMEOUT,                          # Request timeout
82             "country" : EXT_TLS_COUNTRY,                          # Country name in ISO 3166-1 alpha-2 format, for which certificate will be created
83             "organization" : EXT_TLS_ORGANIZATION,                # Organization name, for which certificate will be created
84             "state" : EXT_TLS_STATE,                              # State name, for which certificate will be created
85             "organizational_unit" : EXT_TLS_ORGANIZATIONAL_UNIT,  # Organizational unit name, for which certificate will be created
86             "location" : EXT_TLS_LOCATION,                        # Location name, for which certificate will be created
87             "cert_secret_name": EXT_TLS_CERT_SECRET_NAME,         # Name of secret containing keystore and truststore for secure communication of Cert Service Client and Cert Service
88             "keystore_password" : EXT_TLS_KEYSTORE_PASSWORD,      # Password to keystore file
89             "truststore_password" : EXT_TLS_TRUSTSTORE_PASSWORD   # Password to truststore file
90         },
91         "truststore_merger": {
92             "image_tag": TRUST_STORE_MERGER_IMAGE
93         },
94         "cbs": {
95             "base_url" : CBS_BASE_URL                   # URL prefix for accessing config binding service
96         }
97
98     }
99
100 def configure(config_path=_CONFIG_PATH, key = _CONSUL_KEY):
101     """
102     Get configuration information from local file and Consul.
103     Note that the Cloudify context ("ctx") isn't available at
104     module load time.
105     """
106
107     from cloudify.exceptions import NonRecoverableError
108     try:
109         import configparser
110     except ImportError:
111         import ConfigParser as configparser
112     from k8splugin import discovery
113     config = _set_defaults()
114
115     try:
116         # Get Consul address from a config file
117         c = configparser.ConfigParser()
118         c.read(config_path)
119         config["consul_host"] = c.get('consul','address')
120
121         # Get the rest of the config from Consul
122         conn = discovery.create_kv_conn(config["consul_host"])
123         val = discovery.get_kv_value(conn, key)
124
125         # Merge Consul results into the config
126         config.update(val)
127
128     except discovery.DiscoveryKVEntryNotFoundError as e:
129         # Don't reraise error, assume defaults are wanted.
130         pass
131
132     except Exception as e:
133         raise NonRecoverableError(e)
134
135     return config