1atf_test_case args 2atf_test_case nocloud 3atf_test_case nocloud_userdata_script 4atf_test_case nocloud_user_data_script 5atf_test_case nocloud_userdata_cloudconfig 6atf_test_case nocloud_userdata_cloudconfig_users 7atf_test_case nocloud_network 8atf_test_case config2 9atf_test_case config2_pubkeys 10atf_test_case config2_pubkeys_user_data 11atf_test_case config2_network 12atf_test_case config2_network_static_v4 13 14 15args_body() 16{ 17 atf_check -s exit:1 -e inline:"Usage /usr/libexec/nuageinit <cloud-init directory> [config-2|nocloud]\n" /usr/libexec/nuageinit 18 atf_check -s exit:1 -e inline:"Usage /usr/libexec/nuageinit <cloud-init directory> [config-2|nocloud]\n" /usr/libexec/nuageinit bla 19 atf_check -s exit:1 -e inline:"Usage /usr/libexec/nuageinit <cloud-init directory> [config-2|nocloud]\n" /usr/libexec/nuageinit bla meh plop 20 atf_check -s exit:1 -e inline:"Unknown cloud init type: meh\n" /usr/libexec/nuageinit bla meh 21} 22 23nocloud_body() 24{ 25 here=$(pwd) 26 mkdir -p media/nuageinit 27 atf_check -s exit:1 -e match:"nuageinit: error parsing nocloud.*" /usr/libexec/nuageinit ${here}/media/nuageinit/ nocloud 28 export NUAGE_FAKE_ROOTDIR=$(pwd) 29 printf "instance-id: iid-local01\nlocal-hostname: cloudimg\n" > ${here}/media/nuageinit/meta-data 30 atf_check -s exit:0 /usr/libexec/nuageinit ${here}/media/nuageinit nocloud 31 atf_check -o inline:"hostname=\"cloudimg\"\n" cat etc/rc.conf.d/hostname 32 cat > media/nuageinit/meta-data << EOF 33instance-id: iid-local01 34hostname: myhost 35EOF 36 atf_check -s exit:0 /usr/libexec/nuageinit ${here}/media/nuageinit nocloud 37 atf_check -o inline:"hostname=\"myhost\"\n" cat etc/rc.conf.d/hostname 38} 39 40nocloud_userdata_script_body() 41{ 42 here=$(pwd) 43 mkdir -p media/nuageinit 44 printf "instance-id: iid-local01\n" > ${here}/media/nuageinit/meta-data 45 printf "#!/bin/sh\necho "yeah"\n" > ${here}/media/nuageinit/user-data 46 chmod 755 ${here}/media/nuageinit/user-data 47 atf_check -s exit:0 -o inline:"yeah\n" /usr/libexec/nuageinit ${here}/media/nuageinit nocloud 48} 49 50nocloud_user_data_script_body() 51{ 52 here=$(pwd) 53 mkdir -p media/nuageinit 54 printf "instance-id: iid-local01\n" > ${here}/media/nuageinit/meta-data 55 printf "#!/bin/sh\necho "yeah"\n" > ${here}/media/nuageinit/user_data 56 chmod 755 ${here}/media/nuageinit/user_data 57 atf_check -s exit:0 -o inline:"yeah\n" /usr/libexec/nuageinit ${here}/media/nuageinit nocloud 58} 59 60nocloud_userdata_cloudconfig_users_body() 61{ 62 here=$(pwd) 63 export NUAGE_FAKE_ROOTDIR=$(pwd) 64 if [ $(id -u) -ne 0 ]; then 65 atf_skip "root required" 66 fi 67 mkdir -p media/nuageinit 68 printf "instance-id: iid-local01\n" > ${here}/media/nuageinit/meta-data 69 mkdir -p etc 70 cat > etc/master.passwd <<EOF 71root:*:0:0::0:0:Charlie &:/root:/bin/csh 72sys:*:1:0::0:0:Sys:/home/sys:/bin/csh 73EOF 74 pwd_mkdb -d etc ${here}/etc/master.passwd 75 cat > etc/group <<EOF 76wheel:*:0:root 77users:*:1: 78EOF 79 cat > media/nuageinit/user-data <<EOF 80#cloud-config 81groups: 82 - admingroup: [root,sys] 83 - cloud-users 84users: 85 - default 86 - name: foobar 87 gecos: Foo B. Bar 88 primary_group: foobar 89 groups: users 90 passwd: $6$j212wezy$7H/1LT4f9/N3wpgNunhsIqtMj62OKiS3nyNwuizouQc3u7MbYCarYeAHWYPYb2FT.lbioDm2RrkJPb9BZMN1O/ 91EOF 92 atf_check /usr/libexec/nuageinit ${here}/media/nuageinit nocloud 93 cat > expectedgroup << EOF 94wheel:*:0:root,freebsd 95users:*:1:foobar 96admingroup:*:1001:root,sys 97cloud-users:*:1002: 98freebsd:*:1003: 99foobar:*:1004: 100EOF 101 cat > expectedpasswd << EOF 102root:*:0:0::0:0:Charlie &:/root:/bin/csh 103sys:*:1:0::0:0:Sys:/home/sys:/bin/csh 104freebsd:freebsd:1001:1003::0:0:FreeBSD User:/home/freebsd:/bin/sh 105foobar:H/1LT4f9/N3wpgNunhsIqtMj62OKiS3nyNwuizouQc3u7MbYCarYeAHWYPYb2FT.lbioDm2RrkJPb9BZMN1O/:1002:1004::0:0:Foo B. Bar:/home/foobar:/bin/sh 106EOF 107 atf_check -o file:expectedpasswd cat ${here}/etc/master.passwd 108 atf_check -o file:expectedgroup cat ${here}/etc/group 109} 110 111nocloud_network_body() 112{ 113 here=$(pwd) 114 mkdir -p media/nuageinit 115 mkdir -p etc 116 cat > etc/master.passwd <<EOF 117root:*:0:0::0:0:Charlie &:/root:/bin/csh 118sys:*:1:0::0:0:Sys:/home/sys:/bin/csh 119EOF 120 pwd_mkdb -d etc ${here}/etc/master.passwd 121 cat > etc/group <<EOF 122wheel:*:0:root 123users:*:1: 124EOF 125 if [ $(id -u) -ne 0 ]; then 126 atf_skip "root required" 127 fi 128 mynetworks=$(ifconfig -l ether) 129 if [ -z "$mynetworks" ]; then 130 atf_skip "a network interface is needed" 131 fi 132 set -- $mynetworks 133 myiface=$1 134 myaddr=$(ifconfig $myiface ether | awk '/ether/ { print $2 }') 135 printf "instance-id: iid-local01\n" > ${here}/media/nuageinit/meta-data 136 cat > media/nuageinit/user-data <<EOF 137#cloud-config 138# 139network: 140 version: 2 141 ethernets: 142 # opaque ID for physical interfaces, only referred to by other stanzas 143 id0: 144 match: 145 macaddress: '${myaddr}' 146 addresses: 147 - 192.168.14.2/24 148 - 2001:1::1/64 149 gateway4: 192.168.14.1 150 gateway6: 2001:1::2 151EOF 152 export NUAGE_FAKE_ROOTDIR=$(pwd) 153 atf_check /usr/libexec/nuageinit ${here}/media/nuageinit nocloud 154 cat > network <<EOF 155ifconfig_${myiface}="inet 192.168.14.2/24" 156ifconfig_${myiface}_ipv6="inet6 2001:1::1/64" 157ipv6_network_interfaces="${myiface}" 158ipv6_default_interface="${myiface}" 159EOF 160 cat > routing <<EOF 161defaultrouter="192.168.14.1" 162ipv6_defaultrouter="2001:1::2" 163ipv6_route_${myiface}="2001:1::2 -prefixlen 128 -interface ${myiface}" 164EOF 165 atf_check -o file:network cat ${here}/etc/rc.conf.d/network 166 atf_check -o file:routing cat ${here}/etc/rc.conf.d/routing 167} 168config2_body() 169{ 170 here=$(pwd) 171 mkdir -p media/nuageinit 172 atf_check -s exit:1 -e match:"nuageinit: error parsing config-2: meta_data.json.*" /usr/libexec/nuageinit ${here}/media/nuageinit config-2 173 printf "{}" > media/nuageinit/meta_data.json 174 atf_check /usr/libexec/nuageinit ${here}/media/nuageinit config-2 175 cat > media/nuageinit/meta_data.json << EOF 176{ 177 "hostname": "cloudimg", 178} 179EOF 180 export NUAGE_FAKE_ROOTDIR=$(pwd) 181 atf_check /usr/libexec/nuageinit ${here}/media/nuageinit config-2 182 atf_check -o inline:"hostname=\"cloudimg\"\n" cat etc/rc.conf.d/hostname 183} 184 185config2_pubkeys_body() 186{ 187 here=$(pwd) 188 export NUAGE_FAKE_ROOTDIR=$(pwd) 189 if [ $(id -u) -ne 0 ]; then 190 atf_skip "root required" 191 fi 192 mkdir -p media/nuageinit 193 touch media/nuageinit/meta_data.json 194 cat > media/nuageinit/user-data << EOF 195#cloud-config 196 197ssh_authorized_keys: 198 - "ssh-rsa AAAAB3NzaC1y...== Generated by Nova" 199EOF 200 mkdir -p etc 201 cat > etc/master.passwd <<EOF 202root:*:0:0::0:0:Charlie &:/root:/bin/csh 203sys:*:1:0::0:0:Sys:/home/sys:/bin/csh 204EOF 205 pwd_mkdb -d etc ${here}/etc/master.passwd 206 cat > etc/group <<EOF 207wheel:*:0:root 208users:*:1: 209EOF 210 atf_check /usr/libexec/nuageinit ${here}/media/nuageinit config-2 211 atf_check -o inline:"ssh-rsa AAAAB3NzaC1y...== Generated by Nova\n" cat home/freebsd/.ssh/authorized_keys 212} 213 214 215config2_pubkeys_user_data_body() 216{ 217 here=$(pwd) 218 export NUAGE_FAKE_ROOTDIR=$(pwd) 219 if [ $(id -u) -ne 0 ]; then 220 atf_skip "root required" 221 fi 222 mkdir -p media/nuageinit 223 touch media/nuageinit/meta_data.json 224 cat > media/nuageinit/user_data << EOF 225#cloud-config 226 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/csh 233sys:*:1:0::0:0:Sys:/home/sys:/bin/csh 234EOF 235 pwd_mkdb -d etc ${here}/etc/master.passwd 236 cat > etc/group <<EOF 237wheel:*:0:root 238users:*:1: 239EOF 240 atf_check /usr/libexec/nuageinit ${here}/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_network_body() { 245 here=$(pwd) 246 mkdir -p media/nuageinit 247 printf "{}" > media/nuageinit/meta_data.json 248 mynetworks=$(ifconfig -l ether) 249 if [ -z "$mynetworks" ]; then 250 atf_skip "a network interface is needed" 251 fi 252 set -- $mynetworks 253 myiface=$1 254 myaddr=$(ifconfig $myiface ether | awk '/ether/ { print $2 }') 255cat > media/nuageinit/network_data.json <<EOF 256{ 257 "links": [ 258 { 259 "ethernet_mac_address": "$myaddr", 260 "id": "iface0", 261 "mtu": null, 262 } 263 ], 264 "networks": [ 265 { 266 "id": "network0", 267 "link": "iface0", 268 "type": "ipv4_dhcp" 269 }, 270 { // IPv6 271 "id": "private-ipv4", 272 "type": "ipv6", 273 "link": "iface0", 274 // supports condensed IPv6 with CIDR netmask 275 "ip_address": "2001:cdba::3257:9652/24", 276 "gateway": "fd00::1" 277 "routes": [ 278 { 279 "network": "::", 280 "netmask": "::", 281 "gateway": "fd00::1" 282 }, 283 { 284 "network": "::", 285 "netmask": "ffff:ffff:ffff::", 286 "gateway": "fd00::1:1" 287 }, 288 ], 289 "network_id": "da5bb487-5193-4a65-a3df-4a0055a8c0d8" 290}, 291 ], 292} 293EOF 294 export NUAGE_FAKE_ROOTDIR=$(pwd) 295 atf_check /usr/libexec/nuageinit ${here}/media/nuageinit config-2 296 cat > network <<EOF 297ifconfig_${myiface}="DHCP" 298ifconfig_${myiface}_ipv6="inet6 2001:cdba::3257:9652/24" 299ipv6_network_interfaces="${myiface}" 300ipv6_default_interface="${myiface}" 301EOF 302 cat > routing <<EOF 303ipv6_defaultrouter="fd00::1" 304ipv6_route_${myiface}="fd00::1 -prefixlen 128 -interface ${myiface}" 305ipv6_static_routes="${myiface}" 306EOF 307 atf_check -o file:network cat ${here}/etc/rc.conf.d/network 308 atf_check -o file:routing cat ${here}/etc/rc.conf.d/routing 309} 310 311config2_network_static_v4_body() { 312 here=$(pwd) 313 mkdir -p media/nuageinit 314 printf "{}" > media/nuageinit/meta_data.json 315 mynetworks=$(ifconfig -l ether) 316 if [ -z "$mynetworks" ]; then 317 atf_skip "a network interface is needed" 318 fi 319 set -- $mynetworks 320 myiface=$1 321 myaddr=$(ifconfig $myiface ether | awk '/ether/ { print $2 }') 322cat > media/nuageinit/network_data.json <<EOF 323{ 324 "links": [ 325 { 326 "ethernet_mac_address": "$myaddr", 327 "id": "iface0", 328 "mtu": null, 329 } 330 ], 331 "networks": [ 332 { 333 "id": "network0", 334 "link": "iface0", 335 "type": "ipv4" 336 "ip_address": "10.184.0.244", 337 "netmask": "255.255.240.0", 338 "routes": [ 339 { 340 "network": "10.0.0.0", 341 "netmask": "255.0.0.0", 342 "gateway": "11.0.0.1" 343 }, 344 { 345 "network": "0.0.0.0", 346 "netmask": "0.0.0.0", 347 "gateway": "23.253.157.1" 348 } 349 ] 350 } 351] 352} 353EOF 354 355 export NUAGE_FAKE_ROOTDIR=$(pwd) 356 atf_check /usr/libexec/nuageinit ${here}/media/nuageinit config-2 357 cat > network <<EOF 358ifconfig_${myiface}="inet 10.184.0.244 netmask 255.255.240.0" 359EOF 360 cat > routing <<EOF 361route_cloudinit1_${myiface}="-net 10.0.0.0 11.0.0.1 255.0.0.0" 362defaultrouter="23.253.157.1" 363static_routes="cloudinit1_${myiface}" 364EOF 365 atf_check -o file:network cat ${here}/etc/rc.conf.d/network 366 atf_check -o file:routing cat ${here}/etc/rc.conf.d/routing 367} 368 369atf_init_test_cases() 370{ 371 atf_add_test_case args 372 atf_add_test_case nocloud 373 atf_add_test_case nocloud_userdata_script 374 atf_add_test_case nocloud_user_data_script 375 atf_add_test_case nocloud_userdata_cloudconfig_users 376 atf_add_test_case nocloud_network 377 atf_add_test_case config2 378 atf_add_test_case config2_pubkeys 379 atf_add_test_case config2_pubkeys_user_data 380 atf_add_test_case config2_network 381 atf_add_test_case config2_network_static_v4 382} 383