Hi Vladimir, thanks for your help all the time.

I tried using the logic, and it worked when apply the values to debug but
the same data is passing to mount module with additional quotes and
brackets which is causing the errors. Any suggestions please?

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:
================================================================================================================================================

TASK [reading volume info from csv]
*************************************************************************************************************************************
task path: /suresh/suresh_playbooks/mounts.yml:7
<127.0.0.1> ESTABLISH LOCAL CONNECTION FOR USER: root
<127.0.0.1> EXEC /bin/sh -c 'echo ~root && sleep 0'
<127.0.0.1> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo
/root/.ansible/tmp/ansible-tmp-1586795492.17-47707210108532 `" && echo
ansible-tmp-1586795492.17-47707210108532="` echo
/root/.ansible/tmp/ansible-tmp-1586795492.17-47707210108532 `" ) && sleep 0'
Using module file
/usr/lib/python2.7/site-packages/ansible/modules/files/read_csv.py
<127.0.0.1> PUT /root/.ansible/tmp/ansible-local-26007iAx4cI/tmpxiOrdU TO
/root/.ansible/tmp/ansible-tmp-1586795492.17-47707210108532/AnsiballZ_read_csv.py
<127.0.0.1> EXEC /bin/sh -c 'chmod u+x
/root/.ansible/tmp/ansible-tmp-1586795492.17-47707210108532/
/root/.ansible/tmp/ansible-tmp-1586795492.17-47707210108532/AnsiballZ_read_csv.py
&& sleep 0'
<127.0.0.1> EXEC /bin/sh -c '/usr/bin/python2
/root/.ansible/tmp/ansible-tmp-1586795492.17-47707210108532/AnsiballZ_read_csv.py
&& sleep 0'
<127.0.0.1> EXEC /bin/sh -c 'rm -f -r
/root/.ansible/tmp/ansible-tmp-1586795492.17-47707210108532/ > /dev/null
2>&1 && sleep 0'
ok: [localhost] => {
    "changed": false,
    "dict": {},
    "invocation": {
        "module_args": {
            "delimiter": null,
            "dialect": "excel",
            "fieldnames": null,
            "key": null,
            "path": "/suresh/suresh_playbooks/mounts.csv",
            "skipinitialspace": null,
            "strict": null,
            "unique": true
        }
    },
    "list": [
        {
            "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

On Thu, Apr 9, 2020 at 8:51 PM Vladimir Botka <[email protected]> wrote:

> Hi Suresh,
>
> On Thu, 9 Apr 2020 17:46:42 +0530
> Suresh Karpurapu <[email protected]> wrote:
>
> > Hi Vladimir,
> >
> > I have one more last question on the same request as we have different
> > python interpreter on some hosts. Is it possible to read the python
> > interpreter variable from CSV file while connecting the particular?
> > Prior to your solution, i use to use inventory to pass the variable to
> the
> > host as below. Now, i want to omit inventory file as i would like to use
> > your solution completely for host inventory. Can you please suggest same
> to
> > overcome this problem other than declaring variables host_vars?
> >
> > host4 ansible_python_interpreter=/usr/bin/python2.6
> >
> > Regards,
> > Suresh
>
> Yes. It's possible. Simply put the path to Python into the CSV file. For
> example, put it into the first record of the particular host. Various paths
> don't make sense. Right?
>
> shell> cat mounts.csv
> host,remote_path,mnt_path,python
> host1,nfsvol1,mount1,/usr/bin/python2.6
> host1,nfsvol2,mount2
> host1,nfsvol3,mount3
> host2,nfsvol1,mount1,/usr/bin/python3.7
> host2,nfsvol2,mount2
> host2,nfsvol3,mount3
>
> Then simply assign "ansible_python_interpreter in the first play
>
>        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') }}"
>
> (It's not necessary to delegate_to localhost when the play is running at
> localhost "hosts: localhost").
>
> HTH,
>         vlado
>
> > >> On Wed, 8 Apr 2020 19:55:04 +0530
> > >> Suresh Karpurapu <[email protected]> wrote:
> > >> >
> > >> > # cat mounts.csv
> > >> > host,remote_path,mnt_path
> > >> > host1,nfsvol1,mount1
> > >> > host1,nfsvol2,mount2
> > >> > host1,nfsvol3,mount3
> > >> > host2,nfsvol1,mount1
> > >> > host2,nfsvol2,mount2
> > >> > host2,nfsvol3,mount3
> > >> >
> > >> > - 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
> > >> >       delegate_to: localhost
> > >> >     - 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') }}"
> > >>       loop: "{{ sources.list|groupby('host') }}"
> > >>
> > >> > - name: list volume details
> > >> >   hosts: nfsgroup
> > >> >   become: yes
> > >> >   gather_facts: false
> > >> >   tasks:
> > >> >     - debug:
> > >> >         msg:
> > >> >           - "{{ inventory_hostname }}"
> > >> >           - "{{ var1 }}"
> > >> >           - "{{ var2 }}"
> > >>
> > >> You should receive lists of "remote_path" and "mnt_path" in var1 and
> var2
> > >> respectively.
> > >>
> > >> ok: [host1] => {
> > >>     "msg": [
> > >>         "host1",
> > >>         [
> > >>             "nfsvol1",
> > >>             "nfsvol2",
> > >>             "nfsvol3"
> > >>         ],
> > >>         [
> > >>             "mount1",
> > >>             "mount2",
> > >>             "mount3"
> > >>         ]
> > >>     ]
> > >> }
> > >> ok: [host2] => {
> > >>     "msg": [
> > >>         "host2",
> > >>         [
> > >>             "nfsvol1",
> > >>             "nfsvol2",
> > >>             "nfsvol3"
> > >>         ],
> > >>         [
> > >>             "mount1",
> > >>             "mount2",
> > >>             "mount3"
> > >>         ]
> > >>     ]
> > >> }
>

-- 
You received this message because you are subscribed to the Google Groups 
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/CAHedzhKiEoOHCAGB52JSn0EB_sb5%3Dtt-GD7nDzVdvZVYPACc%3DA%40mail.gmail.com.

Reply via email to