nuageinit: readd ssh key parsing when key is in meta_data.json

in openstack when no user is specified but a sshkey is provided
the information is stored in meta_data.json under "public_keys"

PR:	280461
Reported by:	tdb

(cherry picked from commit 19fb9ad746517c7af9d79a982334b2550f285355)
This commit is contained in:
Baptiste Daroussin 2024-08-20 12:04:01 +02:00
parent 56c59177a1
commit 3a73c77f2d
2 changed files with 54 additions and 0 deletions

View file

@ -164,6 +164,12 @@ if citype == "config-2" then
nuage.err("nuageinit: error parsing config-2: meta_data.json: " .. err)
end
local obj = parser:get_object()
if obj.public_keys then
local homedir = nuage.adduser(default_user)
for _,v in pairs(obj.public_keys) do
nuage.addsshkey(homedir, v)
end
end
nuage.sethostname(obj["hostname"])
-- network

View file

@ -8,6 +8,7 @@ atf_test_case nocloud_network
atf_test_case config2
atf_test_case config2_pubkeys
atf_test_case config2_pubkeys_user_data
atf_test_case config2_pubkeys_meta_data
atf_test_case config2_network
atf_test_case config2_network_static_v4
@ -242,6 +243,52 @@ EOF
atf_check -o inline:"ssh-rsa AAAAB3NzaC1y...== Generated by Nova\n" cat home/freebsd/.ssh/authorized_keys
}
config2_pubkeys_meta_data_body()
{
here=$(pwd)
export NUAGE_FAKE_ROOTDIR=$(pwd)
if [ $(id -u) -ne 0 ]; then
atf_skip "root required"
fi
mkdir -p media/nuageinit
cat > media/nuageinit/meta_data.json <<EOF
{
"uuid": "uuid_for_this_instance",
"admin_pass": "a_generated_password",
"public_keys": {
"tdb": "ssh-ed25519 my_key_id tdb@host"
},
"keys": [
{
"name": "tdb",
"type": "ssh",
"data": "ssh-ed25519 my_key_id tdb@host"
}
],
"hostname": "freebsd-14-test.novalocal",
"name": "freebsd-14-test",
"launch_index": 0,
"availability_zone": "nova",
"random_seed": "long_random_seed",
"project_id": "my_project_id",
"devices": [],
"dedicated_cpus": []
}
EOF
mkdir -p etc
cat > etc/master.passwd <<EOF
root:*:0:0::0:0:Charlie &:/root:/bin/csh
sys:*:1:0::0:0:Sys:/home/sys:/bin/csh
EOF
pwd_mkdb -d etc ${here}/etc/master.passwd
cat > etc/group <<EOF
wheel:*:0:root
users:*:1:
EOF
atf_check /usr/libexec/nuageinit ${here}/media/nuageinit config-2
atf_check -o inline:"ssh-ed25519 my_key_id tdb@host\n" cat home/freebsd/.ssh/authorized_keys
}
config2_network_body() {
here=$(pwd)
mkdir -p media/nuageinit
@ -378,6 +425,7 @@ atf_init_test_cases()
atf_add_test_case config2
atf_add_test_case config2_pubkeys
atf_add_test_case config2_pubkeys_user_data
atf_add_test_case config2_pubkeys_meta_data
atf_add_test_case config2_network
atf_add_test_case config2_network_static_v4
}