xref: /freebsd/libexec/nuageinit/tests/nuageinit.sh (revision b56d2195f124d48ce54369d179aa1d4663e5e64a)
150498135SJose Luis Duran#-
219a7ea3cSBaptiste Daroussin# Copyright (c) 2022-2025 Baptiste Daroussin <bapt@FreeBSD.org>
350498135SJose Luis Duran#
450498135SJose Luis Duran# SPDX-License-Identifier: BSD-2-Clause
550498135SJose Luis Duran#
650498135SJose Luis Duran
7e72457c4SJose Luis Duranexport NUAGE_FAKE_ROOTDIR="$PWD"
8e72457c4SJose Luis Duran
9a42d6f76SBaptiste Daroussinatf_test_case args
10a42d6f76SBaptiste Daroussinatf_test_case nocloud
11a42d6f76SBaptiste Daroussinatf_test_case nocloud_userdata_script
12cde66424SBaptiste Daroussinatf_test_case nocloud_user_data_script
13a42d6f76SBaptiste Daroussinatf_test_case nocloud_userdata_cloudconfig_users
14a42d6f76SBaptiste Daroussinatf_test_case nocloud_network
15a42d6f76SBaptiste Daroussinatf_test_case config2
16a42d6f76SBaptiste Daroussinatf_test_case config2_pubkeys
17cde66424SBaptiste Daroussinatf_test_case config2_pubkeys_user_data
1819fb9ad7SBaptiste Daroussinatf_test_case config2_pubkeys_meta_data
19a42d6f76SBaptiste Daroussinatf_test_case config2_network
20a42d6f76SBaptiste Daroussinatf_test_case config2_network_static_v4
2141fe9d53SBaptiste Daroussinatf_test_case config2_ssh_keys
22f85d0868SBaptiste Daroussinatf_test_case nocloud_userdata_cloudconfig_ssh_pwauth
23c201a119SBaptiste Daroussinatf_test_case nocloud_userdata_cloudconfig_chpasswd
24c201a119SBaptiste Daroussinatf_test_case nocloud_userdata_cloudconfig_chpasswd_list_string
25c201a119SBaptiste Daroussinatf_test_case nocloud_userdata_cloudconfig_chpasswd_list_list
262f35a521SSebastien Baylocqatf_test_case config2_userdata_runcmd
27076fec1bSSebastien Baylocqatf_test_case config2_userdata_packages
28682af960SSebastien Baylocqatf_test_case config2_userdata_update_packages
29682af960SSebastien Baylocqatf_test_case config2_userdata_upgrade_packages
3009545628SBaptiste Daroussinatf_test_case config2_userdata_shebang
31f1dd507bSBaptiste Daroussinatf_test_case config2_userdata_fqdn_and_hostname
3219a7ea3cSBaptiste Daroussinatf_test_case config2_userdata_write_files
33a42d6f76SBaptiste Daroussin
34e38f521fSSebastien Baylocqsetup_test_adduser()
35e38f521fSSebastien Baylocq{
36e38f521fSSebastien Baylocq	here=$(pwd)
37e38f521fSSebastien Baylocq	export NUAGE_FAKE_ROOTDIR=$(pwd)
38e38f521fSSebastien Baylocq	mkdir -p etc/ssh
39e38f521fSSebastien Baylocq	cat > etc/master.passwd << EOF
40e38f521fSSebastien Baylocqroot:*:0:0::0:0:Charlie &:/root:/bin/csh
41e38f521fSSebastien Baylocqsys:*:1:0::0:0:Sys:/home/sys:/bin/csh
42e38f521fSSebastien BaylocqEOF
43e38f521fSSebastien Baylocq	pwd_mkdb -d etc ${here}/etc/master.passwd
44e38f521fSSebastien Baylocq	cat > etc/group << EOF
45e38f521fSSebastien Baylocqwheel:*:0:root
46e38f521fSSebastien Baylocqusers:*:1:
47e38f521fSSebastien BaylocqEOF
48e38f521fSSebastien Baylocq}
49e38f521fSSebastien Baylocq
50a42d6f76SBaptiste Daroussinargs_body()
51a42d6f76SBaptiste Daroussin{
5238bb6f79SJose Luis Duran	atf_check -s exit:1 -e inline:"Usage: /usr/libexec/nuageinit <cloud-init-directory> (<config-2> | <nocloud>)\n" /usr/libexec/nuageinit
5338bb6f79SJose Luis Duran	atf_check -s exit:1 -e inline:"Usage: /usr/libexec/nuageinit <cloud-init-directory> (<config-2> | <nocloud>)\n" /usr/libexec/nuageinit bla
5438bb6f79SJose Luis Duran	atf_check -s exit:1 -e inline:"Usage: /usr/libexec/nuageinit <cloud-init-directory> (<config-2> | <nocloud>)\n" /usr/libexec/nuageinit bla meh plop
55945632caSJose Luis Duran	atf_check -s exit:1 -e inline:"nuageinit: Unknown cloud init type: meh\n" /usr/libexec/nuageinit bla meh
56a42d6f76SBaptiste Daroussin}
57a42d6f76SBaptiste Daroussin
58a42d6f76SBaptiste Daroussinnocloud_body()
59a42d6f76SBaptiste Daroussin{
60a42d6f76SBaptiste Daroussin	mkdir -p media/nuageinit
61e72457c4SJose Luis Duran	atf_check -s exit:1 -e match:"nuageinit: error parsing nocloud.*" /usr/libexec/nuageinit "${PWD}"/media/nuageinit/ nocloud
62e72457c4SJose Luis Duran	printf "instance-id: iid-local01\nlocal-hostname: cloudimg\n" > "${PWD}"/media/nuageinit/meta-data
63e72457c4SJose Luis Duran	atf_check -s exit:0 /usr/libexec/nuageinit "${PWD}"/media/nuageinit nocloud
64a42d6f76SBaptiste Daroussin	atf_check -o inline:"hostname=\"cloudimg\"\n" cat etc/rc.conf.d/hostname
65a42d6f76SBaptiste Daroussin	cat > media/nuageinit/meta-data << EOF
66a42d6f76SBaptiste Daroussininstance-id: iid-local01
67a42d6f76SBaptiste Daroussinhostname: myhost
68a42d6f76SBaptiste DaroussinEOF
69e72457c4SJose Luis Duran	atf_check -s exit:0 /usr/libexec/nuageinit "${PWD}"/media/nuageinit nocloud
70a42d6f76SBaptiste Daroussin	atf_check -o inline:"hostname=\"myhost\"\n" cat etc/rc.conf.d/hostname
71a42d6f76SBaptiste Daroussin}
72a42d6f76SBaptiste Daroussin
73a42d6f76SBaptiste Daroussinnocloud_userdata_script_body()
74a42d6f76SBaptiste Daroussin{
75a42d6f76SBaptiste Daroussin	mkdir -p media/nuageinit
76e72457c4SJose Luis Duran	printf "instance-id: iid-local01\n" > "${PWD}"/media/nuageinit/meta-data
77e72457c4SJose Luis Duran	printf "#!/bin/sh\necho yeah\n" > "${PWD}"/media/nuageinit/user-data
78e72457c4SJose Luis Duran	chmod 755 "${PWD}"/media/nuageinit/user-data
7909545628SBaptiste Daroussin	atf_check -s exit:0 /usr/libexec/nuageinit "${PWD}"/media/nuageinit nocloud
8009545628SBaptiste Daroussin	atf_check -o inline:"#!/bin/sh\necho yeah\n" cat var/cache/nuageinit/user_data
81a42d6f76SBaptiste Daroussin}
82a42d6f76SBaptiste Daroussin
83cde66424SBaptiste Daroussinnocloud_user_data_script_body()
84cde66424SBaptiste Daroussin{
85cde66424SBaptiste Daroussin	mkdir -p media/nuageinit
86e72457c4SJose Luis Duran	printf "instance-id: iid-local01\n" > "${PWD}"/media/nuageinit/meta-data
87e72457c4SJose Luis Duran	printf "#!/bin/sh\necho yeah\n" > "${PWD}"/media/nuageinit/user_data
88e72457c4SJose Luis Duran	chmod 755 "${PWD}"/media/nuageinit/user_data
8909545628SBaptiste Daroussin	atf_check -s exit:0 /usr/libexec/nuageinit "${PWD}"/media/nuageinit nocloud
9009545628SBaptiste Daroussin	atf_check -o inline:"#!/bin/sh\necho yeah\n" cat var/cache/nuageinit/user_data
91cde66424SBaptiste Daroussin}
92cde66424SBaptiste Daroussin
93e72457c4SJose Luis Durannocloud_userdata_cloudconfig_users_head()
94e72457c4SJose Luis Duran{
95e72457c4SJose Luis Duran	atf_set "require.user" root
96e72457c4SJose Luis Duran}
97a42d6f76SBaptiste Daroussinnocloud_userdata_cloudconfig_users_body()
98a42d6f76SBaptiste Daroussin{
99a42d6f76SBaptiste Daroussin	mkdir -p media/nuageinit
100e72457c4SJose Luis Duran	printf "instance-id: iid-local01\n" > "${PWD}"/media/nuageinit/meta-data
101a42d6f76SBaptiste Daroussin	mkdir -p etc
102a42d6f76SBaptiste Daroussin	cat > etc/master.passwd << EOF
103e72457c4SJose Luis Duranroot:*:0:0::0:0:Charlie &:/root:/bin/sh
104e72457c4SJose Luis Duransys:*:1:0::0:0:Sys:/home/sys:/bin/sh
105a42d6f76SBaptiste DaroussinEOF
106e72457c4SJose Luis Duran	pwd_mkdb -d etc "${PWD}"/etc/master.passwd
107a42d6f76SBaptiste Daroussin	cat > etc/group << EOF
108a42d6f76SBaptiste Daroussinwheel:*:0:root
109a42d6f76SBaptiste Daroussinusers:*:1:
110a42d6f76SBaptiste DaroussinEOF
111b9ce743cSJose Luis Duran	cat > media/nuageinit/user-data << 'EOF'
112a42d6f76SBaptiste Daroussin#cloud-config
113a42d6f76SBaptiste Daroussingroups:
114a42d6f76SBaptiste Daroussin  - admingroup: [root,sys]
115a42d6f76SBaptiste Daroussin  - cloud-users
116a42d6f76SBaptiste Daroussinusers:
117a42d6f76SBaptiste Daroussin  - default
118a42d6f76SBaptiste Daroussin  - name: foobar
119a42d6f76SBaptiste Daroussin    gecos: Foo B. Bar
120a42d6f76SBaptiste Daroussin    primary_group: foobar
1216a54f886SBaptiste Daroussin    sudo: ALL=(ALL) NOPASSWD:ALL
122a42d6f76SBaptiste Daroussin    groups: users
123a42d6f76SBaptiste Daroussin    passwd: $6$j212wezy$7H/1LT4f9/N3wpgNunhsIqtMj62OKiS3nyNwuizouQc3u7MbYCarYeAHWYPYb2FT.lbioDm2RrkJPb9BZMN1O/
124*b56d2195SBaptiste Daroussin  - name: bla
125*b56d2195SBaptiste Daroussin    sudo:
126*b56d2195SBaptiste Daroussin    - "ALL=(ALL) NOPASSWD:/usr/sbin/pw"
127*b56d2195SBaptiste Daroussin    - "ALL=(ALL) ALL"
128a42d6f76SBaptiste DaroussinEOF
129e72457c4SJose Luis Duran	atf_check /usr/libexec/nuageinit "${PWD}"/media/nuageinit nocloud
1302a05d577SBaptiste Daroussin	atf_check /usr/libexec/nuageinit "${PWD}"/media/nuageinit postnet
131a42d6f76SBaptiste Daroussin	cat > expectedgroup << EOF
132a42d6f76SBaptiste Daroussinwheel:*:0:root,freebsd
133a42d6f76SBaptiste Daroussinusers:*:1:foobar
134a42d6f76SBaptiste Daroussinadmingroup:*:1001:root,sys
135a42d6f76SBaptiste Daroussincloud-users:*:1002:
136a42d6f76SBaptiste Daroussinfreebsd:*:1003:
137a42d6f76SBaptiste Daroussinfoobar:*:1004:
138*b56d2195SBaptiste Daroussinbla:*:1005:
139a42d6f76SBaptiste DaroussinEOF
140b9ce743cSJose Luis Duran	cat > expectedpasswd << 'EOF'
141e72457c4SJose Luis Duranroot:*:0:0::0:0:Charlie &:/root:/bin/sh
142e72457c4SJose Luis Duransys:*:1:0::0:0:Sys:/home/sys:/bin/sh
143a42d6f76SBaptiste Daroussinfreebsd:freebsd:1001:1003::0:0:FreeBSD User:/home/freebsd:/bin/sh
144b9ce743cSJose Luis Duranfoobar:$6$j212wezy$7H/1LT4f9/N3wpgNunhsIqtMj62OKiS3nyNwuizouQc3u7MbYCarYeAHWYPYb2FT.lbioDm2RrkJPb9BZMN1O/:1002:1004::0:0:Foo B. Bar:/home/foobar:/bin/sh
145*b56d2195SBaptiste Daroussinbla::1003:1005::0:0:bla User:/home/bla:/bin/sh
146a42d6f76SBaptiste DaroussinEOF
147e72457c4SJose Luis Duran	sed -i "" "s/freebsd:.*:1001/freebsd:freebsd:1001/" "${PWD}"/etc/master.passwd
148e72457c4SJose Luis Duran	atf_check -o file:expectedpasswd cat "${PWD}"/etc/master.passwd
149e72457c4SJose Luis Duran	atf_check -o file:expectedgroup cat "${PWD}"/etc/group
150*b56d2195SBaptiste Daroussin	atf_check -o inline:"foobar ALL=(ALL) NOPASSWD:ALL\nbla ALL=(ALL) NOPASSWD:/usr/sbin/pw\nbla ALL=(ALL) ALL\n" cat ${PWD}/usr/local/etc/sudoers.d/90-nuageinit-users
151a42d6f76SBaptiste Daroussin}
152a42d6f76SBaptiste Daroussin
153e72457c4SJose Luis Durannocloud_network_head()
154e72457c4SJose Luis Duran{
155e72457c4SJose Luis Duran	atf_set "require.user" root
156e72457c4SJose Luis Duran}
157a42d6f76SBaptiste Daroussinnocloud_network_body()
158a42d6f76SBaptiste Daroussin{
159a42d6f76SBaptiste Daroussin	mkdir -p media/nuageinit
160a42d6f76SBaptiste Daroussin	mkdir -p etc
161a42d6f76SBaptiste Daroussin	cat > etc/master.passwd << EOF
162e72457c4SJose Luis Duranroot:*:0:0::0:0:Charlie &:/root:/bin/sh
163e72457c4SJose Luis Duransys:*:1:0::0:0:Sys:/home/sys:/bin/sh
164a42d6f76SBaptiste DaroussinEOF
165e72457c4SJose Luis Duran	pwd_mkdb -d etc "${PWD}"/etc/master.passwd
166a42d6f76SBaptiste Daroussin	cat > etc/group << EOF
167a42d6f76SBaptiste Daroussinwheel:*:0:root
168a42d6f76SBaptiste Daroussinusers:*:1:
169a42d6f76SBaptiste DaroussinEOF
170a42d6f76SBaptiste Daroussin	mynetworks=$(ifconfig -l ether)
171a42d6f76SBaptiste Daroussin	if [ -z "$mynetworks" ]; then
172a42d6f76SBaptiste Daroussin		atf_skip "a network interface is needed"
173a42d6f76SBaptiste Daroussin	fi
174a42d6f76SBaptiste Daroussin	set -- $mynetworks
175a42d6f76SBaptiste Daroussin	myiface=$1
176a42d6f76SBaptiste Daroussin	myaddr=$(ifconfig $myiface ether | awk '/ether/ { print $2 }')
177e72457c4SJose Luis Duran	printf "instance-id: iid-local01\n" > "${PWD}"/media/nuageinit/meta-data
178a42d6f76SBaptiste Daroussin	cat > media/nuageinit/user-data << EOF
179a42d6f76SBaptiste Daroussin#cloud-config
180a42d6f76SBaptiste Daroussinnetwork:
181a42d6f76SBaptiste Daroussin  version: 2
182a42d6f76SBaptiste Daroussin  ethernets:
183a42d6f76SBaptiste Daroussin    # opaque ID for physical interfaces, only referred to by other stanzas
184a42d6f76SBaptiste Daroussin    id0:
185a42d6f76SBaptiste Daroussin      match:
18650498135SJose Luis Duran        macaddress: "$myaddr"
187a42d6f76SBaptiste Daroussin      addresses:
188e72457c4SJose Luis Duran        - 192.0.2.2/24
189e72457c4SJose Luis Duran        - 2001:db8::2/64
190e72457c4SJose Luis Duran      gateway4: 192.0.2.1
191e72457c4SJose Luis Duran      gateway6: 2001:db8::1
192a42d6f76SBaptiste DaroussinEOF
193e72457c4SJose Luis Duran	atf_check /usr/libexec/nuageinit "${PWD}"/media/nuageinit nocloud
194a42d6f76SBaptiste Daroussin	cat > network << EOF
195e72457c4SJose Luis Duranifconfig_${myiface}="inet 192.0.2.2/24"
196e72457c4SJose Luis Duranifconfig_${myiface}_ipv6="inet6 2001:db8::2/64"
197a42d6f76SBaptiste Daroussinipv6_network_interfaces="${myiface}"
198a42d6f76SBaptiste Daroussinipv6_default_interface="${myiface}"
199a42d6f76SBaptiste DaroussinEOF
200a42d6f76SBaptiste Daroussin	cat > routing << EOF
201e72457c4SJose Luis Durandefaultrouter="192.0.2.1"
202e72457c4SJose Luis Duranipv6_defaultrouter="2001:db8::1"
203e72457c4SJose Luis Duranipv6_route_${myiface}="2001:db8::1 -prefixlen 128 -interface ${myiface}"
204a42d6f76SBaptiste DaroussinEOF
205e72457c4SJose Luis Duran	atf_check -o file:network cat "${PWD}"/etc/rc.conf.d/network
206e72457c4SJose Luis Duran	atf_check -o file:routing cat "${PWD}"/etc/rc.conf.d/routing
207a42d6f76SBaptiste Daroussin}
208e72457c4SJose Luis Duran
209a42d6f76SBaptiste Daroussinconfig2_body()
210a42d6f76SBaptiste Daroussin{
211a42d6f76SBaptiste Daroussin	mkdir -p media/nuageinit
212e72457c4SJose Luis Duran	atf_check -s exit:1 -e match:"nuageinit: error parsing config-2 meta_data.json:.*" /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2
213a42d6f76SBaptiste Daroussin	printf "{}" > media/nuageinit/meta_data.json
214e72457c4SJose Luis Duran	atf_check /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2
215a42d6f76SBaptiste Daroussin	cat > media/nuageinit/meta_data.json << EOF
216a42d6f76SBaptiste Daroussin{
21750498135SJose Luis Duran    "hostname": "cloudimg"
218a42d6f76SBaptiste Daroussin}
219a42d6f76SBaptiste DaroussinEOF
220e72457c4SJose Luis Duran	atf_check /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2
221a42d6f76SBaptiste Daroussin	atf_check -o inline:"hostname=\"cloudimg\"\n" cat etc/rc.conf.d/hostname
222a42d6f76SBaptiste Daroussin}
223a42d6f76SBaptiste Daroussin
224e72457c4SJose Luis Duranconfig2_pubkeys_head()
225e72457c4SJose Luis Duran{
226e72457c4SJose Luis Duran	atf_set "require.user" root
227e72457c4SJose Luis Duran}
228a42d6f76SBaptiste Daroussinconfig2_pubkeys_body()
229a42d6f76SBaptiste Daroussin{
230a42d6f76SBaptiste Daroussin	mkdir -p media/nuageinit
2318d7331e6SBaptiste Daroussin	touch media/nuageinit/meta_data.json
2328d7331e6SBaptiste Daroussin	cat > media/nuageinit/user-data << EOF
2338d7331e6SBaptiste Daroussin#cloud-config
2348d7331e6SBaptiste Daroussinssh_authorized_keys:
2358d7331e6SBaptiste Daroussin  - "ssh-rsa AAAAB3NzaC1y...== Generated by Nova"
236a42d6f76SBaptiste DaroussinEOF
237a42d6f76SBaptiste Daroussin	mkdir -p etc
238a42d6f76SBaptiste Daroussin	cat > etc/master.passwd << EOF
239e72457c4SJose Luis Duranroot:*:0:0::0:0:Charlie &:/root:/bin/sh
240e72457c4SJose Luis Duransys:*:1:0::0:0:Sys:/home/sys:/bin/sh
241a42d6f76SBaptiste DaroussinEOF
242e72457c4SJose Luis Duran	pwd_mkdb -d etc "${PWD}"/etc/master.passwd
243a42d6f76SBaptiste Daroussin	cat > etc/group << EOF
244a42d6f76SBaptiste Daroussinwheel:*:0:root
245a42d6f76SBaptiste Daroussinusers:*:1:
246a42d6f76SBaptiste DaroussinEOF
247e72457c4SJose Luis Duran	atf_check /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2
248a42d6f76SBaptiste Daroussin	atf_check -o inline:"ssh-rsa AAAAB3NzaC1y...== Generated by Nova\n" cat home/freebsd/.ssh/authorized_keys
249a42d6f76SBaptiste Daroussin}
250a42d6f76SBaptiste Daroussin
251e72457c4SJose Luis Duranconfig2_pubkeys_user_data_head()
252e72457c4SJose Luis Duran{
253e72457c4SJose Luis Duran	atf_set "require.user" root
254e72457c4SJose Luis Duran}
255cde66424SBaptiste Daroussinconfig2_pubkeys_user_data_body()
256cde66424SBaptiste Daroussin{
257cde66424SBaptiste Daroussin	mkdir -p media/nuageinit
258cde66424SBaptiste Daroussin	touch media/nuageinit/meta_data.json
259cde66424SBaptiste Daroussin	cat > media/nuageinit/user_data << EOF
260cde66424SBaptiste Daroussin#cloud-config
261cde66424SBaptiste Daroussinssh_authorized_keys:
262cde66424SBaptiste Daroussin  - "ssh-rsa AAAAB3NzaC1y...== Generated by Nova"
263cde66424SBaptiste DaroussinEOF
264cde66424SBaptiste Daroussin	mkdir -p etc
265cde66424SBaptiste Daroussin	cat > etc/master.passwd << EOF
266e72457c4SJose Luis Duranroot:*:0:0::0:0:Charlie &:/root:/bin/sh
267e72457c4SJose Luis Duransys:*:1:0::0:0:Sys:/home/sys:/bin/sh
268cde66424SBaptiste DaroussinEOF
269e72457c4SJose Luis Duran	pwd_mkdb -d etc "${PWD}"/etc/master.passwd
270cde66424SBaptiste Daroussin	cat > etc/group << EOF
271cde66424SBaptiste Daroussinwheel:*:0:root
272cde66424SBaptiste Daroussinusers:*:1:
273cde66424SBaptiste DaroussinEOF
274e72457c4SJose Luis Duran	atf_check /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2
275cde66424SBaptiste Daroussin	atf_check -o inline:"ssh-rsa AAAAB3NzaC1y...== Generated by Nova\n" cat home/freebsd/.ssh/authorized_keys
276cde66424SBaptiste Daroussin}
277cde66424SBaptiste Daroussin
27819fb9ad7SBaptiste Daroussinconfig2_pubkeys_meta_data_body()
27919fb9ad7SBaptiste Daroussin{
28019fb9ad7SBaptiste Daroussin	here=$(pwd)
28119fb9ad7SBaptiste Daroussin	export NUAGE_FAKE_ROOTDIR=$(pwd)
28219fb9ad7SBaptiste Daroussin	if [ $(id -u) -ne 0 ]; then
28319fb9ad7SBaptiste Daroussin		atf_skip "root required"
28419fb9ad7SBaptiste Daroussin	fi
28519fb9ad7SBaptiste Daroussin	mkdir -p media/nuageinit
28619fb9ad7SBaptiste Daroussin	cat > media/nuageinit/meta_data.json << EOF
28719fb9ad7SBaptiste Daroussin{
28819fb9ad7SBaptiste Daroussin    "uuid": "uuid_for_this_instance",
28919fb9ad7SBaptiste Daroussin    "admin_pass": "a_generated_password",
29019fb9ad7SBaptiste Daroussin    "public_keys": {
29119fb9ad7SBaptiste Daroussin        "tdb": "ssh-ed25519 my_key_id tdb@host"
29219fb9ad7SBaptiste Daroussin    },
29319fb9ad7SBaptiste Daroussin    "keys": [
29419fb9ad7SBaptiste Daroussin        {
29519fb9ad7SBaptiste Daroussin            "name": "tdb",
29619fb9ad7SBaptiste Daroussin            "type": "ssh",
29719fb9ad7SBaptiste Daroussin            "data": "ssh-ed25519 my_key_id tdb@host"
29819fb9ad7SBaptiste Daroussin        }
29919fb9ad7SBaptiste Daroussin    ],
30019fb9ad7SBaptiste Daroussin    "hostname": "freebsd-14-test.novalocal",
30119fb9ad7SBaptiste Daroussin    "name": "freebsd-14-test",
30219fb9ad7SBaptiste Daroussin    "launch_index": 0,
30319fb9ad7SBaptiste Daroussin    "availability_zone": "nova",
30419fb9ad7SBaptiste Daroussin    "random_seed": "long_random_seed",
30519fb9ad7SBaptiste Daroussin    "project_id": "my_project_id",
30619fb9ad7SBaptiste Daroussin    "devices": [],
30719fb9ad7SBaptiste Daroussin    "dedicated_cpus": []
30819fb9ad7SBaptiste Daroussin}
30919fb9ad7SBaptiste DaroussinEOF
31019fb9ad7SBaptiste Daroussin	mkdir -p etc
31119fb9ad7SBaptiste Daroussin	cat > etc/master.passwd << EOF
31219fb9ad7SBaptiste Daroussinroot:*:0:0::0:0:Charlie &:/root:/bin/csh
31319fb9ad7SBaptiste Daroussinsys:*:1:0::0:0:Sys:/home/sys:/bin/csh
31419fb9ad7SBaptiste DaroussinEOF
31519fb9ad7SBaptiste Daroussin	pwd_mkdb -d etc ${here}/etc/master.passwd
31619fb9ad7SBaptiste Daroussin	cat > etc/group << EOF
31719fb9ad7SBaptiste Daroussinwheel:*:0:root
31819fb9ad7SBaptiste Daroussinusers:*:1:
31919fb9ad7SBaptiste DaroussinEOF
32019fb9ad7SBaptiste Daroussin	atf_check /usr/libexec/nuageinit ${here}/media/nuageinit config-2
32119fb9ad7SBaptiste Daroussin	atf_check -o inline:"ssh-ed25519 my_key_id tdb@host\n" cat home/freebsd/.ssh/authorized_keys
32219fb9ad7SBaptiste Daroussin}
32319fb9ad7SBaptiste Daroussin
32450498135SJose Luis Duranconfig2_network_body()
32550498135SJose Luis Duran{
326a42d6f76SBaptiste Daroussin	mkdir -p media/nuageinit
327a42d6f76SBaptiste Daroussin	printf "{}" > media/nuageinit/meta_data.json
328a42d6f76SBaptiste Daroussin	mynetworks=$(ifconfig -l ether)
329a42d6f76SBaptiste Daroussin	if [ -z "$mynetworks" ]; then
330a42d6f76SBaptiste Daroussin		atf_skip "a network interface is needed"
331a42d6f76SBaptiste Daroussin	fi
332a42d6f76SBaptiste Daroussin	set -- $mynetworks
333a42d6f76SBaptiste Daroussin	myiface=$1
334a42d6f76SBaptiste Daroussin	myaddr=$(ifconfig $myiface ether | awk '/ether/ { print $2 }')
335a42d6f76SBaptiste Daroussincat > media/nuageinit/network_data.json << EOF
336a42d6f76SBaptiste Daroussin{
337a42d6f76SBaptiste Daroussin    "links": [
338a42d6f76SBaptiste Daroussin        {
339a42d6f76SBaptiste Daroussin            "ethernet_mac_address": "$myaddr",
340a42d6f76SBaptiste Daroussin            "id": "iface0",
34150498135SJose Luis Duran            "mtu": null
342a42d6f76SBaptiste Daroussin        }
343a42d6f76SBaptiste Daroussin    ],
344a42d6f76SBaptiste Daroussin    "networks": [
345a42d6f76SBaptiste Daroussin        {
346a42d6f76SBaptiste Daroussin            "id": "network0",
347a42d6f76SBaptiste Daroussin            "link": "iface0",
348a42d6f76SBaptiste Daroussin            "type": "ipv4_dhcp"
349a42d6f76SBaptiste Daroussin        },
350a42d6f76SBaptiste Daroussin        { // IPv6
351a42d6f76SBaptiste Daroussin            "id": "private-ipv4",
352a42d6f76SBaptiste Daroussin            "type": "ipv6",
353a42d6f76SBaptiste Daroussin            "link": "iface0",
354a42d6f76SBaptiste Daroussin            // supports condensed IPv6 with CIDR netmask
355e72457c4SJose Luis Duran            "ip_address": "2001:db8::3257:9652/64",
35650498135SJose Luis Duran            "gateway": "fd00::1",
357a42d6f76SBaptiste Daroussin            "routes": [
358a42d6f76SBaptiste Daroussin                {
359a42d6f76SBaptiste Daroussin                    "network": "::",
360a42d6f76SBaptiste Daroussin                    "netmask": "::",
361a42d6f76SBaptiste Daroussin                    "gateway": "fd00::1"
362a42d6f76SBaptiste Daroussin                },
363a42d6f76SBaptiste Daroussin                {
364a42d6f76SBaptiste Daroussin                    "network": "::",
365a42d6f76SBaptiste Daroussin                    "netmask": "ffff:ffff:ffff::",
366a42d6f76SBaptiste Daroussin                    "gateway": "fd00::1:1"
36750498135SJose Luis Duran                }
368a42d6f76SBaptiste Daroussin            ],
369a42d6f76SBaptiste Daroussin            "network_id": "da5bb487-5193-4a65-a3df-4a0055a8c0d8"
37050498135SJose Luis Duran        }
37150498135SJose Luis Duran    ]
372a42d6f76SBaptiste Daroussin}
373a42d6f76SBaptiste DaroussinEOF
374e72457c4SJose Luis Duran	atf_check /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2
375a42d6f76SBaptiste Daroussin	cat > network << EOF
376a42d6f76SBaptiste Daroussinifconfig_${myiface}="DHCP"
377e72457c4SJose Luis Duranifconfig_${myiface}_ipv6="inet6 2001:db8::3257:9652/64"
378a42d6f76SBaptiste Daroussinipv6_network_interfaces="${myiface}"
379a42d6f76SBaptiste Daroussinipv6_default_interface="${myiface}"
380a42d6f76SBaptiste DaroussinEOF
381a42d6f76SBaptiste Daroussin	cat > routing << EOF
382a42d6f76SBaptiste Daroussinipv6_defaultrouter="fd00::1"
383a42d6f76SBaptiste Daroussinipv6_route_${myiface}="fd00::1 -prefixlen 128 -interface ${myiface}"
384a42d6f76SBaptiste Daroussinipv6_static_routes="${myiface}"
385a42d6f76SBaptiste DaroussinEOF
386e72457c4SJose Luis Duran	atf_check -o file:network cat "${PWD}"/etc/rc.conf.d/network
387e72457c4SJose Luis Duran	atf_check -o file:routing cat "${PWD}"/etc/rc.conf.d/routing
388a42d6f76SBaptiste Daroussin}
389a42d6f76SBaptiste Daroussin
39050498135SJose Luis Duranconfig2_network_static_v4_body()
39150498135SJose Luis Duran{
392a42d6f76SBaptiste Daroussin	mkdir -p media/nuageinit
393a42d6f76SBaptiste Daroussin	printf "{}" > media/nuageinit/meta_data.json
394a42d6f76SBaptiste Daroussin	mynetworks=$(ifconfig -l ether)
395a42d6f76SBaptiste Daroussin	if [ -z "$mynetworks" ]; then
396a42d6f76SBaptiste Daroussin		atf_skip "a network interface is needed"
397a42d6f76SBaptiste Daroussin	fi
398a42d6f76SBaptiste Daroussin	set -- $mynetworks
399a42d6f76SBaptiste Daroussin	myiface=$1
400a42d6f76SBaptiste Daroussin	myaddr=$(ifconfig $myiface ether | awk '/ether/ { print $2 }')
401a42d6f76SBaptiste Daroussincat > media/nuageinit/network_data.json << EOF
402a42d6f76SBaptiste Daroussin{
403a42d6f76SBaptiste Daroussin    "links": [
404a42d6f76SBaptiste Daroussin        {
405a42d6f76SBaptiste Daroussin            "ethernet_mac_address": "$myaddr",
406a42d6f76SBaptiste Daroussin            "id": "iface0",
40750498135SJose Luis Duran            "mtu": null
408a42d6f76SBaptiste Daroussin        }
409a42d6f76SBaptiste Daroussin    ],
410a42d6f76SBaptiste Daroussin    "networks": [
411a42d6f76SBaptiste Daroussin        {
412a42d6f76SBaptiste Daroussin            "id": "network0",
413a42d6f76SBaptiste Daroussin            "link": "iface0",
41450498135SJose Luis Duran            "type": "ipv4",
415a42d6f76SBaptiste Daroussin            "ip_address": "10.184.0.244",
416a42d6f76SBaptiste Daroussin            "netmask": "255.255.240.0",
417a42d6f76SBaptiste Daroussin            "routes": [
418a42d6f76SBaptiste Daroussin                {
419a42d6f76SBaptiste Daroussin                    "network": "10.0.0.0",
420a42d6f76SBaptiste Daroussin                    "netmask": "255.0.0.0",
421a42d6f76SBaptiste Daroussin                    "gateway": "11.0.0.1"
422a42d6f76SBaptiste Daroussin                },
423a42d6f76SBaptiste Daroussin                {
424a42d6f76SBaptiste Daroussin                    "network": "0.0.0.0",
425a42d6f76SBaptiste Daroussin                    "netmask": "0.0.0.0",
426a42d6f76SBaptiste Daroussin                    "gateway": "23.253.157.1"
427a42d6f76SBaptiste Daroussin                }
428a42d6f76SBaptiste Daroussin            ]
429a42d6f76SBaptiste Daroussin        }
430a42d6f76SBaptiste Daroussin    ]
431a42d6f76SBaptiste Daroussin}
432a42d6f76SBaptiste DaroussinEOF
433e72457c4SJose Luis Duran	atf_check /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2
434a42d6f76SBaptiste Daroussin	cat > network << EOF
435a42d6f76SBaptiste Daroussinifconfig_${myiface}="inet 10.184.0.244 netmask 255.255.240.0"
436a42d6f76SBaptiste DaroussinEOF
437a42d6f76SBaptiste Daroussin	cat > routing << EOF
438a42d6f76SBaptiste Daroussinroute_cloudinit1_${myiface}="-net 10.0.0.0 11.0.0.1 255.0.0.0"
439a42d6f76SBaptiste Daroussindefaultrouter="23.253.157.1"
440a42d6f76SBaptiste Daroussinstatic_routes="cloudinit1_${myiface}"
441a42d6f76SBaptiste DaroussinEOF
442e72457c4SJose Luis Duran	atf_check -o file:network cat "${PWD}"/etc/rc.conf.d/network
443e72457c4SJose Luis Duran	atf_check -o file:routing cat "${PWD}"/etc/rc.conf.d/routing
444a42d6f76SBaptiste Daroussin}
445a42d6f76SBaptiste Daroussin
44641fe9d53SBaptiste Daroussinconfig2_ssh_keys_head()
44741fe9d53SBaptiste Daroussin{
44841fe9d53SBaptiste Daroussin	atf_set "require.user" root
44941fe9d53SBaptiste Daroussin}
45041fe9d53SBaptiste Daroussinconfig2_ssh_keys_body()
45141fe9d53SBaptiste Daroussin{
45241fe9d53SBaptiste Daroussin	here=$(pwd)
45341fe9d53SBaptiste Daroussin	export NUAGE_FAKE_ROOTDIR=$(pwd)
45441fe9d53SBaptiste Daroussin	mkdir -p media/nuageinit
45541fe9d53SBaptiste Daroussin	touch media/nuageinit/meta_data.json
45641fe9d53SBaptiste Daroussin	cat > media/nuageinit/user-data << EOF
45741fe9d53SBaptiste Daroussin#cloud-config
45841fe9d53SBaptiste Daroussinssh_keys:
45941fe9d53SBaptiste Daroussin  rsa_private: |
46041fe9d53SBaptiste Daroussin    -----BEGIN RSA PRIVATE KEY-----
46141fe9d53SBaptiste Daroussin    MIIBxwIBAAJhAKD0YSHy73nUgysO13XsJmd4fHiFyQ+00R7VVu2iV9Qco
46241fe9d53SBaptiste Daroussin    ...
46341fe9d53SBaptiste Daroussin    -----END RSA PRIVATE KEY-----
46441fe9d53SBaptiste Daroussin  rsa_public: ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAGEAoPRhIfLvedSDKw7Xd ...
46541fe9d53SBaptiste Daroussin  ed25519_private: |
46641fe9d53SBaptiste Daroussin    -----BEGIN OPENSSH PRIVATE KEY-----
46741fe9d53SBaptiste Daroussin    blabla
46841fe9d53SBaptiste Daroussin    ...
46941fe9d53SBaptiste Daroussin    -----END OPENSSH PRIVATE KEY-----
47041fe9d53SBaptiste Daroussin  ed25519_public: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIK+MH4E8KO32N5CXRvXVqvyZVl0+6ue4DobdhU0FqFd+
47141fe9d53SBaptiste DaroussinEOF
47241fe9d53SBaptiste Daroussin	mkdir -p etc/ssh
47341fe9d53SBaptiste Daroussin	cat > etc/master.passwd << EOF
47441fe9d53SBaptiste Daroussinroot:*:0:0::0:0:Charlie &:/root:/bin/csh
47541fe9d53SBaptiste Daroussinsys:*:1:0::0:0:Sys:/home/sys:/bin/csh
47641fe9d53SBaptiste DaroussinEOF
47741fe9d53SBaptiste Daroussin	pwd_mkdb -d etc ${here}/etc/master.passwd
47841fe9d53SBaptiste Daroussin	cat > etc/group << EOF
47941fe9d53SBaptiste Daroussinwheel:*:0:root
48041fe9d53SBaptiste Daroussinusers:*:1:
48141fe9d53SBaptiste DaroussinEOF
48241fe9d53SBaptiste Daroussin	atf_check /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2
48341fe9d53SBaptiste Daroussin	_expected="-----BEGIN RSA PRIVATE KEY-----
48441fe9d53SBaptiste DaroussinMIIBxwIBAAJhAKD0YSHy73nUgysO13XsJmd4fHiFyQ+00R7VVu2iV9Qco
48541fe9d53SBaptiste Daroussin...
48641fe9d53SBaptiste Daroussin-----END RSA PRIVATE KEY-----
48740dafa08SBaptiste Daroussin
48841fe9d53SBaptiste Daroussin"
48941fe9d53SBaptiste Daroussin	atf_check -o inline:"${_expected}" cat ${PWD}/etc/ssh/ssh_host_rsa_key
49041fe9d53SBaptiste Daroussin	_expected="ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAGEAoPRhIfLvedSDKw7Xd ...\n"
49141fe9d53SBaptiste Daroussin	atf_check -o inline:"${_expected}" cat ${PWD}/etc/ssh/ssh_host_rsa_key.pub
49241fe9d53SBaptiste Daroussin	_expected="-----BEGIN OPENSSH PRIVATE KEY-----
49341fe9d53SBaptiste Daroussinblabla
49441fe9d53SBaptiste Daroussin...
49540dafa08SBaptiste Daroussin-----END OPENSSH PRIVATE KEY-----
49640dafa08SBaptiste Daroussin
49740dafa08SBaptiste Daroussin"
49841fe9d53SBaptiste Daroussin	atf_check -o inline:"${_expected}" cat ${PWD}/etc/ssh/ssh_host_ed25519_key
49941fe9d53SBaptiste Daroussin	_expected="ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIK+MH4E8KO32N5CXRvXVqvyZVl0+6ue4DobdhU0FqFd+\n"
50041fe9d53SBaptiste Daroussin	atf_check -o inline:"${_expected}" cat ${PWD}/etc/ssh/ssh_host_ed25519_key.pub
50141fe9d53SBaptiste Daroussin}
50241fe9d53SBaptiste Daroussin
503f85d0868SBaptiste Daroussin
504f85d0868SBaptiste Daroussinnocloud_userdata_cloudconfig_ssh_pwauth_head()
505f85d0868SBaptiste Daroussin{
506f85d0868SBaptiste Daroussin	atf_set "require.user" root
507f85d0868SBaptiste Daroussin}
508f85d0868SBaptiste Daroussinnocloud_userdata_cloudconfig_ssh_pwauth_body()
509f85d0868SBaptiste Daroussin{
510f85d0868SBaptiste Daroussin	mkdir -p etc
511f85d0868SBaptiste Daroussin	cat > etc/master.passwd << EOF
512f85d0868SBaptiste Daroussinroot:*:0:0::0:0:Charlie &:/root:/bin/sh
513f85d0868SBaptiste Daroussinsys:*:1:0::0:0:Sys:/home/sys:/bin/sh
514f85d0868SBaptiste DaroussinEOF
515f85d0868SBaptiste Daroussin	pwd_mkdb -d etc "${PWD}"/etc/master.passwd
516f85d0868SBaptiste Daroussin	cat > etc/group << EOF
517f85d0868SBaptiste Daroussinwheel:*:0:root
518f85d0868SBaptiste Daroussinusers:*:1:
519f85d0868SBaptiste DaroussinEOF
520f85d0868SBaptiste Daroussin	mkdir -p media/nuageinit
521f85d0868SBaptiste Daroussin	printf "instance-id: iid-local01\n" > "${PWD}"/media/nuageinit/meta-data
522f85d0868SBaptiste Daroussin	cat > media/nuageinit/user-data << 'EOF'
523f85d0868SBaptiste Daroussin#cloud-config
524f85d0868SBaptiste Daroussinssh_pwauth: true
525f85d0868SBaptiste DaroussinEOF
526f85d0868SBaptiste Daroussin	mkdir -p etc/ssh/
527f85d0868SBaptiste Daroussin	touch etc/ssh/sshd_config
528f85d0868SBaptiste Daroussin
529f85d0868SBaptiste Daroussin	atf_check -o empty -e empty /usr/libexec/nuageinit "${PWD}"/media/nuageinit nocloud
530f85d0868SBaptiste Daroussin	atf_check -o inline:"PasswordAuthentication yes\n" cat etc/ssh/sshd_config
531f85d0868SBaptiste Daroussin
532f85d0868SBaptiste Daroussin	# Same value we don't touch anything
533f85d0868SBaptiste Daroussin	printf "   PasswordAuthentication yes # I want password\n" > etc/ssh/sshd_config
534f85d0868SBaptiste Daroussin	atf_check -o empty -e empty /usr/libexec/nuageinit "${PWD}"/media/nuageinit nocloud
535f85d0868SBaptiste Daroussin	atf_check -o inline:"   PasswordAuthentication yes # I want password\n" cat etc/ssh/sshd_config
536f85d0868SBaptiste Daroussin
537f85d0868SBaptiste Daroussin	printf "   PasswordAuthentication no # Should change\n" > etc/ssh/sshd_config
538f85d0868SBaptiste Daroussin	atf_check -o empty -e empty /usr/libexec/nuageinit "${PWD}"/media/nuageinit nocloud
539f85d0868SBaptiste Daroussin	atf_check -o inline:"PasswordAuthentication yes\n" cat etc/ssh/sshd_config
540f85d0868SBaptiste Daroussin
541f85d0868SBaptiste Daroussin	cat > media/nuageinit/user-data << 'EOF'
542f85d0868SBaptiste Daroussin#cloud-config
543f85d0868SBaptiste Daroussinssh_pwauth: false
544f85d0868SBaptiste DaroussinEOF
545f85d0868SBaptiste Daroussin
546f85d0868SBaptiste Daroussin	printf "   PasswordAuthentication no # no passwords\n" > etc/ssh/sshd_config
547f85d0868SBaptiste Daroussin	atf_check -o empty -e empty /usr/libexec/nuageinit "${PWD}"/media/nuageinit nocloud
548f85d0868SBaptiste Daroussin	atf_check -o inline:"   PasswordAuthentication no # no passwords\n" cat etc/ssh/sshd_config
549f85d0868SBaptiste Daroussin
550f85d0868SBaptiste Daroussin	printf "   PasswordAuthentication yes # Should change\n" > etc/ssh/sshd_config
551f85d0868SBaptiste Daroussin	atf_check -o empty -e empty /usr/libexec/nuageinit "${PWD}"/media/nuageinit nocloud
552f85d0868SBaptiste Daroussin	atf_check -o inline:"PasswordAuthentication no\n" cat etc/ssh/sshd_config
553f85d0868SBaptiste Daroussin}
554f85d0868SBaptiste Daroussin
555c201a119SBaptiste Daroussinnocloud_userdata_cloudconfig_chpasswd_head()
556c201a119SBaptiste Daroussin{
557c201a119SBaptiste Daroussin	atf_set "require.user" root
558c201a119SBaptiste Daroussin}
559c201a119SBaptiste Daroussinnocloud_userdata_cloudconfig_chpasswd_body()
560c201a119SBaptiste Daroussin{
561c201a119SBaptiste Daroussin	mkdir -p etc
562c201a119SBaptiste Daroussin	cat > etc/master.passwd << EOF
563c201a119SBaptiste Daroussinroot:*:0:0::0:0:Charlie &:/root:/bin/sh
564c201a119SBaptiste Daroussinsys:*:1:0::0:0:Sys:/home/sys:/bin/sh
565c201a119SBaptiste Daroussinuser:*:1:0::0:0:Sys:/home/sys:/bin/sh
566c201a119SBaptiste DaroussinEOF
567c201a119SBaptiste Daroussin	pwd_mkdb -d etc "${PWD}"/etc/master.passwd
568c201a119SBaptiste Daroussin	cat > etc/group << EOF
569c201a119SBaptiste Daroussinwheel:*:0:root
570c201a119SBaptiste Daroussinusers:*:1:
571c201a119SBaptiste DaroussinEOF
572c201a119SBaptiste Daroussin	mkdir -p media/nuageinit
573c201a119SBaptiste Daroussin	printf "instance-id: iid-local01\n" > "${PWD}"/media/nuageinit/meta-data
574c201a119SBaptiste Daroussin	cat > media/nuageinit/user-data << 'EOF'
575c201a119SBaptiste Daroussin#cloud-config
576c201a119SBaptiste Daroussinchpasswd:
577c201a119SBaptiste Daroussin  expire: true
578c201a119SBaptiste Daroussin  users:
579c201a119SBaptiste Daroussin  - { user: "sys", password: RANDOM }
580c201a119SBaptiste DaroussinEOF
581c201a119SBaptiste Daroussin
5822a05d577SBaptiste Daroussin	atf_check -o empty /usr/libexec/nuageinit "${PWD}"/media/nuageinit nocloud
5832a05d577SBaptiste Daroussin	atf_check -o empty -e inline:"nuageinit: Invalid entry for chpasswd.users: missing 'name'\n" /usr/libexec/nuageinit "${PWD}"/media/nuageinit postnet
584c201a119SBaptiste Daroussin	# nothing modified
585c201a119SBaptiste Daroussin	atf_check -o inline:"sys:*:1:0::0:0:Sys:/home/sys:/bin/sh\n" pw -R $(pwd) usershow sys
586c201a119SBaptiste Daroussin
587c201a119SBaptiste Daroussin	cat > media/nuageinit/user-data << 'EOF'
588c201a119SBaptiste Daroussin#cloud-config
589c201a119SBaptiste Daroussinchpasswd:
590c201a119SBaptiste Daroussin  expire: true
591c201a119SBaptiste Daroussin  users:
592c201a119SBaptiste Daroussin  - { name: "sys", pwd: RANDOM }
593c201a119SBaptiste DaroussinEOF
5942a05d577SBaptiste Daroussin	atf_check -o empty -e inline:"nuageinit: Invalid entry for chpasswd.users: missing 'password'\n" /usr/libexec/nuageinit "${PWD}"/media/nuageinit postnet
595c201a119SBaptiste Daroussin	# nothing modified
596c201a119SBaptiste Daroussin	atf_check -o inline:"sys:*:1:0::0:0:Sys:/home/sys:/bin/sh\n" pw -R $(pwd) usershow sys
597c201a119SBaptiste Daroussin
598c201a119SBaptiste Daroussin	cat > media/nuageinit/user-data << 'EOF'
599c201a119SBaptiste Daroussin#cloud-config
600c201a119SBaptiste Daroussinchpasswd:
601c201a119SBaptiste Daroussin  expire: false
602c201a119SBaptiste Daroussin  users:
603c201a119SBaptiste Daroussin  - { name: "sys", password: RANDOM }
604c201a119SBaptiste DaroussinEOF
605c201a119SBaptiste Daroussin	# not empty because the password is printed to stdout
6062a05d577SBaptiste Daroussin	atf_check -o empty -e empty /usr/libexec/nuageinit "${PWD}"/media/nuageinit postnet
607c201a119SBaptiste Daroussin	atf_check -o match:'sys:\$.*:1:0::0:0:Sys:/home/sys:/bin/sh$' pw -R $(pwd) usershow sys
608c201a119SBaptiste Daroussin
609c201a119SBaptiste Daroussin	cat > media/nuageinit/user-data << 'EOF'
610c201a119SBaptiste Daroussin#cloud-config
611c201a119SBaptiste Daroussinchpasswd:
612c201a119SBaptiste Daroussin  expire: true
613c201a119SBaptiste Daroussin  users:
614c201a119SBaptiste Daroussin  - { name: "sys", password: RANDOM }
615c201a119SBaptiste DaroussinEOF
616c201a119SBaptiste Daroussin	# not empty because the password is printed to stdout
6172a05d577SBaptiste Daroussin	atf_check -o empty -e empty /usr/libexec/nuageinit "${PWD}"/media/nuageinit postnet
618c201a119SBaptiste Daroussin	atf_check -o match:'sys:\$.*:1:0::1:0:Sys:/home/sys:/bin/sh$' pw -R $(pwd) usershow sys
619c201a119SBaptiste Daroussin
620c201a119SBaptiste Daroussin	cat > media/nuageinit/user-data << 'EOF'
621c201a119SBaptiste Daroussin#cloud-config
622c201a119SBaptiste Daroussinchpasswd:
623c201a119SBaptiste Daroussin  expire: true
624c201a119SBaptiste Daroussin  users:
625c201a119SBaptiste Daroussin  - { name: "user", password: "$6$j212wezy$7H/1LT4f9/N3wpgNunhsIqtMj62OKiS3nyNwuizouQc3u7MbYCarYeAHWYPYb2FT.lbioDm2RrkJPb9BZMN1O/" }
626c201a119SBaptiste DaroussinEOF
627c201a119SBaptiste Daroussin	# not empty because the password is printed to stdout
6282a05d577SBaptiste Daroussin	atf_check -o empty -e empty /usr/libexec/nuageinit "${PWD}"/media/nuageinit postnet
629c201a119SBaptiste Daroussin	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
630c201a119SBaptiste Daroussin}
631c201a119SBaptiste Daroussin
632c201a119SBaptiste Daroussin
633c201a119SBaptiste Daroussinnocloud_userdata_cloudconfig_chpasswd_list_string_head()
634c201a119SBaptiste Daroussin{
635c201a119SBaptiste Daroussin	atf_set "require.user" root
636c201a119SBaptiste Daroussin}
637c201a119SBaptiste Daroussinnocloud_userdata_cloudconfig_chpasswd_list_string_body()
638c201a119SBaptiste Daroussin{
639c201a119SBaptiste Daroussin	mkdir -p etc
640c201a119SBaptiste Daroussin	cat > etc/master.passwd << EOF
641c201a119SBaptiste Daroussinroot:*:0:0::0:0:Charlie &:/root:/bin/sh
642c201a119SBaptiste Daroussinsys:*:1:0::0:0:Sys:/home/sys:/bin/sh
643c201a119SBaptiste Daroussinuser:*:1:0::0:0:Sys:/home/sys:/bin/sh
644c201a119SBaptiste DaroussinEOF
645c201a119SBaptiste Daroussin	pwd_mkdb -d etc "${PWD}"/etc/master.passwd
646c201a119SBaptiste Daroussin	cat > etc/group << EOF
647c201a119SBaptiste Daroussinwheel:*:0:root
648c201a119SBaptiste Daroussinusers:*:1:
649c201a119SBaptiste DaroussinEOF
650c201a119SBaptiste Daroussin	mkdir -p media/nuageinit
651c201a119SBaptiste Daroussin	printf "instance-id: iid-local01\n" > "${PWD}"/media/nuageinit/meta-data
652c201a119SBaptiste Daroussin	cat > media/nuageinit/user-data << 'EOF'
653c201a119SBaptiste Daroussin#cloud-config
654c201a119SBaptiste Daroussinchpasswd:
655c201a119SBaptiste Daroussin  expire: true
656c201a119SBaptiste Daroussin  list: |
657c201a119SBaptiste Daroussin     sys:RANDOM
658c201a119SBaptiste DaroussinEOF
659c201a119SBaptiste Daroussin
6602a05d577SBaptiste Daroussin	atf_check -o empty /usr/libexec/nuageinit "${PWD}"/media/nuageinit nocloud
6612a05d577SBaptiste Daroussin	atf_check -o empty -e inline:"nuageinit: chpasswd.list is deprecated consider using chpasswd.users\n" /usr/libexec/nuageinit "${PWD}"/media/nuageinit postnet
662c201a119SBaptiste Daroussin	atf_check -o match:'sys:\$.*:1:0::1:0:Sys:/home/sys:/bin/sh$' pw -R $(pwd) usershow sys
663c201a119SBaptiste Daroussin
664c201a119SBaptiste Daroussin	cat > media/nuageinit/user-data << 'EOF'
665c201a119SBaptiste Daroussin#cloud-config
666c201a119SBaptiste Daroussinchpasswd:
667c201a119SBaptiste Daroussin  expire: false
668c201a119SBaptiste Daroussin  list: |
669c201a119SBaptiste Daroussin     sys:plop
670c201a119SBaptiste Daroussin     user:$6$j212wezy$7H/1LT4f9/N3wpgNunhsIqtMj62OKiS3nyNwuizouQc3u7MbYCarYeAHWYPYb2FT.lbioDm2RrkJPb9BZMN1O/
671c201a119SBaptiste Daroussin     root:R
672c201a119SBaptiste DaroussinEOF
673c201a119SBaptiste Daroussin
6742a05d577SBaptiste Daroussin	atf_check -o empty -e ignore /usr/libexec/nuageinit "${PWD}"/media/nuageinit postnet
675c201a119SBaptiste Daroussin	atf_check -o match:'sys:\$.*:1:0::0:0:Sys:/home/sys:/bin/sh$' pw -R $(pwd) usershow sys
676c201a119SBaptiste Daroussin	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
677c201a119SBaptiste Daroussin	atf_check -o match:'root:\$.*:0:0::0:0:Charlie &:/root:/bin/sh$' pw -R $(pwd) usershow root
678c201a119SBaptiste Daroussin}
679c201a119SBaptiste Daroussin
680c201a119SBaptiste Daroussinnocloud_userdata_cloudconfig_chpasswd_list_list_head()
681c201a119SBaptiste Daroussin{
682c201a119SBaptiste Daroussin	atf_set "require.user" root
683c201a119SBaptiste Daroussin}
684c201a119SBaptiste Daroussinnocloud_userdata_cloudconfig_chpasswd_list_list_body()
685c201a119SBaptiste Daroussin{
686c201a119SBaptiste Daroussin	mkdir -p etc
687c201a119SBaptiste Daroussin	cat > etc/master.passwd << EOF
688c201a119SBaptiste Daroussinroot:*:0:0::0:0:Charlie &:/root:/bin/sh
689c201a119SBaptiste Daroussinsys:*:1:0::0:0:Sys:/home/sys:/bin/sh
690c201a119SBaptiste Daroussinuser:*:1:0::0:0:Sys:/home/sys:/bin/sh
691c201a119SBaptiste DaroussinEOF
692c201a119SBaptiste Daroussin	pwd_mkdb -d etc "${PWD}"/etc/master.passwd
693c201a119SBaptiste Daroussin	cat > etc/group << EOF
694c201a119SBaptiste Daroussinwheel:*:0:root
695c201a119SBaptiste Daroussinusers:*:1:
696c201a119SBaptiste DaroussinEOF
697c201a119SBaptiste Daroussin	mkdir -p media/nuageinit
698c201a119SBaptiste Daroussin	printf "instance-id: iid-local01\n" > "${PWD}"/media/nuageinit/meta-data
699c201a119SBaptiste Daroussin	cat > media/nuageinit/user-data << 'EOF'
700c201a119SBaptiste Daroussin#cloud-config
701c201a119SBaptiste Daroussinchpasswd:
702c201a119SBaptiste Daroussin  expire: true
703c201a119SBaptiste Daroussin  list:
704c201a119SBaptiste Daroussin  - sys:RANDOM
705c201a119SBaptiste DaroussinEOF
706c201a119SBaptiste Daroussin
7072a05d577SBaptiste Daroussin	atf_check -o empty /usr/libexec/nuageinit "${PWD}"/media/nuageinit nocloud
7082a05d577SBaptiste Daroussin	atf_check -o empty -e inline:"nuageinit: chpasswd.list is deprecated consider using chpasswd.users\n" /usr/libexec/nuageinit "${PWD}"/media/nuageinit postnet
709c201a119SBaptiste Daroussin	atf_check -o match:'sys:\$.*:1:0::1:0:Sys:/home/sys:/bin/sh$' pw -R $(pwd) usershow sys
710c201a119SBaptiste Daroussin
711c201a119SBaptiste Daroussin	cat > media/nuageinit/user-data << 'EOF'
712c201a119SBaptiste Daroussin#cloud-config
713c201a119SBaptiste Daroussinchpasswd:
714c201a119SBaptiste Daroussin  expire: false
715c201a119SBaptiste Daroussin  list:
716c201a119SBaptiste Daroussin  - sys:plop
717c201a119SBaptiste Daroussin  - user:$6$j212wezy$7H/1LT4f9/N3wpgNunhsIqtMj62OKiS3nyNwuizouQc3u7MbYCarYeAHWYPYb2FT.lbioDm2RrkJPb9BZMN1O/
718c201a119SBaptiste Daroussin  - root:R
719c201a119SBaptiste DaroussinEOF
720c201a119SBaptiste Daroussin
7212a05d577SBaptiste Daroussin	atf_check -o empty -e ignore /usr/libexec/nuageinit "${PWD}"/media/nuageinit postnet
722c201a119SBaptiste Daroussin	atf_check -o match:'sys:\$.*:1:0::0:0:Sys:/home/sys:/bin/sh$' pw -R $(pwd) usershow sys
723c201a119SBaptiste Daroussin	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
724c201a119SBaptiste Daroussin	atf_check -o match:'root:\$.*:0:0::0:0:Charlie &:/root:/bin/sh$' pw -R $(pwd) usershow root
725c201a119SBaptiste Daroussin}
726c201a119SBaptiste Daroussin
7272f35a521SSebastien Baylocqconfig2_userdata_runcmd_head()
7282f35a521SSebastien Baylocq{
7292f35a521SSebastien Baylocq	atf_set "require.user" root
7302f35a521SSebastien Baylocq}
7312f35a521SSebastien Baylocqconfig2_userdata_runcmd_body()
7322f35a521SSebastien Baylocq{
7332f35a521SSebastien Baylocq	mkdir -p media/nuageinit
7342f35a521SSebastien Baylocq	setup_test_adduser
7352f35a521SSebastien Baylocq	printf "{}" > media/nuageinit/meta_data.json
7362f35a521SSebastien Baylocq	cat > media/nuageinit/user_data << 'EOF'
7372f35a521SSebastien Baylocq#cloud-config
7382f35a521SSebastien Baylocqruncmd:
7392f35a521SSebastien BaylocqEOF
7402f35a521SSebastien Baylocq	chmod 755 "${PWD}"/media/nuageinit/user_data
74140dafa08SBaptiste Daroussin	atf_check /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2
7422f35a521SSebastien Baylocq	cat > media/nuageinit/user_data << 'EOF'
7432f35a521SSebastien Baylocq#cloud-config
7442f35a521SSebastien Baylocqruncmd:
7452f35a521SSebastien Baylocq  - plop
7462f35a521SSebastien BaylocqEOF
7472f35a521SSebastien Baylocq	chmod 755 "${PWD}"/media/nuageinit/user_data
7488feca60dSBaptiste Daroussin	atf_check -s exit:0 /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2
7498feca60dSBaptiste Daroussin	test -f var/cache/nuageinit/runcmds || atf_fail "File not created"
7508feca60dSBaptiste Daroussin	test -x var/cache/nuageinit/runcmds || atf_fail "Missing execution permission"
7518feca60dSBaptiste Daroussin	atf_check -o inline:"#!/bin/sh\nplop\n" cat var/cache/nuageinit/runcmds
7522f35a521SSebastien Baylocq
7532f35a521SSebastien Baylocq	cat > media/nuageinit/user_data << 'EOF'
7542f35a521SSebastien Baylocq#cloud-config
7552f35a521SSebastien Baylocqruncmd:
7568feca60dSBaptiste Daroussin  - echo "yeah!"
7578feca60dSBaptiste Daroussin  - uname -s
7582f35a521SSebastien BaylocqEOF
7592f35a521SSebastien Baylocq	chmod 755 "${PWD}"/media/nuageinit/user_data
7602f35a521SSebastien Baylocq	atf_check /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2
7618feca60dSBaptiste Daroussin	atf_check -o inline:"#!/bin/sh\necho \"yeah!\"\nuname -s\n" cat var/cache/nuageinit/runcmds
7622f35a521SSebastien Baylocq}
7632f35a521SSebastien Baylocq
764076fec1bSSebastien Baylocqconfig2_userdata_packages_head()
765076fec1bSSebastien Baylocq{
766076fec1bSSebastien Baylocq	atf_set "require.user" root
767076fec1bSSebastien Baylocq}
768682af960SSebastien Baylocq
769076fec1bSSebastien Baylocqconfig2_userdata_packages_body()
770076fec1bSSebastien Baylocq{
771076fec1bSSebastien Baylocq	mkdir -p media/nuageinit
772076fec1bSSebastien Baylocq	setup_test_adduser
773076fec1bSSebastien Baylocq	export NUAGE_RUN_TESTS=1
774076fec1bSSebastien Baylocq	printf "{}" > media/nuageinit/meta_data.json
775076fec1bSSebastien Baylocq	cat > media/nuageinit/user_data << 'EOF'
776076fec1bSSebastien Baylocq#cloud-config
777076fec1bSSebastien Baylocqpackages:
778076fec1bSSebastien BaylocqEOF
779076fec1bSSebastien Baylocq	chmod 755 "${PWD}"/media/nuageinit/user_data
78040dafa08SBaptiste Daroussin	atf_check /usr/libexec/nuageinit "${PWD}"/media/nuageinit postnet
781076fec1bSSebastien Baylocq	cat > media/nuageinit/user_data << 'EOF'
782076fec1bSSebastien Baylocq#cloud-config
783076fec1bSSebastien Baylocqpackages:
784076fec1bSSebastien Baylocq  - yeah/plop
785076fec1bSSebastien BaylocqEOF
786076fec1bSSebastien Baylocq	chmod 755 "${PWD}"/media/nuageinit/user_data
7872a05d577SBaptiste Daroussin	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
788076fec1bSSebastien Baylocq
789076fec1bSSebastien Baylocq	cat > media/nuageinit/user_data << 'EOF'
790076fec1bSSebastien Baylocq#cloud-config
791076fec1bSSebastien Baylocqpackages:
792076fec1bSSebastien Baylocq  - curl
793076fec1bSSebastien BaylocqEOF
794076fec1bSSebastien Baylocq	chmod 755 "${PWD}"/media/nuageinit/user_data
7952a05d577SBaptiste Daroussin	atf_check -o inline:"pkg install -y curl\npkg info -q curl\n" /usr/libexec/nuageinit "${PWD}"/media/nuageinit postnet
796076fec1bSSebastien Baylocq
797076fec1bSSebastien Baylocq	cat > media/nuageinit/user_data << 'EOF'
798076fec1bSSebastien Baylocq#cloud-config
799076fec1bSSebastien Baylocqpackages:
800076fec1bSSebastien Baylocq  - curl
801076fec1bSSebastien Baylocq  - meh: bla
802076fec1bSSebastien BaylocqEOF
803076fec1bSSebastien Baylocq	chmod 755 "${PWD}"/media/nuageinit/user_data
8042a05d577SBaptiste Daroussin	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
805076fec1bSSebastien Baylocq}
806076fec1bSSebastien Baylocq
807682af960SSebastien Baylocqconfig2_userdata_update_packages_body()
808682af960SSebastien Baylocq{
809682af960SSebastien Baylocq	mkdir -p media/nuageinit
810682af960SSebastien Baylocq	setup_test_adduser
811682af960SSebastien Baylocq	export NUAGE_RUN_TESTS=1
812682af960SSebastien Baylocq	printf "{}" > media/nuageinit/meta_data.json
813682af960SSebastien Baylocq	cat > media/nuageinit/user_data << 'EOF'
814682af960SSebastien Baylocq#cloud-config
815682af960SSebastien Baylocqpackage_update: true
816682af960SSebastien BaylocqEOF
817682af960SSebastien Baylocq	chmod 755 "${PWD}"/media/nuageinit/user_data
8182a05d577SBaptiste Daroussin	atf_check -o inline:"pkg update -y\n" /usr/libexec/nuageinit "${PWD}"/media/nuageinit postnet
819682af960SSebastien Baylocq}
820682af960SSebastien Baylocq
821682af960SSebastien Baylocqconfig2_userdata_upgrade_packages_body()
822682af960SSebastien Baylocq{
823682af960SSebastien Baylocq	mkdir -p media/nuageinit
824682af960SSebastien Baylocq	setup_test_adduser
825682af960SSebastien Baylocq	export NUAGE_RUN_TESTS=1
826682af960SSebastien Baylocq	printf "{}" > media/nuageinit/meta_data.json
827682af960SSebastien Baylocq	cat > media/nuageinit/user_data << 'EOF'
828682af960SSebastien Baylocq#cloud-config
829682af960SSebastien Baylocqpackage_upgrade: true
830682af960SSebastien BaylocqEOF
831682af960SSebastien Baylocq	chmod 755 "${PWD}"/media/nuageinit/user_data
8322a05d577SBaptiste Daroussin	atf_check -o inline:"pkg upgrade -y\n" /usr/libexec/nuageinit "${PWD}"/media/nuageinit postnet
833682af960SSebastien Baylocq}
834682af960SSebastien Baylocq
83509545628SBaptiste Daroussinconfig2_userdata_shebang_body()
83609545628SBaptiste Daroussin{
83709545628SBaptiste Daroussin	mkdir -p media/nuageinit
83809545628SBaptiste Daroussin	setup_test_adduser
83909545628SBaptiste Daroussin	printf "{}" > media/nuageinit/meta_data.json
84009545628SBaptiste Daroussin	cat > media/nuageinit/user_data <<EOF
84109545628SBaptiste Daroussin#!/we/dont/care
84209545628SBaptiste Daroussinanything
84309545628SBaptiste DaroussinEOF
84409545628SBaptiste Daroussin	atf_check -o empty /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2
84509545628SBaptiste Daroussin	test -f var/cache/nuageinit/user_data || atf_fail "File not created"
84609545628SBaptiste Daroussin	test -x var/cache/nuageinit/user_data || atf_fail "Missing execution permission"
84709545628SBaptiste Daroussin	atf_check -o inline:"#!/we/dont/care\nanything\n" cat var/cache/nuageinit/user_data
84809545628SBaptiste Daroussin	cat > media/nuageinit/user_data <<EOF
84909545628SBaptiste Daroussin/we/dont/care
85009545628SBaptiste DaroussinEOF
85109545628SBaptiste Daroussin	rm var/cache/nuageinit/user_data
85209545628SBaptiste Daroussin	if [ -f var/cache/nuageinit/user_data ]; then
85309545628SBaptiste Daroussin		atf_fail "File should not have been created"
85409545628SBaptiste Daroussin	fi
85509545628SBaptiste Daroussin}
85609545628SBaptiste Daroussin
85719a7ea3cSBaptiste Daroussinconfig2_userdata_write_files_body()
85819a7ea3cSBaptiste Daroussin{
85919a7ea3cSBaptiste Daroussin	mkdir -p media/nuageinit
86019a7ea3cSBaptiste Daroussin	setup_test_adduser
86119a7ea3cSBaptiste Daroussin	printf "{}" > media/nuageinit/meta_data.json
86219a7ea3cSBaptiste Daroussin	cat > media/nuageinit/user_data <<EOF
86319a7ea3cSBaptiste Daroussin#cloud-config
86419a7ea3cSBaptiste Daroussinwrite_files:
86519a7ea3cSBaptiste Daroussin- content: "plop"
86619a7ea3cSBaptiste Daroussin  path: /file1
86719a7ea3cSBaptiste Daroussin- path: /emptyfile
86819a7ea3cSBaptiste Daroussin- content: !!binary |
86919a7ea3cSBaptiste Daroussin    YmxhCg==
87019a7ea3cSBaptiste Daroussin  path: /file_base64
87119a7ea3cSBaptiste Daroussin  encoding: b64
87219a7ea3cSBaptiste Daroussin  permissions: '0755'
87319a7ea3cSBaptiste Daroussin  owner: nobody
87419a7ea3cSBaptiste Daroussin- content: "bob"
87519a7ea3cSBaptiste Daroussin  path: "/foo"
87619a7ea3cSBaptiste Daroussin  defer: true
87719a7ea3cSBaptiste DaroussinEOF
87819a7ea3cSBaptiste Daroussin	atf_check -o empty /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2
87919a7ea3cSBaptiste Daroussin	atf_check -o inline:"plop" cat file1
88019a7ea3cSBaptiste Daroussin	atf_check -o inline:"" cat emptyfile
88119a7ea3cSBaptiste Daroussin	atf_check -o inline:"bla\n" cat file_base64
88219a7ea3cSBaptiste Daroussin	test -f foo && atf_fail "foo creation should have been defered"
88319a7ea3cSBaptiste Daroussin	atf_check -o match:"^-rwxr-xr-x.*nobody" ls -l file_base64
88419a7ea3cSBaptiste Daroussin	rm file1 emptyfile file_base64
88519a7ea3cSBaptiste Daroussin	atf_check -o empty /usr/libexec/nuageinit "${PWD}"/media/nuageinit postnet
88619a7ea3cSBaptiste Daroussin	test -f file1 -o -f emptyfile -o -f file_base64 && atf_fail "defer not working properly"
88719a7ea3cSBaptiste Daroussin	atf_check -o inline:"bob" cat foo
88819a7ea3cSBaptiste Daroussin}
88919a7ea3cSBaptiste Daroussin
890f1dd507bSBaptiste Daroussinconfig2_userdata_fqdn_and_hostname_body()
891f1dd507bSBaptiste Daroussin{
892f1dd507bSBaptiste Daroussin	mkdir -p media/nuageinit
893f1dd507bSBaptiste Daroussin	setup_test_adduser
894f1dd507bSBaptiste Daroussin	printf "{}" > media/nuageinit/meta_data.json
895f1dd507bSBaptiste Daroussin	cat > media/nuageinit/user_data <<EOF
896f1dd507bSBaptiste Daroussin#cloud-config
897f1dd507bSBaptiste Daroussinfqdn: host.domain.tld
898f1dd507bSBaptiste Daroussinhostname: host
899f1dd507bSBaptiste DaroussinEOF
900f1dd507bSBaptiste Daroussin	atf_check -o empty /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2
901f1dd507bSBaptiste Daroussin	atf_check -o inline:"hostname=\"host.domain.tld\"\n" cat ${PWD}/etc/rc.conf.d/hostname
902f1dd507bSBaptiste Daroussin	cat > media/nuageinit/user_data <<EOF
903f1dd507bSBaptiste Daroussin#cloud-config
904f1dd507bSBaptiste Daroussinhostname: host
905f1dd507bSBaptiste DaroussinEOF
906f1dd507bSBaptiste Daroussin	atf_check -o empty /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2
907f1dd507bSBaptiste Daroussin	atf_check -o inline:"hostname=\"host\"\n" cat ${PWD}/etc/rc.conf.d/hostname
908f1dd507bSBaptiste Daroussin}
909f1dd507bSBaptiste Daroussin
910a42d6f76SBaptiste Daroussinatf_init_test_cases()
911a42d6f76SBaptiste Daroussin{
912a42d6f76SBaptiste Daroussin	atf_add_test_case args
913a42d6f76SBaptiste Daroussin	atf_add_test_case nocloud
914a42d6f76SBaptiste Daroussin	atf_add_test_case nocloud_userdata_script
915cde66424SBaptiste Daroussin	atf_add_test_case nocloud_user_data_script
916a42d6f76SBaptiste Daroussin	atf_add_test_case nocloud_userdata_cloudconfig_users
917a42d6f76SBaptiste Daroussin	atf_add_test_case nocloud_network
918a42d6f76SBaptiste Daroussin	atf_add_test_case config2
919a42d6f76SBaptiste Daroussin	atf_add_test_case config2_pubkeys
920cde66424SBaptiste Daroussin	atf_add_test_case config2_pubkeys_user_data
92119fb9ad7SBaptiste Daroussin	atf_add_test_case config2_pubkeys_meta_data
922a42d6f76SBaptiste Daroussin	atf_add_test_case config2_network
923a42d6f76SBaptiste Daroussin	atf_add_test_case config2_network_static_v4
92441fe9d53SBaptiste Daroussin	atf_add_test_case config2_ssh_keys
925f85d0868SBaptiste Daroussin	atf_add_test_case nocloud_userdata_cloudconfig_ssh_pwauth
926c201a119SBaptiste Daroussin	atf_add_test_case nocloud_userdata_cloudconfig_chpasswd
927c201a119SBaptiste Daroussin	atf_add_test_case nocloud_userdata_cloudconfig_chpasswd_list_string
928c201a119SBaptiste Daroussin	atf_add_test_case nocloud_userdata_cloudconfig_chpasswd_list_list
9292f35a521SSebastien Baylocq	atf_add_test_case config2_userdata_runcmd
930076fec1bSSebastien Baylocq	atf_add_test_case config2_userdata_packages
931682af960SSebastien Baylocq	atf_add_test_case config2_userdata_update_packages
932682af960SSebastien Baylocq	atf_add_test_case config2_userdata_upgrade_packages
93309545628SBaptiste Daroussin	atf_add_test_case config2_userdata_shebang
934f1dd507bSBaptiste Daroussin	atf_add_test_case config2_userdata_fqdn_and_hostname
93519a7ea3cSBaptiste Daroussin	atf_add_test_case config2_userdata_write_files
936a42d6f76SBaptiste Daroussin}
937