Bootstrap Cloudify
[oom.git] / TOSCA / cloudify-environment-setup / scripts / manager / tasks.py
diff --git a/TOSCA/cloudify-environment-setup/scripts/manager/tasks.py b/TOSCA/cloudify-environment-setup/scripts/manager/tasks.py
new file mode 100644 (file)
index 0000000..e929d55
--- /dev/null
@@ -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\".")