User Tools

Site Tools


juju

This is an old revision of the document!


Working with Juju and MaaS

:!: WARNING: this is outdated, and will be replaced once the windows changes merge with upstream :!:

:!: For the sake of this example, we will assume that your MaaS IP is 192.168.200.1 :!:

  • Install Go
sudo apt-get -y install golang-go git mercurial bzr
  • Set up your Go environment
echo 'export GOPATH=$HOME/golang' >> ~/.bashrc
echo 'export PATH=$PATH:$GOPATH/bin' >> ~/.bashrc
. ~/.bashrc
mkdir -p $GOPATH

This will add the necessary variables to facilitate building juju and to have juju (client) in your path once that's done.

  • Get a copy of juju-core from launchpad. This will pull in all other dependencies:
go get launchpad.net/juju-core/...
  • Get our patched version from git. This contains the windows support:
rm -rf $GOPATH/src/launchpad.net/juju-core
git clone https://github.com/cloudbase/juju-core.git $GOPATH/src/launchpad.net/juju-core
cd $GOPATH/src/launchpad.net/juju-core && git checkout rebase-1.19.3
  • Because of the way Go works, you will always get the latest revisions of dependencies. This might sometimes break the build of juju. The checkout from 19 April needs the following hack:
cd $GOPATH/src/code.google.com/p/go.crypto/ssh && hg update -r 191:2990fc550b9f # hack for this particular checkout of juju
  • Build juju-core on Linux
go install -v launchpad.net/juju-core/...

Binaries will be in $GOPATH/bin

:!: Instructions for the Windows version can be found HERE :!:

Setting up your Juju environment

  • Initialize your environment. This will create ~/.juju/environments.yaml
juju init
  • Set up juju to work with MaaS

Generating local tools

  • Uploading juju tools to MaaS

If you want to upload your version of juju to MaaS to be used for deployment (and you do):

mkdir -p ~/.juju/tools/releases
cd ~/.juju/tools/releases
cp ~/golang/bin/jujud .
tar -czf juju-1.19.1-trusty-amd64.tgz jujud
rm jujud

Do this for every version of ubuntu that you want to have tools for. Precise and Trusty should be enough for development. While its good practice to build the binary on each platform to make sure no breakage will happen, I have found that the same binary works great on all versions.

For windows machines you will need the JujuService.exe service wrapper. It must be bundeled with the tools. You may download it from Here:

cd ~/.juju/tools/releases
wget http://wiki.cloudbase.it/_media/juju-service.tar.gz
tar -xzf juju-service.tar.gz
cp /location/to/jujud.exe ./ # this will have to be copied over from your Windows machine (see above)
tar -czf juju-1.19.1-win2012r2-amd64.tgz *.exe
rm *.exe

do this for every version you want to support

  • Generate the metadata necessary for uploading to MaaS:
juju-metadata generate-tools

This will generate all metadata from the tools found in ~/.juju/tools/releases. The metadata files can be found in:

ls -l /home/ubuntu/.juju/tools/streams/v1

Setting up your configuration

Go to your MaaS web interface under:

http://192.168.200.1:5240/account/prefs/

Where you will find:

MAAS keys
  • Generate a new key for Juju and copy it to your clipboard. On the node where you have juju installed, edit the file that was generated by juju init:
sed -i 's/^default:.*/default: maas/g' ~/.juju/environments.yaml
sed -i 's|maas-server: .*|maas-server: "http://192.168.200.1:5240/"|' ~/.juju/environments.yaml
sed -i 's|maas-oauth: .*|maas-oauth: "<KEY FROM MAAS WEB UI>"|' ~/.juju/environments.yaml
  • Upload tools to MaaS:
juju sync-tools --source=/home/ubuntu/.juju/ --debug
  • Bootstrap the state machine
juju bootstrap --debug
  • If added in MaaS, you may optionally use constraints to tag particular node:
juju bootstrap --debug --constraints tags=StateMachine

This will take a while. If your network is slow, the first time you try to bootstrap will fail. Juju has a timeout of 10 minutes. Don't panic, just run it again. MaaS caches your debs and the next time you try it will get from local cache.

  • Set your nameserver to the MaaS IP address in resolv.conf (or equivalent)
echo 'nameserver 192.168.200.1' > /etc/resolv.conf # this will replace you nameservers
  • Check that the state machine has been bootstrapped:
juju status

this should output something similar to:

ubuntu@maas-controller:~$ juju status
environment: maas
machines:
  "0":
    agent-state: started
    agent-version: 1.19.1
    dns-name: MaaS-StateMachine.maas
    instance-id: /api/1.0/nodes/node-4aecf276-c94c-11e3-95d7-525400a3b5b3/
    series: trusty
    state-server-member-status: has-vote

If it does not, I have failed miserably to explain this procedure properly, and I am ashamed.

You should now be able to deploy new charms. To test it out, lets install MySQL:

juju deploy mysql

This will install mysql on a “Ready” node (in MaaS).

juju.1404304340.txt.gz · Last modified: 2014/07/02 15:32 by gsamfira