Add common stack methods
* Creating and removing stacks * Waiting for resource status to be complete * Loading Heat template Change-Id: I3dbafb03d5ca671865335e7320c67f07fa5f9aaa
This commit is contained in:
parent
2468ef5f71
commit
f831a4b3d8
64
tobiko/common/stack.py
Normal file
64
tobiko/common/stack.py
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
# Copyright 2018 Red Hat
|
||||||
|
#
|
||||||
|
# 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.
|
||||||
|
import os
|
||||||
|
import time
|
||||||
|
|
||||||
|
from heatclient.common import template_utils
|
||||||
|
import yaml
|
||||||
|
|
||||||
|
|
||||||
|
class StackManager(object):
|
||||||
|
"""Manages Heat stacks."""
|
||||||
|
|
||||||
|
def __init__(self, client_manager, templates_dir):
|
||||||
|
self.client = client_manager.get_heat_client()
|
||||||
|
self.templates_dir = templates_dir
|
||||||
|
|
||||||
|
def load_template(self, template_path):
|
||||||
|
"""Loads template from a given file."""
|
||||||
|
_files, template = template_utils.get_template_contents(template_path)
|
||||||
|
return yaml.safe_dump(template)
|
||||||
|
|
||||||
|
def create_stack(self, stack_name, template_name, parameters):
|
||||||
|
"""Creates stack based on passed parameters."""
|
||||||
|
template = self.load_template(os.path.join(self.templates_dir,
|
||||||
|
template_name))
|
||||||
|
|
||||||
|
stack = self.client.stacks.create(stack_name=stack_name,
|
||||||
|
template=template,
|
||||||
|
parameters=parameters)
|
||||||
|
|
||||||
|
print(stack)
|
||||||
|
return stack
|
||||||
|
|
||||||
|
def delete_stack(self, sid):
|
||||||
|
"""Deletes stack."""
|
||||||
|
self.client.stacks.delete(sid)
|
||||||
|
|
||||||
|
def get_stack(self, stack_name):
|
||||||
|
"""Returns stack ID."""
|
||||||
|
return self.client.stacks.get(stack_name)
|
||||||
|
|
||||||
|
def wait_for_status_complete(self, stack_id, resource_name):
|
||||||
|
"""Verifies resource reached complete status.
|
||||||
|
|
||||||
|
If it didn't, the method will wait until resource reaches
|
||||||
|
complete status or when timeout reached.
|
||||||
|
"""
|
||||||
|
res = self.client.resources.get(stack_id, resource_name)
|
||||||
|
print(res.resource_status)
|
||||||
|
while (res.resource_status != 'CREATE_COMPLETE'):
|
||||||
|
print(res.resource_status)
|
||||||
|
time.sleep(5)
|
||||||
|
res = self.client.resources.get(stack_id, resource_name)
|
Loading…
x
Reference in New Issue
Block a user