diff options
Diffstat (limited to 'TOSCA/cloudify-environment-setup/scripts/manager')
-rw-r--r-- | TOSCA/cloudify-environment-setup/scripts/manager/tasks.py | 206 |
1 files changed, 206 insertions, 0 deletions
diff --git a/TOSCA/cloudify-environment-setup/scripts/manager/tasks.py b/TOSCA/cloudify-environment-setup/scripts/manager/tasks.py new file mode 100644 index 0000000000..e929d55098 --- /dev/null +++ b/TOSCA/cloudify-environment-setup/scripts/manager/tasks.py @@ -0,0 +1,206 @@ +# ============LICENSE_START========================================== +# =================================================================== +# Copyright (c) 2018 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============================================ + +from tempfile import NamedTemporaryFile +from fabric.api import get, sudo, run +from cloudify import ctx +from cloudify.exceptions import NonRecoverableError, RecoverableError + +CONFIG_PATH = '/etc/cloudify/config.yaml' + + +def install_rpm(_rpm): + try: + sudo("rpm -i {0}".format(_rpm)) + except Exception as e: + raise NonRecoverableError(str(e)) + return True + + +def install_requirements(): + try: + sudo("sudo yum install -y python-backports-ssl_match_hostname " + "python-setuptools python-backports") + except Exception as e: + raise NonRecoverableError(str(e)) + return True + + +def update_config(private, public, _config_path): + SED = "sed -i 's|{0}|{1}|g' {2}" + + old_private_ip = " private_ip: \\x27\\x27" + new_private_ip = " private_ip: \\x27{0}\\x27".format(private) + + try: + sudo(SED.format(old_private_ip, new_private_ip, _config_path)) + except Exception as e: + raise NonRecoverableError(str(e)) + + old_public_ip = " public_ip: \\x27\\x27" + new_public_ip = " public_ip: \\x27{0}\\x27".format(public) + + try: + sudo(SED.format(old_public_ip, new_public_ip, _config_path)) + except Exception as e: + raise NonRecoverableError(str(e)) + + old_networks = " networks: {}" + new_networks = " networks: {{ \\x27default\\x27: \\x27{0}\\x27, \\x27external\\x27: \\x27{1}\\x27 }}".format( + private, public) + + try: + sudo(SED.format(old_networks, new_networks, _config_path)) + sudo("chmod 775 {0}".format(_config_path)) + except Exception as e: + raise NonRecoverableError(str(e)) + return True + + +def cfy_install(password, old=False): + sudo("chmod 777 {0}".format(CONFIG_PATH)) + + install_string = 'cfy_manager install' + + if password: + install_string = \ + install_string + ' ' + '--admin-password {0}'.format( + password) + if old: + install_string = install_string + ' --clean-db' + elif not old: + try: + sudo("sudo yum install -y openssl-1.0.2k") + except Exception as e: + raise NonRecoverableError(str(e)) + + try: + run(install_string) + except Exception as e: + ctx.logger.error(str(e)) + return False + + sudo("chmod 775 {0}".format(CONFIG_PATH)) + + return True + + +def plugins_upload(): + try: + run("cfy plugins bundle-upload") + except Exception as e: + raise NonRecoverableError(str(e)) + + return True + + +def secrets_create(secret_key, secret_value): + try: + run("cfy secrets create {0} -s \"{1}\"".format( + secret_key, secret_value)) + except Exception as e: + raise NonRecoverableError(str(e)) + + return True + + +def blueprints_upload(file, name, url): + try: + run("cfy blueprints upload -n {0} -b {1} {2}".format(file, name, url)) + except Exception as e: + raise NonRecoverableError(str(e)) + + return True + + +def create(private_ip, + public_ip, + rpm, + secrets, + blueprints, + config_path=CONFIG_PATH, + password=None, + **_): + ctx.logger.info("Installing Cloudify Manager components.") + + try: + run("echo Hello") + except Exception as e: + raise RecoverableError(str(e)) + + if not ctx.instance.runtime_properties.get('installed_rpm'): + install_requirements() + ctx.instance.runtime_properties['installed_rpm'] = install_rpm(rpm) + + if not ctx.instance.runtime_properties.get('updated_config'): + ctx.instance.runtime_properties['updated_config'] = \ + update_config(private_ip, public_ip, config_path) + + if 'cfy_installed' not in ctx.instance.runtime_properties: + cfy_install_output = cfy_install(password) + else: + cfy_install_output = cfy_install(password, old=True) + + ctx.instance.runtime_properties['cfy_installed'] = cfy_install_output + if not cfy_install_output: + raise RecoverableError('cfy install failed.') + + if not ctx.instance.runtime_properties.get('plugins_uploaded'): + try: + run( + "cfy plugins upload https://nexus.onap.org/content/sites/raw/org.onap.ccsdk.platform.plugins/plugins/helm-3.0.0-py27-none-linux_x86_64.wgn -y https://nexus.onap.org/content/sites/raw/org.onap.ccsdk.platform.plugins/type_files/helm/1.1.0/helm-type.yaml") + except Exception as e: + raise NonRecoverableError(str(e)) + ctx.instance.runtime_properties['plugins_uploaded'] = plugins_upload() + + more_secrets = [ + {'key': 'cfy_user', 'value': 'admin'}, + {'key': 'kubernetes_master_port', 'value': 'kubernetes_master_port'}, + {'key': 'kubernetes-admin_client_certificate_data', + 'value': 'kubernetes-admin_client_certificate_data'}, + {'key': 'kubernetes_master_ip', 'value': 'kubernetes_master_ip'}, + {'key': 'kubernetes_certificate_authority_data', + 'value': 'kubernetes_certificate_authority_data'}, + {'key': 'kubernetes-admin_client_key_data', + 'value': 'kubernetes-admin_client_key_data'}, + {'key': 'cfy_password', 'value': password or 'cfy_password'}, + {'key': 'cfy_tenant', 'value': 'default_tenant'}, + {'key': 'kubernetes_token', 'value': 'kubernetes_token'} + ] + for ms in more_secrets: + secrets.append(ms) + + for secret in secrets: + secrets_create( + secret.get('key'), + secret.get('value')) + + for blueprint in blueprints: + blueprints_upload( + blueprint.get('file'), + blueprint.get('name'), + blueprint.get('url')) + + ctx.logger.info( + "Initialize your CLI profile: " + "`cfy profiles use " + "{0} -u admin -p {1} -t default_tenant`".format(public_ip, + password or "_")) + if not password: + ctx.logger.info( + "Since you did not provide a password, scroll up though " + "the execution log and search for \"Manager password is\".") |