github.com/SUSE/skuba@v1.4.17/ci/infra/testrunner/platforms/openstack.py (about) 1 import os 2 import stat 3 4 from timeout_decorator import timeout 5 from platforms.terraform import Terraform 6 from utils import Format 7 8 9 class Openstack(Terraform): 10 def __init__(self, conf): 11 super().__init__(conf, 'openstack') 12 if not os.path.isfile(conf.openstack.openrc): 13 raise ValueError(Format.alert(f"Your openrc file path \"{conf.openstack.openrc}\" does not exist.\n\t " 14 "Check your openrc file path in a configured yaml file")) 15 self.platform_new_vars = {} 16 if not self.conf.terraform.internal_net: 17 self.conf.terraform.internal_net = self.conf.terraform.stack_name 18 19 20 def _env_setup_cmd(self): 21 return f"source {self.conf.openstack.openrc}" 22 23 @timeout(600) 24 def _cleanup_platform(self): 25 variables = [f"internal_net=net-{self.conf.terraform.internal_net}", 26 f"stack_name={self.conf.terraform.stack_name}"] 27 28 self.destroy(variables) 29 30 def setup_cloud_provider(self,config_dir): 31 openstack_conf_template = "" 32 for root, dirs, files in os.walk(config_dir): 33 for f in files: 34 if f == "openstack.conf.template": 35 openstack_conf_template = os.path.join(root, f) 36 37 if not openstack_conf_template: 38 raise ValueError("openstack.conf.template file is not found") 39 40 openstack_conf = os.path.join(os.path.dirname(openstack_conf_template), "openstack.conf") 41 openrc_vars = {} 42 openrc_vars["PRIVATE_SUBNET_ID"] = "" 43 openrc_vars["PUBLIC_NET_ID"] = "" 44 with open(self.conf.openstack.openrc, mode="rt") as openrc: 45 for line in openrc: 46 try: 47 name, _, var = line.split()[1].partition("=") 48 if var: 49 openrc_vars[name] = var.strip('"').strip("'") 50 except: 51 pass 52 53 with open(openstack_conf_template, mode="rt") as tmp_conf: 54 with open(openstack_conf, mode="wt") as conf: 55 for line in tmp_conf: 56 line = self._replace_env_vars(line, openrc_vars) 57 conf.write(line) 58 os.chmod(openstack_conf, stat.S_IRUSR | stat.S_IWUSR) 59 60 61 def _replace_env_vars(self, line, openrc_vars): 62 """ 63 openstack.conf.template provides auth-url=<OS_AUTH_URL>. This method will replace <OS_AUTH_URL> to 64 OS_AUTH_URL from openrc file from users 65 :param line: 66 :param openrc: 67 :return: 68 """ 69 name, _, var = line.strip().partition("=") 70 var = var.strip().strip("<").strip(">") 71 re_line = "" 72 if var in openrc_vars: 73 line = "=".join((name, openrc_vars[var])) + os.linesep 74 return line