copr-be-dev: provide /config/resalloc-vars.sh on VMs on hypervisors

This way we can do better decisions later, like what to do about the
SWAP mount points.
This commit is contained in:
Pavel Raiskup 2022-05-17 07:26:46 +02:00
parent f4268330ee
commit c8353a0124

View file

@ -6,6 +6,7 @@ Spawn a Copr Builder using libvirt
# pylint: disable=invalid-name # pylint: disable=invalid-name
import copy
import os import os
import sys import sys
import logging import logging
@ -79,6 +80,12 @@ def get_hv_identification_from_pool_id(pool_id):
raise Exception("can't convert pool_id to hv ID") raise Exception("can't convert pool_id to hv ID")
class ConfigFile:
def __init__(self, name, contents):
self.name = name
self.contents = contents
class LibvirtSpawner: class LibvirtSpawner:
""" """
Context for all the logic (to avoid working with globals). Context for all the logic (to avoid working with globals).
@ -90,6 +97,7 @@ class LibvirtSpawner:
root_disk_pool = "images" root_disk_pool = "images"
root_vol_size = "6GB" root_vol_size = "6GB"
startup_script = "" startup_script = ""
config_files = []
arch = None arch = None
swap_vol_size = None swap_vol_size = None
cpu_count = 2 cpu_count = 2
@ -101,6 +109,11 @@ class LibvirtSpawner:
host_id, self.connection, self.arch = get_hv_identification_from_pool_id( host_id, self.connection, self.arch = get_hv_identification_from_pool_id(
resalloc_pool_id) resalloc_pool_id)
self.config_files.append(ConfigFile(
"resalloc-vars.sh",
f"POOL_ID={resalloc_pool_id}\n",
))
# The Power9 machine has not enough storage to host 2CPU/VM. Let's # The Power9 machine has not enough storage to host 2CPU/VM. Let's
# double the quote on CPU (at least for now). # double the quote on CPU (at least for now).
if host_id in [6]: if host_id in [6]:
@ -233,22 +246,33 @@ class LibvirtSpawner:
"mount -o remount /", "mount -o remount /",
])) ]))
def get_startup_script(self):
if not self.startup_script:
return None
return ConfigFile("eimg-early-script.sh",
"#! /bin/bash\nset -e\n" + self.startup_script)
def generate_config_iso(self): def generate_config_iso(self):
""" """
Generate the ISO file that is attached to the VM and used by the early Generate the ISO file that is attached to the VM and used by the early
script: script:
https://github.com/praiskup/helpers/blob/beb62e5cf5d8a4cd0e456536a7073dc5307668fd/bin/eimg-prep.in#L66-L76 https://github.com/praiskup/helpers/blob/beb62e5cf5d8a4cd0e456536a7073dc5307668fd/bin/eimg-prep.in#L66-L76
""" """
if not self.startup_script:
return None
script = "#! /bin/bash\nset -e\n" + self.startup_script
todo_files = copy.copy(self.config_files)
startup_script = self.get_startup_script()
if startup_script:
todo_files.append(startup_script)
config_dir = os.path.join(self.workdir, "config") config_dir = os.path.join(self.workdir, "config")
os.makedirs(config_dir) os.makedirs(config_dir)
pn_script = os.path.join(config_dir, "eimg-early-script.sh")
with open(pn_script, 'w') as file: if not todo_files:
file.write(script) return None
for cf in todo_files:
file_local_path = os.path.join(config_dir, cf.name)
with open(file_local_path, 'w', encoding='utf-8') as file:
file.write(cf.contents)
image = os.path.join(self.workdir, 'config.iso') image = os.path.join(self.workdir, 'config.iso')