Skip to content

Commit

Permalink
osmorphing: Check installed packages before installing packages
Browse files Browse the repository at this point in the history
  • Loading branch information
Cristi1324 committed Aug 29, 2024
1 parent 24c52ea commit 68cc19b
Show file tree
Hide file tree
Showing 7 changed files with 43 additions and 2 deletions.
13 changes: 13 additions & 0 deletions coriolis/osmorphing/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,10 @@ def check_os_supported(cls, detected_os_info):
"OS compatibility check not implemented for tools class %s" % (
cls.__name__))

@abc.abstractmethod
def check_installed_package(self, package_name):
pass

@abc.abstractmethod
def set_net_config(self, nics_info, dhcp):
pass
Expand Down Expand Up @@ -189,6 +193,15 @@ def _version_supported_util(cls, version, minimum, maximum=None):

return True

def check_installed_packages(self, package_names):
packages = []
for package_name in package_names:
if not self.check_installed_package(package_name):
packages.append(package_name)
LOG.info("Packages already installed: %s" %
str(set(package_names) - set(packages)))
return packages

def get_packages(self):
k_add = [h for h in self._packages.keys() if
h is None or h == self._hypervisor]
Expand Down
3 changes: 3 additions & 0 deletions coriolis/osmorphing/coreos.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@ def check_os_supported(cls, detected_os_info):
return True
return False

def check_installed_package(self, package_name):
pass

def disable_predictable_nic_names(self):
pass

Expand Down
8 changes: 8 additions & 0 deletions coriolis/osmorphing/debian.py
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,14 @@ def set_net_config(self, nics_info, dhcp):
cfg_name = "%s/coriolis_netplan.yaml" % netplan_base
self._write_file_sudo(cfg_name, new_cfg)

def check_installed_package(self, package_name):
cmd = 'dpkg-query -W %s' % ("".join(package_name))
try:
self._exec_cmd_chroot(cmd)
return True
except exception.CoriolisException:
return False

def pre_packages_install(self, package_names):
super(BaseDebianMorphingTools, self).pre_packages_install(
package_names)
Expand Down
4 changes: 4 additions & 0 deletions coriolis/osmorphing/manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -239,6 +239,10 @@ def morph_image(origin_provider, destination_provider, connection_info,
LOG.info("Post packages uninstall")
export_os_morphing_tools.post_packages_uninstall(packages_remove)

LOG.info("Checking for packages already installed")
packages_add = import_os_morphing_tools.check_installed_packages(
packages_add)

LOG.info("Pre packages install")
import_os_morphing_tools.pre_packages_install(packages_add)

Expand Down
3 changes: 3 additions & 0 deletions coriolis/osmorphing/openwrt.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,9 @@ def check_os_supported(cls, detected_os_info):
return True
return False

def check_installed_package(self, package_name):
pass

def disable_predictable_nic_names(self):
pass

Expand Down
4 changes: 2 additions & 2 deletions coriolis/osmorphing/redhat.py
Original file line number Diff line number Diff line change
Expand Up @@ -209,7 +209,7 @@ def set_net_config(self, nics_info, dhcp):
mac_addresses)
self._add_net_udev_rules(net_ifaces_info)

def _has_package_installed(self, package_name):
def check_installed_package(self, package_name):
cmd = 'rpm -q %s' % ("".join(package_name))
try:
self._exec_cmd_chroot(cmd)
Expand Down Expand Up @@ -295,7 +295,7 @@ def pre_packages_install(self, package_names):
super(BaseRedHatMorphingTools, self).pre_packages_install(
package_names)
self._yum_clean_all()
if not self._has_package_installed('grubby'):
if not self.check_installed_package('grubby'):
self._yum_install(['grubby'])
else:
LOG.debug("Skipping package 'grubby' as it's already installed")
Expand Down
10 changes: 10 additions & 0 deletions coriolis/osmorphing/suse.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,16 @@ def set_net_config(self, nics_info, dhcp):
# TODO(alexpilotti): add networking support
pass

def check_installed_package(self, package_name):
cmd = 'zypper search -i %s' % ("".join(package_name))
try:
self._exec_cmd_chroot(cmd)
return True
except exception.CoriolisException:
LOG.warning(f"Package ${package_name} is not installed")
LOG.trace(utils.get_exception_details())
return False

def get_update_grub2_command(self):
location = self._get_grub2_cfg_location()
return "grub2-mkconfig -o %s" % location
Expand Down

0 comments on commit 68cc19b

Please sign in to comment.