nuageinit: more package related functions

Implement package_update and package_upgrade, which allows to launch
an update of the metadata and an upgrade of the packages.

Sponsored by:	OVHCloud
This commit is contained in:
Sebastien Baylocq
2025-06-06 18:24:48 +02:00
committed by Baptiste Daroussin
parent 076fec1b88
commit 682af9601a
3 changed files with 59 additions and 1 deletions
+19 -1
View File
@@ -389,6 +389,22 @@ local function install_package(package)
return os.execute(install_cmd)
end
local function run_pkg_cmd(subcmd)
local cmd = "pkg " .. subcmd .. " -y"
if os.getenv("NUAGE_RUN_TESTS") then
print(cmd)
return true
end
return os.execute(cmd)
end
local function update_packages()
return run_pkg_cmd("update")
end
local function upgrade_packages()
return run_pkg_cmd("upgrade")
end
local n = {
warn = warnmsg,
err = errmsg,
@@ -401,7 +417,9 @@ local n = {
update_sshd_config = update_sshd_config,
chpasswd = chpasswd,
pkg_bootstrap = pkg_bootstrap,
install_package = install_package
install_package = install_package,
update_packages = update_packages,
upgrade_packages = upgrade_packages
}
return n
+7
View File
@@ -389,6 +389,13 @@ if line == "#cloud-config" then
if obj.packages then
install_packages(obj.packages)
end
if obj.package_update then
nuage.update_packages()
end
if obj.package_upgrade then
nuage.upgrade_packages()
end
else
local res, err = os.execute(path .. "/" .. ud)
if not res then
+33
View File
@@ -25,6 +25,8 @@ atf_test_case nocloud_userdata_cloudconfig_chpasswd_list_string
atf_test_case nocloud_userdata_cloudconfig_chpasswd_list_list
atf_test_case config2_userdata_runcmd
atf_test_case config2_userdata_packages
atf_test_case config2_userdata_update_packages
atf_test_case config2_userdata_upgrade_packages
setup_test_adduser()
{
@@ -741,6 +743,7 @@ config2_userdata_packages_head()
{
atf_set "require.user" root
}
config2_userdata_packages_body()
{
mkdir -p media/nuageinit
@@ -779,6 +782,34 @@ EOF
atf_check -o inline:"pkg install -y curl\npkg info -q curl\n" -e inline:"nuageinit: Invalid type : table for packages entry number 2\n" /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2
}
config2_userdata_update_packages_body()
{
mkdir -p media/nuageinit
setup_test_adduser
export NUAGE_RUN_TESTS=1
printf "{}" > media/nuageinit/meta_data.json
cat > media/nuageinit/user_data << 'EOF'
#cloud-config
package_update: true
EOF
chmod 755 "${PWD}"/media/nuageinit/user_data
atf_check -o inline:"pkg update -y\n" /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2
}
config2_userdata_upgrade_packages_body()
{
mkdir -p media/nuageinit
setup_test_adduser
export NUAGE_RUN_TESTS=1
printf "{}" > media/nuageinit/meta_data.json
cat > media/nuageinit/user_data << 'EOF'
#cloud-config
package_upgrade: true
EOF
chmod 755 "${PWD}"/media/nuageinit/user_data
atf_check -o inline:"pkg upgrade -y\n" /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2
}
atf_init_test_cases()
{
atf_add_test_case args
@@ -800,4 +831,6 @@ atf_init_test_cases()
atf_add_test_case nocloud_userdata_cloudconfig_chpasswd_list_list
atf_add_test_case config2_userdata_runcmd
atf_add_test_case config2_userdata_packages
atf_add_test_case config2_userdata_update_packages
atf_add_test_case config2_userdata_upgrade_packages
}