~ubuntu-on-ec2/vmbuilder/automated-ec2-builds

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