Рейтинг:1

Ansible - не может ссылаться на значение параметра модуля

флаг ph
azk

Это моя пьеса

---
- хосты: mytestserver
  стать истинным
  стать_метод: sudo
  собрать_факты: правда

  вары:
  # Чтобы получить vgname и lvname с устройства ansible_mounts 
    mt: "{{ MT }}" #Extravariable
    disp_pth: "{{ элемент['устройство'] }}"
    disp_tmp: "{{ disp_pth | базовое имя }}"
    DISP: "{{ disp_tmp.split('-') }}"
    VGname: "{{ DISP.0 }}"
    LVname1: "{{DISP.1 }}"
    DISPP2: "{{ DISP.3|по умолчанию('') }}"
    LVname2: "{{DISP.1}}-{{DISPP2}}"
    LVname: "{{ LVname2 if (disp_tmp | regex_search('--')) else LVname1 }}"


  задачи:
    - name: Получить значения файловой системы
      объем:
        vg: "{{VGname}}"
        lv: "{{имя_LV}}"
      with_items: "{{ ansible_mounts }}"
      когда: item.mount == MT
      зарегистрироваться: myfs

    - отладка:
        переменная: myfs

Когда я его выполняю:

$ ansible-playbook -i proyects/Inventory/awx_hosts -l mytestserver getlvmfacts.yml -e MT=/DATA

Я получаю значения:

ИГРАТЬ [mytestserver] **************************************************** ******************************************************* ******************************************************* ******************************************************* ****************

ЗАДАНИЕ [Сбор фактов] *************************************************** ******************************************************* ******************************************************* ******************************************************* ***************
хорошо: [мой тестовый сервер]

ЗАДАЧА [Получить значения файловой системы] ************************************************* ******************************************************* ******************************************************* ******************************************************* **********
ok: [mytestserver] => (item={'block_used': 21620, 'uuid': '7fef92b8-8157-43d1-92b4-525a56fa33f8', 'size_total': 1056858112, 'block_total': 258022, 'mount': ' /DATA», «блок_доступен»: 236402, «размер_доступен»: 968302592, «fstype»: «ext4», «inode_total»: 65536, «опции»: «rw», «устройство»: «/dev/mapper/vgAPP- DATA», «inode_used»: 11, «block_size»: 4096, «inode_available»: 65525})

ЗАДАЧА [отладка] **************************************************** ******************************************************* ******************************************************* ******************************************************* *************************
хорошо: [mytestserver] => {
    "мифс": {
        «изменено»: ложь,
        "msg": "Все пункты выполнены",
        "Результаты": [
            {
                "ansible_loop_var": "элемент",
                «изменено»: ложь,
                "предмет": {
                    "блок_доступен": 414770,
                    "размер_блока": 4096,
                    "общий_блок": 516052,
                    "блок_используемый": 101282,
                    "устройство": "/dev/mapper/vg00-lv01",
                    "fstype": "ext3",
                    "инод_доступен": 124211,
                    "inode_total": 131072,
                    "inode_used": 6861,
                    "устанавливать": "/",
                    "опции": "RW",
                    "размер_доступен": 1698897920,
                    "размер_общий": 2113748992,
                    "uuid": "7df9171b-c31f-434f-94c5-344d02775e89"
                },
                "skip_reason": "Условный результат был False",
                "пропущено": правда
            },
            {
                "ansible_loop_var": "элемент",
                «изменено»: ложь,
                "предмет": {
                    "блок_доступен": 1037688,
                    "размер_блока": 4096,
                    "общий_блок": 1046016,
                    "блок_используемый": 8328,
                    "устройство": "/dev/mapper/vgDATA-BASET--DATA1",
                    "fstype": "xfs",
                    "inode_available": 4194301,
                    "inode_total": 4194304,
                    "inode_used": 3,
                    "mount": "/БАЗОВАЯ/ДАННЫЕ1",
                    "опции": "RW",
                    "размер_доступен": 4250370048,
                    "size_total": 4284481536,
                    "uuid": "91689e9b-552c-4f0e-b0ec-0d3d25154a72"
                },
                "skip_reason": "Условный результат был False",
                "пропущено": правда
            },
            {
                "ansible_loop_var": "элемент",
                «изменено»: ложь,
                «не удалось»: ложь,
                "вызов": {
                    "module_args": {
                        «активный»: правда,
                        «сила»: ложь,
                        "lv": "ДАННЫЕ",
                        "opts": ноль,
                        "пвс": ноль,
                        "изменить размер": ложь,
                        "сжать": правда,
                        "размер": ноль,
                        "моментальный снимок": ноль,
                        "состояние": "настоящее",
                        "тонкий пул": ноль,
                        "вг": "вгАПП"
                    }
                },
                "предмет": {
                    "блок_доступен": 236402,
                    "размер_блока": 4096,
                    "общий_блок": 258022,
                    "блок_используемый": 21620,
                    "устройство": "/dev/mapper/vgAPP-DATA",
                    "fstype": "ext4",
                    "инод_доступный": 65525,
                    "inode_total": 65536,
                    "inode_used": 11,
                    "монтирование": "/ДАННЫЕ",
                    "опции": "RW",
                    "размер_доступен": 968302592,
                    "размер_общий": 1056858112,
                    "uuid": "7fef92b8-8157-43d1-92b4-525a56fa33f8"
                },
                "lv": "ДАННЫЕ",
                "размер": 1024.0,
                "вг": "вгАПП"
            },
            {
                "ansible_loop_var": "элемент",
                «изменено»: ложь,
                "предмет": {
                    "блок_доступен": 472667,
                    "размер_блока": 4096,
                    "общий_блок": 516052,
                    "блок_используемый": 43385,
                    "устройство": "/dev/mapper/vg00-lv07",
                    "fstype": "ext3",
                    "инод_доступный": 131061,
                    "inode_total": 131072,
                    "inode_used": 11,
                    "mount": "/тиволи",
                    "опции": "RW",
                    "размер_доступен": 1936044032,
                    "размер_общий": 2113748992,
                    "uuid": "2310d046-eaad-4419-a94b-197c2c56502c"
                },
                "skip_reason": "Условный результат был False",
                "пропущено": правда
            }
        ]
    }
}

В конце совпадающей точки монтирования (/DATA) находятся три параметра файловой системы:

"lv": "ДАННЫЕ",
"размер": 1024.0,
"вг": "вгАПП"

Вопрос: как я могу ссылаться на эти параметры?

я пытался использовать myfs.lv но не работают и другие способы. Я думаю, это потому, что их нет внутри.предмет'

Желанный: используя что-то вроде "myfs.lv" и получить "ДАННЫЕ"

надеюсь, вы можете помочь. Заранее спасибо!

Рейтинг:1
флаг th

Если вы обратитесь к структуре, которая выводит отладку, вы увидите, что myfs.lv явно неправильно, потому что единственные ключи на верхнем уровне сообщение, измененный, и Результаты.

Когда вы запускаете задачу в цикле, результаты сохраняются в виде списка под Результаты ключ зарегистрированной переменной. Чтобы получить доступ к этому конкретному результату, вы должны сделать что-то вроде myfs.results.2.lv.

Однако жесткое кодирование такого индекса, как правило, не то, что вам нужно, поэтому вместо этого вы должны сделать что-то, чтобы выбрать желаемый результат. (myfs.results | отклонить ('пропущено') | список | первый).lv извлек бы lv для первого непропущенного результата.

Или, конечно, вы можете облегчить себе задачу, не зацикливаясь на первой задаче:

  задачи:
    - name: Получить значения файловой системы
      объем:
        vg: "{{ mount_dev_split.0 }}"
        lv: "{{ mount_dev_split.1 ~ lv_name_suffix }}"
      вары:
        mount_dev: "{{ (ansible_facts.mounts | selectattr('mount', 'equalto', MT) | list).0.device }}"
        mount_dev_split: "{{ (mount_dev | базовое имя).split('-') }}"
        lv_name_suffix: "{{ ('-' ~ mount_dev_split.3 | default('')) if '--' в mount_dev else '' }}"
      зарегистрироваться: myfs

    - отладка:
        сообщение: "{{ myfs.lv }}"
azk avatar
флаг ph
azk
Хорошо. Прежде всего большое спасибо!
azk avatar
флаг ph
azk
Хорошо. Прежде всего большое спасибо! Вы сделали это намного проще таким образом. Я новичок в Ansible, и есть элементы, с которыми я не справляюсь. Я ценю вашу помощь. Еще раз спасибо!

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.