#ansible #yaml #vmware
#ansible #yaml #vmware
Вопрос:
Я пытаюсь выполнить поиск виртуальной машины в VMware, используя плагины ansible vmware_vm_info
, например, для последующего выполнения снимков. Кажется, что vm_name
это чувствительный к регистру параметр во всех плагинах VMware, использующих ansible.
Я безуспешно пытался отправить подстановочные знаки внутри строковой переменной. У кого-нибудь есть идея, как это сделать?
Комментарии:
1. Лучше всего, если вы дадите нам достаточно актуальный пример структуры данных
vmware_vm_info
, созданных (например, в вашем вопросе, что дает debug`для данных), тогда у нас больше шансов помочь вам здесь.
Ответ №1:
Из того, что я вижу в документации модуля, результат будет выглядеть следующим образом:
[
{
"attributes":{
"job":"backup-prepare"
},
"cluster":"None",
"datacenter":"Datacenter-1",
"esxi_hostname":"10.76.33.226",
"folder":"/Datacenter-1/vm",
"guest_fullname":"Ubuntu Linux (64-bit)",
"guest_name":"ubuntu_t",
"ip_address":"",
"mac_address":[
"00:50:56:87:a5:9a"
],
"moid":"vm-24",
"power_state":"poweredOff",
"tags":[
{
"category_id":"urn:vmomi:InventoryServiceCategory:b316cc45-f1a9-4277-811d-56c7e7975203:GLOBAL",
"category_name":"cat_0001",
"description":"",
"id":"urn:vmomi:InventoryServiceTag:43737ec0-b832-4abf-abb1-fd2448ce3b26:GLOBAL",
"name":"tag_0001"
}
],
"uuid":"4207072c-edd8-3bd5-64dc-903fd3a0db04",
"vm_network":{
"00:50:56:87:a5:9a":{
"ipv4":[
"10.76.33.228"
],
"ipv6":[
]
}
}
}
]
* Источник: https://docs.ansible.com/ansible/2.9/modules/vmware_vm_info_module.html#return-values*
Поскольку я здесь ничего не вижу vm_name
, я предполагаю, что вы имели в виду guest_name
, но идея, лежащая в основе этого сборника, будет применима к любому атрибуту, который вы сочтете подходящим.
Что вы можете сделать, чтобы извлечь значения из списка словарей в виде простого списка, это использовать фильтр Jinja map
.
Вот примерный сборник задач, основанный на данных, документированных для этого модуля, где я добавил вторую поддельную виртуальную машину, чтобы продемонстрировать результат с более чем одним элементом в списке:
- hosts: localhost
gather_facts: no
tasks:
- debug:
msg: "{{ virtual_machines | map(attribute='guest_name') | list }}"
vars:
virtual_machines: [
{
"attributes":{
"job":"backup-prepare"
},
"cluster":"None",
"datacenter":"Datacenter-1",
"esxi_hostname":"10.76.33.226",
"folder":"/Datacenter-1/vm",
"guest_fullname":"Ubuntu Linux (64-bit)",
"guest_name":"ubuntu_t",
"ip_address":"",
"mac_address":[
"00:50:56:87:a5:9a"
],
"moid":"vm-24",
"power_state":"poweredOff",
"tags":[
{
"category_id":"urn:vmomi:InventoryServiceCategory:b316cc45-f1a9-4277-811d-56c7e7975203:GLOBAL",
"category_name":"cat_0001",
"description":"",
"id":"urn:vmomi:InventoryServiceTag:43737ec0-b832-4abf-abb1-fd2448ce3b26:GLOBAL",
"name":"tag_0001"
}
],
"uuid":"4207072c-edd8-3bd5-64dc-903fd3a0db04",
"vm_network":{
"00:50:56:87:a5:9a":{
"ipv4":[
"10.76.33.228"
],
"ipv6":[
]
}
}
},
{
"attributes":{
"job":"backup-prepare"
},
"cluster":"None",
"datacenter":"Datacenter-1",
"esxi_hostname":"10.76.33.226",
"folder":"/Datacenter-1/vm",
"guest_fullname":"Ubuntu Linux (64-bit)",
"guest_name":"ubuntu_t_2",
"ip_address":"",
"mac_address":[
"00:50:56:87:a5:9a"
],
"moid":"vm-24",
"power_state":"poweredOff",
"tags":[
{
"category_id":"urn:vmomi:InventoryServiceCategory:b316cc45-f1a9-4277-811d-56c7e7975203:GLOBAL",
"category_name":"cat_0001",
"description":"",
"id":"urn:vmomi:InventoryServiceTag:43737ec0-b832-4abf-abb1-fd2448ce3b26:GLOBAL",
"name":"tag_0001"
}
],
"uuid":"4207072c-edd8-3bd5-64dc-903fd3a0db04",
"vm_network":{
"00:50:56:87:a5:9a":{
"ipv4":[
"10.76.33.228"
],
"ipv6":[
]
}
}
}
]
И вот краткое изложение этого:
PLAY [localhost] **************************************************************************************************
TASK [debug] ******************************************************************************************************
ok: [localhost] => {
"msg": [
"ubuntu_t",
"ubuntu_t_2"
]
}
PLAY RECAP ********************************************************************************************************
localhost : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0