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