Publish cloudify scenario 29/59629/2
authorCédric Ollivier <ollivier.cedric@gmail.com>
Mon, 9 Jul 2018 20:09:39 +0000 (22:09 +0200)
committerCédric Ollivier <ollivier.cedric@gmail.com>
Tue, 10 Jul 2018 06:49:22 +0000 (08:49 +0200)
It eases deploying any vnf via Cloudify.
It also stops duplicating code between vims and vrouter.

Co-Authored-By: Valentin Boucher <valentin.boucher@kontron.com>
Change-Id: I5fe06d91804f4781f6b1301da12862bac793ffbb
Signed-off-by: Cédric Ollivier <ollivier.cedric@gmail.com>
docker/vnf/testcases.yaml
functest/ci/testcases.yaml
functest/core/cloudify.py [new file with mode: 0644]

index 938f0b3..bc2a425 100644 (file)
@@ -7,6 +7,19 @@ tiers:
         description: >-
             Collection of VNF test cases.
         testcases:
+            -
+                case_name: cloudify
+                project_name: functest
+                criteria: 100
+                blocking: false
+                description: >-
+                    This test case deploys the Cloudify orchestrator.
+                dependencies:
+                    installer: ''
+                    scenario: 'os-.*-nofeature-.*ha'
+                run:
+                    module: 'functest.core.cloudify'
+                    class: 'Cloudify'
             -
                 case_name: cloudify_ims
                 project_name: functest
index 2f5c8c0..30e1c68 100644 (file)
@@ -531,6 +531,19 @@ tiers:
         description: >-
             Collection of VNF test cases.
         testcases:
+            -
+                case_name: cloudify
+                project_name: functest
+                criteria: 100
+                blocking: false
+                description: >-
+                    This test case deploys the Cloudify orchestrator.
+                dependencies:
+                    installer: ''
+                    scenario: 'os-.*-nofeature-.*ha'
+                run:
+                    module: 'functest.core.cloudify'
+                    class: 'Cloudify'
             -
                 case_name: cloudify_ims
                 project_name: functest
diff --git a/functest/core/cloudify.py b/functest/core/cloudify.py
new file mode 100644 (file)
index 0000000..954491f
--- /dev/null
@@ -0,0 +1,77 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2018 Orange 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
+
+"""Cloudify testcase implementation."""
+
+from __future__ import division
+
+import logging
+import time
+
+from cloudify_rest_client import CloudifyClient
+
+from functest.core import singlevm
+
+
+class Cloudify(singlevm.SingleVm2):
+    """Cloudify Orchestrator Case."""
+
+    __logger = logging.getLogger(__name__)
+
+    filename = ('/home/opnfv/functest/images/'
+                'cloudify-manager-premium-4.0.1.qcow2')
+    flavor_ram = 4096
+    flavor_vcpus = 2
+    flavor_disk = 50
+    username = 'centos'
+    ssh_connect_loops = 12
+    ports = [80, 443, 5671, 53333]
+
+    def __init__(self, **kwargs):
+        """Initialize Cloudify testcase object."""
+        if "case_name" not in kwargs:
+            kwargs["case_name"] = "cloudify"
+        super(Cloudify, self).__init__(**kwargs)
+        self.cfy_client = None
+
+    def prepare(self):
+        super(Cloudify, self).prepare()
+        for port in self.ports:
+            self.cloud.create_security_group_rule(
+                self.sec.id, port_range_min=port, port_range_max=port,
+                protocol='tcp', direction='ingress')
+
+    def execute(self):
+        """
+        Deploy Cloudify Manager.
+        """
+        self.cfy_client = CloudifyClient(
+            host=self.fip.floating_ip_address,
+            username='admin', password='admin', tenant='default_tenant',
+            api_version='v3')
+        self.__logger.info("Attemps running status of the Manager")
+        for loop in range(10):
+            try:
+                self.__logger.debug(
+                    "status %s", self.cfy_client.manager.get_status())
+                cfy_status = self.cfy_client.manager.get_status()['status']
+                self.__logger.info(
+                    "The current manager status is %s", cfy_status)
+                if str(cfy_status) != 'running':
+                    raise Exception("Cloudify Manager isn't up and running")
+                break
+            except Exception:  # pylint: disable=broad-except
+                self.__logger.info(
+                    "try %s: Cloudify Manager isn't up and running", loop + 1)
+                time.sleep(30)
+        else:
+            self.__logger.error("Cloudify Manager isn't up and running")
+            return 1
+        self.__logger.info("Cloudify Manager is up and running")
+        return 0