]> git.apps.os.sepia.ceph.com Git - teuthology.git/commitdiff
RHOSD openstack changes python3 compatibility
authorsunilkumarn417 <sunnagar@redhat.com>
Fri, 31 Jul 2020 12:51:28 +0000 (18:21 +0530)
committersunilkumarn417 <sunnagar@redhat.com>
Thu, 24 Sep 2020 05:19:04 +0000 (10:49 +0530)
Signed-off-by: sunilkumarn417 <sunnagar@redhat.com>
requirements.txt
teuthology/provision/cloud/openstack.py

index d926e11b4612d6057877f676cee2a63bf6a564c5..ce39c6c29a27438b5545e4a18e0d5e9fe783d085 100644 (file)
@@ -5,7 +5,7 @@
 #    pip-compile --output-file=requirements.txt
 #
 ansible==2.8.8            # via teuthology
-apache-libcloud==2.8.0    # via teuthology
+apache-libcloud==2.6.1    # via teuthology
 appdirs==1.4.4            # via openstacksdk, virtualenv
 argparse==1.4.0           # via teuthology
 atomicwrites==1.4.0       # via pytest
index 41088cdc608682b3c6ee5d35f270ab657402f7f3..9d7b086fa8a7afad3439f7823cb4ec9d066a5fb2 100644 (file)
@@ -6,8 +6,8 @@ import time
 import yaml
 
 from teuthology.util.compat import urlencode
-
 from copy import deepcopy
+from datetime import datetime, timedelta
 from libcloud.common.exceptions import RateLimitReachedError, BaseHTTPError
 
 from paramiko import AuthenticationException
@@ -91,12 +91,12 @@ class OpenStackProvider(Provider):
     def sizes(self):
         if not hasattr(self, '_sizes'):
             allow_sizes = self.conf.get('allow_sizes', '.*')
-            if not isinstance(allow_sizes, list):
+            if isinstance(allow_sizes, str):
                 allow_sizes = [allow_sizes]
             allow_re = [re.compile(x) for x in allow_sizes]
             # By default, exclude instance types meant for Windows
-            exclude_sizes = self.conf.get('exclude_sizes', 'win-.*')
-            if not isinstance(exclude_sizes, list):
+            exclude_sizes = self.conf.get('exclude_sizes', 'win*')
+            if isinstance(exclude_sizes, str):
                 exclude_sizes = [exclude_sizes]
             exclude_re = [re.compile(x) for x in exclude_sizes]
             sizes = retry(self.driver.list_sizes)
@@ -112,9 +112,10 @@ class OpenStackProvider(Provider):
     @property
     def networks(self):
         if not hasattr(self, '_networks'):
-            allow_networks = self.conf.get('allow_networks', '.*')
-            if not isinstance(allow_networks, list):
-                allow_networks=[allow_networks]
+            ds_network = "provider_net_cci_1"
+            allow_networks = self.conf.get('allow_networks', ds_network)
+            if isinstance(allow_networks, str):
+                allow_networks = [allow_networks]
             networks_re = [re.compile(x) for x in allow_networks]
             try:
                 networks = retry(self.driver.ex_list_networks)
@@ -155,13 +156,13 @@ class OpenStackProvisioner(base.Provisioner):
     defaults = dict(
         openstack=dict(
             machine=dict(
-                disk=20,
-                ram=8000,
-                cpus=1,
+                disk=40,
+                ram=4048,
+                cpus=2,
             ),
             volumes=dict(
-                count=0,
-                size=0,
+                count=1,
+                size=20,
             ),
         )
     )
@@ -228,17 +229,30 @@ class OpenStackProvisioner(base.Provisioner):
         security_groups = self.security_groups
         if security_groups:
             create_args['ex_security_groups'] = security_groups
-        self._node = retry(
-            self.provider.driver.create_node,
-            **create_args
-        )
+        # workaround for downstream openstack, since wait_until_running fails
+        self._node = self.provider.driver.create_node(**create_args)
+        time.sleep(30)
         log.debug("Created node: %s", self.node)
-        results = retry(
-            self.provider.driver.wait_until_running,
-            nodes=[self.node],
-            ssh_interface=self.provider.ssh_interface,
-        )
-        self._node, self.ips = results[0]
+        timeout = timedelta(seconds=240)
+        starttime = datetime.now()
+        while True:
+            log.info("Waiting for node %s to become available", self.name)
+            all_nodes = self.provider.driver.list_nodes()
+            new_node_state = [node.state for node in all_nodes
+                              if node.uuid == self._node.uuid]
+            if new_node_state[0] == 'running':
+                break
+            if datetime.now() - starttime > timeout:
+                log.info(
+                    "Failed to bring the node in running state in \
+                    {timeout}s".format(timeout=timeout)
+                )
+                raise RuntimeError("Failed to bring up nodes in PSI")
+            time.sleep(30)
+        new_node = [node for node in all_nodes
+                    if node.uuid == self._node.uuid]
+        self._node = new_node[0]
+        self.ips = self._node.private_ips[0]
         log.debug("Node started: %s", self.node)
         if not self._create_volumes():
             self._destroy_volumes()
@@ -292,7 +306,7 @@ class OpenStackProvisioner(base.Provisioner):
     def _update_dns(self):
         query = urlencode(dict(
             name=self.name,
-            ip=self.ips[0],
+            ip=self.ips,
         ))
         nsupdate_url = "%s?%s" % (
             config.nsupdate_url,
@@ -333,8 +347,10 @@ class OpenStackProvisioner(base.Provisioner):
                 break
         if not matches:
             raise RuntimeError(
-                "Could not find an image for %s %s" %
-                (self.os_type, self.os_version))
+                "Could not find an image for %s %s",
+                self.os_type,
+                self.os_version,
+            )
         return matches[0]
 
     @property