X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=functest%2Fcore%2Fcloudify.py;h=daa63e62335ca4fffe13cbd79c74cd6e98fde5c7;hb=b8a115906e4f6e598e7e1f1b59e2b1fb201af6a5;hp=655c5f5be3ff2672daeaecaec9548d008b70a667;hpb=c391f57e6797e544d14285ca433b2499ed84cd5f;p=functest.git diff --git a/functest/core/cloudify.py b/functest/core/cloudify.py index 655c5f5be..daa63e623 100644 --- a/functest/core/cloudify.py +++ b/functest/core/cloudify.py @@ -15,6 +15,7 @@ import logging import time from cloudify_rest_client import CloudifyClient +from cloudify_rest_client.executions import Execution from functest.core import singlevm @@ -28,10 +29,10 @@ class Cloudify(singlevm.SingleVm2): 'cloudify-manager-premium-4.0.1.qcow2') flavor_ram = 4096 flavor_vcpus = 2 - flavor_disk = 50 + flavor_disk = 40 username = 'centos' ssh_connect_loops = 12 - create_server_timeout = 240 + create_server_timeout = 600 ports = [80, 443, 5671, 53333] def __init__(self, **kwargs): @@ -66,8 +67,12 @@ class Cloudify(singlevm.SingleVm2): "The current manager status is %s", cfy_status) if str(cfy_status) != 'running': raise Exception("Cloudify Manager isn't up and running") - self.cfy_client.secrets.list() - self.__logger.debug("Secrets API successfully reached") + self.cfy_client.secrets.create( + "foo", "bar", update_if_exists=True) + self.__logger.debug( + "List secrets: %s", self.cfy_client.secrets.list()) + self.cfy_client.secrets.delete("foo") + self.__logger.info("Secrets API successfully reached") break except Exception: # pylint: disable=broad-except self.__logger.info( @@ -78,3 +83,67 @@ class Cloudify(singlevm.SingleVm2): return 1 self.__logger.info("Cloudify Manager is up and running") return 0 + + +def wait_for_execution(client, execution, logger, timeout=3600, ): + """Wait for a workflow execution on Cloudify Manager.""" + # if execution already ended - return without waiting + if execution.status in Execution.END_STATES: + return execution + + if timeout is not None: + deadline = time.time() + timeout + + # Poll for execution status and execution logs, until execution ends + # and we receive an event of type in WORKFLOW_END_TYPES + offset = 0 + batch_size = 50 + event_list = [] + execution_ended = False + while True: + event_list = client.events.list( + execution_id=execution.id, + _offset=offset, + _size=batch_size, + include_logs=True, + sort='@timestamp').items + + offset = offset + len(event_list) + for event in event_list: + logger.debug(event.get('message')) + + if timeout is not None: + if time.time() > deadline: + raise RuntimeError( + 'execution of operation {0} for deployment {1} ' + 'timed out'.format(execution.workflow_id, + execution.deployment_id)) + else: + # update the remaining timeout + timeout = deadline - time.time() + + if not execution_ended: + execution = client.executions.get(execution.id) + execution_ended = execution.status in Execution.END_STATES + + if execution_ended: + break + + time.sleep(5) + + return execution + + +def get_execution_id(client, deployment_id): + """ + Get the execution id of a env preparation. + + network, security group, fip, VM creation + """ + executions = client.executions.list(deployment_id=deployment_id) + for execution in executions: + if execution.workflow_id == 'create_deployment_environment': + return execution + raise RuntimeError('Failed to get create_deployment_environment ' + 'workflow execution.' + 'Available executions: {0}'.format(executions))