Ansible Отладка сообщения в переменную - PullRequest
0 голосов
/ 29 марта 2020

Folks,

У меня есть скрипт ниже, который я использую для создания списка всех блочных устройств на моем Linux компьютере, на которых нет разделов, а затем запускаю модуль parted для раздела их. Я пытаюсь сохранить значение item.key в переменную, которая впоследствии может использоваться модулем parted. Любая помощь, как я могу сохранить значение сообщения в переменную.

- name: Print disk result

become: true

  debug:

        msg: "/dev/{{item.key}}"
  when:

     - not item.value.partitions
     - item.value.model == "VBOX HARDDISK"

  with_dict: "{{ ansible_devices }}"

Ответы [ 2 ]

0 голосов
/ 29 марта 2020
  # Assuming what your 'ansible_devices' looks like
  vars:
    ansible_devices:
      # model is valid, partitions are empty
      device_a:
        model: VBOX HARDDISK
        partitions: []
      # model is valid, partitions are not empty
      device_b:
        model: VBOX HARDDISK
        partitions:
          - 1_partition
          - 2_partition
      # model is not valid, partitions are empty
      device_c:
        model: BEATBOX HARDDISK
        partitions:
          - 1_partition
          - 2_partition
  tasks:
    - name: Make the variable with devices with no partitions
      # Create a variable using set_fact
      # Use json_query to filter and assign without explicitly looping ansible_devices
      set_fact:
         no_partition_list: "{{ ansible_devices | dict2items | json_query('[?(value.model==`VBOX HARDDISK`)]|[?!(value.partitions)]') }}"

    - debug:
        var: no_partition_list

Что я делаю?

  • Преобразование словаря в массив
  • Применение запроса json к преобразованному массиву
    • фильтр для value.model, равный требуемому имени модели
    • , затем передайте результат, используя |
    • , затем примените другой фильтр, чтобы найти, какие объекты не имеют 'value.partitions'
      • value.partitions возвращает true, если не пусто
      • ! (value.partitions) возвращает true, если пусто
    • Вывести значение переменной no_partition_list
0 голосов
/ 29 марта 2020

Нет такой вещи, как "сохранение сообщения отладки в переменную", есть только "создание переменной из того же синтаксиса, который вы использовали бы в сообщении msg". Кроме того, debug: с become: true является бессмысленным положением дел

- name: set vbox device fact
  set_fact:
    vbox_device_path: /dev/{{ item.key }}
  when:
  - not item.value.partitions
  - item.value.model == 'VBOX HARDDISK'
  with_dict: '{{ ansible_devices }}'

- debug:
   var: vbox_device_path
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...