1#- 2# Copyright (c) 2022 Baptiste Daroussin <bapt@FreeBSD.org> 3# 4# SPDX-License-Identifier: BSD-2-Clause 5# 6 7export NUAGE_FAKE_ROOTDIR="$PWD" 8 9atf_test_case args 10atf_test_case nocloud 11atf_test_case nocloud_userdata_script 12atf_test_case nocloud_user_data_script 13atf_test_case nocloud_userdata_cloudconfig_users 14atf_test_case nocloud_network 15atf_test_case config2 16atf_test_case config2_pubkeys 17atf_test_case config2_pubkeys_user_data 18atf_test_case config2_pubkeys_meta_data 19atf_test_case config2_network 20atf_test_case config2_network_static_v4 21atf_test_case config2_ssh_keys 22atf_test_case nocloud_userdata_cloudconfig_ssh_pwauth 23atf_test_case nocloud_userdata_cloudconfig_chpasswd 24atf_test_case nocloud_userdata_cloudconfig_chpasswd_list_string 25atf_test_case nocloud_userdata_cloudconfig_chpasswd_list_list 26 27args_body() 28{ 29 atf_check -s exit:1 -e inline:"Usage: /usr/libexec/nuageinit <cloud-init-directory> (<config-2> | <nocloud>)\n" /usr/libexec/nuageinit 30 atf_check -s exit:1 -e inline:"Usage: /usr/libexec/nuageinit <cloud-init-directory> (<config-2> | <nocloud>)\n" /usr/libexec/nuageinit bla 31 atf_check -s exit:1 -e inline:"Usage: /usr/libexec/nuageinit <cloud-init-directory> (<config-2> | <nocloud>)\n" /usr/libexec/nuageinit bla meh plop 32 atf_check -s exit:1 -e inline:"nuageinit: Unknown cloud init type: meh\n" /usr/libexec/nuageinit bla meh 33} 34 35nocloud_body() 36{ 37 mkdir -p media/nuageinit 38 atf_check -s exit:1 -e match:"nuageinit: error parsing nocloud.*" /usr/libexec/nuageinit "${PWD}"/media/nuageinit/ nocloud 39 printf "instance-id: iid-local01\nlocal-hostname: cloudimg\n" > "${PWD}"/media/nuageinit/meta-data 40 atf_check -s exit:0 /usr/libexec/nuageinit "${PWD}"/media/nuageinit nocloud 41 atf_check -o inline:"hostname=\"cloudimg\"\n" cat etc/rc.conf.d/hostname 42 cat > media/nuageinit/meta-data << EOF 43instance-id: iid-local01 44hostname: myhost 45EOF 46 atf_check -s exit:0 /usr/libexec/nuageinit "${PWD}"/media/nuageinit nocloud 47 atf_check -o inline:"hostname=\"myhost\"\n" cat etc/rc.conf.d/hostname 48} 49 50nocloud_userdata_script_body() 51{ 52 mkdir -p media/nuageinit 53 printf "instance-id: iid-local01\n" > "${PWD}"/media/nuageinit/meta-data 54 printf "#!/bin/sh\necho yeah\n" > "${PWD}"/media/nuageinit/user-data 55 chmod 755 "${PWD}"/media/nuageinit/user-data 56 atf_check -s exit:0 -o inline:"yeah\n" /usr/libexec/nuageinit "${PWD}"/media/nuageinit nocloud 57} 58 59nocloud_user_data_script_body() 60{ 61 mkdir -p media/nuageinit 62 printf "instance-id: iid-local01\n" > "${PWD}"/media/nuageinit/meta-data 63 printf "#!/bin/sh\necho yeah\n" > "${PWD}"/media/nuageinit/user_data 64 chmod 755 "${PWD}"/media/nuageinit/user_data 65 atf_check -s exit:0 -o inline:"yeah\n" /usr/libexec/nuageinit "${PWD}"/media/nuageinit nocloud 66} 67 68nocloud_userdata_cloudconfig_users_head() 69{ 70 atf_set "require.user" root 71} 72nocloud_userdata_cloudconfig_users_body() 73{ 74 mkdir -p media/nuageinit 75 printf "instance-id: iid-local01\n" > "${PWD}"/media/nuageinit/meta-data 76 mkdir -p etc 77 cat > etc/master.passwd << EOF 78root:*:0:0::0:0:Charlie &:/root:/bin/sh 79sys:*:1:0::0:0:Sys:/home/sys:/bin/sh 80EOF 81 pwd_mkdb -d etc "${PWD}"/etc/master.passwd 82 cat > etc/group << EOF 83wheel:*:0:root 84users:*:1: 85EOF 86 cat > media/nuageinit/user-data << 'EOF' 87#cloud-config 88groups: 89 - admingroup: [root,sys] 90 - cloud-users 91users: 92 - default 93 - name: foobar 94 gecos: Foo B. Bar 95 primary_group: foobar 96 groups: users 97 passwd: $6$j212wezy$7H/1LT4f9/N3wpgNunhsIqtMj62OKiS3nyNwuizouQc3u7MbYCarYeAHWYPYb2FT.lbioDm2RrkJPb9BZMN1O/ 98EOF 99 atf_check /usr/libexec/nuageinit "${PWD}"/media/nuageinit nocloud 100 cat > expectedgroup << EOF 101wheel:*:0:root,freebsd 102users:*:1:foobar 103admingroup:*:1001:root,sys 104cloud-users:*:1002: 105freebsd:*:1003: 106foobar:*:1004: 107EOF 108 cat > expectedpasswd << 'EOF' 109root:*:0:0::0:0:Charlie &:/root:/bin/sh 110sys:*:1:0::0:0:Sys:/home/sys:/bin/sh 111freebsd:freebsd:1001:1003::0:0:FreeBSD User:/home/freebsd:/bin/sh 112foobar:$6$j212wezy$7H/1LT4f9/N3wpgNunhsIqtMj62OKiS3nyNwuizouQc3u7MbYCarYeAHWYPYb2FT.lbioDm2RrkJPb9BZMN1O/:1002:1004::0:0:Foo B. Bar:/home/foobar:/bin/sh 113EOF 114 sed -i "" "s/freebsd:.*:1001/freebsd:freebsd:1001/" "${PWD}"/etc/master.passwd 115 atf_check -o file:expectedpasswd cat "${PWD}"/etc/master.passwd 116 atf_check -o file:expectedgroup cat "${PWD}"/etc/group 117} 118 119nocloud_network_head() 120{ 121 atf_set "require.user" root 122} 123nocloud_network_body() 124{ 125 mkdir -p media/nuageinit 126 mkdir -p etc 127 cat > etc/master.passwd << EOF 128root:*:0:0::0:0:Charlie &:/root:/bin/sh 129sys:*:1:0::0:0:Sys:/home/sys:/bin/sh 130EOF 131 pwd_mkdb -d etc "${PWD}"/etc/master.passwd 132 cat > etc/group << EOF 133wheel:*:0:root 134users:*:1: 135EOF 136 mynetworks=$(ifconfig -l ether) 137 if [ -z "$mynetworks" ]; then 138 atf_skip "a network interface is needed" 139 fi 140 set -- $mynetworks 141 myiface=$1 142 myaddr=$(ifconfig $myiface ether | awk '/ether/ { print $2 }') 143 printf "instance-id: iid-local01\n" > "${PWD}"/media/nuageinit/meta-data 144 cat > media/nuageinit/user-data << EOF 145#cloud-config 146network: 147 version: 2 148 ethernets: 149 # opaque ID for physical interfaces, only referred to by other stanzas 150 id0: 151 match: 152 macaddress: "$myaddr" 153 addresses: 154 - 192.0.2.2/24 155 - 2001:db8::2/64 156 gateway4: 192.0.2.1 157 gateway6: 2001:db8::1 158EOF 159 atf_check /usr/libexec/nuageinit "${PWD}"/media/nuageinit nocloud 160 cat > network << EOF 161ifconfig_${myiface}="inet 192.0.2.2/24" 162ifconfig_${myiface}_ipv6="inet6 2001:db8::2/64" 163ipv6_network_interfaces="${myiface}" 164ipv6_default_interface="${myiface}" 165EOF 166 cat > routing << EOF 167defaultrouter="192.0.2.1" 168ipv6_defaultrouter="2001:db8::1" 169ipv6_route_${myiface}="2001:db8::1 -prefixlen 128 -interface ${myiface}" 170EOF 171 atf_check -o file:network cat "${PWD}"/etc/rc.conf.d/network 172 atf_check -o file:routing cat "${PWD}"/etc/rc.conf.d/routing 173} 174 175config2_body() 176{ 177 mkdir -p media/nuageinit 178 atf_check -s exit:1 -e match:"nuageinit: error parsing config-2 meta_data.json:.*" /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2 179 printf "{}" > media/nuageinit/meta_data.json 180 atf_check /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2 181 cat > media/nuageinit/meta_data.json << EOF 182{ 183 "hostname": "cloudimg" 184} 185EOF 186 atf_check /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2 187 atf_check -o inline:"hostname=\"cloudimg\"\n" cat etc/rc.conf.d/hostname 188} 189 190config2_pubkeys_head() 191{ 192 atf_set "require.user" root 193} 194config2_pubkeys_body() 195{ 196 mkdir -p media/nuageinit 197 touch media/nuageinit/meta_data.json 198 cat > media/nuageinit/user-data << EOF 199#cloud-config 200ssh_authorized_keys: 201 - "ssh-rsa AAAAB3NzaC1y...== Generated by Nova" 202EOF 203 mkdir -p etc 204 cat > etc/master.passwd << EOF 205root:*:0:0::0:0:Charlie &:/root:/bin/sh 206sys:*:1:0::0:0:Sys:/home/sys:/bin/sh 207EOF 208 pwd_mkdb -d etc "${PWD}"/etc/master.passwd 209 cat > etc/group << EOF 210wheel:*:0:root 211users:*:1: 212EOF 213 atf_check /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2 214 atf_check -o inline:"ssh-rsa AAAAB3NzaC1y...== Generated by Nova\n" cat home/freebsd/.ssh/authorized_keys 215} 216 217config2_pubkeys_user_data_head() 218{ 219 atf_set "require.user" root 220} 221config2_pubkeys_user_data_body() 222{ 223 mkdir -p media/nuageinit 224 touch media/nuageinit/meta_data.json 225 cat > media/nuageinit/user_data << EOF 226#cloud-config 227ssh_authorized_keys: 228 - "ssh-rsa AAAAB3NzaC1y...== Generated by Nova" 229EOF 230 mkdir -p etc 231 cat > etc/master.passwd << EOF 232root:*:0:0::0:0:Charlie &:/root:/bin/sh 233sys:*:1:0::0:0:Sys:/home/sys:/bin/sh 234EOF 235 pwd_mkdb -d etc "${PWD}"/etc/master.passwd 236 cat > etc/group << EOF 237wheel:*:0:root 238users:*:1: 239EOF 240 atf_check /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2 241 atf_check -o inline:"ssh-rsa AAAAB3NzaC1y...== Generated by Nova\n" cat home/freebsd/.ssh/authorized_keys 242} 243 244config2_pubkeys_meta_data_body() 245{ 246 here=$(pwd) 247 export NUAGE_FAKE_ROOTDIR=$(pwd) 248 if [ $(id -u) -ne 0 ]; then 249 atf_skip "root required" 250 fi 251 mkdir -p media/nuageinit 252 cat > media/nuageinit/meta_data.json << EOF 253{ 254 "uuid": "uuid_for_this_instance", 255 "admin_pass": "a_generated_password", 256 "public_keys": { 257 "tdb": "ssh-ed25519 my_key_id tdb@host" 258 }, 259 "keys": [ 260 { 261 "name": "tdb", 262 "type": "ssh", 263 "data": "ssh-ed25519 my_key_id tdb@host" 264 } 265 ], 266 "hostname": "freebsd-14-test.novalocal", 267 "name": "freebsd-14-test", 268 "launch_index": 0, 269 "availability_zone": "nova", 270 "random_seed": "long_random_seed", 271 "project_id": "my_project_id", 272 "devices": [], 273 "dedicated_cpus": [] 274} 275EOF 276 mkdir -p etc 277 cat > etc/master.passwd << EOF 278root:*:0:0::0:0:Charlie &:/root:/bin/csh 279sys:*:1:0::0:0:Sys:/home/sys:/bin/csh 280EOF 281 pwd_mkdb -d etc ${here}/etc/master.passwd 282 cat > etc/group << EOF 283wheel:*:0:root 284users:*:1: 285EOF 286 atf_check /usr/libexec/nuageinit ${here}/media/nuageinit config-2 287 atf_check -o inline:"ssh-ed25519 my_key_id tdb@host\n" cat home/freebsd/.ssh/authorized_keys 288} 289 290config2_network_body() 291{ 292 mkdir -p media/nuageinit 293 printf "{}" > media/nuageinit/meta_data.json 294 mynetworks=$(ifconfig -l ether) 295 if [ -z "$mynetworks" ]; then 296 atf_skip "a network interface is needed" 297 fi 298 set -- $mynetworks 299 myiface=$1 300 myaddr=$(ifconfig $myiface ether | awk '/ether/ { print $2 }') 301cat > media/nuageinit/network_data.json << EOF 302{ 303 "links": [ 304 { 305 "ethernet_mac_address": "$myaddr", 306 "id": "iface0", 307 "mtu": null 308 } 309 ], 310 "networks": [ 311 { 312 "id": "network0", 313 "link": "iface0", 314 "type": "ipv4_dhcp" 315 }, 316 { // IPv6 317 "id": "private-ipv4", 318 "type": "ipv6", 319 "link": "iface0", 320 // supports condensed IPv6 with CIDR netmask 321 "ip_address": "2001:db8::3257:9652/64", 322 "gateway": "fd00::1", 323 "routes": [ 324 { 325 "network": "::", 326 "netmask": "::", 327 "gateway": "fd00::1" 328 }, 329 { 330 "network": "::", 331 "netmask": "ffff:ffff:ffff::", 332 "gateway": "fd00::1:1" 333 } 334 ], 335 "network_id": "da5bb487-5193-4a65-a3df-4a0055a8c0d8" 336 } 337 ] 338} 339EOF 340 atf_check /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2 341 cat > network << EOF 342ifconfig_${myiface}="DHCP" 343ifconfig_${myiface}_ipv6="inet6 2001:db8::3257:9652/64" 344ipv6_network_interfaces="${myiface}" 345ipv6_default_interface="${myiface}" 346EOF 347 cat > routing << EOF 348ipv6_defaultrouter="fd00::1" 349ipv6_route_${myiface}="fd00::1 -prefixlen 128 -interface ${myiface}" 350ipv6_static_routes="${myiface}" 351EOF 352 atf_check -o file:network cat "${PWD}"/etc/rc.conf.d/network 353 atf_check -o file:routing cat "${PWD}"/etc/rc.conf.d/routing 354} 355 356config2_network_static_v4_body() 357{ 358 mkdir -p media/nuageinit 359 printf "{}" > media/nuageinit/meta_data.json 360 mynetworks=$(ifconfig -l ether) 361 if [ -z "$mynetworks" ]; then 362 atf_skip "a network interface is needed" 363 fi 364 set -- $mynetworks 365 myiface=$1 366 myaddr=$(ifconfig $myiface ether | awk '/ether/ { print $2 }') 367cat > media/nuageinit/network_data.json << EOF 368{ 369 "links": [ 370 { 371 "ethernet_mac_address": "$myaddr", 372 "id": "iface0", 373 "mtu": null 374 } 375 ], 376 "networks": [ 377 { 378 "id": "network0", 379 "link": "iface0", 380 "type": "ipv4", 381 "ip_address": "10.184.0.244", 382 "netmask": "255.255.240.0", 383 "routes": [ 384 { 385 "network": "10.0.0.0", 386 "netmask": "255.0.0.0", 387 "gateway": "11.0.0.1" 388 }, 389 { 390 "network": "0.0.0.0", 391 "netmask": "0.0.0.0", 392 "gateway": "23.253.157.1" 393 } 394 ] 395 } 396 ] 397} 398EOF 399 atf_check /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2 400 cat > network << EOF 401ifconfig_${myiface}="inet 10.184.0.244 netmask 255.255.240.0" 402EOF 403 cat > routing << EOF 404route_cloudinit1_${myiface}="-net 10.0.0.0 11.0.0.1 255.0.0.0" 405defaultrouter="23.253.157.1" 406static_routes="cloudinit1_${myiface}" 407EOF 408 atf_check -o file:network cat "${PWD}"/etc/rc.conf.d/network 409 atf_check -o file:routing cat "${PWD}"/etc/rc.conf.d/routing 410} 411 412config2_ssh_keys_head() 413{ 414 atf_set "require.user" root 415} 416config2_ssh_keys_body() 417{ 418 here=$(pwd) 419 export NUAGE_FAKE_ROOTDIR=$(pwd) 420 mkdir -p media/nuageinit 421 touch media/nuageinit/meta_data.json 422 cat > media/nuageinit/user-data << EOF 423#cloud-config 424ssh_keys: 425 rsa_private: | 426 -----BEGIN RSA PRIVATE KEY----- 427 MIIBxwIBAAJhAKD0YSHy73nUgysO13XsJmd4fHiFyQ+00R7VVu2iV9Qco 428 ... 429 -----END RSA PRIVATE KEY----- 430 rsa_public: ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAGEAoPRhIfLvedSDKw7Xd ... 431 ed25519_private: | 432 -----BEGIN OPENSSH PRIVATE KEY----- 433 blabla 434 ... 435 -----END OPENSSH PRIVATE KEY----- 436 ed25519_public: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIK+MH4E8KO32N5CXRvXVqvyZVl0+6ue4DobdhU0FqFd+ 437EOF 438 mkdir -p etc/ssh 439 cat > etc/master.passwd << EOF 440root:*:0:0::0:0:Charlie &:/root:/bin/csh 441sys:*:1:0::0:0:Sys:/home/sys:/bin/csh 442EOF 443 pwd_mkdb -d etc ${here}/etc/master.passwd 444 cat > etc/group << EOF 445wheel:*:0:root 446users:*:1: 447EOF 448 atf_check /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2 449 _expected="-----BEGIN RSA PRIVATE KEY----- 450MIIBxwIBAAJhAKD0YSHy73nUgysO13XsJmd4fHiFyQ+00R7VVu2iV9Qco 451... 452-----END RSA PRIVATE KEY----- 453" 454 atf_check -o inline:"${_expected}" cat ${PWD}/etc/ssh/ssh_host_rsa_key 455 _expected="ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAGEAoPRhIfLvedSDKw7Xd ...\n" 456 atf_check -o inline:"${_expected}" cat ${PWD}/etc/ssh/ssh_host_rsa_key.pub 457 _expected="-----BEGIN OPENSSH PRIVATE KEY----- 458blabla 459... 460-----END OPENSSH PRIVATE KEY-----\n" 461 atf_check -o inline:"${_expected}" cat ${PWD}/etc/ssh/ssh_host_ed25519_key 462 _expected="ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIK+MH4E8KO32N5CXRvXVqvyZVl0+6ue4DobdhU0FqFd+\n" 463 atf_check -o inline:"${_expected}" cat ${PWD}/etc/ssh/ssh_host_ed25519_key.pub 464} 465 466 467nocloud_userdata_cloudconfig_ssh_pwauth_head() 468{ 469 atf_set "require.user" root 470} 471nocloud_userdata_cloudconfig_ssh_pwauth_body() 472{ 473 mkdir -p etc 474 cat > etc/master.passwd << EOF 475root:*:0:0::0:0:Charlie &:/root:/bin/sh 476sys:*:1:0::0:0:Sys:/home/sys:/bin/sh 477EOF 478 pwd_mkdb -d etc "${PWD}"/etc/master.passwd 479 cat > etc/group << EOF 480wheel:*:0:root 481users:*:1: 482EOF 483 mkdir -p media/nuageinit 484 printf "instance-id: iid-local01\n" > "${PWD}"/media/nuageinit/meta-data 485 cat > media/nuageinit/user-data << 'EOF' 486#cloud-config 487ssh_pwauth: true 488EOF 489 mkdir -p etc/ssh/ 490 touch etc/ssh/sshd_config 491 492 atf_check -o empty -e empty /usr/libexec/nuageinit "${PWD}"/media/nuageinit nocloud 493 atf_check -o inline:"PasswordAuthentication yes\n" cat etc/ssh/sshd_config 494 495 # Same value we don't touch anything 496 printf " PasswordAuthentication yes # I want password\n" > etc/ssh/sshd_config 497 atf_check -o empty -e empty /usr/libexec/nuageinit "${PWD}"/media/nuageinit nocloud 498 atf_check -o inline:" PasswordAuthentication yes # I want password\n" cat etc/ssh/sshd_config 499 500 printf " PasswordAuthentication no # Should change\n" > etc/ssh/sshd_config 501 atf_check -o empty -e empty /usr/libexec/nuageinit "${PWD}"/media/nuageinit nocloud 502 atf_check -o inline:"PasswordAuthentication yes\n" cat etc/ssh/sshd_config 503 504 cat > media/nuageinit/user-data << 'EOF' 505#cloud-config 506ssh_pwauth: false 507EOF 508 509 printf " PasswordAuthentication no # no passwords\n" > etc/ssh/sshd_config 510 atf_check -o empty -e empty /usr/libexec/nuageinit "${PWD}"/media/nuageinit nocloud 511 atf_check -o inline:" PasswordAuthentication no # no passwords\n" cat etc/ssh/sshd_config 512 513 printf " PasswordAuthentication yes # Should change\n" > etc/ssh/sshd_config 514 atf_check -o empty -e empty /usr/libexec/nuageinit "${PWD}"/media/nuageinit nocloud 515 atf_check -o inline:"PasswordAuthentication no\n" cat etc/ssh/sshd_config 516} 517 518nocloud_userdata_cloudconfig_chpasswd_head() 519{ 520 atf_set "require.user" root 521} 522nocloud_userdata_cloudconfig_chpasswd_body() 523{ 524 mkdir -p etc 525 cat > etc/master.passwd << EOF 526root:*:0:0::0:0:Charlie &:/root:/bin/sh 527sys:*:1:0::0:0:Sys:/home/sys:/bin/sh 528user:*:1:0::0:0:Sys:/home/sys:/bin/sh 529EOF 530 pwd_mkdb -d etc "${PWD}"/etc/master.passwd 531 cat > etc/group << EOF 532wheel:*:0:root 533users:*:1: 534EOF 535 mkdir -p media/nuageinit 536 printf "instance-id: iid-local01\n" > "${PWD}"/media/nuageinit/meta-data 537 cat > media/nuageinit/user-data << 'EOF' 538#cloud-config 539chpasswd: 540 expire: true 541 users: 542 - { user: "sys", password: RANDOM } 543EOF 544 545 atf_check -o empty -e inline:"nuageinit: Invalid entry for chpasswd.users: missing 'name'\n" /usr/libexec/nuageinit "${PWD}"/media/nuageinit nocloud 546 # nothing modified 547 atf_check -o inline:"sys:*:1:0::0:0:Sys:/home/sys:/bin/sh\n" pw -R $(pwd) usershow sys 548 549 cat > media/nuageinit/user-data << 'EOF' 550#cloud-config 551chpasswd: 552 expire: true 553 users: 554 - { name: "sys", pwd: RANDOM } 555EOF 556 atf_check -o empty -e inline:"nuageinit: Invalid entry for chpasswd.users: missing 'password'\n" /usr/libexec/nuageinit "${PWD}"/media/nuageinit nocloud 557 # nothing modified 558 atf_check -o inline:"sys:*:1:0::0:0:Sys:/home/sys:/bin/sh\n" pw -R $(pwd) usershow sys 559 560 cat > media/nuageinit/user-data << 'EOF' 561#cloud-config 562chpasswd: 563 expire: false 564 users: 565 - { name: "sys", password: RANDOM } 566EOF 567 # not empty because the password is printed to stdout 568 atf_check -o empty -e empty /usr/libexec/nuageinit "${PWD}"/media/nuageinit nocloud 569 atf_check -o match:'sys:\$.*:1:0::0:0:Sys:/home/sys:/bin/sh$' pw -R $(pwd) usershow sys 570 571 cat > media/nuageinit/user-data << 'EOF' 572#cloud-config 573chpasswd: 574 expire: true 575 users: 576 - { name: "sys", password: RANDOM } 577EOF 578 # not empty because the password is printed to stdout 579 atf_check -o empty -e empty /usr/libexec/nuageinit "${PWD}"/media/nuageinit nocloud 580 atf_check -o match:'sys:\$.*:1:0::1:0:Sys:/home/sys:/bin/sh$' pw -R $(pwd) usershow sys 581 582 cat > media/nuageinit/user-data << 'EOF' 583#cloud-config 584chpasswd: 585 expire: true 586 users: 587 - { name: "user", password: "$6$j212wezy$7H/1LT4f9/N3wpgNunhsIqtMj62OKiS3nyNwuizouQc3u7MbYCarYeAHWYPYb2FT.lbioDm2RrkJPb9BZMN1O/" } 588EOF 589 # not empty because the password is printed to stdout 590 atf_check -o empty -e empty /usr/libexec/nuageinit "${PWD}"/media/nuageinit nocloud 591 atf_check -o inline:'user:$6$j212wezy$7H/1LT4f9/N3wpgNunhsIqtMj62OKiS3nyNwuizouQc3u7MbYCarYeAHWYPYb2FT.lbioDm2RrkJPb9BZMN1O/:1:0::1:0:Sys:/home/sys:/bin/sh\n' pw -R $(pwd) usershow user 592} 593 594 595nocloud_userdata_cloudconfig_chpasswd_list_string_head() 596{ 597 atf_set "require.user" root 598} 599nocloud_userdata_cloudconfig_chpasswd_list_string_body() 600{ 601 mkdir -p etc 602 cat > etc/master.passwd << EOF 603root:*:0:0::0:0:Charlie &:/root:/bin/sh 604sys:*:1:0::0:0:Sys:/home/sys:/bin/sh 605user:*:1:0::0:0:Sys:/home/sys:/bin/sh 606EOF 607 pwd_mkdb -d etc "${PWD}"/etc/master.passwd 608 cat > etc/group << EOF 609wheel:*:0:root 610users:*:1: 611EOF 612 mkdir -p media/nuageinit 613 printf "instance-id: iid-local01\n" > "${PWD}"/media/nuageinit/meta-data 614 cat > media/nuageinit/user-data << 'EOF' 615#cloud-config 616chpasswd: 617 expire: true 618 list: | 619 sys:RANDOM 620EOF 621 622 atf_check -o empty -e inline:"nuageinit: chpasswd.list is deprecated consider using chpasswd.users\n" /usr/libexec/nuageinit "${PWD}"/media/nuageinit nocloud 623 atf_check -o match:'sys:\$.*:1:0::1:0:Sys:/home/sys:/bin/sh$' pw -R $(pwd) usershow sys 624 625 cat > media/nuageinit/user-data << 'EOF' 626#cloud-config 627chpasswd: 628 expire: false 629 list: | 630 sys:plop 631 user:$6$j212wezy$7H/1LT4f9/N3wpgNunhsIqtMj62OKiS3nyNwuizouQc3u7MbYCarYeAHWYPYb2FT.lbioDm2RrkJPb9BZMN1O/ 632 root:R 633EOF 634 635 atf_check -o empty -e ignore /usr/libexec/nuageinit "${PWD}"/media/nuageinit nocloud 636 atf_check -o match:'sys:\$.*:1:0::0:0:Sys:/home/sys:/bin/sh$' pw -R $(pwd) usershow sys 637 atf_check -o inline:'user:$6$j212wezy$7H/1LT4f9/N3wpgNunhsIqtMj62OKiS3nyNwuizouQc3u7MbYCarYeAHWYPYb2FT.lbioDm2RrkJPb9BZMN1O/:1:0::0:0:Sys:/home/sys:/bin/sh\n' pw -R $(pwd) usershow user 638 atf_check -o match:'root:\$.*:0:0::0:0:Charlie &:/root:/bin/sh$' pw -R $(pwd) usershow root 639} 640 641nocloud_userdata_cloudconfig_chpasswd_list_list_head() 642{ 643 atf_set "require.user" root 644} 645nocloud_userdata_cloudconfig_chpasswd_list_list_body() 646{ 647 mkdir -p etc 648 cat > etc/master.passwd << EOF 649root:*:0:0::0:0:Charlie &:/root:/bin/sh 650sys:*:1:0::0:0:Sys:/home/sys:/bin/sh 651user:*:1:0::0:0:Sys:/home/sys:/bin/sh 652EOF 653 pwd_mkdb -d etc "${PWD}"/etc/master.passwd 654 cat > etc/group << EOF 655wheel:*:0:root 656users:*:1: 657EOF 658 mkdir -p media/nuageinit 659 printf "instance-id: iid-local01\n" > "${PWD}"/media/nuageinit/meta-data 660 cat > media/nuageinit/user-data << 'EOF' 661#cloud-config 662chpasswd: 663 expire: true 664 list: 665 - sys:RANDOM 666EOF 667 668 atf_check -o empty -e inline:"nuageinit: chpasswd.list is deprecated consider using chpasswd.users\n" /usr/libexec/nuageinit "${PWD}"/media/nuageinit nocloud 669 atf_check -o match:'sys:\$.*:1:0::1:0:Sys:/home/sys:/bin/sh$' pw -R $(pwd) usershow sys 670 671 cat > media/nuageinit/user-data << 'EOF' 672#cloud-config 673chpasswd: 674 expire: false 675 list: 676 - sys:plop 677 - user:$6$j212wezy$7H/1LT4f9/N3wpgNunhsIqtMj62OKiS3nyNwuizouQc3u7MbYCarYeAHWYPYb2FT.lbioDm2RrkJPb9BZMN1O/ 678 - root:R 679EOF 680 681 atf_check -o empty -e ignore /usr/libexec/nuageinit "${PWD}"/media/nuageinit nocloud 682 atf_check -o match:'sys:\$.*:1:0::0:0:Sys:/home/sys:/bin/sh$' pw -R $(pwd) usershow sys 683 atf_check -o inline:'user:$6$j212wezy$7H/1LT4f9/N3wpgNunhsIqtMj62OKiS3nyNwuizouQc3u7MbYCarYeAHWYPYb2FT.lbioDm2RrkJPb9BZMN1O/:1:0::0:0:Sys:/home/sys:/bin/sh\n' pw -R $(pwd) usershow user 684 atf_check -o match:'root:\$.*:0:0::0:0:Charlie &:/root:/bin/sh$' pw -R $(pwd) usershow root 685} 686 687atf_init_test_cases() 688{ 689 atf_add_test_case args 690 atf_add_test_case nocloud 691 atf_add_test_case nocloud_userdata_script 692 atf_add_test_case nocloud_user_data_script 693 atf_add_test_case nocloud_userdata_cloudconfig_users 694 atf_add_test_case nocloud_network 695 atf_add_test_case config2 696 atf_add_test_case config2_pubkeys 697 atf_add_test_case config2_pubkeys_user_data 698 atf_add_test_case config2_pubkeys_meta_data 699 atf_add_test_case config2_network 700 atf_add_test_case config2_network_static_v4 701 atf_add_test_case config2_ssh_keys 702 atf_add_test_case nocloud_userdata_cloudconfig_ssh_pwauth 703 atf_add_test_case nocloud_userdata_cloudconfig_chpasswd 704 atf_add_test_case nocloud_userdata_cloudconfig_chpasswd_list_string 705 atf_add_test_case nocloud_userdata_cloudconfig_chpasswd_list_list 706} 707