aci_rest - Прямой доступ к REST API Cisco APIC
Новая в версии 2.4.
Обзор
- Обеспечивает управление Cisco ACI Fabric через прямой доступ к REST API Cisco APIC.
- Благодаря идемпотентности APIC, этот модуль также идемпотентен и сообщает об изменениях.
Требования
Ниже перечислены требования к хосту, на котором выполняется этот модуль.
- lxml (при использовании XML payload)
- xmljson >= 0.1.8 (при использовании XML payload)
- python 2.7+ (при использовании xmljson)
Параметры
| Параметр | Варианты/Значения по умолчанию | Комментарии |
|---|---|---|
| certificate_name | Имя сертификата X.509, прикрепленного к пользователю APIC AAA, используемому для аутентификации на основе подписи. По умолчанию это private_key basename без расширения.Псевдонимы: cert_name | |
| content | При использовании вместо src, напрямую задаёт payload запроса к API.Это может быть удобно для шаблонизации простых запросов. Для сложных запросов используйте плагин поиска template (см. примеры) или модуль template с параметром src. | |
| host обязательно | IP-адрес или имя хоста APIC, разрешаемого управляющим хостом Ansible. Псевдонимы: hostname | |
| method |
| HTTP-метод запроса. Использование delete обычно используется для удаления объектов.Использование get обычно используется для запроса объектов.Использование post обычно используется для изменения объектов.Псевдонимы: action |
| output_level |
| Влияет на вывод этого модуля ACI. normal означает стандартный вывод, включая current dict.info добавляет информационный вывод, включая previous, proposed и sent dicts.debug добавляет отладочный вывод, включая filter_string, method, response, status и url информацию. |
| password обязательно | Пароль для аутентификации. Этот параметр исключает private_key. Если private_key также указан, он будет использован вместо него. | |
| path обязательно | URI, используемый для выполнения API-вызовов. Должен заканчиваться на .xml или .json. Псевдонимы: uri | |
| port | Порт, используемый для подключения REST. Значение по умолчанию зависит от параметра `use_ssl`. | |
| private_key обязательно | PEM-форматированный файл с вашим закрытым ключом, используемым для аутентификации на основе подписи. Имя ключа (без расширения) используется как имя сертификата в ACI, если не указан certificate_name. Этот параметр исключает password. Если password также указан, он будет проигнорирован.Псевдонимы: cert_key | |
| src | Имя абсолютного пути к файлу, содержащему тело HTTP-запроса, отправляемого в ACI Fabric. Если требуется шаблонный payload, используйте параметр content вместе с плагином поиска template или модуль template.Псевдонимы: config_file | |
| timeout int | По умолчанию: 30 | Таймаут на уровне сокета в секундах. |
| use_proxy bool |
| Если no, прокси не будет использоваться, даже если он определён в переменной окружения на целевых хостах. |
| use_ssl bool |
| Если no, вместо стандартного HTTPS подключения будет использовано HTTP-соединение. |
| username | По умолчанию: "admin" | Имя пользователя для аутентификации. Псевдонимы: user |
| validate_certs bool |
| Если no, сертификаты SSL не будут проверены.Это следует задать как no только при использовании на контролируемых сайтах с самозаверенными сертификатами. |
Примечания
Примечание
- Некоторые payloads не являются идемпотентными, поэтому будьте осторожны при их создании, например, использование
status="created"вызовет проблемы с идемпотентностью, используйтеstatus="modified"вместо этого. Дополнительную информацию можно найти в документации ACI. - Некоторые payloads (и используемые пути) могут сообщать об отсутствии изменений, когда изменения действительно произошли. Это известная проблема APIC и была сообщена производителю. Существует обходное решение для этой проблемы. Дополнительную информацию можно найти в документации ACI.
- XML payload требуют библиотек python
lxmlиxmljson. Для JSON payload ничего специального не нужно. - Дополнительную информацию о REST API APIC можно найти в руководстве по конфигурации REST API Cisco APIC.
- Подробную информацию о том, как управлять вашей инфраструктурой ACI с помощью Ansible, см. в руководстве Cisco ACI.
Примеры
- name: Add a tenant using certifcate authentication
aci_rest:
host: apic
username: admin
private_key: pki/admin.key
method: post
path: /api/mo/uni.xml
src: /home/cisco/ansible/aci/configs/aci_config.xml
delegate_to: localhost
- name: Add a tenant from a templated payload file from templates/
aci_rest:
host: apic
username: admin
private_key: pki/admin.key
method: post
path: /api/mo/uni.xml
content: "{{ lookup('template', 'aci/tenant.xml.j2') }}"
delegate_to: localhost
- name: Add a tenant using inline YAML
aci_rest:
host: apic
username: admin
private_key: pki/admin.key
validate_certs: no
path: /api/mo/uni.json
method: post
content:
fvTenant:
attributes:
name: Sales
descr: Sales departement
delegate_to: localhost
- name: Add a tenant using a JSON string
aci_rest:
host: apic
username: admin
private_key: pki/admin.key
validate_certs: no
path: /api/mo/uni.json
method: post
content:
{
"fvTenant": {
"attributes": {
"name": "Sales",
"descr": "Sales departement"
}
}
}
delegate_to: localhost
- name: Add a tenant using an XML string
aci_rest:
host: apic
username: admin
private_key: pki/{{ aci_username}}.key
validate_certs: no
path: /api/mo/uni.xml
method: post
content: '<fvTenant name="Sales" descr="Sales departement"/>'
delegate_to: localhost
- name: Get tenants using password authentication
aci_rest:
host: apic
username: admin
password: SomeSecretPassword
method: get
path: /api/node/class/fvTenant.json
delegate_to: localhost
- name: Configure contracts
aci_rest:
host: apic
username: admin
private_key: pki/admin.key
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:
host: apic
username: admin
private_key: pki/admin.key
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:
host: apic
username: admin
private_key: pki/admin.key
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
Возвращаемые значения
Общие возвращаемые значения описаны в этом разделе, следующие поля уникальны для этого модуля:
| Ключ | Возвращаемое значение | Описание |
|---|---|---|
| error_code int | всегда | Код возврата REST ACI, полезный для отладки при ошибках Пример: 122 |
| error_text строка | всегда | Дескриптивный текст REST ACI, полезный для отладки при ошибках Пример: unknown managed object class foo |
| imdata строка | всегда | Преобразованный результат, возвращенный API REST APIC (зарегистрировать для последующей обработки) Пример: [{'error': {'attributes': {'code': '122', 'text': 'unknown managed object class foo'}}}] |
| payload строка | всегда | (Шаблонный) payload, отправленный в REST API APIC (xml или json) Пример: <foo bar="boo"/> |
| raw строка | ошибка разбора | Необработанный результат, возвращенный REST API APIC (xml или json) Пример: <?xml version="1.0" encoding="UTF-8"?><imdata totalCount="1"><error code="122" text="unknown managed object class foo"/></imdata> |
| response строка | всегда | Строка HTTP ответа Пример: HTTP Error 400: Bad Request |
| status int | всегда | Код состояния HTTP Пример: 400 |
| totalCount строка | всегда | Количество элементов в массиве imdata Пример: 0 |
| url строка | успешно | URL, используемый для вызова APIC REST Пример: https://1.2.3.4/api/mo/uni/tn-[Dag].json?rsp-subtree=modified |
Статус
Этот модуль помечен как превью, что означает, что он не гарантирует обратной совместимости интерфейса.
Техническое обслуживание
Этот модуль помечен как сообщество, что означает, что он поддерживается сообществом Ansible. См. Техническое обслуживание и поддержка модулей для получения дополнительной информации.
Список других модулей, поддерживаемых сообществом Ansible, см. здесь.
Автор
- Dag Wieers (@dagwieers)
Подсказка
Если вы обнаружите какие-либо проблемы в этом руководстве, вы можете отредактировать этот документ, чтобы улучшить его.
© 2012–2018 Michael DeHaan
© 2018–2019 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.6/modules/aci_rest_module.html