What is the proper procedure to upgrade juju (from 1.18 to 1.24)

Mario Splivalo mario.splivalo at canonical.com
Tue Jun 30 17:34:18 UTC 2015


Hi, lads (and ladies!)

I need to upgrade customer who's running juju 1.18 (on a fairly large
setup, 100+ nodes), and I'm not sure what's the proper procedure to do so.

I tried (in our lab, local OpenStack) upgrading juju-core package to
1.24, and then running 'upgrade-juju', but that just left my environment
unusable.

Then I opted for a 'intermediate' step - I'll upgrade to 1.20 (which is
in trusty-updates, and from there I'll upgrade to 1.24.

So, I installed 1.18 from trusty (apt-get install
juju-core=1.18.1-0ubuntu1), bootstraped, and deployed two simple
services, one-unit ubuntu service (u1) and three unit ubuntu service (u2).

After services were installed I run upgrade-juju (with juju-core still
being 1.18)

juju upgrade-juju

That upgraded agents on all the installed units to 1.20.14. (juju status
confirmed that, as well as symlinks in /var/lib/juju/tools on each of
the deployed units).

After that I upgraded juju-core (on my control node) to 1.20.11. But,
after that running 'juju upgrade-juju' yielded with "no upgrades
available". As I was running 1.20 agent on all of the installed units I
went further and upgraded juju-core to 1.24 (from juju stable ppa), and
tried 'juju upgrade-juju' again. But again I was greeted with "no
upgrades available".

I then run 'juju upgrade-juju --dry-run --version 1.24.0', and this time
juju showed me available versions and suggested that 1.24 was the best one:

ubuntu at mariosplivalo-bastion:~$ juju upgrade-juju --dry-run
no upgrades available
ubuntu at mariosplivalo-bastion:~$ juju upgrade-juju --dry-run --version 1.24.0
available tools:
    1.24.0-precise-amd64
    1.24.0-precise-armhf
    1.24.0-precise-i386
    1.24.0-trusty-amd64
    1.24.0-trusty-arm64
    1.24.0-trusty-armhf
    1.24.0-trusty-i386
    1.24.0-trusty-ppc64el
    1.24.0-utopic-amd64
    1.24.0-utopic-arm64
    1.24.0-utopic-armhf
    1.24.0-utopic-i386
    1.24.0-utopic-ppc64el
    1.24.0-vivid-amd64
    1.24.0-vivid-arm64
    1.24.0-vivid-armhf
    1.24.0-vivid-i386
    1.24.0-vivid-ppc64el
best version:
    1.24.0
upgrade to this version by running
    juju upgrade-juju --version="1.24.0"
ubuntu at mariosplivalo-bastion:~$ juju upgrade-juju --dry-run
--version="1.24.0"
available tools:
    1.24.0-precise-amd64
    1.24.0-precise-armhf
    1.24.0-precise-i386
    1.24.0-trusty-amd64
    1.24.0-trusty-arm64
    1.24.0-trusty-armhf
    1.24.0-trusty-i386
    1.24.0-trusty-ppc64el
    1.24.0-utopic-amd64
    1.24.0-utopic-arm64
    1.24.0-utopic-armhf
    1.24.0-utopic-i386
    1.24.0-utopic-ppc64el
    1.24.0-vivid-amd64
    1.24.0-vivid-arm64
    1.24.0-vivid-armhf
    1.24.0-vivid-i386
    1.24.0-vivid-ppc64el
best version:
    1.24.0
upgrade to this version by running
    juju upgrade-juju --version="1.24.0"


So I did what was suggested:

ubuntu at mariosplivalo-bastion:~$ juju upgrade-juju --version="1.24.0"
available tools:
    1.24.0-precise-amd64
    1.24.0-precise-armhf
    1.24.0-precise-i386
    1.24.0-trusty-amd64
    1.24.0-trusty-arm64
    1.24.0-trusty-armhf
    1.24.0-trusty-i386
    1.24.0-trusty-ppc64el
    1.24.0-utopic-amd64
    1.24.0-utopic-arm64
    1.24.0-utopic-armhf
    1.24.0-utopic-i386
    1.24.0-utopic-ppc64el
    1.24.0-vivid-amd64
    1.24.0-vivid-arm64
    1.24.0-vivid-armhf
    1.24.0-vivid-i386
    1.24.0-vivid-ppc64el
best version:
    1.24.0
ubuntu at mariosplivalo-bastion:~$

Although the output from the command didn't suggest it, actually the
upgrade started in the background. After some time 'juju status'
returned output, and everything seemed to be ok, but the agent version
was still 1.20. Inside /var/lib/juju/tools there was 1.24.0-trusty-i386
directory, but the symlinks for machine-X etc were still pointing to 1.20:

ubuntu at juju-mariosplivalo-machine-1:/var/lib/juju/tools$ ls -al
total 20
drwxr-xr-x 5 root root 4096 Jun 30 17:11 .
drwxr-xr-x 5 root root 4096 Jun 30 16:51 ..
drwxr-xr-x 2 root root 4096 Jun 30 16:51 1.18.4-trusty-i386
drwxr-xr-x 2 root root 4096 Jun 30 17:02 1.20.14-trusty-i386
drwxr-xr-x 2 root root 4096 Jun 30 17:11 1.24.0-trusty-i386
lrwxrwxrwx 1 root root   19 Jun 30 17:02 machine-1 -> 1.20.14-trusty-i386
lrwxrwxrwx 1 root root   19 Jun 30 17:02 unit-u1-0 -> 1.20.14-trusty-i386


However, when I try to add another service (juju deploy ubuntu u3), that
one never finishes - the machine is brought up, I can ssh into it (using
ssh keys from ~/.juju/), but juju status for that service shows this:
  u3:
    charm: cs:trusty/ubuntu-3
    exposed: false
    service-status:
      current: unknown
      message: Waiting for agent initialization to finish
      since: 30 Jun 2015 17:25:36Z
    units:
      u3/0:
        workload-status:
          current: unknown
          message: Waiting for agent initialization to finish
          since: 30 Jun 2015 17:25:36Z
        agent-status:
          current: allocating
          since: 30 Jun 2015 17:25:36Z
          version: 1.24.0
        agent-state: pending
        agent-version: 1.24.0
        machine: "5"
        public-address: 10.5.2.30



Am I doing something wrong here? Is this the proper procedure to upgrade
juju across a live deployment?

	Mario



More information about the Juju mailing list