Ansible 2.8: Как перезагрузить компьютер только после обновления ядра? Оценка переменной массива

После этого я работал в Ubuntu 18.04

Клонировать этот репозиторий:

git clone https://github.com/lwfinger/rtlwifi_new.git

Войдите в клонированную папку:

cd rtlwifi_new

Проверить расширенную ветку:

git checkout extended

Начать установку:

sudo make install
sudo modprobe -r rtl8723de
sudo modprobe rtl8723de
0
29.11.2019, 00:02
3 ответа

Простое решение состоит в том, чтобы сгладить списки, выбрать элементы, соответствующие шаблону, и проверить , соответствует ли какой-либо элемент условию.

when: yum_updates.changes.updated|flatten|select('regex', '^kernel$') is any
1
28.01.2020, 03:05

У вас есть список (yum.updates.changes.updated), каждый элемент которого представляет собой список из двух элементов (имя пакета и версия ). Простое условие when, которое подходит только для пакета kernel, будет выглядеть как:

---
- debug:
    msg: "{{ item.0 }} was updated to version {{ item.1 }}"
  when: item.0 == "kernel"
  loop: "{{ yum_updates.changes.updated }}"

Учитывая данные вашего примера, эта задача выведет:

TASK [debug] *****************************************************************************************************************************************************************
skipping: [localhost] => (item=['kernel-headers', '3.10.0-1062.4.3.el7.x86_64 from rhel-7-server-rpms'])
ok: [localhost] => (item=['kernel', '3.10.0-1062.4.3.el7.x86_64 from rhel-7-server-rpms']) => {
    "msg": "kernel was updated to version 3.10.0-1062.4.3.el7.x86_64 from rhel-7-server-rpms"
}
skipping: [localhost] => (item=['sudo', '1.8.23-4.el7_7.1.x86_64 from rhel-7-server-rpms'])
skipping: [localhost] => (item=['bpftool', '3.10.0-1062.4.3.el7.x86_64 from rhel-7-server-rpms'])
skipping: [localhost] => (item=['python-perf', '3.10.0-1062.4.3.el7.x86_64 from rhel-7-server-rpms'])
skipping: [localhost] => (item=['kernel-tools-libs', '3.10.0-1062.4.3.el7.x86_64 from rhel-7-server-rpms'])
skipping: [localhost] => (item=['kernel-devel', '3.10.0-1062.4.3.el7.x86_64 from rhel-7-server-rpms'])
skipping: [localhost] => (item=['microcode_ctl', '2:2.1-53.3.el7_7.x86_64 from rhel-7-server-rpms'])
skipping: [localhost] => (item=['SDL', '1.2.15-14.el7_7.x86_64 from rhel-7-server-rpms'])
skipping: [localhost] => (item=['kernel-tools', '3.10.0-1062.4.3.el7.x86_64 from rhel-7-server-rpms'])
skipping: [localhost] => (item=['perf', '3.10.0-1062.4.3.el7.x86_64 from rhel-7-server-rpms'])
0
28.01.2020, 03:05

Использование фильтра flatten, как показано в принятом ответеhttps://unix.stackexchange.com/a/554727/307127co -, объединяет имена и версии пакетов в один список. Хотя это вряд ли вызовет какие-либо проблемы, это не так чисто, как могло бы быть.

Вместо этого вы можете написать тест для перезагрузки как
when: dict((yum_updates.changes|default(dict())).updated|default([])).kernel is defined

Это преобразует список измененных пакетов и версий в словарь (с именами пакетов в качестве ключа и версией в качестве значения ), а затем проверяет, содержит ли словарь ключ «ядро». Обратите внимание на использование фильтра «по умолчанию» в двух местах, чтобы охватить крайние случаи, например, когда пакеты не обновляются. Это необходимо, потому что, когда пакеты не обновляются, ключ «changes» отсутствует в зарегистрированной переменной (, т. е. «yum _update.changes» не существует ).

1
15.04.2021, 18:47

Теги

Похожие вопросы