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
|
#!/bin/bash
# Create the LXD metadata tar.xz file named in $1
## The following environment variable are required:
## serial
## arch
## suite
set -xe
DEST=${1?}
# Double duty command output and variable check
cat << EOF
Generating LXD metadata for:
serial=${serial?}
arch=${arch?}
suite=${suite?}
EOF
cleanup() {
[ -z "${TMP_D}" -o ! -d "${TMP_D}" ] || rm -rf "${TMP_D}"
}
trap cleanup EXIT SIGINT SIGTERM
OUT_D=`dirname ${DEST}`
TMP_D=`mktemp --directory --tmpdir=${OUT_D}`
# Distro -> LXD architecture translation table
ARCH_TABLE="i386 i686
amd64 x86_64
armhf armv7l
arm64 aarch64
powerpc ppc
ppc64el ppc64le"
lxd_arch() {
arch=$1
echo "$ARCH_TABLE" | grep $arch | cut -d' ' -f2
}
ubuntu_fullversion() {
grep -i $1 /usr/share/distro-info/ubuntu.csv | cut -d, -f1
}
date=`date +%s`
arch=`lxd_arch ${arch}`
cat > "${TMP_D}/metadata.yaml" << EOF
architecture: "${arch}"
creation_date: ${date}
properties:
architecture: "${arch}"
description: "Ubuntu `ubuntu_fullversion ${suite}` server (${serial})"
os: "ubuntu"
release: "${suite}"
templates:
/var/lib/cloud/seed/nocloud-net/meta-data:
when:
- start
template: cloud-init-meta.tpl
/var/lib/cloud/seed/nocloud-net/user-data:
when:
- start
template: cloud-init-user.tpl
properties:
default: |
#cloud-config
{}
/var/lib/cloud/seed/nocloud-net/vendor-data:
when:
- start
template: cloud-init-vendor.tpl
properties:
default: |
#cloud-config
{}
/etc/init/console.override:
when:
- create
template: upstart-override.tpl
/etc/init/tty1.override:
when:
- create
template: upstart-override.tpl
/etc/init/tty2.override:
when:
- create
template: upstart-override.tpl
/etc/init/tty3.override:
when:
- create
template: upstart-override.tpl
/etc/init/tty4.override:
when:
- create
template: upstart-override.tpl
EOF
TMPL_D="${TMP_D}/templates"
mkdir "${TMPL_D}"
cat > "${TMPL_D}/cloud-init-user.tpl" << EOF
{{ config_get("user.user-data", properties.default) }}
EOF
cat > "${TMPL_D}/cloud-init-meta.tpl" << EOF
#cloud-config
instance-id: {{ container.name }}
local-hostname: {{ container.name }}
{{ config_get("user.meta-data", "") }}
EOF
cat > "${TMPL_D}/cloud-init-vendor.tpl" << EOF
{{ config_get("user.vendor-data", properties.default) }}
EOF
cat > "${TMPL_D}/upstart-override.tpl" << EOF
manual
EOF
tar --xz -cvf "${DEST}" -C ${TMP_D} metadata.yaml templates
|