ссылка на значение переменной словаря в задаче ansible

#ansible #ansible-2.x #ansible-facts #ansible-template

Вопрос:

Команда, у меня есть задача, в которой я пытаюсь ссылаться на значение из словаря, определенного в моем файле значений. но попадание ниже ошибки, какой-нибудь намек? я выполняю это упражнение, чтобы использовать эту ссылку в моих других задачах позже, но первый шаг отладки сам по себе не удался.

Я сослался на эту ссылку [ссылка на ansible dict][1]

ценности.yaml

 loop_device: "loop"
available_device_default_config:
  - device: any
    partitions:
      - number: 1
        start: 0%
        end: 100%
        storage_class: services
 

задача

 - name: lookup dictionary vars
    debug:
      var: available_device_default_config.device

 

ошибка вывода задачи

 34  TASK [local_volume_mount : lookup dictionary vars] *****************************
  Wednesday 28 April 2021  21:51:34  0000 (0:00:04.915)       0:00:05.052 ******* 
  ok: [node1] => {
      "available_device_default_config.device": "VARIABLE IS NOT DEFINED!"
  }
 

ожидаемый результат:

 ok: [node1] => {
      "any"
  }
 

Я попробовал ниже, но безуспешно

var: "{{ available_device_default_config.device }}"

var: "{{ available_device_default_config['device'] }}"

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

1. Я добавил ожидаемый результат, который мне удалось получить, используя статические значения, непосредственно включенные в задачу.

Ответ №1:

Переменная available_device_default_config определяется как список диктовок. Таким образом, вы не можете получить прямой доступ к свойству device , потому что оно является свойством первого элемента в available_device_default_config . Вам нужно разобраться в этом с помощью available_device_default_config[0]

 - name: "set facts"
  set_fact:
    available_device_default_config:
      - device: any
        partitions:
          - number: 1
            start: 0%
            end: 100%
            storage_class: services

- name: "lookup dictionary vars"
  debug:
    msg: "{{ available_device_default_config }}"

- name: "lookup dictionary vars"
  debug:
    msg: "{{ available_device_default_config[0].device }}"
 

Результатом было бы

 TASK [set facts] ****************************************************************
ok: [localhost]

TASK [lookup dictionary vars] ***************************************************
ok: [localhost] => 
  msg:
  - device: any
    partitions:
    - end: 100%
      number: 1
      start: 0%
      storage_class: services

TASK [lookup dictionary vars] ***************************************************
ok: [localhost] => 
  msg: any
 

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

1. не могли бы вы также намекнуть, как можно просто выполнить поиск по имени вместо индекса 0? например, для значения устройства, что такое значение подраздела?