From 9e45abcba88ce805260cf16ccebd2fe5e3885822 Mon Sep 17 00:00:00 2001 From: Jun Hu Date: Wed, 17 Jan 2018 17:07:36 -0500 Subject: create K8S cluster by TOSCA Issue-ID: OOM-63 Change-Id: I1506e856328c5fd973a0de140982d8b1bbbac546 Signed-off-by: Nicolas Hu --- .../scripts/kubernetes_master/start.py | 153 +++++++++++++++++++++ 1 file changed, 153 insertions(+) create mode 100644 TOSCA/kubernetes-cluster-TOSCA/scripts/kubernetes_master/start.py (limited to 'TOSCA/kubernetes-cluster-TOSCA/scripts/kubernetes_master/start.py') diff --git a/TOSCA/kubernetes-cluster-TOSCA/scripts/kubernetes_master/start.py b/TOSCA/kubernetes-cluster-TOSCA/scripts/kubernetes_master/start.py new file mode 100644 index 0000000000..bbc166b134 --- /dev/null +++ b/TOSCA/kubernetes-cluster-TOSCA/scripts/kubernetes_master/start.py @@ -0,0 +1,153 @@ +#!/usr/bin/env python + +# ============LICENSE_START========================================== +# =================================================================== +# Copyright © 2017 AT&T +# +# 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. +#============LICENSE_END============================================ + +#This script will be execute on master host. This script will check whether Kube-DNS is running, and set secrets in cloudify. + +import os +import subprocess +import pip +try: + import yaml +except ImportError: + pip.main(['install', 'pyyaml']) + import yaml + +from cloudify import ctx +from cloudify.exceptions import RecoverableError +from cloudify import manager + + +def execute_command(_command): + + ctx.logger.debug('_command {0}.'.format(_command)) + + subprocess_args = { + 'args': _command.split(), + 'stdout': subprocess.PIPE, + 'stderr': subprocess.PIPE + } + + ctx.logger.debug('subprocess_args {0}.'.format(subprocess_args)) + + process = subprocess.Popen(**subprocess_args) + output, error = process.communicate() + + ctx.logger.debug('command: {0} '.format(_command)) + ctx.logger.debug('output: {0} '.format(output)) + ctx.logger.debug('error: {0} '.format(error)) + ctx.logger.debug('process.returncode: {0} '.format(process.returncode)) + + if process.returncode: + ctx.logger.error('Running `{0}` returns error.'.format(_command)) + return False + + return output + + +def check_kubedns_status(_get_pods): + + ctx.logger.debug('get_pods: {0} '.format(_get_pods)) + + for pod_line in _get_pods.split('\n'): + ctx.logger.debug('pod_line: {0} '.format(pod_line)) + try: + _namespace, _name, _ready, _status, _restarts, _age = pod_line.split() + except ValueError: + pass + else: + if 'kube-dns' in _name and 'Running' not in _status: + return False + elif 'kube-dns' in _name and 'Running' in _status: + return True + return False + + +if __name__ == '__main__': + + cfy_client = manager.get_rest_client() + + # Checking if the Kubernetes DNS service is running (last step). + admin_file_dest = os.path.join(os.path.expanduser('~'), 'admin.conf') + os.environ['KUBECONFIG'] = admin_file_dest + get_pods = execute_command('kubectl get pods --all-namespaces') + if not check_kubedns_status(get_pods): + raise RecoverableError('kube-dns not Running') + + # Storing the K master configuration. + kubernetes_master_config = {} + with open(admin_file_dest, 'r') as outfile: + try: + kubernetes_master_config = yaml.load(outfile) + except yaml.YAMLError as e: + RecoverableError( + 'Unable to read Kubernetes Admin file: {0}: {1}'.format( + admin_file_dest, str(e))) + ctx.instance.runtime_properties['configuration_file_content'] = \ + kubernetes_master_config + + clusters = kubernetes_master_config.get('clusters') + _clusters = {} + for cluster in clusters: + __name = cluster.get('name') + _cluster = cluster.get('cluster', {}) + _secret_key = '%s_certificate_authority_data' % __name + if cfy_client and not len(cfy_client.secrets.list(key=_secret_key)) == 1: + cfy_client.secrets.create(key=_secret_key, value=_cluster.get('certificate-authority-data')) + ctx.logger.info('Set secret: {0}.'.format(_secret_key)) + else: + cfy_client.secrets.update(key=_secret_key, value=_cluster.get('certificate-authority-data')) + ctx.instance.runtime_properties['%s_certificate_authority_data' % __name] = _cluster.get('certificate-authority-data') + _clusters[__name] = _cluster + del __name + + contexts = kubernetes_master_config.get('contexts') + _contexts = {} + for context in contexts: + __name = context.get('name') + _context = context.get('context', {}) + _contexts[__name] = _context + del __name + + users = kubernetes_master_config.get('users') + _users = {} + for user in users: + __name = user.get('name') + _user = user.get('user', {}) + _secret_key = '%s_client_certificate_data' % __name + if cfy_client and not len(cfy_client.secrets.list(key=_secret_key)) == 1: + cfy_client.secrets.create(key=_secret_key, value=_user.get('client-certificate-data')) + ctx.logger.info('Set secret: {0}.'.format(_secret_key)) + else: + cfy_client.secrets.update(key=_secret_key, value=_user.get('client-certificate-data')) + _secret_key = '%s_client_key_data' % __name + if cfy_client and not len(cfy_client.secrets.list(key=_secret_key)) == 1: + cfy_client.secrets.create(key=_secret_key, value=_user.get('client-key-data')) + ctx.logger.info('Set secret: {0}.'.format(_secret_key)) + else: + cfy_client.secrets.update(key=_secret_key, value=_user.get('client-key-data')) + ctx.instance.runtime_properties['%s_client_certificate_data' % __name] = _user.get('client-certificate-data') + ctx.instance.runtime_properties['%s_client_key_data' % __name] = _user.get('client-key-data') + _users[__name] = _user + del __name + + ctx.instance.runtime_properties['kubernetes'] = { + 'clusters': _clusters, + 'contexts': _contexts, + 'users': _users + } -- cgit 1.2.3-korg