Eliminar corchetes ([]) de la cadena Ansible

Eliminar corchetes ([]) de la cadena Ansible

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]

información relacionada