Перейти до вмісту

Домоглася, щоб check mode в Ansible казав правду

Домоглася, щоб check mode показував правду на всій платформі, після того як знайшла шість перевірок, що ухвалювали рішення за значенням, якого хост ніколи не повертав: модуль command в Ansible у режимі --check звітує про успіх, узагалі не виконуючи команду.

  • Swimming pool thermometer, temperature, degrees
    Фото: jackmac34 / Pixabay
  • Weather vane, air, outdoor
    Фото: Elsemargriet / Pixabay

шість перевірок вирішували за значенням, якого хост не давав

Ситуація. Пробний прогін на продакшні має бути безпечним способом дізнатися, що зробить зміна. У вересні 2026 року пробний прогін упав на перевірці, яка просто хибно описувала хост, і порадив операторові встановити прапорець, що послабив би пісочницю безпеки. Пробний прогін хоста не читав. Він прочитав значення, якого хост ніколи не віддавав, і зробив із нього висновок.

Завдання. Кожен зонд, від результату якого залежить рішення, мав стати чесним у режимі перевірки (check mode), а ті, що не могли, мали заявляти про це вголос, а не мовчати.

Дія. Причина — задокументована властивість інструмента, про яку легко забути: модуль command у режимі перевірки не виконується, і в змінну register він записує не порожній результат, а успіх із порожнім виводом. Тож будь‑яка умова, що читає цю змінну, ухвалює рішення на підставі значення, яке ніхто не вимірював, і ухвалює його в той бік, куди випадково вказує її власна логіка. Перегляд усіх зондів, що записують результат у register, виявив шість таких, і кожен брехав по‑своєму: один повідомляв, що супервізор приймає будь‑яку директиву юніта, хоча самого супервізора не питав, інший — що робити нічого не треба, на хості з вимкненим брандмауером. Кожен зонд отримав одну з двох форм. Зонд, який читає вже наявний стан, не змінений прогоном, позначено так, щоб він виконувався навіть у режимі перевірки. Зонд, який виконатися не може, пропускається, а повідомлення називає, що саме лишилося неперевіреним, — бо тиша в журналі прогону читається точнісінько як успіх.

Результат. Тепер пробний прогін або щось вимірює, або повідомляє, що не виміряв, і жоден із цих варіантів не є тим третім, який він мав раніше. Загальне правило потрапило до посібника з розробки в тій самій зміні: режим перевірки не має права брехати, а зонд, який нічого не бачить, мусить заявити про свою сліпоту, а не виводити з неї вердикт.

Одна частина довшого переліку — і він увесь на цьому сайті.

Кожен запис написано однаково: ситуація, завдання, що ми зробили і що змінилося.

Переглянути весь перелік