Run playbook against multiple hosts

I have defined my hosts in the variable file:

[servers]

server1 ansible_host=ip address of server 1

server2 ansible_host=ip address of server 2

etc

I have a playbook that looks like this:

  • hosts: ‘{{ hostname }}’
    gather_facts: no
    tasks:

  • name: Include vars for vcenter
    include_vars:
    file: /etc/ansible/roles/createvm/vars/main.yml
    name: vcenter
    vars:
    ansible_become_password: “{{ domain_password }}”

  • name: Include vars of server.yaml file
    include_vars:
    file: /etc/ansible/servers/{{ hostname }}.yaml
    name: server

  • name: Wait For Connection to Continue
    wait_for_connection:
    connect_timeout: 30

  • name: Reboot to check for second round of updates
    ansible.windows.win_reboot:
    msg: “Reboot to check for second round of updates”

  • import_role:
    name: windowsupdates

This playbook works fine if I run the command to specify 1 hostname:

ansible-playbook playbooks/file.yml -e “hostname=server1” -vvvv.

How can I run my file.yml against server1,server2 etc at the same time?

Thanks

I have defined my hosts in the variable file:

[servers]

server1 ansible_host=ip address of server 1

server2 ansible_host=ip address of server 2

etc

I have a playbook that looks like this:

- hosts: '{{ hostname }}'
gather_facts: no
tasks:
- name: Include vars for vcenter
include_vars:
file: /etc/ansible/roles/createvm/vars/main.yml
name: vcenter
vars:
ansible_become_password: "{{ domain_password }}"

- name: Include vars of server.yaml file
include_vars:
file: /etc/ansible/servers/{{ hostname }}.yaml
name: server

- name: Wait For Connection to Continue
wait_for_connection:
connect_timeout: 30

- name: Reboot to check for second round of updates
ansible.windows.win_reboot:
msg: "Reboot to check for second round of updates"

- import_role:
name: windowsupdates

This playbook works fine if I run the command to specify 1 hostname:

ansible-playbook playbooks/file.yml -e "hostname=server1" -vvvv.

How can I run my file.yml against server1,server2 etc at the same time?

I suppose that -e "hostname=servers" should do the trick.

Regards
          Racke

I must have missed something… why wouldn’t -i $FILE not work?

This is what I got when I ran:

TASK [Include vars of server.yaml file] ****************************************************************************************************************************************************************
task path: /etc/ansible/roles/secwinupdates/tasks/main.yml:12
fatal: [server1]: FAILED! => {
“ansible_facts”: {
“server”: {}
},
“ansible_included_var_files”: ,
“changed”: false,
“message”: “Could not find or access ‘/etc/ansible/servers/win_us_bgrsuistg.yaml’ on the Ansible Controller.\nIf you are using a module and expect the file to exist on the remote, see the remote_src option”
}
fatal: [server2]: FAILED! => {
“ansible_facts”: {
“server”: {}
},
“ansible_included_var_files”: ,
“changed”: false,
“message”: “Could not find or access ‘/etc/ansible/servers/win_us_bgrsuistg.yaml’ on the Ansible Controller.\nIf you are using a module and expect the file to exist on the remote, see the remote_src option”
}
fatal: [server3]: FAILED! => {
“ansible_facts”: {
“server”: {}
},
“ansible_included_var_files”: ,
“changed”: false,
“message”: “Could not find or access ‘/etc/ansible/servers/win_us_bgrsuistg.yaml’ on the Ansible Controller.\nIf you are using a module and expect the file to exist on the remote, see the remote_src option”
}

This is what my host file looks like:

[win_us_bgrsuistg]
server1 ansible_host=x.x.x.x

server2 ansible_host=x.x.x.x
server3 ansible_host=x.x.x.x

I tried to create a seperate yaml file for the servers, called win_us_bgrsuistg , which includes the server1, server2, server 3 names in it, I then got the below error:

fatal: [server1]: FAILED! => {
“ansible_facts”: {
“server”: {}
},
“ansible_included_var_files”: ,
“changed”: false,
“message”: “/etc/ansible/servers/win_us_bgrsuistg.yaml must be stored as a dictionary/hash”

Does my win_us_bgrsuistg.yaml file have to be in a specific format, maybe its missing some information, that I am overlooking.

I got it work, by following this simple example on git hub:

https://github.com/ryanschulze/ansible_examples/tree/master/simple

Thanks everyone.