nuageinit: implement packages
Installs a list of packages Sponsored by: OVHCloud
This commit is contained in:
committed by
Baptiste Daroussin
parent
43b82d69b2
commit
076fec1b88
@@ -362,6 +362,9 @@ local function chpasswd(obj)
|
||||
end
|
||||
|
||||
local function pkg_bootstrap()
|
||||
if os.getenv("NUAGE_RUN_TESTS") then
|
||||
return true
|
||||
end
|
||||
if os.execute("pkg -N 2>/dev/null") then
|
||||
return true
|
||||
end
|
||||
@@ -369,6 +372,22 @@ local function pkg_bootstrap()
|
||||
return os.execute("env ASSUME_ALWAYS_YES=YES pkg bootstrap")
|
||||
end
|
||||
|
||||
local function install_package(package)
|
||||
if package == nil then
|
||||
return true
|
||||
end
|
||||
local install_cmd = "pkg install -y " .. package
|
||||
local test_cmd = "pkg info -q " .. package
|
||||
if os.getenv("NUAGE_RUN_TESTS") then
|
||||
print(install_cmd)
|
||||
print(test_cmd)
|
||||
return true
|
||||
end
|
||||
if os.execute(test_cmd) then
|
||||
return true
|
||||
end
|
||||
return os.execute(install_cmd)
|
||||
end
|
||||
|
||||
local n = {
|
||||
warn = warnmsg,
|
||||
@@ -381,7 +400,8 @@ local n = {
|
||||
addsshkey = addsshkey,
|
||||
update_sshd_config = update_sshd_config,
|
||||
chpasswd = chpasswd,
|
||||
pkg_bootstrap = pkg_bootstrap
|
||||
pkg_bootstrap = pkg_bootstrap,
|
||||
install_package = install_package
|
||||
}
|
||||
|
||||
return n
|
||||
|
||||
@@ -69,6 +69,22 @@ local function get_ifaces()
|
||||
return myifaces
|
||||
end
|
||||
|
||||
local function install_packages(packages)
|
||||
if not nuage.pkg_bootstrap() then
|
||||
nuage.warn("Failed to bootstrap pkg, skip installing packages")
|
||||
return
|
||||
end
|
||||
for n, p in pairs(packages) do
|
||||
if type(p) == "string" then
|
||||
if not nuage.install_package(p) then
|
||||
nuage.warn("Failed to install : " .. p)
|
||||
end
|
||||
else
|
||||
nuage.warn("Invalid type : " .. type(p) .. " for packages entry number " .. n)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function config2_network(p)
|
||||
local parser = ucl.parser()
|
||||
local f = io.open(p .. "/network_data.json")
|
||||
@@ -370,6 +386,9 @@ if line == "#cloud-config" then
|
||||
end
|
||||
end
|
||||
end
|
||||
if obj.packages then
|
||||
install_packages(obj.packages)
|
||||
end
|
||||
else
|
||||
local res, err = os.execute(path .. "/" .. ud)
|
||||
if not res then
|
||||
|
||||
@@ -24,6 +24,7 @@ atf_test_case nocloud_userdata_cloudconfig_chpasswd
|
||||
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
|
||||
|
||||
setup_test_adduser()
|
||||
{
|
||||
@@ -736,6 +737,48 @@ EOF
|
||||
atf_check -s exit:0 -o inline:"FreeBSD\n" cat "${PWD}"/media/nuageinit/runcmd_uname
|
||||
}
|
||||
|
||||
config2_userdata_packages_head()
|
||||
{
|
||||
atf_set "require.user" root
|
||||
}
|
||||
config2_userdata_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
|
||||
packages:
|
||||
EOF
|
||||
chmod 755 "${PWD}"/media/nuageinit/user_data
|
||||
atf_check -s exit:1 -e match:"attempt to index a nil value" /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2
|
||||
cat > media/nuageinit/user_data << 'EOF'
|
||||
#cloud-config
|
||||
packages:
|
||||
- yeah/plop
|
||||
EOF
|
||||
chmod 755 "${PWD}"/media/nuageinit/user_data
|
||||
atf_check -s exit:0 -o inline:"pkg install -y yeah/plop\npkg info -q yeah/plop\n" /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2
|
||||
|
||||
cat > media/nuageinit/user_data << 'EOF'
|
||||
#cloud-config
|
||||
packages:
|
||||
- curl
|
||||
EOF
|
||||
chmod 755 "${PWD}"/media/nuageinit/user_data
|
||||
atf_check -o inline:"pkg install -y curl\npkg info -q curl\n" /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2
|
||||
|
||||
cat > media/nuageinit/user_data << 'EOF'
|
||||
#cloud-config
|
||||
packages:
|
||||
- curl
|
||||
- meh: bla
|
||||
EOF
|
||||
chmod 755 "${PWD}"/media/nuageinit/user_data
|
||||
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
|
||||
}
|
||||
|
||||
atf_init_test_cases()
|
||||
{
|
||||
atf_add_test_case args
|
||||
@@ -756,4 +799,5 @@ atf_init_test_cases()
|
||||
atf_add_test_case nocloud_userdata_cloudconfig_chpasswd_list_string
|
||||
atf_add_test_case nocloud_userdata_cloudconfig_chpasswd_list_list
|
||||
atf_add_test_case config2_userdata_runcmd
|
||||
atf_add_test_case config2_userdata_packages
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user