Not working together - connection: local and delegate_to

573 views
Skip to first unread message

Vichu

unread,
Sep 30, 2022, 1:40:11 PM9/30/22
to Ansible Project
Hi Team,

Good Day!! Am not able to use Connection: local and Delegate_to together in my playbooks. 

Actual Result - Both debug outputs give me the same hostname. 
Expected Result: First debug should have given me the localhost hostname and second debug should have given me the "pocansibletest" as per the playbook. But doesnt work as expected.

Playbook:
- hosts: pocansibletest
  connection: local
  become: false
  remote_user: admin
  tasks:
    - name: Set VM_Name as fact
      set_fact:
        vm_name: "{{ inventory_hostname }}"  

    - name: Test host name without delegation
      shell: hostname
      register: name_without_del

    - name: Debug host name without delegation
      debug:
        msg: "Debug host name without delegation - {{ name_without_del.stdout }}"
   
    - name: Test host name with delegation
      delegate_to: "{{vm_name}}"
      shell: hostname
      register: name_with_del

    - name: Debug host name with delegation
      debug:
        msg: "Debug host name with delegation - {{ name_with_del.stdout }}"      

Thanks & Regards,
Vichu

Vichu

unread,
Sep 30, 2022, 3:15:37 PM9/30/22
to Ansible Project
Below is the ansible version am using and giving out issue

ansible [core 2.13.4]
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/home/rundeck/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/local/lib/python3.8/dist-packages/ansible
  ansible collection location = /home/rundeck/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/local/bin/ansible
  python version = 3.8.10 (default, Jun 22 2022, 20:18:18) [GCC 9.4.0]
  jinja version = 3.1.2
  libyaml = True

Also to confirm the playbook gives appropriate hostnames on ansible v2.7
ansible 2.7.18.post0
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.5 (default, Nov 16 2020, 22:23:17) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]

Thanks & Regards,
Vichu

Rowe, Walter P. (Fed)

unread,
Sep 30, 2022, 3:20:02 PM9/30/22
to ansible...@googlegroups.com
- hosts: pocansibletest

This absolutely IS your inventory host. delegate_to and connection: local only tell ansible where to run. They do not affect the "inventory".

Walter
--
Walter Rowe, Division Chief
Infrastructure Services, OISM
Mobile: 202.355.4123

--
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 ansible-proje...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/6fa83903-211a-4e27-8649-0954a2751fc6n%40googlegroups.com.

Vichu

unread,
Sep 30, 2022, 3:34:10 PM9/30/22
to Ansible Project
Yes your are right but the below task does not give the hostname of "pocansibletest" and gives the hostname of the localhost itself in ansible v6. But the same works perfectly on ansible v2.7 without any changes to playbook.

    - name: Test host name with delegation
      delegate_to: "{{vm_name}}"
      shell: hostname
      register: name_with_del

The requirement for me is to run many tasks on localhost and delegate some tasks to remote hosts using delegate_to directive. But with ansible v6 its always executing on localhost and I see inappropriate behaviour and failures. 

Rowe, Walter P. (Fed)

unread,
Sep 30, 2022, 3:42:48 PM9/30/22
to ansible...@googlegroups.com
You set_fact vm_name to inventory_hostname in the first task. This assigns "pocansibletest" to vm_name. If you then delegate_to vm_name you are delegating to "pocansibletest".

The connection: local doesn't factor into this. All tasks are still operating on the inventory "pocansibletest".

Walter
--
Walter Rowe, Division Chief
Infrastructure Services, OISM
Mobile: 202.355.4123

Vichu

unread,
Sep 30, 2022, 4:01:20 PM9/30/22
to Ansible Project
Yes you are right, thats my understanding, but what output I get is the hostname where the ansible playbook has triggered. So its not working as expected with Ansible V6

Rowe, Walter P. (Fed)

unread,
Oct 3, 2022, 7:23:19 AM10/3/22
to ansible...@googlegroups.com
Please provide the playbook AND the actual output from running the playbook so we can see which task produces which output.


Walter
--
Walter Rowe, Division Chief
Infrastructure Services, OISM
Mobile: 202.355.4123
Reply all
Reply to author
Forward
0 new messages