3 #######################################################################
5 # Copyright (c) 2015 Orange
6 # valentin.boucher@orange.com
8 # All rights reserved. This program and the accompanying materials
9 # are made available under the terms of the Apache License, Version 2.0
10 # which accompanies this distribution, and is available at
11 # http://www.apache.org/licenses/LICENSE-2.0
12 ########################################################################
23 def __init__(self, testcase_dir, inputs={}, logger=None):
24 self.testcase_dir = testcase_dir
25 self.blueprint_dir = testcase_dir + 'cloudify-manager-blueprint/'
26 self.input_file = 'inputs.yaml'
27 self.manager_blueprint = False
30 self.manager_up = False
32 def set_credentials(self, username, password, tenant_name, auth_url):
33 self.config['keystone_username'] = username
34 self.config['keystone_password'] = password
35 self.config['keystone_url'] = auth_url
36 self.config['keystone_tenant_name'] = tenant_name
38 def set_flavor_id(self, flavor_id):
39 self.config['flavor_id'] = flavor_id
41 def set_image_id(self, image_id):
42 self.config['image_id'] = image_id
44 def set_external_network_name(self, external_network_name):
45 self.config['external_network_name'] = external_network_name
47 def set_ssh_user(self, ssh_user):
48 self.config['ssh_user'] = ssh_user
50 def set_logger(self, logger):
53 def download_manager_blueprint(self, manager_blueprint_url, manager_blueprint_branch):
54 if self.manager_blueprint:
57 "cloudify manager server blueprint is already downloaded !")
61 "Downloading the cloudify manager server blueprint")
62 download_result = download_blueprints(
63 manager_blueprint_url, manager_blueprint_branch, self.blueprint_dir)
65 if not download_result:
67 self.logger.error("Failed to download manager blueprint")
70 self.manager_blueprint = True
75 def deploy_manager(self):
76 if self.manager_blueprint:
78 self.logger.info("Writing the inputs file")
79 with open(self.blueprint_dir + "inputs.yaml", "w") as f:
80 f.write(yaml.dump(self.config, default_style='"'))
83 # Ensure no ssh key file already exists
84 key_files = ["/.ssh/cloudify-manager-kp.pem",
85 "/.ssh/cloudify-agent-kp.pem"]
86 home = os.path.expanduser("~")
88 for key_file in key_files:
89 if os.path.isfile(home + key_file):
90 os.remove(home + key_file)
93 self.logger.info("Launching the cloudify-manager deployment")
95 script = "source " + self.testcase_dir + "venv_cloudify/bin/activate; "
96 script += "cd " + self.testcase_dir + "; "
97 script += "cfy init -r; "
98 script += "cd cloudify-manager-blueprint; "
99 script += "cfy local create-requirements -o requirements.txt -p openstack-manager-blueprint.yaml; "
100 script += "pip install -r requirements.txt; "
101 script += "cfy bootstrap --install-plugins -p openstack-manager-blueprint.yaml -i inputs.yaml; "
102 cmd = "/bin/bash -c '" + script + "'"
103 execute_command(cmd, self.logger)
106 self.logger.info("Cloudify-manager server is UP !")
108 self.manager_up = True
110 def undeploy_manager(self):
112 self.logger.info("Launching the cloudify-manager undeployment")
114 self.manager_up = False
116 script = "source " + self.testcase_dir + "venv_cloudify/bin/activate; "
117 script += "cd " + self.testcase_dir + "; "
118 script += "cfy teardown -f --ignore-deployments=True; "
119 cmd = "/bin/bash -c '" + script + "'"
120 execute_command(cmd, self.logger)
124 "Cloudify-manager server has been successfully removed!")
126 def download_upload_and_deploy_blueprint(self, blueprint, config, bp_name, dep_name):
128 self.logger.info("Downloading the {0} blueprint".format(
129 blueprint['file_name']))
130 download_result = download_blueprints(blueprint['url'], blueprint['branch'],
131 self.testcase_dir + blueprint['destination_folder'])
133 if not download_result:
136 "Failed to download blueprint {0}".format(blueprint['file_name']))
140 self.logger.info("Writing the inputs file")
141 with open(self.testcase_dir + blueprint['destination_folder'] + "/inputs.yaml", "w") as f:
142 f.write(yaml.dump(config, default_style='"'))
146 self.logger.info("Launching the {0} deployment".format(bp_name))
147 script = "source " + self.testcase_dir + "venv_cloudify/bin/activate; "
148 script += "cd " + self.testcase_dir + \
149 blueprint['destination_folder'] + "; "
150 script += "cfy blueprints upload -b " + \
151 bp_name + " -p openstack-blueprint.yaml; "
152 script += "cfy deployments create -b " + bp_name + \
153 " -d " + dep_name + " --inputs inputs.yaml; "
154 script += "cfy executions start -w install -d " + dep_name + " --timeout 1800; "
156 cmd = "/bin/bash -c '" + script + "'"
157 execute_command(cmd, self.logger)
160 self.logger.info("The deployment of {0} is ended".format(dep_name))
162 def undeploy_deployment(self, dep_name):
164 self.logger.info("Launching the {0} undeployment".format(dep_name))
165 script = "source " + self.testcase_dir + "venv_cloudify/bin/activate; "
166 script += "cd " + self.testcase_dir + "; "
167 script += "cfy executions start -w uninstall -d " + dep_name + " --timeout 1800 ; "
168 script += "cfy deployments delete -d " + dep_name + "; "
170 cmd = "/bin/bash -c '" + script + "'"
172 execute_command(cmd, self.logger)
175 self.logger.error("Clearwater undeployment failed")
178 def execute_command(cmd, logger):
180 Execute Linux command
183 logger.debug('Executing command : {}'.format(cmd))
184 output_file = "output.txt"
185 f = open(output_file, 'w+')
186 p = subprocess.call(cmd, shell=True, stdout=f, stderr=subprocess.STDOUT)
188 f = open(output_file, 'r')
190 if result != "" and logger:
196 logger.error("Error when executing command %s" % cmd)
200 def download_blueprints(blueprint_url, branch, dest_path):
201 if os.path.exists(dest_path):
202 shutil.rmtree(dest_path)
204 Repo.clone_from(blueprint_url, dest_path, branch=branch)