1#- 2# Copyright (c) 2022-2025 Baptiste Daroussin <bapt@FreeBSD.org> 3# Copyright (c) 2025 Jesús Daniel Colmenares Oviedo <dtxdf@FreeBSD.org> 4# 5# SPDX-License-Identifier: BSD-2-Clause 6# 7 8export NUAGE_FAKE_ROOTDIR="$PWD" 9 10atf_test_case args 11atf_test_case nocloud 12atf_test_case nocloud_userdata_script 13atf_test_case nocloud_user_data_script 14atf_test_case nocloud_userdata_cloudconfig_users 15atf_test_case nocloud_network 16atf_test_case config2 17atf_test_case config2_pubkeys 18atf_test_case config2_pubkeys_user_data 19atf_test_case config2_pubkeys_meta_data 20atf_test_case config2_network 21atf_test_case config2_network_static_v4 22atf_test_case config2_network_dns 23atf_test_case config2_ssh_keys 24atf_test_case nocloud_userdata_cloudconfig_ssh_pwauth 25atf_test_case nocloud_userdata_cloudconfig_chpasswd 26atf_test_case nocloud_userdata_cloudconfig_chpasswd_list_string 27atf_test_case nocloud_userdata_cloudconfig_chpasswd_list_list 28atf_test_case config2_userdata_runcmd 29atf_test_case config2_userdata_packages 30atf_test_case config2_userdata_update_packages 31atf_test_case config2_userdata_upgrade_packages 32atf_test_case config2_userdata_shebang 33atf_test_case config2_userdata_ssh_deletekeys 34atf_test_case config2_userdata_disable_root 35atf_test_case config2_userdata_bootcmd 36atf_test_case config2_userdata_manage_etc_hosts 37atf_test_case config2_userdata_mounts 38atf_test_case config2_userdata_fqdn_and_hostname 39atf_test_case config2_userdata_write_files 40 41setup_test_adduser() 42{ 43 here=$(pwd) 44 export NUAGE_FAKE_ROOTDIR=$(pwd) 45 mkdir -p etc/ssh 46 cat > etc/master.passwd << EOF 47root:*:0:0::0:0:Charlie &:/root:/bin/csh 48sys:*:1:0::0:0:Sys:/home/sys:/bin/csh 49EOF 50 pwd_mkdb -d etc ${here}/etc/master.passwd 51 cat > etc/group << EOF 52wheel:*:0:root 53users:*:1: 54EOF 55} 56 57args_body() 58{ 59 atf_check -s exit:1 -e inline:"Usage: /usr/libexec/nuageinit <cloud-init-directory> (<config-2> | <nocloud>)\n" /usr/libexec/nuageinit 60 atf_check -s exit:1 -e inline:"Usage: /usr/libexec/nuageinit <cloud-init-directory> (<config-2> | <nocloud>)\n" /usr/libexec/nuageinit bla 61 atf_check -s exit:1 -e inline:"Usage: /usr/libexec/nuageinit <cloud-init-directory> (<config-2> | <nocloud>)\n" /usr/libexec/nuageinit bla meh plop 62 atf_check -s exit:1 -e inline:"nuageinit: Unknown cloud init type: meh\n" /usr/libexec/nuageinit bla meh 63} 64 65nocloud_body() 66{ 67 mkdir -p media/nuageinit 68 setup_test_adduser 69 atf_check -s exit:1 -e match:"nuageinit: error parsing nocloud.*" /usr/libexec/nuageinit "${PWD}"/media/nuageinit/ nocloud 70 printf "instance-id: iid-local01\nlocal-hostname: cloudimg\n" > "${PWD}"/media/nuageinit/meta-data 71 atf_check -s exit:0 /usr/libexec/nuageinit "${PWD}"/media/nuageinit nocloud 72 atf_check -o inline:"hostname=\"cloudimg\"\n" cat etc/rc.conf.d/hostname 73 cat > media/nuageinit/meta-data << EOF 74instance-id: iid-local01 75hostname: myhost 76EOF 77 atf_check -s exit:0 /usr/libexec/nuageinit "${PWD}"/media/nuageinit nocloud 78 atf_check -o inline:"hostname=\"myhost\"\n" cat etc/rc.conf.d/hostname 79} 80 81nocloud_userdata_script_body() 82{ 83 mkdir -p media/nuageinit 84 printf "instance-id: iid-local01\n" > "${PWD}"/media/nuageinit/meta-data 85 # ensure this is an invalid when parsed with the yaml parser 86 printf "#!/bin/sh\n: ${test:-yes}\necho $test\n" > "${PWD}"/media/nuageinit/user-data 87 chmod 644 "${PWD}"/media/nuageinit/user-data 88 atf_check -s exit:0 /usr/libexec/nuageinit "${PWD}"/media/nuageinit nocloud 89 atf_check test -x var/cache/nuageinit/user_data 90 atf_check -o inline:"#!/bin/sh\n: ${test:-yes}\necho $test\n" cat var/cache/nuageinit/user_data 91} 92 93nocloud_user_data_script_body() 94{ 95 mkdir -p media/nuageinit 96 printf "instance-id: iid-local01\n" > "${PWD}"/media/nuageinit/meta-data 97 printf "#!/bin/sh\necho yeah\n" > "${PWD}"/media/nuageinit/user_data 98 chmod 755 "${PWD}"/media/nuageinit/user_data 99 atf_check -s exit:0 /usr/libexec/nuageinit "${PWD}"/media/nuageinit nocloud 100 atf_check -o inline:"#!/bin/sh\necho yeah\n" cat var/cache/nuageinit/user_data 101} 102 103nocloud_userdata_cloudconfig_users_head() 104{ 105 atf_set "require.user" root 106} 107nocloud_userdata_cloudconfig_users_body() 108{ 109 mkdir -p media/nuageinit 110 printf "instance-id: iid-local01\n" > "${PWD}"/media/nuageinit/meta-data 111 mkdir -p etc 112 cat > etc/master.passwd << EOF 113root:*:0:0::0:0:Charlie &:/root:/bin/sh 114sys:*:1:0::0:0:Sys:/home/sys:/bin/sh 115EOF 116 pwd_mkdb -d etc "${PWD}"/etc/master.passwd 117 cat > etc/group << EOF 118wheel:*:0:root 119users:*:1: 120EOF 121 cat > media/nuageinit/user-data << 'EOF' 122#cloud-config 123groups: 124 - admingroup: [root,sys] 125 - cloud-users 126users: 127 - default 128 - name: foobar 129 gecos: Foo B. Bar 130 primary_group: foobar 131 sudo: ALL=(ALL) NOPASSWD:ALL 132 doas: permit persist %u as root 133 groups: users 134 passwd: $6$j212wezy$7H/1LT4f9/N3wpgNunhsIqtMj62OKiS3nyNwuizouQc3u7MbYCarYeAHWYPYb2FT.lbioDm2RrkJPb9BZMN1O/ 135 - name: bla 136 sudo: 137 - "ALL=(ALL) NOPASSWD:/usr/sbin/pw" 138 - "ALL=(ALL) ALL" 139 doas: 140 - "deny %u as foobar" 141 - "permit persist %u as root cmd whoami" 142EOF 143 atf_check /usr/libexec/nuageinit "${PWD}"/media/nuageinit nocloud 144 atf_check /usr/libexec/nuageinit "${PWD}"/media/nuageinit postnet 145 cat > expectedgroup << EOF 146wheel:*:0:root,freebsd 147users:*:1:foobar 148admingroup:*:1001:root,sys 149cloud-users:*:1002: 150freebsd:*:1003: 151foobar:*:1004: 152bla:*:1005: 153EOF 154 cat > expectedpasswd << 'EOF' 155root:*:0:0::0:0:Charlie &:/root:/bin/sh 156sys:*:1:0::0:0:Sys:/home/sys:/bin/sh 157freebsd:freebsd:1001:1003::0:0:FreeBSD User:/home/freebsd:/bin/sh 158foobar:$6$j212wezy$7H/1LT4f9/N3wpgNunhsIqtMj62OKiS3nyNwuizouQc3u7MbYCarYeAHWYPYb2FT.lbioDm2RrkJPb9BZMN1O/:1002:1004::0:0:Foo B. Bar:/home/foobar:/bin/sh 159bla::1003:1005::0:0:bla User:/home/bla:/bin/sh 160EOF 161 sed -i "" "s/freebsd:.*:1001/freebsd:freebsd:1001/" "${PWD}"/etc/master.passwd 162 atf_check -o file:expectedpasswd cat "${PWD}"/etc/master.passwd 163 atf_check -o file:expectedgroup cat "${PWD}"/etc/group 164 localbase=`sysctl -ni user.localbase 2> /dev/null` 165 if [ -z "${localbase}" ]; then 166 # fallback 167 localbase="/usr/local" 168 fi 169 atf_check -o inline:"foobar ALL=(ALL) NOPASSWD:ALL\nbla ALL=(ALL) NOPASSWD:/usr/sbin/pw\nbla ALL=(ALL) ALL\n" cat "${PWD}/${localbase}/etc/sudoers.d/90-nuageinit-users" 170 atf_check -o inline:"permit persist foobar as root\ndeny bla as foobar\npermit persist bla as root cmd whoami\n" cat "${PWD}/${localbase}/etc/doas.conf" 171} 172 173nocloud_network_head() 174{ 175 atf_set "require.user" root 176} 177nocloud_network_body() 178{ 179 mkdir -p media/nuageinit 180 mkdir -p etc 181 cat > etc/master.passwd << EOF 182root:*:0:0::0:0:Charlie &:/root:/bin/sh 183sys:*:1:0::0:0:Sys:/home/sys:/bin/sh 184EOF 185 pwd_mkdb -d etc "${PWD}"/etc/master.passwd 186 cat > etc/group << EOF 187wheel:*:0:root 188users:*:1: 189EOF 190 mynetworks=$(ifconfig -l ether) 191 if [ -z "$mynetworks" ]; then 192 atf_skip "a network interface is needed" 193 fi 194 set -- $mynetworks 195 myiface=$1 196 myaddr=$(ifconfig $myiface ether | awk '/ether/ { print $2 }') 197 printf "instance-id: iid-local01\n" > "${PWD}"/media/nuageinit/meta-data 198 cat > media/nuageinit/user-data << EOF 199#cloud-config 200network: 201 version: 2 202 ethernets: 203 # opaque ID for physical interfaces, only referred to by other stanzas 204 id0: 205 match: 206 macaddress: "$myaddr" 207 addresses: 208 - 192.0.2.2/24 209 - 2001:db8::2/64 210 gateway4: 192.0.2.1 211 gateway6: 2001:db8::1 212EOF 213 atf_check /usr/libexec/nuageinit "${PWD}"/media/nuageinit nocloud 214 cat > network << EOF 215ifconfig_${myiface}="inet 192.0.2.2/24" 216ifconfig_${myiface}_ipv6="inet6 2001:db8::2/64" 217ipv6_network_interfaces="${myiface}" 218ipv6_default_interface="${myiface}" 219EOF 220 cat > routing << EOF 221defaultrouter="192.0.2.1" 222ipv6_defaultrouter="2001:db8::1" 223ipv6_route_${myiface}="2001:db8::1 -prefixlen 128 -interface ${myiface}" 224EOF 225 atf_check -o file:network cat "${PWD}"/etc/rc.conf.d/network 226 atf_check -o file:routing cat "${PWD}"/etc/rc.conf.d/routing 227} 228 229config2_body() 230{ 231 mkdir -p media/nuageinit 232 setup_test_adduser 233 atf_check -s exit:1 -e match:"nuageinit: error parsing config-2 meta_data.json:.*" /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2 234 printf "{}" > media/nuageinit/meta_data.json 235 atf_check /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2 236 cat > media/nuageinit/meta_data.json << EOF 237{ 238 "hostname": "cloudimg" 239} 240EOF 241 atf_check /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2 242 atf_check -o inline:"hostname=\"cloudimg\"\n" cat etc/rc.conf.d/hostname 243} 244 245config2_pubkeys_head() 246{ 247 atf_set "require.user" root 248} 249config2_pubkeys_body() 250{ 251 mkdir -p media/nuageinit 252 touch media/nuageinit/meta_data.json 253 cat > media/nuageinit/user-data << EOF 254#cloud-config 255ssh_authorized_keys: 256 - "ssh-rsa AAAAB3NzaC1y...== Generated by Nova" 257EOF 258 mkdir -p etc 259 cat > etc/master.passwd << EOF 260root:*:0:0::0:0:Charlie &:/root:/bin/sh 261sys:*:1:0::0:0:Sys:/home/sys:/bin/sh 262EOF 263 pwd_mkdb -d etc "${PWD}"/etc/master.passwd 264 cat > etc/group << EOF 265wheel:*:0:root 266users:*:1: 267EOF 268 atf_check /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2 269 atf_check -o inline:"ssh-rsa AAAAB3NzaC1y...== Generated by Nova\n" cat home/freebsd/.ssh/authorized_keys 270} 271 272config2_pubkeys_user_data_head() 273{ 274 atf_set "require.user" root 275} 276config2_pubkeys_user_data_body() 277{ 278 mkdir -p media/nuageinit 279 touch media/nuageinit/meta_data.json 280 cat > media/nuageinit/user_data << EOF 281#cloud-config 282ssh_authorized_keys: 283 - "ssh-rsa AAAAB3NzaC1y...== Generated by Nova" 284EOF 285 mkdir -p etc 286 cat > etc/master.passwd << EOF 287root:*:0:0::0:0:Charlie &:/root:/bin/sh 288sys:*:1:0::0:0:Sys:/home/sys:/bin/sh 289EOF 290 pwd_mkdb -d etc "${PWD}"/etc/master.passwd 291 cat > etc/group << EOF 292wheel:*:0:root 293users:*:1: 294EOF 295 atf_check /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2 296 atf_check -o inline:"ssh-rsa AAAAB3NzaC1y...== Generated by Nova\n" cat home/freebsd/.ssh/authorized_keys 297} 298 299config2_pubkeys_meta_data_body() 300{ 301 here=$(pwd) 302 export NUAGE_FAKE_ROOTDIR=$(pwd) 303 if [ $(id -u) -ne 0 ]; then 304 atf_skip "root required" 305 fi 306 mkdir -p media/nuageinit 307 cat > media/nuageinit/meta_data.json << EOF 308{ 309 "uuid": "uuid_for_this_instance", 310 "admin_pass": "a_generated_password", 311 "public_keys": { 312 "tdb": "ssh-ed25519 my_key_id tdb@host" 313 }, 314 "keys": [ 315 { 316 "name": "tdb", 317 "type": "ssh", 318 "data": "ssh-ed25519 my_key_id tdb@host" 319 } 320 ], 321 "hostname": "freebsd-14-test.novalocal", 322 "name": "freebsd-14-test", 323 "launch_index": 0, 324 "availability_zone": "nova", 325 "random_seed": "long_random_seed", 326 "project_id": "my_project_id", 327 "devices": [], 328 "dedicated_cpus": [] 329} 330EOF 331 mkdir -p etc 332 cat > etc/master.passwd << EOF 333root:*:0:0::0:0:Charlie &:/root:/bin/csh 334sys:*:1:0::0:0:Sys:/home/sys:/bin/csh 335EOF 336 pwd_mkdb -d etc ${here}/etc/master.passwd 337 cat > etc/group << EOF 338wheel:*:0:root 339users:*:1: 340EOF 341 atf_check /usr/libexec/nuageinit ${here}/media/nuageinit config-2 342 atf_check -o inline:"ssh-ed25519 my_key_id tdb@host\n" cat home/freebsd/.ssh/authorized_keys 343} 344 345config2_network_body() 346{ 347 mkdir -p media/nuageinit 348 setup_test_adduser 349 printf "{}" > media/nuageinit/meta_data.json 350 mynetworks=$(ifconfig -l ether) 351 if [ -z "$mynetworks" ]; then 352 atf_skip "a network interface is needed" 353 fi 354 set -- $mynetworks 355 myiface=$1 356 myaddr=$(ifconfig $myiface ether | awk '/ether/ { print $2 }') 357cat > media/nuageinit/network_data.json << EOF 358{ 359 "links": [ 360 { 361 "ethernet_mac_address": "$myaddr", 362 "id": "iface0", 363 "mtu": null 364 } 365 ], 366 "networks": [ 367 { 368 "id": "network0", 369 "link": "iface0", 370 "type": "ipv4_dhcp" 371 }, 372 { // IPv6 373 "id": "private-ipv4", 374 "type": "ipv6", 375 "link": "iface0", 376 // supports condensed IPv6 with CIDR netmask 377 "ip_address": "2001:db8::3257:9652/64", 378 "gateway": "fd00::1", 379 "routes": [ 380 { 381 "network": "::", 382 "netmask": "::", 383 "gateway": "fd00::1" 384 }, 385 { 386 "network": "::", 387 "netmask": "ffff:ffff:ffff::", 388 "gateway": "fd00::1:1" 389 } 390 ], 391 "network_id": "da5bb487-5193-4a65-a3df-4a0055a8c0d8" 392 } 393 ] 394} 395EOF 396 atf_check /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2 397 cat > network << EOF 398ifconfig_${myiface}="DHCP" 399ifconfig_${myiface}_ipv6="inet6 2001:db8::3257:9652/64" 400ipv6_network_interfaces="${myiface}" 401ipv6_default_interface="${myiface}" 402EOF 403 cat > routing << EOF 404ipv6_defaultrouter="fd00::1" 405ipv6_route_${myiface}="fd00::1 -prefixlen 128 -interface ${myiface}" 406ipv6_static_routes="${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_network_static_v4_body() 413{ 414 mkdir -p media/nuageinit 415 setup_test_adduser 416 printf "{}" > media/nuageinit/meta_data.json 417 mynetworks=$(ifconfig -l ether) 418 if [ -z "$mynetworks" ]; then 419 atf_skip "a network interface is needed" 420 fi 421 set -- $mynetworks 422 myiface=$1 423 myaddr=$(ifconfig $myiface ether | awk '/ether/ { print $2 }') 424cat > media/nuageinit/network_data.json << EOF 425{ 426 "links": [ 427 { 428 "ethernet_mac_address": "$myaddr", 429 "id": "iface0", 430 "mtu": null 431 } 432 ], 433 "networks": [ 434 { 435 "id": "network0", 436 "link": "iface0", 437 "type": "ipv4", 438 "ip_address": "10.184.0.244", 439 "netmask": "255.255.240.0", 440 "routes": [ 441 { 442 "network": "10.0.0.0", 443 "netmask": "255.0.0.0", 444 "gateway": "11.0.0.1" 445 }, 446 { 447 "network": "0.0.0.0", 448 "netmask": "0.0.0.0", 449 "gateway": "23.253.157.1" 450 } 451 ] 452 } 453 ] 454} 455EOF 456 atf_check /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2 457 cat > network << EOF 458ifconfig_${myiface}="inet 10.184.0.244 netmask 255.255.240.0" 459EOF 460 cat > routing << EOF 461route_cloudinit1_${myiface}="-net 10.0.0.0 11.0.0.1 255.0.0.0" 462defaultrouter="23.253.157.1" 463static_routes="cloudinit1_${myiface}" 464EOF 465 atf_check -o file:network cat "${PWD}"/etc/rc.conf.d/network 466 atf_check -o file:routing cat "${PWD}"/etc/rc.conf.d/routing 467} 468 469config2_network_dns_body() 470{ 471 mkdir -p media/nuageinit 472 setup_test_adduser 473 printf "{}" > media/nuageinit/meta_data.json 474 mynetworks=$(ifconfig -l ether) 475 if [ -z "$mynetworks" ]; then 476 atf_skip "a network interface is needed" 477 fi 478 set -- $mynetworks 479 myiface=$1 480 myaddr=$(ifconfig $myiface ether | awk '/ether/ { print $2 }') 481cat > media/nuageinit/network_data.json << EOF 482{ 483 "links": [ 484 { 485 "ethernet_mac_address": "$myaddr", 486 "id": "iface0", 487 "mtu": null 488 } 489 ], 490 "networks": [ 491 { 492 "id": "network0", 493 "link": "iface0", 494 "type": "ipv4_dhcp" 495 } 496 ], 497 "services": [ 498 { 499 "type": "dns", 500 "address": "9.9.9.9" 501 }, 502 { 503 "type": "dns", 504 "address": "149.112.112.112" 505 } 506 ] 507} 508EOF 509 atf_check /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2 510 atf_check -o inline:'name_servers="9.9.9.9 149.112.112.112"\n' \ 511 cat "${PWD}"/etc/resolvconf.conf 512} 513 514config2_ssh_keys_head() 515{ 516 atf_set "require.user" root 517} 518config2_ssh_keys_body() 519{ 520 here=$(pwd) 521 export NUAGE_FAKE_ROOTDIR=$(pwd) 522 mkdir -p media/nuageinit 523 touch media/nuageinit/meta_data.json 524 cat > media/nuageinit/user-data << EOF 525#cloud-config 526ssh_keys: 527 rsa_private: | 528 -----BEGIN RSA PRIVATE KEY----- 529 MIIBxwIBAAJhAKD0YSHy73nUgysO13XsJmd4fHiFyQ+00R7VVu2iV9Qco 530 ... 531 -----END RSA PRIVATE KEY----- 532 rsa_public: ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAGEAoPRhIfLvedSDKw7Xd ... 533 ed25519_private: | 534 -----BEGIN OPENSSH PRIVATE KEY----- 535 blabla 536 ... 537 -----END OPENSSH PRIVATE KEY----- 538 ed25519_public: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIK+MH4E8KO32N5CXRvXVqvyZVl0+6ue4DobdhU0FqFd+ 539EOF 540 mkdir -p etc/ssh 541 cat > etc/master.passwd << EOF 542root:*:0:0::0:0:Charlie &:/root:/bin/csh 543sys:*:1:0::0:0:Sys:/home/sys:/bin/csh 544EOF 545 pwd_mkdb -d etc ${here}/etc/master.passwd 546 cat > etc/group << EOF 547wheel:*:0:root 548users:*:1: 549EOF 550 atf_check /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2 551 _expected="-----BEGIN RSA PRIVATE KEY----- 552MIIBxwIBAAJhAKD0YSHy73nUgysO13XsJmd4fHiFyQ+00R7VVu2iV9Qco 553... 554-----END RSA PRIVATE KEY----- 555 556" 557 atf_check -o inline:"${_expected}" cat ${PWD}/etc/ssh/ssh_host_rsa_key 558 _expected="ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAGEAoPRhIfLvedSDKw7Xd ...\n" 559 atf_check -o inline:"${_expected}" cat ${PWD}/etc/ssh/ssh_host_rsa_key.pub 560 _expected="-----BEGIN OPENSSH PRIVATE KEY----- 561blabla 562... 563-----END OPENSSH PRIVATE KEY----- 564 565" 566 atf_check -o inline:"${_expected}" cat ${PWD}/etc/ssh/ssh_host_ed25519_key 567 _expected="ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIK+MH4E8KO32N5CXRvXVqvyZVl0+6ue4DobdhU0FqFd+\n" 568 atf_check -o inline:"${_expected}" cat ${PWD}/etc/ssh/ssh_host_ed25519_key.pub 569} 570 571 572nocloud_userdata_cloudconfig_ssh_pwauth_head() 573{ 574 atf_set "require.user" root 575} 576nocloud_userdata_cloudconfig_ssh_pwauth_body() 577{ 578 mkdir -p etc 579 cat > etc/master.passwd << EOF 580root:*:0:0::0:0:Charlie &:/root:/bin/sh 581sys:*:1:0::0:0:Sys:/home/sys:/bin/sh 582EOF 583 pwd_mkdb -d etc "${PWD}"/etc/master.passwd 584 cat > etc/group << EOF 585wheel:*:0:root 586users:*:1: 587EOF 588 mkdir -p media/nuageinit 589 printf "instance-id: iid-local01\n" > "${PWD}"/media/nuageinit/meta-data 590 cat > media/nuageinit/user-data << 'EOF' 591#cloud-config 592ssh_pwauth: true 593EOF 594 mkdir -p etc/ssh/ 595 touch etc/ssh/sshd_config 596 597 atf_check -o empty -e empty /usr/libexec/nuageinit "${PWD}"/media/nuageinit nocloud 598 atf_check -o inline:"PasswordAuthentication yes\n" cat etc/ssh/sshd_config 599 600 # Same value we don't touch anything 601 printf " PasswordAuthentication yes # I want password\n" > etc/ssh/sshd_config 602 atf_check -o empty -e empty /usr/libexec/nuageinit "${PWD}"/media/nuageinit nocloud 603 atf_check -o inline:" PasswordAuthentication yes # I want password\n" cat etc/ssh/sshd_config 604 605 printf " PasswordAuthentication no # Should change\n" > etc/ssh/sshd_config 606 atf_check -o empty -e empty /usr/libexec/nuageinit "${PWD}"/media/nuageinit nocloud 607 atf_check -o inline:"PasswordAuthentication yes\n" cat etc/ssh/sshd_config 608 609 cat > media/nuageinit/user-data << 'EOF' 610#cloud-config 611ssh_pwauth: false 612EOF 613 614 printf " PasswordAuthentication no # no passwords\n" > etc/ssh/sshd_config 615 atf_check -o empty -e empty /usr/libexec/nuageinit "${PWD}"/media/nuageinit nocloud 616 atf_check -o inline:" PasswordAuthentication no # no passwords\n" cat etc/ssh/sshd_config 617 618 printf " PasswordAuthentication yes # Should change\n" > etc/ssh/sshd_config 619 atf_check -o empty -e empty /usr/libexec/nuageinit "${PWD}"/media/nuageinit nocloud 620 atf_check -o inline:"PasswordAuthentication no\n" cat etc/ssh/sshd_config 621} 622 623nocloud_userdata_cloudconfig_chpasswd_head() 624{ 625 atf_set "require.user" root 626} 627nocloud_userdata_cloudconfig_chpasswd_body() 628{ 629 mkdir -p etc 630 cat > etc/master.passwd << EOF 631root:*:0:0::0:0:Charlie &:/root:/bin/sh 632sys:*:1:0::0:0:Sys:/home/sys:/bin/sh 633user:*:1:0::0:0:Sys:/home/sys:/bin/sh 634EOF 635 pwd_mkdb -d etc "${PWD}"/etc/master.passwd 636 cat > etc/group << EOF 637wheel:*:0:root 638users:*:1: 639EOF 640 mkdir -p media/nuageinit 641 printf "instance-id: iid-local01\n" > "${PWD}"/media/nuageinit/meta-data 642 cat > media/nuageinit/user-data << 'EOF' 643#cloud-config 644chpasswd: 645 expire: true 646 users: 647 - { user: "sys", password: RANDOM } 648EOF 649 650 atf_check -o empty /usr/libexec/nuageinit "${PWD}"/media/nuageinit nocloud 651 atf_check -o empty -e inline:"nuageinit: Invalid entry for chpasswd.users: missing 'name'\n" /usr/libexec/nuageinit "${PWD}"/media/nuageinit postnet 652 # nothing modified 653 atf_check -o inline:"sys:*:1:0::0:0:Sys:/home/sys:/bin/sh\n" pw -R $(pwd) usershow sys 654 655 cat > media/nuageinit/user-data << 'EOF' 656#cloud-config 657chpasswd: 658 expire: true 659 users: 660 - { name: "sys", pwd: RANDOM } 661EOF 662 atf_check -o empty -e inline:"nuageinit: Invalid entry for chpasswd.users: missing 'password'\n" /usr/libexec/nuageinit "${PWD}"/media/nuageinit postnet 663 # nothing modified 664 atf_check -o inline:"sys:*:1:0::0:0:Sys:/home/sys:/bin/sh\n" pw -R $(pwd) usershow sys 665 666 cat > media/nuageinit/user-data << 'EOF' 667#cloud-config 668chpasswd: 669 expire: false 670 users: 671 - { name: "sys", password: RANDOM } 672EOF 673 # not empty because the password is printed to stdout 674 atf_check -o empty -e empty /usr/libexec/nuageinit "${PWD}"/media/nuageinit postnet 675 atf_check -o match:'sys:\$.*:1:0::0:0:Sys:/home/sys:/bin/sh$' pw -R $(pwd) usershow sys 676 677 cat > media/nuageinit/user-data << 'EOF' 678#cloud-config 679chpasswd: 680 expire: true 681 users: 682 - { name: "sys", password: RANDOM } 683EOF 684 # not empty because the password is printed to stdout 685 atf_check -o empty -e empty /usr/libexec/nuageinit "${PWD}"/media/nuageinit postnet 686 atf_check -o match:'sys:\$.*:1:0::1:0:Sys:/home/sys:/bin/sh$' pw -R $(pwd) usershow sys 687 688 cat > media/nuageinit/user-data << 'EOF' 689#cloud-config 690chpasswd: 691 expire: true 692 users: 693 - { name: "user", password: "$6$j212wezy$7H/1LT4f9/N3wpgNunhsIqtMj62OKiS3nyNwuizouQc3u7MbYCarYeAHWYPYb2FT.lbioDm2RrkJPb9BZMN1O/" } 694EOF 695 # not empty because the password is printed to stdout 696 atf_check -o empty -e empty /usr/libexec/nuageinit "${PWD}"/media/nuageinit postnet 697 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 698} 699 700 701nocloud_userdata_cloudconfig_chpasswd_list_string_head() 702{ 703 atf_set "require.user" root 704} 705nocloud_userdata_cloudconfig_chpasswd_list_string_body() 706{ 707 mkdir -p etc 708 cat > etc/master.passwd << EOF 709root:*:0:0::0:0:Charlie &:/root:/bin/sh 710sys:*:1:0::0:0:Sys:/home/sys:/bin/sh 711user:*:1:0::0:0:Sys:/home/sys:/bin/sh 712EOF 713 pwd_mkdb -d etc "${PWD}"/etc/master.passwd 714 cat > etc/group << EOF 715wheel:*:0:root 716users:*:1: 717EOF 718 mkdir -p media/nuageinit 719 printf "instance-id: iid-local01\n" > "${PWD}"/media/nuageinit/meta-data 720 cat > media/nuageinit/user-data << 'EOF' 721#cloud-config 722chpasswd: 723 expire: true 724 list: | 725 sys:RANDOM 726EOF 727 728 atf_check -o empty /usr/libexec/nuageinit "${PWD}"/media/nuageinit nocloud 729 atf_check -o empty -e inline:"nuageinit: chpasswd.list is deprecated consider using chpasswd.users\n" /usr/libexec/nuageinit "${PWD}"/media/nuageinit postnet 730 atf_check -o match:'sys:\$.*:1:0::1:0:Sys:/home/sys:/bin/sh$' pw -R $(pwd) usershow sys 731 732 cat > media/nuageinit/user-data << 'EOF' 733#cloud-config 734chpasswd: 735 expire: false 736 list: | 737 sys:plop 738 user:$6$j212wezy$7H/1LT4f9/N3wpgNunhsIqtMj62OKiS3nyNwuizouQc3u7MbYCarYeAHWYPYb2FT.lbioDm2RrkJPb9BZMN1O/ 739 root:R 740EOF 741 742 atf_check -o empty -e ignore /usr/libexec/nuageinit "${PWD}"/media/nuageinit postnet 743 atf_check -o match:'sys:\$.*:1:0::0:0:Sys:/home/sys:/bin/sh$' pw -R $(pwd) usershow sys 744 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 745 atf_check -o match:'root:\$.*:0:0::0:0:Charlie &:/root:/bin/sh$' pw -R $(pwd) usershow root 746} 747 748nocloud_userdata_cloudconfig_chpasswd_list_list_head() 749{ 750 atf_set "require.user" root 751} 752nocloud_userdata_cloudconfig_chpasswd_list_list_body() 753{ 754 mkdir -p etc 755 cat > etc/master.passwd << EOF 756root:*:0:0::0:0:Charlie &:/root:/bin/sh 757sys:*:1:0::0:0:Sys:/home/sys:/bin/sh 758user:*:1:0::0:0:Sys:/home/sys:/bin/sh 759EOF 760 pwd_mkdb -d etc "${PWD}"/etc/master.passwd 761 cat > etc/group << EOF 762wheel:*:0:root 763users:*:1: 764EOF 765 mkdir -p media/nuageinit 766 printf "instance-id: iid-local01\n" > "${PWD}"/media/nuageinit/meta-data 767 cat > media/nuageinit/user-data << 'EOF' 768#cloud-config 769chpasswd: 770 expire: true 771 list: 772 - sys:RANDOM 773EOF 774 775 atf_check -o empty /usr/libexec/nuageinit "${PWD}"/media/nuageinit nocloud 776 atf_check -o empty -e inline:"nuageinit: chpasswd.list is deprecated consider using chpasswd.users\n" /usr/libexec/nuageinit "${PWD}"/media/nuageinit postnet 777 atf_check -o match:'sys:\$.*:1:0::1:0:Sys:/home/sys:/bin/sh$' pw -R $(pwd) usershow sys 778 779 cat > media/nuageinit/user-data << 'EOF' 780#cloud-config 781chpasswd: 782 expire: false 783 list: 784 - sys:plop 785 - user:$6$j212wezy$7H/1LT4f9/N3wpgNunhsIqtMj62OKiS3nyNwuizouQc3u7MbYCarYeAHWYPYb2FT.lbioDm2RrkJPb9BZMN1O/ 786 - root:R 787EOF 788 789 atf_check -o empty -e ignore /usr/libexec/nuageinit "${PWD}"/media/nuageinit postnet 790 atf_check -o match:'sys:\$.*:1:0::0:0:Sys:/home/sys:/bin/sh$' pw -R $(pwd) usershow sys 791 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 792 atf_check -o match:'root:\$.*:0:0::0:0:Charlie &:/root:/bin/sh$' pw -R $(pwd) usershow root 793} 794 795config2_userdata_runcmd_head() 796{ 797 atf_set "require.user" root 798} 799config2_userdata_runcmd_body() 800{ 801 mkdir -p media/nuageinit 802 setup_test_adduser 803 printf "{}" > media/nuageinit/meta_data.json 804 cat > media/nuageinit/user_data << 'EOF' 805#cloud-config 806runcmd: 807EOF 808 chmod 755 "${PWD}"/media/nuageinit/user_data 809 atf_check /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2 810 cat > media/nuageinit/user_data << 'EOF' 811#cloud-config 812runcmd: 813 - plop 814EOF 815 chmod 755 "${PWD}"/media/nuageinit/user_data 816 atf_check -s exit:0 /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2 817 test -f var/cache/nuageinit/runcmds || atf_fail "File not created" 818 test -x var/cache/nuageinit/runcmds || atf_fail "Missing execution permission" 819 atf_check -o inline:"#!/bin/sh\nplop\n" cat var/cache/nuageinit/runcmds 820 821 cat > media/nuageinit/user_data << 'EOF' 822#cloud-config 823runcmd: 824 - echo "yeah!" 825 - uname -s 826EOF 827 chmod 755 "${PWD}"/media/nuageinit/user_data 828 atf_check /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2 829 atf_check -o inline:"#!/bin/sh\necho \"yeah!\"\nuname -s\n" cat var/cache/nuageinit/runcmds 830} 831 832config2_userdata_packages_head() 833{ 834 atf_set "require.user" root 835} 836 837config2_userdata_packages_body() 838{ 839 mkdir -p media/nuageinit 840 setup_test_adduser 841 export NUAGE_RUN_TESTS=1 842 printf "{}" > media/nuageinit/meta_data.json 843 cat > media/nuageinit/user_data << 'EOF' 844#cloud-config 845packages: 846EOF 847 chmod 755 "${PWD}"/media/nuageinit/user_data 848 atf_check /usr/libexec/nuageinit "${PWD}"/media/nuageinit postnet 849 cat > media/nuageinit/user_data << 'EOF' 850#cloud-config 851packages: 852 - yeah/plop 853EOF 854 chmod 755 "${PWD}"/media/nuageinit/user_data 855 atf_check -s exit:0 -o inline:"pkg install -y 'yeah/plop'\npkg info -q 'yeah/plop'\n" /usr/libexec/nuageinit "${PWD}"/media/nuageinit postnet 856 857 cat > media/nuageinit/user_data << 'EOF' 858#cloud-config 859packages: 860 - curl 861EOF 862 chmod 755 "${PWD}"/media/nuageinit/user_data 863 atf_check -o inline:"pkg install -y 'curl'\npkg info -q 'curl'\n" /usr/libexec/nuageinit "${PWD}"/media/nuageinit postnet 864 865 cat > media/nuageinit/user_data << 'EOF' 866#cloud-config 867packages: 868 - curl 869 - meh: bla 870EOF 871 chmod 755 "${PWD}"/media/nuageinit/user_data 872 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 postnet 873} 874 875config2_userdata_update_packages_body() 876{ 877 mkdir -p media/nuageinit 878 setup_test_adduser 879 export NUAGE_RUN_TESTS=1 880 printf "{}" > media/nuageinit/meta_data.json 881 cat > media/nuageinit/user_data << 'EOF' 882#cloud-config 883package_update: true 884EOF 885 chmod 755 "${PWD}"/media/nuageinit/user_data 886 atf_check -o inline:"env ASSUME_ALWAYS_YES=yes pkg update\n" /usr/libexec/nuageinit "${PWD}"/media/nuageinit postnet 887} 888 889config2_userdata_upgrade_packages_body() 890{ 891 mkdir -p media/nuageinit 892 setup_test_adduser 893 export NUAGE_RUN_TESTS=1 894 printf "{}" > media/nuageinit/meta_data.json 895 cat > media/nuageinit/user_data << 'EOF' 896#cloud-config 897package_upgrade: true 898EOF 899 chmod 755 "${PWD}"/media/nuageinit/user_data 900 atf_check -o inline:"env ASSUME_ALWAYS_YES=yes pkg upgrade\n" /usr/libexec/nuageinit "${PWD}"/media/nuageinit postnet 901} 902 903config2_userdata_shebang_body() 904{ 905 mkdir -p media/nuageinit 906 setup_test_adduser 907 printf "{}" > media/nuageinit/meta_data.json 908 cat > media/nuageinit/user_data <<EOF 909#!/we/dont/care 910anything 911EOF 912 atf_check -o empty /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2 913 test -f var/cache/nuageinit/user_data || atf_fail "File not created" 914 test -x var/cache/nuageinit/user_data || atf_fail "Missing execution permission" 915 atf_check -o inline:"#!/we/dont/care\nanything\n" cat var/cache/nuageinit/user_data 916 cat > media/nuageinit/user_data <<EOF 917/we/dont/care 918EOF 919 rm var/cache/nuageinit/user_data 920 if [ -f var/cache/nuageinit/user_data ]; then 921 atf_fail "File should not have been created" 922 fi 923} 924 925config2_userdata_write_files_body() 926{ 927 mkdir -p media/nuageinit 928 setup_test_adduser 929 printf "{}" > media/nuageinit/meta_data.json 930 cat > media/nuageinit/user_data <<EOF 931#cloud-config 932write_files: 933- content: "plop" 934 path: /file1 935- path: /emptyfile 936- content: !!binary | 937 YmxhCg== 938 path: /file_base64 939 encoding: b64 940 permissions: '0755' 941 owner: nobody 942- content: "bob" 943 path: "/foo" 944 defer: true 945EOF 946 atf_check -o empty /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2 947 atf_check -o inline:"plop" cat file1 948 atf_check -o inline:"" cat emptyfile 949 atf_check -o inline:"bla\n" cat file_base64 950 test -f foo && atf_fail "foo creation should have been deferred" 951 atf_check -o match:"^-rwxr-xr-x.*nobody" ls -l file_base64 952 rm file1 emptyfile file_base64 953 atf_check -o empty /usr/libexec/nuageinit "${PWD}"/media/nuageinit postnet 954 test -f file1 -o -f emptyfile -o -f file_base64 && atf_fail "defer not working properly" 955 atf_check -o inline:"bob" cat foo 956} 957 958config2_userdata_ssh_deletekeys_head() 959{ 960 atf_set "require.user" root 961} 962config2_userdata_ssh_deletekeys_body() 963{ 964 mkdir -p media/nuageinit 965 setup_test_adduser 966 printf "{}" > media/nuageinit/meta_data.json 967 cat > media/nuageinit/user_data <<EOF 968#cloud-config 969ssh_deletekeys: true 970EOF 971 mkdir -p etc/ssh 972 touch etc/ssh/ssh_host_rsa_key 973 touch etc/ssh/ssh_host_rsa_key.pub 974 touch etc/ssh/ssh_host_ed25519_key 975 touch etc/ssh/ssh_host_ed25519_key.pub 976 touch etc/ssh/ssh_host_ecdsa_key 977 touch etc/ssh/ssh_host_ecdsa_key.pub 978 atf_check -o empty /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2 979 test -f etc/ssh/ssh_host_rsa_key && atf_fail "ssh_host_rsa_key not deleted" 980 test -f etc/ssh/ssh_host_rsa_key.pub && atf_fail "ssh_host_rsa_key.pub not deleted" 981 test -f etc/ssh/ssh_host_ed25519_key && atf_fail "ssh_host_ed25519_key not deleted" 982 test -f etc/ssh/ssh_host_ed25519_key.pub && atf_fail "ssh_host_ed25519_key.pub not deleted" 983 test -f etc/ssh/ssh_host_ecdsa_key && atf_fail "ssh_host_ecdsa_key not deleted" 984 test -f etc/ssh/ssh_host_ecdsa_key.pub && atf_fail "ssh_host_ecdsa_key.pub not deleted" 985 true 986} 987 988config2_userdata_disable_root_head() 989{ 990 atf_set "require.user" root 991} 992config2_userdata_disable_root_body() 993{ 994 mkdir -p media/nuageinit 995 setup_test_adduser 996 printf "{}" > media/nuageinit/meta_data.json 997 cat > media/nuageinit/user_data <<EOF 998#cloud-config 999disable_root: true 1000EOF 1001 mkdir -p etc/ssh 1002 touch etc/ssh/sshd_config 1003 atf_check -o empty /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2 1004 atf_check -o inline:"PermitRootLogin no\n" cat etc/ssh/sshd_config 1005 cat > media/nuageinit/user_data <<EOF 1006#cloud-config 1007disable_root: true 1008disable_root_opts: "without-password" 1009EOF 1010 atf_check -o empty /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2 1011 atf_check -o inline:"PermitRootLogin without-password\n" cat etc/ssh/sshd_config 1012 cat > media/nuageinit/user_data <<EOF 1013#cloud-config 1014disable_root: true 1015disable_root_opts: 1016 - "prohibit-password" 1017EOF 1018 atf_check -o empty /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2 1019 atf_check -o inline:"PermitRootLogin prohibit-password\n" cat etc/ssh/sshd_config 1020 cat > media/nuageinit/user_data <<EOF 1021#cloud-config 1022disable_root: false 1023EOF 1024 echo "PermitRootLogin yes" > etc/ssh/sshd_config 1025 atf_check -o empty /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2 1026 atf_check -o inline:"PermitRootLogin yes\n" cat etc/ssh/sshd_config 1027} 1028 1029config2_userdata_bootcmd_head() 1030{ 1031 atf_set "require.user" root 1032} 1033config2_userdata_bootcmd_body() 1034{ 1035 mkdir -p media/nuageinit 1036 setup_test_adduser 1037 printf "{}" > media/nuageinit/meta_data.json 1038 cat > media/nuageinit/user_data <<EOF 1039#cloud-config 1040bootcmd: 1041 - kldload if_bridge 1042EOF 1043 atf_check -o empty /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2 1044 test -f var/cache/nuageinit/bootcmds || atf_fail "bootcmds file not created" 1045 atf_check -o inline:"#!/bin/sh\nkldload if_bridge\n" cat var/cache/nuageinit/bootcmds 1046 cat > media/nuageinit/user_data <<EOF 1047#cloud-config 1048bootcmd: 1049 - sysctl net.inet.ip.forwarding=1 1050 - kldload if_bridge 1051EOF 1052 atf_check -o empty /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2 1053 atf_check -o inline:"#!/bin/sh\nsysctl net.inet.ip.forwarding=1\nkldload if_bridge\n" cat var/cache/nuageinit/bootcmds 1054 # Test 3: empty list (clean up from previous tests first) 1055 rm -f var/cache/nuageinit/bootcmds 1056 cat > media/nuageinit/user_data <<EOF 1057#cloud-config 1058bootcmd: [] 1059EOF 1060 atf_check -o empty /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2 1061 test -f var/cache/nuageinit/bootcmds && atf_fail "bootcmds should not have been created for empty list" 1062 true 1063} 1064 1065config2_userdata_manage_etc_hosts_head() 1066{ 1067 atf_set "require.user" root 1068} 1069config2_userdata_manage_etc_hosts_body() 1070{ 1071 mkdir -p media/nuageinit 1072 setup_test_adduser 1073 printf "{}" > media/nuageinit/meta_data.json 1074 # Test 1: manage_etc_hosts adds hostname when /etc/hosts does not exist 1075 cat > media/nuageinit/user_data <<EOF 1076#cloud-config 1077hostname: mycloud 1078EOF 1079 atf_check -o empty /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2 1080 atf_check -o inline:"::1\t\tlocalhost mycloud\n127.0.0.1\t\tlocalhost mycloud\n" cat etc/hosts 1081 # Test 2: manage_etc_hosts appends hostname to existing localhost lines 1082 cat > etc/hosts <<EOF 1083::1 localhost 1084127.0.0.1 localhost 1085EOF 1086 cat > media/nuageinit/user_data <<EOF 1087#cloud-config 1088hostname: myvm 1089EOF 1090 atf_check -o empty /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2 1091 atf_check -o inline:"::1\t\tlocalhost myvm\n127.0.0.1\t\tlocalhost myvm\n" cat etc/hosts 1092 # Test 3: hostname already present in /etc/hosts, no change 1093 cat > etc/hosts <<EOF 1094::1 localhost myvm 1095127.0.0.1 localhost myvm 1096EOF 1097 cat > media/nuageinit/user_data <<EOF 1098#cloud-config 1099hostname: myvm 1100EOF 1101 atf_check -o empty /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2 1102 atf_check -o inline:"::1\t\tlocalhost myvm\n127.0.0.1\t\tlocalhost myvm\n" cat etc/hosts 1103 # Test 4: manage_etc_hosts: false disables the behaviour 1104 cat > etc/hosts <<EOF 1105::1 localhost 1106127.0.0.1 localhost 1107EOF 1108 cat > media/nuageinit/user_data <<EOF 1109#cloud-config 1110hostname: nope 1111manage_etc_hosts: false 1112EOF 1113 atf_check -o empty /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2 1114 atf_check -o inline:"::1\t\tlocalhost\n127.0.0.1\t\tlocalhost\n" cat etc/hosts 1115} 1116 1117config2_userdata_mounts_head() 1118{ 1119 atf_set "require.user" root 1120} 1121config2_userdata_mounts_body() 1122{ 1123 mkdir -p media/nuageinit 1124 setup_test_adduser 1125 printf "{}" > media/nuageinit/meta_data.json 1126 cat > media/nuageinit/user_data <<EOF 1127#cloud-config 1128mounts: 1129 - [ /dev/ada1p1, /mnt/data, ufs, rw, 0, 2 ] 1130 - device: tmpfs 1131 mountpoint: /mnt/tmp 1132 fstype: tmpfs 1133 options: "size=256M" 1134EOF 1135 atf_check -o empty /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2 1136 atf_check -o match:"/dev/ada1p1.*/mnt/data.*ufs.*rw.*0.*2" cat etc/fstab 1137 atf_check -o match:"tmpfs.*/mnt/tmp.*tmpfs.*size=256M.*0.*0" cat etc/fstab 1138 test -d mnt/data || atf_fail "/mnt/data directory not created" 1139 test -d mnt/tmp || atf_fail "/mnt/tmp directory not created" 1140 true 1141} 1142 1143config2_userdata_fqdn_and_hostname_body() 1144{ 1145 mkdir -p media/nuageinit 1146 setup_test_adduser 1147 printf "{}" > media/nuageinit/meta_data.json 1148 cat > media/nuageinit/user_data <<EOF 1149#cloud-config 1150fqdn: host.domain.tld 1151hostname: host 1152EOF 1153 atf_check -o empty /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2 1154 atf_check -o inline:"hostname=\"host.domain.tld\"\n" cat ${PWD}/etc/rc.conf.d/hostname 1155 cat > media/nuageinit/user_data <<EOF 1156#cloud-config 1157hostname: host 1158EOF 1159 atf_check -o empty /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2 1160 atf_check -o inline:"hostname=\"host\"\n" cat ${PWD}/etc/rc.conf.d/hostname 1161} 1162 1163atf_init_test_cases() 1164{ 1165 atf_add_test_case args 1166 atf_add_test_case nocloud 1167 atf_add_test_case nocloud_userdata_script 1168 atf_add_test_case nocloud_user_data_script 1169 atf_add_test_case nocloud_userdata_cloudconfig_users 1170 atf_add_test_case nocloud_network 1171 atf_add_test_case config2 1172 atf_add_test_case config2_pubkeys 1173 atf_add_test_case config2_pubkeys_user_data 1174 atf_add_test_case config2_pubkeys_meta_data 1175 atf_add_test_case config2_network 1176 atf_add_test_case config2_network_static_v4 1177 atf_add_test_case config2_network_dns 1178 atf_add_test_case config2_ssh_keys 1179 atf_add_test_case nocloud_userdata_cloudconfig_ssh_pwauth 1180 atf_add_test_case nocloud_userdata_cloudconfig_chpasswd 1181 atf_add_test_case nocloud_userdata_cloudconfig_chpasswd_list_string 1182 atf_add_test_case nocloud_userdata_cloudconfig_chpasswd_list_list 1183 atf_add_test_case config2_userdata_runcmd 1184 atf_add_test_case config2_userdata_packages 1185 atf_add_test_case config2_userdata_update_packages 1186 atf_add_test_case config2_userdata_upgrade_packages 1187 atf_add_test_case config2_userdata_shebang 1188 atf_add_test_case config2_userdata_ssh_deletekeys 1189 atf_add_test_case config2_userdata_disable_root 1190 atf_add_test_case config2_userdata_bootcmd 1191 atf_add_test_case config2_userdata_manage_etc_hosts 1192 atf_add_test_case config2_userdata_mounts 1193 atf_add_test_case config2_userdata_fqdn_and_hostname 1194 atf_add_test_case config2_userdata_write_files 1195} 1196