diff options
Diffstat (limited to 'utils/infra_setup/heat/manager.py')
-rwxr-xr-x | utils/infra_setup/heat/manager.py | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/utils/infra_setup/heat/manager.py b/utils/infra_setup/heat/manager.py new file mode 100755 index 00000000..5902e8c4 --- /dev/null +++ b/utils/infra_setup/heat/manager.py @@ -0,0 +1,86 @@ +############################################################################## +# Copyright (c) 2016 Huawei Technologies Co.,Ltd and others. +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## + +from heatclient import client as heat_client +from keystoneclient.v2_0 import client as keystone_client +from heatclient.common import template_utils + +import heat.common as common + +class HeatManager: + + def __init__(self, credentials): + self.user = credentials['user'] + self.password = credentials['password'] + self.controller_ip = credentials['controller_ip'] + self.heat_url = credentials['heat_url'] + self.auth_uri = credentials['auth_uri'] + self.project_id = credentials['project'] + self.heat = None + + def heat_init(self): + keystone = keystone_client.Client(username=self.user, + password=self.password, + tenant_name=self.project_id, + auth_url=self.auth_uri) + auth_token = keystone.auth_token + self.heat_url = keystone.service_catalog.url_for( + service_type='orchestration') + self.heat = heat_client.Client('1', endpoint=self.heat_url, + token=auth_token) + + def stacks_list(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 stack_generate(self, template_file, stack_name, parameters): + self.heat_init() + self.stacks_list() + 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.stacks_list(stack_name) + + def stack_is_deployed(self, stack_name): + self.heat_init() + if stack_name in self.heat.stacks.list(): + return True + return False + + def stack_check_status(self, stack_name): + for stack in self.heat.stacks.list(): + if stack.stack_name == stack_name: + return stack.stack_status + return 'NOT_FOUND' + + def heat_validate_template(self, heat_template_file): + self.heat_init() + if not self.heat.stacks.validate(template=open(heat_template_file, + 'r').read()): + raise ValueError('The provided heat template "' + + heat_template_file + + '" is in the wrong format') + + def stack_delete(self, stack_name): + self.heat_init() + 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 |