From e8ca6b68ec1641a77f4a3b4f76949859a7e11ab6 Mon Sep 17 00:00:00 2001 From: sunilkumarn417 Date: Fri, 31 Jul 2020 18:21:28 +0530 Subject: [PATCH] RHOSD openstack changes python3 compatibility Signed-off-by: sunilkumarn417 --- requirements.txt | 2 +- teuthology/provision/cloud/openstack.py | 66 +++++++++++++++---------- 2 files changed, 42 insertions(+), 26 deletions(-) diff --git a/requirements.txt b/requirements.txt index d926e11b46..ce39c6c29a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -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 diff --git a/teuthology/provision/cloud/openstack.py b/teuthology/provision/cloud/openstack.py index 41088cdc60..9d7b086fa8 100644 --- a/teuthology/provision/cloud/openstack.py +++ b/teuthology/provision/cloud/openstack.py @@ -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 -- 2.39.5