New in version 2.4.
- lxml (when using XML content)
- xmljson >= 0.1.8 (when using XML content)
- python 2.7+ (when using xmljson)
parameter | required | default | choices | comments |
---|---|---|---|---|
content |
no |
When used instead of
src , sets the content of the API request directly.This may be convenient to template simple requests, for anything complex use the template module.
|
||
hostname |
yes |
IP Address or hostname of APIC resolvable by Ansible control host.
aliases: host
|
||
method |
yes | get |
|
The HTTP method of the request.
Using
delete is typically used for deleting objects.Using
get is typically used for querying objects.Using
post is typically used for modifying objects.aliases: action
|
password |
yes |
The password to use for authentication.
|
||
path |
yes |
URI being used to execute API calls.
Must end in
.xml or .json .aliases: uri
|
||
src |
no |
Name of the absolute path of the filname that includes the body of the http request being sent to the ACI fabric.
aliases: config_file
|
||
timeout |
no | 30 |
The socket level timeout in seconds.
|
|
use_proxy |
no | yes |
|
If
no , it will not use a proxy, even if one is defined in an environment variable on the target hosts. |
use_ssl |
no | yes |
|
If
no , an HTTP connection will be used instead of the default HTTPS connection. |
username |
yes | admin |
The username to use for authentication.
aliases: user
|
|
validate_certs |
no | yes |
|
If
no , SSL certificates will not be validated.This should only set to
no used on personally controlled sites using self-signed certificates. |
- name: Add a tenant aci_rest: hostname: '{{ inventory_hostname }}' username: '{{ aci_username }}' password: '{{ aci_password }}' method: post path: /api/mo/uni.xml src: /home/cisco/ansible/aci/configs/aci_config.xml delegate_to: localhost - name: Add a tenant using inline YAML aci_rest: hostname: '{{ inventory_hostname }}' username: '{{ aci_username }}' password: '{{ aci_password }}' validate_certs: no path: /api/mo/uni/tn-[Sales].json method: post content: fvTenant: attributes: name: Sales descr: Sales departement delegate_to: localhost - name: Add a tenant using a JSON string aci_rest: hostname: '{{ inventory_hostname }}' username: '{{ aci_username }}' password: '{{ aci_password }}' validate_certs: no path: /api/mo/uni/tn-[Sales].json method: post content: | { "fvTenant": { "attributes": { "name": "Sales", "descr": "Sales departement" } } } delegate_to: localhost - name: Add a tenant using an XML string aci_rest: hostname: '{{ inventory_hostname }}' username: '{{ aci_username }}' password: '{{ aci_password }}' validate_certs: no path: /api/mo/uni/tn-[Sales].xml method: post content: | <fvTenant name="Sales" descr="Sales departement"/> delegate_to: localhost - name: Get tenants aci_rest: hostname: '{{ inventory_hostname }}' username: '{{ aci_username }}' password: '{{ aci_password }}' method: get path: /api/node/class/fvTenant.json delegate_to: localhost - name: Configure contracts aci_rest: hostname: '{{ inventory_hostname }}' username: '{{ aci_username }}' password: '{{ aci_password }}' method: post path: /api/mo/uni.xml src: /home/cisco/ansible/aci/configs/contract_config.xml delegate_to: localhost - name: Register leaves and spines aci_rest: hostname: '{{ inventory_hostname }}' username: '{{ aci_username }}' password: '{{ aci_password }}' validate_certs: no method: post path: /api/mo/uni/controller/nodeidentpol.xml content: | <fabricNodeIdentPol> <fabricNodeIdentP name="{{ item.name }}" nodeId="{{ item.nodeid }}" status="{{ item.status }}" serial="{{ item.serial }}"/> </fabricNodeIdentPol> with_items: - '{{ apic_leavesspines }}' delegate_to: localhost - name: Wait for all controllers to become ready aci_rest: hostname: '{{ inventory_hostname }}' username: '{{ aci_username }}' password: '{{ aci_password }}' validate_certs: no path: /api/node/class/topSystem.json?query-target-filter=eq(topSystem.role,"controller") register: apics until: "'totalCount' in apics and apics.totalCount|int >= groups['apic']|count" retries: 120 delay: 30 delegate_to: localhost run_once: yes
Common return values are documented here Return Values, the following are the fields unique to this module:
name | description | returned | type | sample |
---|---|---|---|---|
error_code |
The REST ACI return code, useful for troubleshooting on failure
|
always | int | 122 |
error_text |
The REST ACI descriptive text, useful for troubleshooting on failure
|
always | string | unknown managed object class foo |
imdata |
Converted output returned by the APIC REST (register this for post-processing)
|
always | string | [{'error': {'attributes': {'text': 'unknown managed object class foo', 'code': '122'}}}] |
payload |
The (templated) payload send to the APIC REST API (xml or json)
|
always | string | <foo bar="boo"/> |
raw |
The raw output returned by the APIC REST API (xml or json)
|
parse error | string | <?xml version="1.0" encoding="UTF-8"?><imdata totalCount="1"><error code="122" text="unknown managed object class foo"/></imdata> |
response |
HTTP response string
|
always | string | HTTP Error 400: Bad Request |
status |
HTTP status code
|
always | int | 400 |
totalCount |
Number of items in the imdata array
|
always | string | 0 |
url |
URL used for APIC REST call
|
success | string | https://1.2.3.4/api/mo/uni/tn-[Dag].json?rsp-subtree=modified |
Note
content
), YAML requires to start with a blank line. Otherwise the JSON statement will be parsed as a YAML mapping (dictionary) and translated into invalid JSON as a result.lxml
and xmljson
python libraries. For JSON payloads nothing special is needed.<protocol>_proxy
is set on the target host, requests will be sent through that proxy. This behaviour can be overridden by setting a variable for this task (see setting the environment), or by using the use_proxy
option.This module is flagged as preview which means that it is not guaranteed to have a backwards compatible interface.
For help in developing on modules, should you be so inclined, please read Community Information & Contributing, Testing Ansible and Developing Modules.