Automating desktop setup with ansible-pull part-2

Now we're going to setup ansible to work with a git repository. The process is quite similar to ansible-playbook, the only difference is that the source for the playbook will be a remote repository and not a local file. Following the previous example we'll get vim setup automated.

Create a git repository wherever you see fit, gitlab and github offer free repositories. For this task we need to add only two file: one for the yml file describing the tasks and the .vimrc file.

In the .vimrc add your own configuration, you can see mine over here, it is pretty small as I don't use it but for small text editing (like this post) so you can start with that if you don't have one.

The yml file will have two tasks, one is to install vim, just like we did in the part 1.

# main.yml
- name: install vim
    name: vim
    state: latest

To copy .vimrc file to your $HOME we going to use copy module:

# main.yml
- name: copy vimrc file
    src: config/.vimrc
    dest: ~/
    mode: 0644

After we've added those two files to repository you will have be something like this.

And now we just need to run ansible-pull command

# you may need run it as a sudo
ansible-pull -U $YOUR_REPO -i all main.yml


  • -i is a list of hosts.
  • -U is the git repository URL.

Remember man is your best friend, take a look at man ansible-pull to know more about its parameters.

The best part you can quickly test and see the result by running my sample:

ansible-pull -U -C debcf3458df511aef9f7dca0cb73f6cf6baddd5d -i all main.yml

The idea here is to keep your repository as a source of truth when comes to configuration, you can add ansible-pull to a CRON tab, so you just need to push something to your repository and after a few minutes not only your machine but all the machines that have it setup will run the playbooks. You can use this method as a straightforward way to install software, update machines or even distribute tooling company-wise.