aci_rest - Прямой доступ к REST API Cisco APIC
Новое в версии 2.4.
- Обзор
- Требования (к хосту, на котором выполняется модуль)
- Параметры
- Примеры
- Возвращаемые значения
- Примечания
Обзор
- Обеспечивает управление Cisco ACI Fabric посредством прямого доступа к REST API Cisco APIC.
- Дополнительную информацию о REST API Cisco APIC можно найти по адресу http://www.cisco.com/c/en/us/td/docs/switches/datacenter/aci/apic/sw/2-x/rest_cfg/2_1_x/b_Cisco_APIC_REST_API_Configuration_Guide.html.
Требования (к хосту, на котором выполняется модуль)
- lxml (при использовании XML-контента)
- xmljson >= 0.1.8 (при использовании XML-контента)
- python 2.7+ (при использовании xmljson)
Параметры
| параметр | обязательно | по умолчанию | варианты | комментарии |
|---|---|---|---|---|
| content | нет | При использовании вместо src, напрямую задаёт содержимое запроса API.Это может быть удобно для шаблонизации простых запросов, для сложных запросов используйте модуль template. | ||
| hostname | да | IP-адрес или имя хоста APIC, разрешимый управляющим хостом Ansible. псевдонимы: host | ||
| method | да | get |
| HTTP-метод запроса. Использование delete обычно используется для удаления объектов.Использование get обычно используется для запроса объектов.Использование post обычно используется для изменения объектов.псевдонимы: action |
| password | да | Пароль для аутентификации. | ||
| path | да | URI, используемый для выполнения вызовов API. Должен заканчиваться на .xml или .json. псевдонимы: uri | ||
| src | нет | Имя абсолютного пути файла, содержащего тело HTTP-запроса, отправляемого в ACI Fabric. псевдонимы: config_file | ||
| timeout | нет | 30 | Таймаут уровня сокета в секундах. | |
| use_proxy | нет | да |
| Если no, прокси не будет использоваться, даже если он определён в переменной среды на целевых хостах. |
| use_ssl | нет | да |
| Если no, будет использовано HTTP-соединение вместо стандартного HTTPS-соединения. |
| username | да | admin | Имя пользователя для аутентификации. псевдонимы: user | |
| validate_certs | нет | да |
| Если no, сертификаты SSL не будут проверены.Это нужно установить только на контролируемых вами сайтах с самоподписанными сертификатами. |
Примеры
- 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
Возвращаемые значения
Общие возвращаемые значения описаны здесь Возвращаемые значения, следующие являются полями, уникальными для данного модуля:
| имя | описание | возвращается | тип | пример |
|---|---|---|---|---|
| error_code | Код возврата ACI REST, полезный для отладки при ошибках | всегда | int | 122 |
| error_text | Дескриптивный текст ACI REST, полезный для отладки при ошибках | всегда | строка | неизвестный тип управляемого объекта foo |
| imdata | Преобразованный результат, возвращённый REST API APIC (зарегистрируйте для последующей обработки) | всегда | строка | [{'error': {'attributes': {'text': 'неизвестный тип управляемого объекта foo', 'code': '122'}}}] |
| 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="неизвестный тип управляемого объекта foo"/></imdata> |
| response | Строка HTTP-ответа | всегда | строка | HTTP-ошибка 400: Неверный запрос |
| status | Код состояния HTTP | всегда | int | 400 |
| totalCount | Количество элементов в массиве imdata | всегда | строка | 0 |
| url | URL, используемый для вызова APIC REST | успех | строка | https://1.2.3.4/api/mo/uni/tn-[Dag].json?rsp-subtree=modified |
Примечания
Примечание
- При использовании inline-JSON (используя
content), YAML требует начала с пустой строки. Иначе оператор JSON будет интерпретирован как YAML-отображение (словарь) и переведён в невалидный JSON. - XML-содержимое требует библиотек python
lxmlиxmljson. Для JSON-содержимого ничего специального не нужно. - По умолчанию, если переменная окружения
<protocol>_proxyустановлена на целевом хосте, запросы будут отправлены через этот прокси. Это поведение можно переопределить, установив переменную для данной задачи (см. настройка среды), или с помощью параметраuse_proxy. - HTTP-редиректы могут перенаправлять с HTTP на HTTPS, поэтому убедитесь, что ваша прокси-среда настроена корректно для обоих протоколов.
Статус
Этот модуль помечен как preview, что означает, что он не гарантирует обратную совместимость интерфейса.
Для получения помощи в разработке модулей, если у вас есть желание, пожалуйста, прочитайте Информация о сообществе и вклад, Тестирование Ansible и Разработка модулей.
© 2012–2018 Michael DeHaan
© 2018–2019 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.4/aci_rest_module.html