# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
-#
+#
# 20 Sep 2016 -- Gerardo Garcia -- adapted from template
-#
+#
HERE=$(realpath $(dirname $0))
OSM_JENKINS=$(dirname $HERE)
. $OSM_JENKINS/common/all_funcs
-INFO "installing packages"
-apt update
+INFO "Installing packages"
+add-apt-repository -y ppa:juju/stable
+apt-get update
+apt-get install -y juju lxd squid-deb-proxy
+
+echo 'streams.canonical' > /etc/squid-deb-proxy/mirror-dstdomain.acl.d/20-juju-streams
+
+INFO "Configuring LXD"
+# ZFS doesn't work inside a nested container. ZFS should be configured in the host LXD.
lxd init --auto
lxd waitready
systemctl stop lxd-bridge
systemctl enable lxd-bridge
systemctl start lxd-bridge
-lxc image copy ubuntu:16.04 local: --alias ubuntu-xenial
-add-apt-repository -y ppa:juju/stable
-apt update
-apt install -y juju
-juju bootstrap localhost osm
+
+INFO "Pre-caching Ubuntu:16.04 image (this may take several minutes)..."
+
+# Setup a daily cron to update the cached image
+cp $HERE/update-lxd-image.sh /etc/cron.daily
+
+# Run it for the first time
+/etc/cron.daily/update-lxd-image.sh xenial
+
+INFO "Bootstrapping VCA"
+juju bootstrap localhost osm \
+--config default-series=xenial \
+--config enable-os-refresh-update=false \
+--config enable-os-upgrade=false \
+--config apt-http-proxy=http://10.44.127.1:8000
RC=0
INFO "done, RC=$RC"
exit $RC
-
-
--- /dev/null
+#!/bin/bash
+#
+# This script will create xenial and trusty lxd images that will be used by the
+# lxd provider in juju 2.1+ It is for use with the lxd provider for local
+# development and preinstalls a common set of production packages.
+#
+# This dramatically speeds up the install hooks for lxd deploys by
+# pre-installing common packages. It is intended to run daily as part of
+# a cron job.
+set -eux
+
+# The basic charm layer also installs all the things. 47 packages.
+LAYER_BASIC="gcc build-essential python3-pip python3-setuptools python3-yaml"
+
+# the basic layer also installs virtualenv, but the name changed in xenial.
+TRUSTY_PACKAGES="python-virtualenv"
+XENIAL_PACKAGES="virtualenv"
+
+# Predownload common packages used by your charms in development
+DOWNLOAD_PACKAGES=""
+
+PACKAGES="$LAYER_BASIC $DOWNLOAD_PACKAGES"
+
+function cache() {
+ series=$1
+ container=juju-${series}-base
+ alias=juju/$series/amd64
+
+ lxc delete $container -f || true
+ lxc launch ubuntu:$series $container
+ sleep 5 # wait for network
+
+ lxc exec $container -- apt-get update -y
+ lxc exec $container -- apt-get upgrade -y
+ lxc exec $container -- apt-get install -y $PACKAGES $2
+ lxc stop $container
+
+ lxc image delete $alias || true
+ lxc publish $container --alias $alias description="$series juju dev image ($(date +%Y%m%d))"
+
+ lxc delete $container -f || true
+}
+
+cache trusty "$TRUSTY_PACKAGES"
+cache xenial "$XENIAL_PACKAGES"