Hi Ansible Guru's
I am using the CSV file as below for nfs volume migration as we have 1000 servers with 100 volumes. Hence, i would like to make to host inventory using add_host file instead using inventory file. However, the loop is failing when i use add_host module. Hence, i tried using json_query as suggested by vladimar, and it is working for debug output but same is not working for mount module as i would like to update /etc/fstab and mount the volumes using this playbook. would you suggest the logic?
Playbook and CSV details:
=========================
# cat mounts.csv
host,remote_path,mnt_path,python
host1,nfsflr01:/volahcstg_www_masup_stg_data_01,/myasup/stg/data,/usr/bin/python2.6
host2,nfsflr01:/volahcstg_www_masup_stg_data_01,/myasup/stg/data,/usr/bin/python2.6
# cat mounts.yml
---
- name: mount the nfsshare in client side
hosts: localhost
gather_facts: false
become: yes
tasks:
- name: reading volume info from csv
read_csv:
path: "{{ playbook_dir }}/mounts.csv"
register: sources
- name: Grouping host and volume information
add_host:
name: "{{ item.0 }}"
groups: nfsgroup
var1: "{{ item.1|json_query('[].remote_path') }}"
var2: "{{ item.1|json_query('[].mnt_path') }}"
ansible_python_interpreter: "{{ item.1.0.python }}"
loop: "{{ sources.list|groupby('host') }}"
- name: list the volumes
hosts: nfsgroup
become: yes
gather_facts: false
tasks:
- name: debug output
debug:
msg:
- "{{ inventory_hostname }}"
- "{{ var1 }}"
- "{{ var2 }}"
- name: mounting the volume in the fstab file
hosts: nfsgroup
gather_facts: false
become: yes
tasks:
- name: mounting the volume in the fstab file
mount:
fstype: nfs
opts: "rw,bg,hard,rsize=65536,wsize=65536,vers=3,actimeo=0,nointr,suid,timeo=600,tcp"
dump: "0"
passno: "0"
src: "{{ var1 }}"
path: "{{ var2 }}"
state: mounted
delegate_to: "{{ inventory_hostname }}"
...
================================================================================================================================================
Playbook Verbose Output:
================================================================================================================================================
"host": "host1",
"mnt_path": "/myasup/stg/data",
"python": "/usr/bin/python2.6",
"remote_path": "nfsflr01:/volahcstg_www_masup_stg_data_01"
},
{
"host": "host2",
"mnt_path": "/myasup/stg/data",
"python": "/usr/bin/python2.6",
"remote_path": "nfsflr01:/volahcstg_www_masup_stg_data_01"
}
]
}
TASK [Grouping host and volume information] *****************************************************************************************************************************
task path: /suresh/suresh_playbooks/mounts.yml:11
creating host via 'add_host': hostname=host1
changed: [localhost] => (item=[u'host1', [{u'python': u'/usr/bin/python2.6', u'host': u'host1', u'mnt_path': u'/myasup/stg/data', u'remote_path': u'nfsflr01:/volahcstg_www_masup_stg_data_01'}]]) => {
"add_host": {
"groups": [
"nfsgroup"
],
"host_name": "host1",
"host_vars": {
"ansible_python_interpreter": "/usr/bin/python2.6",
"var1": [
"nfsflr01:/volahcstg_www_masup_stg_data_01"
],
"var2": [
"/myasup/stg/data"
]
}
},
"ansible_loop_var": "item",
"changed": true,
"item": [
"host1",
[
{
"host": "host1",
"mnt_path": "/myasup/stg/data",
"python": "/usr/bin/python2.6",
"remote_path": "nfsflr01:/volahcstg_www_masup_stg_data_01"
}
]
]
}
creating host via 'add_host': hostname=host2
changed: [localhost] => (item=[u'host2', [{u'python': u'/usr/bin/python2.6', u'host': u'host2', u'mnt_path': u'/myasup/stg/data', u'remote_path': u'nfsflr01:/volahcstg_www_masup_stg_data_01'}]]) => {
"add_host": {
"groups": [
"nfsgroup"
],
"host_name": "host2",
"host_vars": {
"ansible_python_interpreter": "/usr/bin/python2.6",
"var1": [
"nfsflr01:/volahcstg_www_masup_stg_data_01"
],
"var2": [
"/myasup/stg/data"
]
}
},
"ansible_loop_var": "item",
"changed": true,
"item": [
"host2",
[
{
"host": "host2",
"mnt_path": "/myasup/stg/data",
"python": "/usr/bin/python2.6",
"remote_path": "nfsflr01:/volahcstg_www_masup_stg_data_01"
}
]
]
}
META: ran handlers
META: ran handlers
PLAY [list the volumes] *************************************************************************************************************************************************
META: ran handlers
TASK [debug output] *****************************************************************************************************************************************************
task path: /suresh/suresh_playbooks/mounts.yml:24
ok: [host2] => {
"msg": [
"host2",
[
"nfsflr01:/volahcstg_www_masup_stg_data_01"
],
[
"/myasup/stg/data"
]
]
}
ok: [host1] => {
"msg": [
"host1",
[
"nfsflr01:/volahcstg_www_masup_stg_data_01"
],
[
"/myasup/stg/data"
]
]
}
META: ran handlers
META: ran handlers
PLAY [mounting the volume in the fstab file] ****************************************************************************************************************************
META: ran handlers
TASK [mounting the volume in the fstab file] *******
<host2> (0, '', '')
fatal: [host2]: FAILED! => {
"changed": false,
"invocation": {
"module_args": {
"backup": false,
"boot": true,
"dump": "0",
"fstab": null,
"fstype": "nfs",
"opts": "rw,bg,hard,rsize=65536,wsize=65536,vers=3,actimeo=0,nointr,suid,timeo=600,tcp",
"passno": "0",
"path": "['/myasup/stg/data']",
"src": "['nfsflr01:/volahcstg_www_masup_stg_data_01']",
"state": "mounted"
}
},
"msg": "Error mounting ['/myasup/stg/data']: mount: can't get address for ['nfsflr01\n"
fatal: [host1]: FAILED! => {
"changed": false,
"invocation": {
"module_args": {
"backup": false,
"boot": true,
"dump": "0",
"fstab": null,
"fstype": "nfs",
"opts": "rw,bg,hard,rsize=65536,wsize=65536,vers=3,actimeo=0,nointr,suid,timeo=600,tcp",
"passno": "0",
"path": "['/myasup/stg/data']",
"src": "['nfsflr01:/volahcstg_www_masup_stg_data_01']",
"state": "mounted"
}
},
"msg": "Error mounting ['/myasup/stg/data']: mount: can't get address for ['nfsflr01\n"
}
PLAY RECAP **************************************************************************************************************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
host1 : ok=1 changed=0 unreachable=0 failed=1 skipped=0 rescued=0 ignored=0
host2 : ok=1 changed=0 unreachable=0 failed=1 skipped=0 rescued=0 ignored=0
Result on target servers fstab file
===================================
# grep 'nfsflr01:/volahcstg_www_masup_stg_data_01' /etc/fstab
nfsflr01:/volahcstg_www_masup_stg_data_01 /myasup/stg/data nfs vers=3,rw,nosuid,bg,hard,rsize=32768,wsize=32768,nointr,tcp,timeo=600 0 0
['nfsflr01:/volahcstg_www_masup_stg_data_01',\040'nasdurahc01spd02:/volahcstg_www_masup_stg_app_01'] ['/myasup/stg/data',\040'/myasup/stg/app'] nfs rw,bg,hard,rsize=65536,wsize=65536,vers=3,actimeo=0,nointr,suid,timeo=600,tcp 0 0