Я новичок в Ansible/Jinja, так что это, вероятно, основной вопрос. Я использую модуль ядра URI, чтобы сделать вызов REST API для сетевого устройства следующим образом:Обоснованное назначение переменных с использованием URI и XML-модулей
---
- name: Test PAN API
hosts: fw
connection: local
gather_facts: False
tasks:
- name: Calling API System Info
action: uri url=https://192.168.1.10/api/?type=op&cmd=<show><system><info></info></system></show>&key=thisismysecretkey return_content=yes validate_certs=no
register: result
- name: Set variable
set_fact: sysinfo="{{ result.content }}”
- name: Parsing XML response
action: xml xmlstring="{{ sysinfo }}" xpath=//system/* content=text
register: hn
- debug: var=hn.matches['hostname']
Я хотел бы разобрать каждый из XML-узлов в переменные, такие, что имя хоста = PA-VM и т.д. Вот что ответ выглядит следующим образом:
TASK [debug var=sysinfo] *******************************************************
ok: [pan] => {
"changed": false,
"sysinfo": "<response status=\"success\"><result><system><hostname>PA-VM</hostname><ip-address>192.168.1.10</ip-address><netmask>255.255.255.0</netmask></system></result></response>"
}
TASK [Testing XML] *************************************************************
ok: [pan]
TASK [debug var=hn.matches] ****************************************************
ok: [pan] => {
"changed": false,
"hn.matches": [
{
"hostname": "PA-VM"
},
{
"ip-address": "192.168.1.10”
},
{
"netmask": "255.255.255.0"
}
]
}
Я экспериментировал с различными фильтрами дзиндзя, но я чувствую, как будто я что-то просто не хватает. Похоже, что hn.matches - это список, в котором каждая пара значений ключа содержит строку. Например, если я ...
- debug: var=hn.matches[0]
я ...
TASK [debug var=hn.matches[0]] *************************************************
ok: [pan] => {
"changed": false,
"hn.matches[0]": {
"hostname": "PA-VM"
}
}
Что бы действительно велик ...
set_fact: hn="{{ response.result.system.hostname }}"
Просто ищет чистейший/лучший путь без использования регулярного выражения.
Спасибо - что это сделал! – 66pontiac