diff --git a/cloudinit/distros/bsd.py b/cloudinit/distros/bsd.py index efc73d5d21d4..8dbcaf247e6f 100644 --- a/cloudinit/distros/bsd.py +++ b/cloudinit/distros/bsd.py @@ -18,6 +18,7 @@ class BSD(distros.Distro): group_add_cmd_prefix = [] pkg_cmd_install_prefix = [] pkg_cmd_remove_prefix = [] + pkg_cmd_upgrade_prefix = [] # There is no need to update the package cache on NetBSD and OpenBSD # TODO neither freebsd nor netbsd handles a command 'upgrade' pkg_cmd_update_prefix = None @@ -97,6 +98,10 @@ def package_command(self, command, args=None, pkgs=None): if not self.pkg_cmd_update_prefix: return cmd = self.pkg_cmd_update_prefix + elif command == 'upgrade': + if not self.pkg_cmd_upgrade_prefix: + return + cmd = self.pkg_cmd_upgrade_prefix if args and isinstance(args, str): cmd.append(args) diff --git a/cloudinit/distros/freebsd.py b/cloudinit/distros/freebsd.py index 71a6195b4eaa..b3a4ad67b2f9 100644 --- a/cloudinit/distros/freebsd.py +++ b/cloudinit/distros/freebsd.py @@ -25,6 +25,7 @@ class Distro(cloudinit.distros.bsd.BSD): pkg_cmd_install_prefix = ["pkg", "install"] pkg_cmd_remove_prefix = ["pkg", "remove"] pkg_cmd_update_prefix = ["pkg", "update"] + pkg_cmd_upgrade_prefix = ["pkg", "upgrade"] def _select_hostname(self, hostname, fqdn): # Should be FQDN if available. See rc.conf(5) in FreeBSD diff --git a/cloudinit/distros/netbsd.py b/cloudinit/distros/netbsd.py index 6ae60943687d..fe1c8ec00899 100644 --- a/cloudinit/distros/netbsd.py +++ b/cloudinit/distros/netbsd.py @@ -21,10 +21,18 @@ class NetBSD(cloudinit.distros.bsd.BSD): """ ci_sudoers_fn = '/usr/pkg/etc/sudoers.d/90-cloud-init-users' - group_add_cmd_prefix = ["groupadd"] - pkg_cmd_install_prefix = ["pkg_add", "-U"] - pkg_cmd_remove_prefix = ['pkg_delete'] + + def __init__(self, name, cfg, paths): + super().__init__(name, cfg, paths) + if os.path.exists("/usr/pkg/bin/pkgin"): + self.pkg_cmd_install_prefix = ['pkgin', '-y', 'install'] + self.pkg_cmd_remove_prefix = ['pkgin', '-y', 'remove'] + self.pkg_cmd_remove_prefix = ['pkgin', '-y', 'update'] + self.pkg_cmd_upgrade_prefix = ['pkgin', '-y', 'full-upgrade'] + else: + self.pkg_cmd_install_prefix = ['pkg_add', '-U'] + self.pkg_cmd_remove_prefix = ['pkg_delete'] def _get_add_member_to_group_cmd(self, member_name, group_name): return ['usermod', '-G', group_name, member_name]