Código:
- name: Set category info as fact
set_fact:
category_info: "{{ category_info|default([]) + [ {
'category_name': item | json_query('category_name'),
'category_description': item | json_query('category_description'),
'category_cardinality': item | json_query('category_cardinality'),
'category_associable_types': item | json_query('category_associable_types') | join (',')
} ] }}"
with_items: '{{ tag_category_jsondata.tag_category_info }}'
register: result_tag_category_info
---
- name: Create tag categories from source variables
community.vmware.vmware_category:
validate_certs: false
hostname: "{{ vc_server }}"
username: "{{ vc_user }}"
password: "{{ vc_pass }}"
category_name: '{{ item.category_name }}'
category_description: '{{ item.category_description }}'
category_cardinality: '{{ item.category_cardinality | lower }}'
associable_object_types:
- "{{ item.category_associable_types | split(',') }}"
state: present
delegate_to: localhost
when: item.category_associable_types|length > 0
with_items: '{{ category_info }}'
register: result_import_tag_category
Formación:
"category_associable_types": [
"Datastore",
"Opaque Network",
"Storage Pod",
"Virtual App",
"Vmware Distributed Virtual Switch",
"Distributed Virtual Switch",
"Host Network",
"Network",
"Cluster Compute Resource",
"Distributed Virtual Portgroup",
"Folder",
"Host System",
"Resource Pool",
"Virtual Machine",
"Datacenter"
],
Asunto:
"associable_object_types": [
"['Datastore', 'Opaque Network', 'Storage Pod', 'Virtual App', 'Vmware Distributed Virtual Switch', 'Distributed Virtual Switch', 'Host Network', 'Network', 'Cluster Compute Resource', 'Distributed Virtual Portgroup', 'Folder', 'Host System', 'Resource Pool', 'Virtual Machine', 'Datacenter']"
],
Ansible parece quejarse de lo que parecen ser corchetes dobles como resultado de que la división agregó corchetes adicionales. Por mi vida, no puedo encontrar la manera de deshacerme de ellos. Por lo general, solo agrego [0] al final de la variable o json_query, pero no estoy seguro de cómo eliminar los corchetes ([]) después de una división. Se agradece cualquier ayuda.
ACTUALIZACIÓN: El uso del bucle produce los mismos resultados:
"msg": "value of associable_object_types must be one or more of: All objects, Cluster, Content Library, Datacenter, Datastore, Datastore Cluster, Distributed Port Group, Distributed Switch, Folder, Host, Library item, Network, Host Network, Opaque Network, Resource Pool, vApp, Virtual Machine. Got no match for: Datastore,Opaque Network,Storage Pod,Virtual App,Vmware Distributed Virtual Switch,Distributed Virtual Switch,Host Network,Network,Cluster Compute Resource,Distributed Virtual Portgroup,Folder,Host System,Resource Pool,Virtual Machine,Datacenter",
"invocation": {
"module_args": {
"validate_certs": false,
"hostname": "vcenter-t430.brilliantitsolutions.com",
"username": "[email protected]",
"password": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER",
"category_name": "Ansible",
"category_description": "",
"category_cardinality": "single",
"associable_object_types": [
"Datastore,Opaque Network,Storage Pod,Virtual App,Vmware Distributed Virtual Switch,Distributed Virtual Switch,Host Network,Network,Cluster Compute Resource,Distributed Virtual Portgroup,Folder,Host System,Resource Pool,Virtual Machine,Datacenter"
],
EFECTIVAMENTE, necesito esto:
- name: Create tag categories from source variables
community.vmware.vmware_category:
validate_certs: false
hostname: "{{ vc_server }}"
username: "{{ vc_user }}"
password: "{{ vc_pass }}"
category_name: '{{ item.category_name }}'
category_description: '{{ item.category_description }}'
category_cardinality: '{{ item.category_cardinality | lower }}'
associable_object_types:
- Datastore
- Opaque Network
- Storage Pod
- Virtual App
- Vmware Distributed Virtual Switch
- Distributed Virtual Switch
- Host Network
- Network
- Cluster Compute Resource
- Distributed Virtual Portgroup
- Folder
- Host System
- Resource Pool
- Virtual Machine
- Datacenter
state: present
Respuesta1
P:"Dividir agregando corchetes adicionales. Cómo deshacerse de ellos".
Respuesta corta: elimine las comillas que rodean el elemento de la lista
"associable_object_types": [['Datastore', 'Opaque Network', ...]]
Detalles: el título dice "Eliminar corchetes ([]) de la cadena Ansible". Debido a las comillas, el elemento de la lista.tipos_de_objetos_asociableses una cuerda. Pruébalo
- debug:
var: associable_object_types.0|type_debug
da
associable_object_types.0|type_debug: AnsibleUnicode
Debido a que la cadena es una lista YAML válida, puede convertir la cadena en una lista.
- debug:
var: item|from_yaml
loop: "{{ associable_object_types }}"
da (abreviado)
item|from_yaml:
- Datastore
- Opaque Network
- Storage Pod
- Virtual App
- Vmware Distributed Virtual Switch
- Distributed Virtual Switch
- Host Network
- Network
- Cluster Compute Resource
- Distributed Virtual Portgroup
- Folder
- Host System
- Resource Pool
- Virtual Machine
- Datacenter
Esta opción necesita una lista de cadenas. Pruebe primero el bucle, por ejemplo
- debug:
msg: |
associable_object_types: {{ item.category_associable_types|from_yaml }}
when: item.category_associable_types|length > 0
loop: '{{ category_info }}'
Notas:
- El formato de su salida es JSON porque (muy probablemente) usa elpor defectocomplemento de devolución de llamada. El estándar JSON requiere que las cadenas estén entre comillas dobles. El resultado de mi respuesta es YAML porque uso elyamlcomplemento de devolución de llamada. Intentalo
shell> ANSIBLE_STDOUT_CALLBACK=yaml ansible-playbook playbook.yml
- Ejemplo de un libro de jugadas completo para realizar pruebas.
- hosts: localhost
vars:
l1: [a-b-c, d-e-f, g-h-j]
l2: "{{ l1|map('split', '-') }}"
l3: "{{ l2|flatten }}"
associable_object_types: ["['Datastore', 'Opaque Network', 'Storage Pod', 'Virtual App', 'Vmware Distributed Virtual Switch', 'Distributed Virtual Switch', 'Host Network', 'Network', 'Cluster Compute Resource', 'Distributed Virtual Portgroup', 'Folder', 'Host System', 'Resource Pool', 'Virtual Machine', 'Datacenter']"]
tasks:
- debug:
var: l1|to_yaml
- debug:
var: l2|to_yaml
- debug:
var: l2
- debug:
var: l3|to_yaml
- debug:
var: associable_object_types
- debug:
var: associable_object_types.0|type_debug
- debug:
var: item|from_yaml
loop: "{{ associable_object_types }}"
- Corrige el valor de este hash. Esta debería ser una lista. Intenta eliminar elunirsefiltrar
'category_associable_types': item | json_query('category_associable_types') | join (',')
Entonces no tienes que dividirlo.
associable_object_types:
- "{{ item.category_associable_types | split(',') }}"
- El resultado será una lista de listas cuando divida los elementos de una lista. Por ejemplo, dada la lista
l1: [a-b-c, d-e-f, g-h-j]
Dividir los elementos de la lista.
l2: "{{ l1|map('split', '-') }}"
da la lista de listas en YAML
l2:
- [a, b, c]
- [d, e, f]
- [g, h, j]
, o en JSON
{
"l2": [
["a", "b", "c"],
["d", "e", "f"],
["g", "h", "j"]
]
}
Puedeaplanarla lista (elimine los corchetes adicionales)
l3: "{{ l2|flatten }}"
da
l3: [a, b, c, d, e, f, g, h, j]