shwm19
shwm19

Reputation: 43

Ansible connect via ssh after certain tasks have populated passwords

In Ansible I have a need to execute a set of tasks and obtain the passwords from a third party (this part was handled) and then use those SSH credentials to connect.

The problem is it seems when I am doing this the best way to loop through my inventory is to include a list of tasks, that's great. The major problem is that I can only get this if I specify hosts in my main.yml playbook to localhost. (Or set to the name of the server group and specify connection: local) this makes the command module execute locally, which defeats the purpose.

I have tried looking into the SSH module but it looks like it is not registering to give me a no_action detected. I am aware I am likely overlooking something glaring.

I will be posting closer to exact code later but what I have now is

main.yml 
---
- hosts: localhost

  tasks:
    - name: subplay
      include: secondary.yml
      vars:
        user:myUser
        address:"{{hostvars[item].address}}"
      with_items: hostvars['mygroup']


secondary.yml
---
- name: fetch password
  [...fethchMyPassword, it works]
  register: password

- name: 
  [...Need to connect with fetched user for this task and this task only..]
  command: /my/local/usr/task.sh

I am wanting to connect and execute the script there but it seems no matter what I try it either fails to execute at all or executes locally.

Additionally, I might note I checked out https://docs.ansible.com/ansible/latest/plugins/connection/paramiko_ssh.html and https://docs.ansible.com/ansible/latest/plugins/connection/ssh.html but must be doing something wrong

Upvotes: 1

Views: 1614

Answers (1)

tassinp
tassinp

Reputation: 964

it looks like to me that only your fetch task needs to be delegated to localhost, the rest on my_group, and when you have all your connection info, setup connection with set_facts by setting values to ansible_{user, ssh_pass, password} try this :

main.yml 
---
- hosts: mygroup # inventory_hostname will loop through all your hosts in my_group
  tasks:
    - name: subplay
      include: secondary.yml
      vars:
        user:myUser
        address:"{{hostvars[inventory_hostname].address}}"

secondary.yml
---

- name: fetch password 
  [...fethchMyPassword, it works]
  delegate_to: localhost # this task is only run on localhost
  register: password    

- set_fact: # use registered password and vars to setup connection
    ansible_user: "{{ user}}"
    ansible_ssh_pass: "{{ password }}"
    ansible_host: "{{ address }}"


- name: Launch task # this task is run on each hosts of my_group
  [...Need to connect with fetched user for this task and this task only..]
  command: /my/local/usr/task.sh

launch this with

ansible-playbook main.yml

try to write a role with your secondary.yml, and a playbook witht your main.yml

Upvotes: 1

Related Questions