man sed
скажу вам:
Sed commands can be given with... one address, in which case the
command will only be executed for input lines which match that address;
...
/regexp/
Match lines matching the regular expression regexp.
Так что можно:
sed '/Package/ s/replace/stuff/'
Это действительно зависит от того, как вызывается Ansible.
Даже если мультиплексирование SSH (включено по умолчанию )и конвейерная обработка SSH -(часто рекомендуется ), Ansible (с версии 2.9.11 )относительно -входов и запусков каждая задача в новом процессе Python.
В этой среде добавленный файловый контекст сразу виден в файловой задаче.
Однако при запуске playbook с включенным подключаемым модулем подключения Mitogen последовательные задачи выполняются в одном и том же процессе Python. И тогда изменение контекста файла фактически кэшируется на уровне процесса.
Он кэшируется, потому что Ansible вызываетselinux.matchpathcon()
(в selinux_default_context()
, module_utils/basic.py
), чтобы получить контекст файла по умолчанию. Оказывается, matchpathcon()
устарел и внутренне кэширует все файловые контексты при первом вызове. Возможное исправление состоит в том, что модуль sefcontext
вызываетselinux.matchpathcon_fini()
после того, как он вызывает перезагрузку политики.
Это происходит с подключаемым модулем подключения Mitogen , поскольку он очень хорошо подходит для повторного использования соединений ssh и процессов python. И это хорошо, потому что это значительно ускоряет выполнение плейбука.
Аналогичная проблема в Puppet -, так как Puppet работает как агент -все задачи всегда выполняются в одном и том же процессе -и Puppet также использовал matchpathcon()
API без сброса кэша при изменении контекста файла в системной памяти. Политика SELinux.