9cc15365bfc12a072f87cfb42595f4a44d522603
[osm/devops.git] / update-lxd-image.sh
1 #!/bin/bash
2 #
3 # This script will create xenial and trusty lxd images that will be used by the
4 # lxd provider in juju 2.1+ It is for use with the lxd provider for local
5 # development and preinstalls a common set of production packages.
6 #
7 # This dramatically speeds up the install hooks for lxd deploys by
8 # pre-installing common packages. It is intended to run daily as part of
9 # a cron job.
10 set -eux
11
12 # The basic charm layer also installs all the things. 47 packages.
13 LAYER_BASIC="gcc build-essential python3-pip python3-setuptools libyaml-dev python3-yaml python3-dev"
14
15 # the basic layer also installs virtualenv, but the name changed in xenial.
16 TRUSTY_PACKAGES="python-virtualenv"
17 XENIAL_PACKAGES="virtualenv"
18
19 # Predownload common packages used by your charms in development
20 DOWNLOAD_PACKAGES=""
21
22 PACKAGES="$LAYER_BASIC $DOWNLOAD_PACKAGES"
23
24 # Packages from pypi to pre-install
25 PYPI="charms.reactive charmhelpers paramiko>=1.16.0,<1.17"
26
27 function cache() {
28 series=$1
29 container=juju-${series}-base
30 alias=juju/$series/amd64
31
32 lxc delete $container -f || true
33 lxc launch ubuntu:$series $container
34
35 # Wait for the container to get an IP address
36 lxc exec $container -- bash -c "for i in {1..60}; do sleep 1; ping -c1 10.44.127.1 &> /dev/null && break; done"
37
38 # Wait for cloud-init to finish
39 lxc exec $container -- bash -c "while [ ! -f /var/lib/cloud/instance/boot-finished ]; do sleep 1; done"
40
41 lxc exec $container -- apt-get update -y
42 lxc exec $container -- apt-get upgrade -y
43 lxc exec $container -- apt-get install -y $PACKAGES $2
44 lxc exec $container -- pip3 install --upgrade pip
45 lxc exec $container -- pip3 install --upgrade $PYPI
46 lxc stop $container
47
48 lxc image delete $alias || true
49 lxc publish $container --alias $alias description="$series juju dev image ($(date +%Y%m%d))"
50
51 lxc delete $container -f || true
52 }
53
54 cache trusty "$TRUSTY_PACKAGES"
55 cache xenial "$XENIAL_PACKAGES"