问题
I've been wanting to try out Ansible modules available for Netbox [1].
However, I find myself stuck right in the beginning.
Here's what I've tried:
Add prefix/VLAN to netbox [2]:
cat setup-vlans.yml
---
- hosts: netbox
tasks:
- name: Create prefix 192.168.10.0/24 in Netbox
netbox_prefix:
netbox_token: "{{ netbox_token }}"
netbox_url: "{{ netbox_url }}"
data:
prefix: 192.168.10.0/24
state: present
That gives me the following error:
ansible-playbook setup-vlans.yml
PLAY [netbox] *********************************************************************************************************************************
TASK [Gathering Facts] ************************************************************************************************************************
ok: [NETBOX]
TASK [Create prefix 192.168.10.0/24 in Netbox] ************************************************************************************************
fatal: [NETBOX]: FAILED! => {"changed": false, "msg": "Failed to establish connection to Netbox API"}
PLAY RECAP ************************************************************************************************************************************
NETBOX : ok=1 changed=0 unreachable=0 failed=1 skipped=0 rescued=0 ignored=0
Can someone please point me where I am going wrong?
Note: The NetBox URL is an https://url setup with nginx and netbox-docker [3].
Thanks & Regards, Sana
[1] https://github.com/netbox-community/ansible_modules
[2] https://docs.ansible.com/ansible/latest/modules/netbox_prefix_module.html
[3] https://github.com/netbox-community/netbox-docker
回答1:
All playbooks using API modules like netbox
(but this is the same for gcp
or aws
) must use as host not the target but the host that will execute the playbook to call the API. Most of the time this is localhost
, but that can be also a dedicated node like a bastion.
You can see in the example on the documentation you linked that it uses hosts: localhost
.
Hence I think your playbook should be
---
- hosts: localhost
connection: local
gather_facts: False
tasks:
- name: Create prefix 192.168.10.0/24 in Netbox
netbox_prefix:
netbox_token: "{{ netbox_token }}"
netbox_url: "{{ netbox_url }}"
data:
prefix: 192.168.10.0/24
state: present
回答2:
While I could see the requests in the nginx access log when using requests library or pynetbox api: https://pastebin.com/LyLw7svm, the same was not true when using the Ansible modules.
xx.xx.xx.xx - - [08/Jul/2020:06:43:03 +0000] "GET / HTTP/1.1" 200 4342 "-" "python-requests/2.23.0"
xx.xx.xx.xx - - [08/Jul/2020:06:45:00 +0000] "GET /api/ HTTP/1.1" 200 403 "-" "python-requests/2.23.0"
xx.xx.xx.xx - - [08/Jul/2020:06:45:28 +0000] "GET /api/dcim/devices/ HTTP/1.1" 200 52 "-" "python-requests/2.23.0"
Also tried to test it with Netbox Ansible Collections as documented [1]
$ cat ansible.cfg
[defaults]
inventory = ./inventory
collections_paths = ./collections
$ cat inventory
NETBOX ansible_host=xx.xx.xx.xx ansible_ssh_user=user
[netbox]
NETBOX
$ cat group_vars/all.yml
---
netbox_url: https://netbox.url
netbox_token: XXX
$ cat collections/requirements.yml
collections:
- name: netbox.netbox
source: https://galaxy.ansible.com
$ ansible-galaxy collection install -r collections/requirements.yml
Process install dependency map
Starting collection install process
Installing 'netbox.netbox:0.2.3' to '/Users/myuser/Desktop/ansible/netbox/collections/ansible_collections/netbox/netbox'
Installing 'ansible.netcommon:1.0.0' to '/Users/myuser/Desktop/ansible/netbox/collections/ansible_collections/ansible/netcommon'
Installing 'community.general:0.2.1' to '/Users/myuser/Desktop/ansible/netbox/collections/ansible_collections/community/general'
Installing 'google.cloud:0.10.1' to '/Users/myuser/Desktop/ansible/netbox/collections/ansible_collections/google/cloud'
Installing 'ansible.posix:1.0.0' to '/Users/myuser/Desktop/ansible/netbox/collections/ansible_collections/ansible/posix'
Installing 'community.kubernetes:0.11.1' to '/Users/myuser/Desktop/ansible/netbox/collections/ansible_collections/community/kubernetes'
$ cat setup-vlans.yml
---
- hosts: localhost
connection: local
gather_facts: False
collections:
- netbox.netbox
tasks:
- name: Printing environment variable REQUESTS_CA_BUNDLE
debug:
msg: "{{ lookup('env','REQUESTS_CA_BUNDLE') }}"
- name: Create prefix within Netbox with only required information
netbox_prefix:
netbox_url: "{{ netbox_url }}"
netbox_token: "{{ netbox_token }}"
data:
prefix: 10.156.0.0/19
state: present
Yet, the task fails with Failed to establish connection to Netbox API
The full traceback is:
File "/var/folders/ql/27zxd8fj19qgj2cbd4npxyt8yc8zzn/T/ansible_netbox_prefix_payload_k8j36mj6/ansible_netbox_prefix_payload.zip/ansible_collections/netbox/netbox/plugins/module_utils/netbox_utils.py", line 417, in _connect_netbox_api
nb = pynetbox.api(url, token=token, ssl_verify=ssl_verify)
fatal: [localhost]: FAILED! => {
"changed": false,
"invocation": {
"module_args": {
"data": {
"custom_fields": null,
"description": null,
"family": null,
"is_pool": null,
"parent": null,
"prefix": "10.156.0.0/19",
"prefix_length": null,
"prefix_role": null,
"site": null,
"status": null,
"tags": null,
"tenant": null,
"vlan": null,
"vrf": null
},
"first_available": false,
"netbox_token": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER",
"netbox_url": "https://netbox.url",
"query_params": null,
"state": "present",
"validate_certs": true
}
},
"msg": "Failed to establish connection to Netbox API"
}
Am I missing something?
[1] https://github.com/netbox-community/ansible_modules#how-to-use
来源:https://stackoverflow.com/questions/62768218/using-netbox-ansible-modules