-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbare_metal.json
More file actions
147 lines (124 loc) · 5.04 KB
/
Copy pathbare_metal.json
File metadata and controls
147 lines (124 loc) · 5.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
{
"variables": {
"image_name": "tailor_bot",
"organization": "",
"bundle_track": "hotdog",
"bundle_version": "hotdog",
"distribution": "",
"username": "tailor",
"password": "tailor",
"ansible_command": "ansible-playbook",
"extra_arguments_ansible": "-e package=tailor-image",
"playbook_file": "bare_metal.yaml",
"inventory": "/mnt/bare_metal,",
"s3_bucket": "tailor-artifacts",
"disk_size": "15",
"iso_image": "",
"nbd_wait_timeout": "60"
},
"builders": [
{
"type": "qemu-chroot",
"source_image": "{{user `iso_image`}}",
"image_name": "{{user `image_name`}}.qcow2",
"compression": true,
"output_directory": "images",
"mount_path": "/mnt/bare_metal",
"copy_files": []
}
],
"provisioners": [
{
"type": "shell",
"inline": [
"mv /etc/resolv.conf /etc/resolv.conf.old",
"echo \"nameserver 1.1.1.1\" > /etc/resolv.conf",
"echo \"unnamedrobot\" > /etc/hostname",
"apt-get update && apt-get install -yq python3 sudo openssl openssh-server"
]
},
{
"type": "shell",
"inline": [
"UBUNTU_CODENAME=$(cat /etc/os-release | grep UBUNTU_CODENAME | awk -F'=' '{print $2}')",
"# Default noble image already has an ubuntu user, rename it if exists",
"if [ \"$UBUNTU_CODENAME\" = \"noble\" ]; then",
" if id ubuntu >/dev/null 2>&1; then",
" echo \"Renaming default 'ubuntu' user to '{{ user `username` }}'\"",
" usermod -l {{ user `username` }} ubuntu",
" groupmod -n {{ user `username` }} ubuntu",
" else",
" echo \"Creating new '{{ user `username` }}' user and group\"",
" useradd -m -d /home/{{ user `username` }} {{user `username`}}",
" fi;",
"else",
" echo \"Creating new '{{ user `username` }}' user and group\"",
" useradd -m -d /home/{{ user `username` }} {{user `username`}}",
"fi",
"# Modify user with the desired password, add it to sudo group and add it to sudoers list",
"usermod -m -s /bin/bash -p $(echo \"{{user `password`}}\" | openssl passwd -1 -stdin) -d /home/{{ user `username` }} -G sudo {{user `username`}}",
"echo \"{{user `username`}} ALL=(ALL) NOPASSWD: ALL\" >> /etc/sudoers"
]
},
{
"type": "ansible",
"user": "{{user `username`}}",
"command": "{{user `ansible_command`}}",
"playbook_file": "{{user `playbook_file`}}",
"extra_arguments": [
"--connection=chroot",
"--vault-password-file=/home/tailor/.vault_pass.txt",
"{{ user `extra_arguments_ansible` }}",
"-e ansible_user={{user `username`}}",
"-e organization={{user `organization`}}",
"-e bundle_track={{user `bundle_track`}}",
"-e bundle_version={{user `bundle_version`}}",
"-e image_name={{user `image_name`}}",
"--inventory={{user `inventory`}}"
]
},
{
"type": "shell",
"inline": [
"echo 'Reconfigure openssh server and restore resolv.conf'",
"dpkg-reconfigure openssh-server",
"mv /etc/resolv.conf.old /etc/resolv.conf",
"echo 'Remove machine-id to ensure we get a unique one for each machine'",
"rm -f /etc/machine-id /var/lib/dbus/machine-id",
"echo 'Add image version file to image'",
"echo '{\"active_version\": \"{{ user `image_name` }}\"}' | tee -a /home/{{ user `username` }}/.ota.json",
"echo 'Fix permissions in the home directory'",
"chown -R {{ user `username` }}:{{ user `username` }} /home/{{ user `username` }}",
"echo 'Remove unused space on the image'",
"dd if=/dev/zero of=/EMPTY bs=1M || true",
"rm -f /EMPTY && sync"
]
}
],
"post-processors": [
{
"type": "shell-local",
"inline": [
"echo 'Resize image'",
"qemu-nbd -c /dev/nbd0 images/{{user `image_name`}}.qcow2",
"timeout {{user `nbd_wait_timeout` }} bash -c \"while [ ! -b '/dev/nbd0p1' ]; do echo 'Waiting for nbd0p1 to be ready'; sleep 1; done\"",
"e2fsck -y -f /dev/nbd0p1",
"resize2fs /dev/nbd0p1 -M",
"qemu-nbd -d /dev/nbd0",
"qemu-img resize --shrink images/{{user `image_name`}}.qcow2 {{user `disk_size`}}G",
"echo 'Converting image to RAW...'",
"qemu-img convert images/{{user `image_name`}}.qcow2 images/{{user `image_name`}}.raw",
"rm -f images/{{user `image_name`}}.qcow2",
"echo 'Compressing generated image...'",
"xz -k images/{{user `image_name`}}.raw -c --verbose --threads=0 > images/{{user `image_name`}}.raw.xz",
"rm -f images/{{user `image_name`}}.raw",
"echo 'Uploading compressed image to S3...'",
"aws s3 cp images/{{user `image_name`}}.raw.xz s3://{{user `s3_bucket`}}/{{user `bundle_version`}}/images/",
"md5sum images/{{user `image_name`}}.raw.xz > /tmp/{{user `image_name`}}",
"rm -f images/{{user `image_name`}}.raw.xz",
"echo 'Removing generated images...'",
"rm -rf images"
]
}
]
}