summaryrefslogtreecommitdiffstats
path: root/yardstick/vTC/apexlake/experimental_framework/heat_manager.py
diff options
context:
space:
mode:
Diffstat (limited to 'yardstick/vTC/apexlake/experimental_framework/heat_manager.py')
-rw-r--r--yardstick/vTC/apexlake/experimental_framework/heat_manager.py103
1 files changed, 103 insertions, 0 deletions
diff --git a/yardstick/vTC/apexlake/experimental_framework/heat_manager.py b/yardstick/vTC/apexlake/experimental_framework/heat_manager.py
new file mode 100644
index 000000000..41fc585f7
--- /dev/null
+++ b/yardstick/vTC/apexlake/experimental_framework/heat_manager.py
@@ -0,0 +1,103 @@
+# Copyright (c) 2015 Intel Research and Development Ireland Ltd.
+#
+# 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.
+
+__author__ = 'vmriccox'
+
+
+from keystoneclient.v2_0 import client as keystoneClient
+from heatclient import client as heatClient
+from heatclient.common import template_utils
+
+from experimental_framework import common
+
+
+class HeatManager:
+
+ def __init__(self, credentials):
+ self.ip_controller = credentials['ip_controller']
+ self.heat_url = credentials['heat_url']
+ self.user = credentials['user']
+ self.password = credentials['password']
+ self.auth_uri = credentials['auth_uri']
+ self.project_id = credentials['project']
+ self.heat = None
+
+ # TODO: verify that init_heat is useless in the constructor
+ # self.init_heat()
+
+ def init_heat(self):
+ keystone = keystoneClient.Client(username=self.user,
+ password=self.password,
+ tenant_name=self.project_id,
+ auth_url=self.auth_uri)
+ auth_token = keystone.auth_token
+ self.heat = heatClient.Client('1', endpoint=self.heat_url,
+ token=auth_token)
+
+ def print_stacks(self, name=None):
+ for stack in self.heat.stacks.list():
+ if (name and stack.stack_name == name) or not name:
+ common.LOG.info("Stack Name: " + stack.stack_name)
+ common.LOG.info("Stack Status: " + stack.stack_status)
+
+ def create_stack(self, template_file, stack_name, parameters):
+ self.init_heat()
+ # self.print_stacks()
+ tpl_files, template = \
+ template_utils.get_template_contents(template_file)
+
+ fields = {
+ 'template': template,
+ 'files': dict(list(tpl_files.items()))
+ }
+ self.heat.stacks.create(stack_name=stack_name, files=fields['files'],
+ template=template, parameters=parameters)
+ self.print_stacks(stack_name)
+
+ def is_stack_deployed(self, stack_name):
+ self.init_heat()
+ if stack_name in self.heat.stacks.list():
+ return True
+ return False
+
+ def check_stack_status(self, stack_name):
+ """
+ Returns a string representing the status of a stack from Heat
+ perspective
+ :param stack_name: Name of the stack to be checked (type: str)
+ :return: (type: str)
+ """
+ for stack in self.heat.stacks.list():
+ if stack.stack_name == stack_name:
+ return stack.stack_status
+ return 'NOT_FOUND'
+
+ def validate_heat_template(self, heat_template_file):
+ self.init_heat()
+ if not self.heat.stacks.validate(template=open(heat_template_file,
+ 'r').read()):
+ raise ValueError('The provided heat template "' +
+ heat_template_file +
+ '" is not in the correct format')
+
+ def delete_stack(self, stack_name):
+ self.init_heat()
+ try:
+ for stack in self.heat.stacks.list():
+ if stack.stack_name == stack_name:
+ self.heat.stacks.delete(stack.id)
+ return True
+ except:
+ pass
+ return False