Remove Juju Local Environment Cleanly
UPDATE 2015-01-28: Now taking into account recent changes to Juju 1.20+
If you’re frequently hacking on Juju source code or just creating and destroying local environments often, you may find the following snippet I came up with handy.
It’s supposed to be run as root, like `sudo cleanup-juju` (assuming it’s somewhere in your ‘$PATH’ and it’s executable). Just change `LOCAL_ENV=localenv` to whatever your local environment name is (from `$HOME/.juju/environments.yaml` – usually `local`) and run it. Twice, if needed (when `mongodb` and/or `jujud` agents are busy), to clean up:
- Any leftover gocheck or mgo test directories in `/tmp` (these tend to accumulate over time and waste space)
- Juju run-time temporary directories (e.g. /tmp/juju-worker-deployer<random-number>/)
- Mongo socket files created by mongod run from juju tests (port other than the default 27017)
- Old-style upstart “auto start” configuration (in juju 1.17 and later we use user upstart jobs for that)
- Any juju or juju-lxc logs
- Any lxc containers created by juju for that local environment
- The .jenv file of the environment itself
- Kill any `mongod` or `jujud` processes related to the local environment (for this to work it’s important you pick a unique name for your environment, so that `ps xa | grep <envname>` does not return processes not belonging to the environment – i.e. “local” is a bit too generic, I use “localenv”)
#!/bin/bash
# Change this to match the name of your environment type:local in
# ~/.juju/environments.yaml
LOCAL_ENV=localenv
[[ $UID != 0 ]] && echo "$0 must be run as root" && exit -1
pkill -9 -f $LOCAL_ENV
pkill -9 -u $USER mongod
find /tmp -name 'mongodb-*.sock' -not -name 'mongodb-27017.sock' -delete
cleanup=(
"/tmp/gocheck-*"
"/tmp/test-mgo*"
"/tmp/juju-*"
"$HOME/.juju/${LOCAL_ENV}"
"/etc/lxc/auto/*"
"/var/log/juju*"
"/var/lib/juju*"
"/var/lib/lxc/${SUDO_USER}*"
"/var/lib/lxc/juju-*"
"/var/log/lxc/${SUDO_USER}*"
"/var/log/upstart/juju*"
"/var/log/upstart/lxc-instance-*"
"${HOME}/.juju/environments/${LOCAL_ENV}.jenv"
)
for f in "${cleanup[@]}"; do
rm -fr $f
done
I hope you find this useful, especially if your `juju destroy-environment localenv` fails for some reason to clean up after itself, or if `juju bootstrap` fails and leaves the environment in a bad state.
Leave a Reply