diff options
author | Erik Skultety <eskultet@redhat.com> | 2023-05-18 15:27:42 +0200 |
---|---|---|
committer | Erik Skultety <eskultet@redhat.com> | 2023-06-22 12:05:04 +0000 |
commit | 45a43031aba750ec1de0cf3f9fd733bc807409ba (patch) | |
tree | 4091b6a32a2dc5934d1fc921d8bb96d7503850c8 | |
parent | f94490842a98aca4c228a2f7274cbbe0df02b6ce (diff) | |
download | libvirt-ci-45a43031aba750ec1de0cf3f9fd733bc807409ba.zip libvirt-ci-45a43031aba750ec1de0cf3f9fd733bc807409ba.tar.gz libvirt-ci-45a43031aba750ec1de0cf3f9fd733bc807409ba.tar.bz2 |
install: Extract logic from 'from_vendor_image' to '_from_image'
Future patches will introduce support for instantiating custom template
images which will share most of the logic with the vendor cloud image
scenario so extract the common logic into a private helper.
Signed-off-by: Erik Skultety <eskultet@redhat.com>
-rw-r--r-- | lcitool/install/install.py | 73 |
1 files changed, 39 insertions, 34 deletions
diff --git a/lcitool/install/install.py b/lcitool/install/install.py index 16e4924..68449e6 100644 --- a/lcitool/install/install.py +++ b/lcitool/install/install.py @@ -57,10 +57,6 @@ class VirtInstall: def from_vendor_image(cls, name, config, facts, force_download=False): """ Shortcut constructor for a cloud-init image-based installation. """ - runner = cls(name, facts) - - conf_size = config.values["install"]["disk_size"] - conf_pool = config.values["install"]["storage_pool"] arch = config.values["install"]["arch"] target = facts["target"] @@ -73,36 +69,8 @@ class VirtInstall: if image.path is None or force_download: image.download() - # Dump the edited cloud-init template for virt-install to use - ssh_keypair = util.SSHKeyPair(config.values["install"]["ssh_key"]) - ssh_pubkey_str = str(ssh_keypair.public_key) - cloud_config = CloudConfig(ssh_authorized_keys=[ssh_pubkey_str]) - with NamedTemporaryFile("w", - prefix="cloud_init_", - suffix=".conf", - dir=util.get_temp_dir(), - delete=False) as fd: - - fd.write(cloud_config.dump()) - runner.args.extend(["--cloud-init", f"user-data={fd.name}"]) - - baseimg_path = image.path.as_posix() - disk_arg = (f"size={conf_size}," - f"pool={conf_pool}," - f"backing_store={baseimg_path}," - f"bus=virtio") - - runner.args.extend(["--import", - "--disk", disk_arg]) - runner.args.extend(runner._get_common_args(config)) - - # NOTE: URL installs wait by connecting to a serial console which kills - # any automation needs, so we don't want that here and instead always - # pass --noautoconsole and set an SSH wait callback. - runner.args.append("--noautoconsole") - runner._ssh_keypair = ssh_keypair - runner._wait_callback = runner._ssh_wait_cb - return runner + runner = cls(name, facts) + return cls._from_image(runner, config, image.path) def __init__(self, name, facts): """ @@ -137,6 +105,43 @@ class VirtInstall: return " ".join([self._cmd] + self.args) @staticmethod + def _from_image(runner, config, baseimg_path, **kwargs): + + conf_size = config.values["install"]["disk_size"] + conf_pool = config.values["install"]["storage_pool"] + + # Dump the edited cloud-init template for virt-install to use + ssh_keypair = util.SSHKeyPair(config.values["install"]["ssh_key"]) + ssh_pubkey_str = str(ssh_keypair.public_key) + cloud_config = CloudConfig(ssh_authorized_keys=[ssh_pubkey_str]) + with NamedTemporaryFile("w", + prefix="cloud_init_", + suffix=".conf", + dir=util.get_temp_dir(), + delete=False) as fd: + + fd.write(cloud_config.dump()) + runner.args.extend(["--cloud-init", f"user-data={fd.name}"]) + + baseimg_path_str = baseimg_path.as_posix() + disk_arg = (f"size={conf_size}," + f"pool={conf_pool}," + f"backing_store={baseimg_path_str}," + f"bus=virtio") + + runner.args.extend(["--import", + "--disk", disk_arg]) + runner.args.extend(runner._get_common_args(config)) + + # NOTE: URL installs wait by connecting to a serial console which kills + # any automation needs, so we don't want that here and instead always + # pass --noautoconsole and set an SSH wait callback. + runner.args.append("--noautoconsole") + runner._ssh_keypair = ssh_keypair + runner._wait_callback = runner._ssh_wait_cb + return runner + + @staticmethod def _get_common_args(config): # Both memory size and disk size are stored as GiB in the |