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 | Значение по умолчанию: имя_файла_ключ(private_key) | Имя X.509 сертификата, прикреплённого к пользователю APIC AAA, используемого для аутентификации на основе подписи. По умолчанию используется значение private_key без расширения.псевдонимы: cert_name |
| content | При использовании вместо src, задаёт содержимое запроса API напрямую.Это удобно для шаблонизации простых запросов, для сложных случаев используйте модуль template. | |
| host обязательно | IP-адрес или имя хоста APIC, разрешаемое управляющим хостом Ansible. псевдонимы: hostname | |
| method |
| HTTP-метод запроса. Использование delete обычно используется для удаления объектов.Использование get обычно используется для запроса объектов.Использование post обычно используется для изменения объектов.псевдонимы: action |
| output_level |
| Влияет на вывод этого модуля ACI. normal означает стандартный вывод, включая current dictinfo означает информационный вывод, включая previous, proposed и sent dictsdebug означает отладочный вывод, включая filter_string, method, response, status и url информацию |
| password обязательно | Пароль для аутентификации. | |
| path обязательно | URI, используемый для выполнения API-вызовов. Должен заканчиваться на .xml или .json.псевдонимы: uri | |
| port | Значение по умолчанию: 443 (для https) и 80 (для http) | Номер порта для подключения REST. |
| private_key | Файл в формате PEM, содержащий ваш закрытый ключ, используемый для аутентификации на основе подписи. Имя ключа (без расширения) используется как имя сертификата в ACI, если не указано certificate_name. псевдонимы: cert_key | |
| src | Имя абсолютного пути к файлу, содержащему тело http-запроса, отправляемого в ACI fabric. псевдонимы: config_file | |
| timeout | Значение по умолчанию: 30 | Таймаут на уровне сокета в секундах. |
| use_proxy |
| Если no, не будет использоваться прокси, даже если он определён в переменной окружения на целевых хостах. |
| use_ssl |
| Если no, вместо стандартного HTTPS будет использоваться HTTP-соединение. |
| username обязательно | Значение по умолчанию: admin | Имя пользователя для аутентификации. псевдонимы: user |
| validate_certs |
| Если no, сертификаты SSL не будут проверяться.Это следует использовать только на контролируемых сайтах с самоподписанными сертификатами. |
Примечания
Примечание
- Известно, что некоторые payloads не являются идемпотентными, поэтому будьте осторожны при построении payloads, например, использование
status="created"приведёт к проблемам с идемпотентностью, используйтеstatus="modified"вместо этого. Дополнительная информация в документации ACI. - Некоторые payloads (и используемые пути) известны тем, что сообщают об отсутствии изменений, когда изменения произошли. Это известная проблема APIC и была сообщена поставщику. Существует обходной путь для этой проблемы. Дополнительная информация в документации ACI.
- XML payloads требуют библиотек python
lxmlиxmljson. Для JSON payloads ничего специального не нужно. - Дополнительная информация о REST API APIC доступна в Руководстве по конфигурации REST API Cisco APIC.
- По умолчанию, если на целевом хосте установлена переменная окружения
<protocol>_proxy, запросы будут отправляться через этот прокси. Это поведение можно переопределить, задав переменную для этой задачи (см. установка среды) или используя параметрuse_proxy. - HTTP-переадресации могут перенаправлять с HTTP на HTTPS, поэтому необходимо убедиться, что ваша среда прокси для обоих протоколов корректна.
Примеры
- 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 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, полезный для устранения неполадок при ошибках Пример: неизвестный класс управляемого объекта foo |
| imdata строка | всегда | Преобразованный вывод, возвращаемый APIC REST (зарегистрируйте для последующей обработки) Пример: [{'error': {'attributes': {'text': 'неизвестный класс управляемого объекта foo', 'code': '122'}}}] |
| 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="неизвестный класс управляемого объекта foo"/></imdata> |
| response строка | всегда | Строка HTTP ответа Пример: HTTP Ошибка 400: Неверный запрос |
| 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 |
Статус
Этот модуль помечен как превью, что означает, что он не гарантирует обратную совместимость интерфейса.
Автор
- 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.5/modules/aci_rest_module.html