by acls us

Experimentation with Juju Part 1


Juju is described as "An open source application modelling tool. Deploy, configure, scale and operate your software on public and private clouds". I was particularly interested in the "Deploy" capability and that it works over a number of different Cloud Hosting providers. My understanding of Juju so far is that it allows you to define groups of applications to be deployed to dynamically expandable (or contractable) groups of Cloud Hosted Servers within containers. It's own controlling application (the "Controller") is also deployed in the same manner.


My first attempt to start playing was to try and getting Juju running on my MacBook because it looked like that was possible. You can install Juju itself (brew install juju) and you can connect to a remote Juju Controller (juju register) but trying to use the localhost as a Juju Controller proved difficult. Trying to create a localhost (juju bootstrap localhost) resulted in an error saying that lxd (the container system) was not installed, which it wasn't. Trying to get lxd installed on OSX turned into a bit of a deep Rabbit Hole experience. So I tried bootstraping (juju bootstrap aws) an Amazon EC2 instance as the controller. This was remarkably simple after setting setting up API Authentication on the Amazon EC2 console and then adding the credentials to Juju on OSX (juju add-credential aws).

Not wanting to keep an Amazon EC2 instance running while I experimented, I decided to create a VMWare Virtual Machine on OSX to run Ubuntu 16.04 to host the Juju Controller.

Install from ISO of Ubuntu Server 16.04
sudo -i
apt update
apt upgrade
apt install openssh-server
apt install lxd
apt install juju
dpkg-reconfigure -p medium lxd
(take all the defaults but No for IPv6 subnet)
juju bootstrap
(lxd on localhost)
juju gui
(gives the internal lxd container IP, port, URL, login username and password user the IP and port in the following)
iptables -t nat -A PREROUTING -p tcp -i ens33 --dport 17070 -j DNAT --to-destination
(Needed to port forward to the lxd container, ens33 is the interface name from ifconfig)
browse to https://ip_of_vm:port/url-path

End of Part 1