ansible with docker dynamic inventory

So, I have a few dockers. Every now and then I want to run some command on all of them. Doing ‘docker exec’ is tiresome. I found this neat solution with ansible that I thought I should share with you.

To get started, you need to have the “docker.py” script. This script will be used as python script inventory for ansible. So, use the following command and get the script:

curl 'https://raw.githubusercontent.com/ansible/ansible/devel/contrib/inventory/docker.py' -o docker.p

Once done, check that all is well, with :

python docker.py

You should not get any errors or warnings and see a list of dockers running on your host. If you get error for docker-py then you can install the same with :

pip install docker-py

And now is the good time to open the docker.py script to check the documentation. It adds all the docker hosts as entry in itself. But cool  thing I liked is the fact that it creates a group for all running dockers – which is very very useful.

 

Now, if I want to set the Timezone (TZ) on all the running dockers in one go, I can do this:

ansible -i docker.py -m shell -a 'rm -f /etc/localtime; ln -s /usr/share/zoneinfo/Asia/Kolkata /etc/localtime' running

And just in case, the above does not work for you and you have a common username/password on all the machines, then another thing you would love is following:

# Export the docker host. If that is localhost, then you do not need this.
export DOCKER_HOST=tcp://192.168.122.1:4243
# This is GOOD to set option. This is the default IP address for docker
# and setting this to first IP address of the docker network is good idea
# that would ensure that ansible can login to each docker.
# And note - you need to have ssh running on all the dockers for the commands to work
export DOCKER_DEFAULT_IP=192.168.122.1
ansible -i docker.py -m setup -u root  -a 'filter=ansible_eth[0-2]'  all

cvs add files recursively – not already in repository

When you have a lot of files in some repository and you have added a couple of new, in CVS there is no command to add just the new ones to the repository, so here is a workaround for that.

cvs status 2>/dev/null | awk '{if ($1=="?")print "cvs add -kb " $2}'

Well, if you are adding text files then you might want to remove the “-kB” in the cvs command above.

 

Enhanced by Zemanta

meld – cvs diff with ease

Visualization of the "history tree" ...
Visualization of the “history tree” of a revision controlled project, showing branching, merging, tagging, etc. (Photo credit: Wikipedia)

There are couple of ways to make life easier with CVS diff. But here is one that is really good.
First if you haven’t, install meld:

sudo yum install meld

meld is basically a diff viewer and pretty good at it 😉

Now open meld from the menu or from the terminal. And then select New. In the dialog box that appears select “Version Control Browser”. In the Directory box, browse to the folder where you have the code checked out and select ok. And you are all set.

To see the diff with cvs version just double click.

Note: If you are getting issues when you double click, ensure that you do not have any commands for diff in .cvsrc file.

There are other ways of doing this, but thats for some other day.

Enhanced by Zemanta