From nobody Mon Jun 23 07:44:10 2025 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4bQg7v1km1z5yw2t; Mon, 23 Jun 2025 07:44:11 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R10" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4bQg7v0wq1z4CMf; Mon, 23 Jun 2025 07:44:11 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1750664651; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=J6qw0fMbeeVDRAmHAxtcbPwjGNDSzNI3L2Jb24fHv/s=; b=Orrjp+EQobaj1SplwzNiYmbTTk7PGzyHpPseEJU2Rf+o0sGi9OeEGveuJupuiuGhDjF8FQ bBfDAnY87LBV/f08arJuoMAIoXslg0NDX6syW/QP0/ymzk2xUZ8AL/DbpIp2Elzpu0km4m yW6J2b0jKrtdYAU3ohLpc0BQ8gG9xLZo1VvlpJ8ayx+91WzDBkP7MEvV0ckjtMtfojHY2q /AH/LWt2GQbzro01EL+JWgg1l6qThMYnSvvhV5S7WPDzrYmGxhJiwTQ7X0H06Lrg70Hmvq 0l32RM7RnL2a3QhgPtRW68on3usPfHXAca8qWGUnCGH7JkrHR/1aq07XQXLa2Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1750664651; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=J6qw0fMbeeVDRAmHAxtcbPwjGNDSzNI3L2Jb24fHv/s=; b=nqVbZGepEaP1LUZ+D8SU4+NHkzB1JAx0RM18DJsL/e+b2g+ZjZy39LFEApiD3Ivv9Npxae 3u6SdYNrptiyDjJE8+7VX5q7fgCOxR5Y3+b7RMCquOYHRoRRPQqOH5cbs9xlPnf7TQVeNJ PevF0675Ah+Im/mgpcKOrYIb+OuTiq87S5lStS0nZDVp6bYfmjg8ExGY6Jj9wcQa10msZy OnJq4Olsn0gYpplkVuXzHqxLxJMIeuTts0FelyJPRy0egF4BEJvhtlJqZiKeH0bumIi9Kh Lz9GDmyNjRc1YwHUvGfXJE+k+jzROH7wQxixB85SD0vjJv3agYO1EY1desNknA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1750664651; a=rsa-sha256; cv=none; b=mIK62iby9BsHQjeyp7Of6d8BbaGuNezC9EhDIJ6XElgH966Nf5mt5LQw3+N3uYdFS4q4PV 0/cRPq7YsS/qybRXG/jZlNB2O/vbbdeLXam8cOEV71jIBjaFbNc2wM92cNahh4Kw0z9Xfu CzyLD6TosRsXDV5pSmznS7xrLX9049fMs2mT5bMUJGeTL7GvjsG9975FzSDaEFS/ySqef4 KyzboMTyi2eJQWNKCU6R6hGXA1n/xnEbKECVHROph2G/7aQ0gz3jLi2o5BMvADqzftllaP I0i8dOF4ghfZ5+2zlQMC9siPjbA53ZbC4JO/txou1nmDnek2MWCG59uA7XYZbQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4bQg7v06V8ztlB; Mon, 23 Jun 2025 07:44:11 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 55N7iAkL067222; Mon, 23 Jun 2025 07:44:10 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 55N7iA9U067219; Mon, 23 Jun 2025 07:44:10 GMT (envelope-from git) Date: Mon, 23 Jun 2025 07:44:10 GMT Message-Id: <202506230744.55N7iA9U067219@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Baptiste Daroussin Subject: git: 27522eaa4c0c - stable/14 - nuageinit: implement packages List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: bapt X-Git-Repository: src X-Git-Refname: refs/heads/stable/14 X-Git-Reftype: branch X-Git-Commit: 27522eaa4c0cb4bc1348fd212ee79449e5da79bd Auto-Submitted: auto-generated The branch stable/14 has been updated by bapt: URL: https://cgit.FreeBSD.org/src/commit/?id=27522eaa4c0cb4bc1348fd212ee79449e5da79bd commit 27522eaa4c0cb4bc1348fd212ee79449e5da79bd Author: Sebastien Baylocq AuthorDate: 2025-06-06 09:49:56 +0000 Commit: Baptiste Daroussin CommitDate: 2025-06-23 07:43:12 +0000 nuageinit: implement packages Installs a list of packages Sponsored by: OVHCloud (cherry picked from commit 076fec1b88de8e14f370127cc4aeaa737eda92a8) --- libexec/nuageinit/nuage.lua | 22 +++++++++++++++++- libexec/nuageinit/nuageinit | 19 ++++++++++++++++ libexec/nuageinit/tests/nuageinit.sh | 44 ++++++++++++++++++++++++++++++++++++ 3 files changed, 84 insertions(+), 1 deletion(-) diff --git a/libexec/nuageinit/nuage.lua b/libexec/nuageinit/nuage.lua index addab5419193..0fe7400c2bbc 100644 --- a/libexec/nuageinit/nuage.lua +++ b/libexec/nuageinit/nuage.lua @@ -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 diff --git a/libexec/nuageinit/nuageinit b/libexec/nuageinit/nuageinit index ef215af00924..ef5726960978 100755 --- a/libexec/nuageinit/nuageinit +++ b/libexec/nuageinit/nuageinit @@ -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 diff --git a/libexec/nuageinit/tests/nuageinit.sh b/libexec/nuageinit/tests/nuageinit.sh index 06f4a12d7503..e8742be3ba51 100644 --- a/libexec/nuageinit/tests/nuageinit.sh +++ b/libexec/nuageinit/tests/nuageinit.sh @@ -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 }