У меня есть роль по настройке nginx. Как и следовало ожидать, он добавляет файлы в каталог, который затем включается в основной файл конфигурации. Я начал сталкиваться с проблемами, связанными с порядком чтения этих файлов, поэтому я хотел бы переместить некоторые из них в другой каталог, который будет включен после этого.
Проблема в том, что роль уже была запущена в нескольких местах, поэтому, если я просто изменю путь к некоторым файлам конфигурации в новый каталог, старые копии останутся в старом каталоге. Я придумал следующие решения:
В этом случае я везде знаю, что роль использовалась, поэтому я мог просто подождать, пока не узнаю, что старые файлы исчезли, а затем удалить шаги, которые избавляют от них, или даже удалить файлы вручную, но это определенно не масштабируется. Существуют ли какие-либо устоявшиеся практики для решения такого рода проблем или способы размышления о них, о которых мне следует знать?
Вам не нужно вечно хранить что-то в роли, которая удаляет старые файлы.
Вы всегда можете просто запустить одноразовую игру в следующий раз, когда будете запускать роль, удаляющую старые файлы. Но имейте в виду, что вам, возможно, придется сохранить этот разовый вариант, если во время миграции некоторые хосты недоступны или вы столкнетесь с какой-либо другой проблемой.
Или вы можете добавить его к роли и оставить на некоторое время. Как только вы убедитесь, что файлы были удалены со всех затронутых хостов, вы можете удалить задачу, которая их удаляет. В большинстве случаев хранить его при себе безвредно.
Я предпочитаю этот способ удалению и воссозданию всего каталога, поскольку это не идемпотентно. Он всегда будет записываться как измененный, даже если ничего не изменилось семантически. Помните, что в Ansible идемпотентность не гарантируется; ты должен сделать это сам.