Ansible on Vagrant – skipping: no hosts matched

I have some Ansible roles to configure my vps, Raspberry Pi, etc. I like to test them before I broke something on my real, not clustered machines – I use Vagrant for that.
But with it I had one problem – in playbooks I define hosts as groups of severs ex. web for my vps:

- hosts: web
  gather_facts: True
  sudo: True
...

But testing machine wasn't in this group and when I run vagrant I could only see:

$ vagrant provision
==> default: Running provisioner: fix-no-tty (shell)...
    default: Running: inline script
==> default: Running provisioner: ansible...

PLAY [web] ******************************************************************** 
skipping: no hosts matched

PLAY RECAP ********************************************************************

To get rid of this I have to add default vagrant machine to my web group in Vagrantfile:

  config.vm.provision 'ansible' do |ansible|
    ansible.groups = {
      'web' => ['default']
    }

    ansible.sudo = true
    ansible.limit = 'all'
    ansible.playbook = 'web.yml'
  end

And that solved my problem 🙂

Ansible – ssh pipelining

In recent Ansible update to 1.5 version there is really nice feature ssh pipelining. This option is serious alternative to accelerated mode.

Just add to you config file (ex. ~/.ansible.cfg):

[ssh_connection]
pipelining=True

Now run any playbook – you will see the difference 🙂

Source (and extended info about):
http://blog.ansibleworks.com/2014/01/15/ssh-connection-upgrades-coming-in-ansible-1-5/

Ansible – Dynamicaly update /etc/hosts files on target servers

I was configuring GlusterFS on few servers using Ansible and have a need to update /etc/hosts with hostnames for easier configuration. I found this one working:

- name: Update /etc/hosts
  lineinfile: dest=/etc/hosts regexp='.*{{item}}$' line='{{hostvars.{{item}}.ansible_default_ipv4.address}} {{item}}' state=present
  with_items: '{{groups.somegroup}}'

Update – that doesn’t work in Ansible version 2.x, you have to use this:

- name: Update /etc/hosts from inventory
  lineinfile: dest=/etc/hosts regexp='.*{{item}}$' line='{{hostvars[item].ansible_default_ipv4.address}} {{item}}' state=present
  with_items: '{{groups.all}}'
  tags:
    - hosts

Source:
http://xmeblog.blogspot.com/2013/06/ansible-dynamicaly-update-etchosts.html