По сути, мне нужно прочитать значение из вывода JSON и использовать его в последующих задачах. Итак, я попробовал with_items, loop, но ничего не вышло.
Пример JSON, который я создал из зарегистрированной переменной:
TASK [local_volume_mount : debug Info from device that is parted] **************
Monday 29 March 2021 21:33:39 +0000 (0:00:02.271) 0:00:02.417 **********
ok: [node1] => {
"partitioned_device_live_info": {
"changed": false,
"msg": "All items completed",
"results": [
{
"ansible_loop_var": "item",
"changed": false,
"disk": {
"dev": "/dev/nvme2n1",
"logical_block": 512,
"model": "SAMSUNG MZQLW960HMJP-00003",
"physical_block": 512,
"size": 937692504.0,
"table": "msdos",
"unit": "kib"
},
"failed": false,
"invocation": {
"module_args": {
"align": "optimal",
"device": "/dev/nvme2n1",
"flags": null,
"label": "msdos",
"name": null,
"number": 1,
"part_end": "100%",
"part_start": "0%",
"part_type": "primary",
"state": "present",
"unit": "KiB"
}
},
"item": [
{
"device": "/dev/nvme2n1",
"partitions": [
{
"end": "100%",
"number": 1,
"start": "0%",
"storage_class": "ssd-wkr-services"
}
]
},
{
"end": "100%",
"number": 1,
"start": "0%",
"storage_class": "ssd-wkr-services"
}
],
"partitions": [
{
"begin": 1024.0,
"end": 937692160.0,
"flags": [],
"fstype": "",
"name": "",
"num": 1,
"size": 937691136.0,
"unit": "kib"
}
],
"script": ""
}
]
}
}
Итак, из приведенного выше мне нужно прочитать значение partitions.num и использовать его в следующей задаче, но я не знаю, как это сделать.
Задача:
- name: THIS IS BEING TESTED
debug:
var: "{{ item.partitions }}"
ignore_errors: no
#loop: "{{ partitioned_device_live_info.results }}"
with_items: "{{ partitioned_device_live_info.results }}"
Результатом вышеуказанной задачи является
'dict object' has no attribute 'partitions'
Я хочу сохранить это значение item.partitions.num в переменной, а затем использовать его в дальнейших задачах.
да: мой плохой, у меня было несколько, поэтому при вставке могла быть ошибка. обновленный вопрос

Выяснилось с помощью msg, ниже мое изменение
- name: THIS IS BEING TESTED with MSG and with_items
debug:
msg: "{{ item.partitions[0].num }}"
with_items: "{{ partitioned_device_live_info.results }}"
Вы всегда можете использовать регулярное выражение, доступное для set facts. Подробнее переполнение стека
Ниже приведены некоторые варианты использования.
- name: Long form task does not
ansible.builtin.replace:
path: /etc/hosts
regexp: '\b(localhost)(\d*)\b'
replace: '\1\2.localdomain\2 \1\2'
- name: Explicitly specifying positional matched groups in replacement
ansible.builtin.replace:
path: /etc/ssh/sshd_config
regexp: '^(ListenAddress[ ]+)[^\n]+$'
replace: '\g<1>0.0.0.0'
Настройка fact
- name: set version in file after replacement
set_fact:
version_in_file: "{{ version_deployment_file | regex_search(docker_image_version) }}"
Подробнее - ansible.builtin.replace
Я серьезно не могу сопоставить ваш ответ с моим вопросом. можешь объяснить, как твой ответ помогает в моей ситуации?
Я вижу, вы составили точную карту. Для меня я использую регулярное выражение для извлечения фактов из вывода, я использую замену регулярного выражения для их изменения в соответствии с требованиями.
Задача, которую вы здесь предоставляете, не может дать той ошибки, о которой вы заявляете.
"{{ partitions }}"может выдать эту ошибку. Но"{{ item.partitions }}"скорее отдаст'dict object' has no attribute 'partitions'. Итак, вам следует вернуться к своему минимальный воспроизводимый пример