Removendo colchetes ([]) da string Ansible

Removendo colchetes ([]) da string 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

Variedade:

"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"
],

Emitir:

 "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 reclamar do que parecem ser colchetes duplos como resultado da divisão adicionando colchetes adicionais. Pela minha vida, não consigo descobrir como me livrar deles. Normalmente, apenas adiciono [0] ao final da variável ou json_query, mas não tenho certeza de como remover os colchetes ([]) após uma divisão. Qualquer ajuda é apreciada.

ATUALIZAÇÃO: Usar loop produz os mesmos 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"
      ],

EFICAZMENTE, preciso disso:

        - 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

Responder1

P:"Dividir adicionando colchetes adicionais. Como se livrar deles."

Resposta curta: livre-se das aspas ao redor do item da lista

  "associable_object_types": [['Datastore', 'Opaque Network', ...]]

Detalhes: O título diz "Removendo colchetes ([]) da string Ansible". Por causa das aspas, o item da listatipos_objetos_associadosé uma sequência. Teste-o

    - debug:
        var: associable_object_types.0|type_debug

  associable_object_types.0|type_debug: AnsibleUnicode

Como a string é uma lista YAML válida, você pode convertê-la em lista

    - debug:
        var: item|from_yaml
      loop: "{{ associable_object_types }}"

dá (resumido)

  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 opção precisa de uma lista de strings. Teste se é o loop primeiro, por exemplo

  - debug:
      msg: |
        associable_object_types: {{ item.category_associable_types|from_yaml }}
    when: item.category_associable_types|length > 0
    loop: '{{ category_info }}'

Notas:

  • O formato da sua saída é JSON porque você (muito provavelmente) usa opadrãoplug-in de retorno de chamada. O padrão JSON exige que as strings sejam colocadas entre aspas duplas. A saída da minha resposta é YAML porque eu uso oyamlplug-in de retorno de chamada. Tente
shell> ANSIBLE_STDOUT_CALLBACK=yaml  ansible-playbook playbook.yml
  • Exemplo de um manual completo para teste
- 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 }}"
  • Corrija o valor desse hash. Esta deveria ser uma lista. Experimente e remova ojuntarfiltro
  'category_associable_types': item | json_query('category_associable_types') | join (',')

Então você não precisa dividir

  associable_object_types:
    - "{{ item.category_associable_types | split(',') }}"
  • O resultado será uma lista de listas quando você dividir os itens de uma lista. Por exemplo, dada a lista
  l1: [a-b-c, d-e-f, g-h-j]

Divida os itens da lista

  l2: "{{ l1|map('split', '-') }}"

fornece a lista de listas em YAML

  l2:
    - [a, b, c]
    - [d, e, f]
    - [g, h, j]

ou em JSON

{
    "l2": [
        ["a", "b", "c"],
        ["d", "e", "f"],
        ["g", "h", "j"]
    ]
}

Você podeachatara lista (livre-se de colchetes adicionais)

  l3: "{{ l2|flatten }}"

  l3: [a, b, c, d, e, f, g, h, j]

informação relacionada