Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Example using inventory_hostname #140

Open
FloLaco opened this issue Aug 8, 2018 · 2 comments
Open

Example using inventory_hostname #140

FloLaco opened this issue Aug 8, 2018 · 2 comments

Comments

@FloLaco
Copy link

FloLaco commented Aug 8, 2018

Hello guys,

When we follow examples (http://napalm.readthedocs.io/en/latest/tutorials/ansible-napalm.html or https://github.com/napalm-automation/napalm-ansible#examples), the hostname is using the {{ inventory_hostname }}

But a classic host file is :

[cisco]
spine1 ansible_host=10.0.100.101
spine2 ansible_host=10.0.100.102
leaf1 ansible_host=10.0.100.103
leaf2 ansible_host=10.0.100.104
leaf3 ansible_host=10.0.100.105
leaf4 ansible_host=10.0.100.106

[cisco:vars]
ansible_python_interpreter= "/usr/bin/env python"

Here's the playbook example :

- name: Test Inventory #The Task Name
  hosts: cisco         #This will be in your ansible inventory file
  connection: local    #Required
  gather_facts: no     #Do not gather facts

  tasks:                                     #Begin Tasks
    - name: get facts from device            #Task Name
      napalm_get_facts:                      #Call the napalm module, in this case napal_get_facts
        hostname: "{{ inventory_hostname }}" #This is a parameter and is derived from your ansible inventory file
        username: 'admin'                     #The username to ssh with
        dev_os: 'nxos_ssh'                        #The hardware operating system
        password: 'xxxx'                 #The line level password
        filter: 'facts'                      #The list of items you want to retrieve. The filter keyword is _inclusive_ of what you want
      register: result                       #Ansible function for collecting output

    - name: print results                    #Task Name
      debug: msg="{{ result }}"              #Display the collected output

The playbook does not work

(flacommare_venv2.7) florian@ubuntuvm:~/ansible$ ansible-playbook playbooks/get_facts.yaml -i inventory/host.ini

PLAY [Test Inventory] ************************************************************************************************************************************************************************************************************************

TASK [get facts from device] *****************************************************************************************************************************************************************************************************************
fatal: [leaf2]: FAILED! => {"changed": false, "msg": "cannot connect to device: Cannot connect to leaf2"}
fatal: [leaf1]: FAILED! => {"changed": false, "msg": "cannot connect to device: Cannot connect to leaf1"}
fatal: [leaf3]: FAILED! => {"changed": false, "msg": "cannot connect to device: Cannot connect to leaf3"}
fatal: [spine2]: FAILED! => {"changed": false, "msg": "cannot connect to device: Cannot connect to spine2"}
fatal: [spine1]: FAILED! => {"changed": false, "msg": "cannot connect to device: Cannot connect to spine1"}
fatal: [leaf4]: FAILED! => {"changed": false, "msg": "cannot connect to device: Cannot connect to leaf4"}
	to retry, use: --limit @/home/florian/ansible/playbooks/get_facts.retry

PLAY RECAP ***********************************************************************************************************************************************************************************************************************************
leaf1                      : ok=0    changed=0    unreachable=0    failed=1
leaf2                      : ok=0    changed=0    unreachable=0    failed=1
leaf3                      : ok=0    changed=0    unreachable=0    failed=1
leaf4                      : ok=0    changed=0    unreachable=0    failed=1
spine1                     : ok=0    changed=0    unreachable=0    failed=1
spine2                     : ok=0    changed=0    unreachable=0    failed=1

Indeed, the module code set the local params to override provider. (

# allow local params to override provider
)
So my IP is not use but the "name" of the equipment, which is not a dns entry.

Is there some mistake in my inventory file ? Or maybe the example have a mistake and should use {{ ansible_host }} instead ?

@ktbyers
Copy link
Collaborator

ktbyers commented Aug 8, 2018

Yes, you need to use {{ ansible_host }} and not {{ inventory_hostname }}

[cisco]
spine1 ansible_host=10.0.100.101
spine2 ansible_host=10.0.100.102
leaf1 ansible_host=10.0.100.103
leaf2 ansible_host=10.0.100.104
leaf3 ansible_host=10.0.100.105
leaf4 ansible_host=10.0.100.106

inventory_hostname is spine1, spine2, et cetera and would need to be DNS resolvable to work in the playbook.

@targuan
Copy link
Contributor

targuan commented Oct 15, 2019

You should follow the last example which doen't use any hostname parameter.
If you don't provide the hostname parameter, ansible_host will be used instead of the inventory hostname if provided in the vars.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants