Отладка вывода в ansible завершается с ошибкой

#ansible

Вопрос:

Я использую следующий сборник пьес

 ---
- name: ""
  hosts: nexus
  tasks:
    - name: ""
      debug:
        var="{{ vlans | map(attribute='vlan_id') | join(',')  }}"
 

и результат таков:

 ok: [nx01] => {
    "10,20,100,30": "(10, 20, 100, 30)"
}
 

Каков тип моего вывода ?

Я пытался

 ---
- name: ""
  hosts: nexus
  tasks:
    - name: ""
      debug:
        var="{{ vlans | map(attribute='vlan_id') | join(',') | type_debug }} "
 

но появляется ошибка

 ok: [nx02] => {
    "str ": "VARIABLE IS NOT DEFINED!"
}
 

Комментарии:

1. var возможность debug состоит в том, чтобы отлаживать содержимое var, непосредственно указывая его имя. Здесь вы хотите, вы хотите использовать эту msg опцию. Ознакомьтесь с документацией

Ответ №1:

попробуйте это:

     - name: Create a string with vlans
      debug:
        msg:
          "{{ vlans | map(attribute = 'vlan_id') | join(',') }}"

    - name: Create a string with vlans | type_debug
      debug:
        msg:
          "{{ vlans | map(attribute = 'vlan_id') | join(',') | type_debug }}"
 

выход:

 TASK [Create a string with vlans] **************************************
ok: [localhost] => {
    "msg": "10,20,100,30"
}

TASK [Create a string with vlans | type_debug] *************************
ok: [localhost] => {
    "msg": "str"
}
 

Тот же пример со списком:

     - name: Create a list with vlans
      debug:
        msg:
          "{{ vlans | map(attribute = 'vlan_id') | list | default([]) }}"

    - name: Create a string with vlans | type_debug
      debug:
        msg:
          "{{ vlans | map(attribute = 'vlan_id') | list | default([]) | type_debug }}"
 

И результат:

 TASK [Create a list with vlans] ***************************************
ok: [localhost] => {
    "msg": [
        10,
        20,
        100,
        30
    ]
}

TASK [Create a string with vlans | type_debug] ************************
ok: [localhost] => {
    "msg": "list"
}
 

И если вам нужно установить переменную:

     - name: Set variable
      set_fact:
        mystrvar: "{{ vlans | map(attribute = 'vlan_id') | join(',') }}"
        mylistvar: "{{ vlans | map(attribute = 'vlan_id') | list | default([]) }}"

    - name: Debug mystrvar
      debug:
        var: mystrvar

    - name: Debug mystrvar
      debug:
        var: mystrvar | type_debug

    - name: Debug mylistvar
      debug:
        var: mylistvar

    - name: Debug mylistvar
      debug:
        var: mylistvar | type_debug
 

Вывод:

 TASK [Set variable] *******************************************************
ok: [localhost]

TASK [Debug mystrvar] *****************************************************
ok: [localhost] => {
   "mystrvar": "10,20,100,30"
}

TASK [Debug mystrvar] *****************************************************
ok: [localhost] => {
   "mystrvar | type_debug": "str"
}

TASK [Debug mylistvar] ****************************************************
ok: [localhost] => {
    "mylistvar": [
        10,
        20,
        100,
        30
    ]
}

TASK [Debug mylistvar] ****************************************************
ok: [localhost] => {
    "mylistvar | type_debug": "list"
}