Уведомляется, когда файл, контролируемый puppet, будет изменен yum


13

Можно ли получить уведомление на консоли, когда пакет, содержащий файл, которым управляет puppet, собирается изменить этот файл? Имеется в виду, что при выполнении обновления yum в yum можно ли добавить пользовательское предупреждение?

Ответы:


22

Yum поддерживает плагины, поэтому вполне возможно написать плагин, который читает кешированный манифест марионетки и предупреждает, когда транзакция перезапишет контролируемый марионетками файл. Я не знаю о существующем плагине, который делает это, но я , вероятно, напишу только что написал один сам, как мне нравится идея.

Плагин проверяет все недавно установленные / обновленные / пониженные пакеты, сообщает, какие файлы, управляемые марионетками, будут перезаписаны, и запрашивает подтверждение для этого.

    [root@camel ~]# yum update pam
    Loaded plugins: puppet, security
    Skipping security plugin, no data
    Setting up Update Process
    Resolving Dependencies
    Skipping security plugin, no data
    --> Running transaction check
    ---> Package pam.i386 0:0.99.6.2-12.el5 set to be updated
    ---> Package pam.x86_64 0:0.99.6.2-12.el5 set to be updated
    --> Finished Dependency Resolution

    Dependencies Resolved

    ===============================================================================================================================================================
     Package                           Arch                                 Version                                       Repository                          Size
    ===============================================================================================================================================================
    Updating:
     pam                               i386                                 0.99.6.2-12.el5                               base                               983 k
     pam                               x86_64                               0.99.6.2-12.el5                               base                               982 k

    Transaction Summary
    ===============================================================================================================================================================
    Install       0 Package(s)
    Upgrade       2 Package(s)

    Total download size: 1.9 M
    Is this ok [y/N]: y
    Downloading Packages:
    (1/2): pam-0.99.6.2-12.el5.x86_64.rpm                                                                                                   | 982 kB     00:00
    (2/2): pam-0.99.6.2-12.el5.i386.rpm                                                                                                     | 983 kB     00:00
    ---------------------------------------------------------------------------------------------------------------------------------------------------------------
    Total                                                                                                                          8.7 MB/s | 1.9 MB     00:00
    Running rpm_check_debug
    Running Transaction Test
    Finished Transaction Test
    Transaction Test Succeeded
    Running Transaction
    Installing pam-0.99.6.2-12.el5.i386 overwrites puppet-managed file /etc/pam.d/system-auth
    Installing pam-0.99.6.2-12.el5.i386 overwrites puppet-managed file /etc/security/access.conf
    Installing pam-0.99.6.2-12.el5.i386 overwrites puppet-managed file /etc/security/limits.conf
    Installing pam-0.99.6.2-12.el5.x86_64 overwrites puppet-managed file /etc/pam.d/system-auth
    Installing pam-0.99.6.2-12.el5.x86_64 overwrites puppet-managed file /etc/security/access.conf
    Installing pam-0.99.6.2-12.el5.x86_64 overwrites puppet-managed file /etc/security/limits.conf
    Is this ok [y/N]: n


    Aborting
    [root@camel ~]# yum update pam
    Loaded plugins: puppet, security
    Skipping security plugin, no data
    Setting up Update Process
    Resolving Dependencies
    Skipping security plugin, no data
    --> Running transaction check
    ---> Package pam.i386 0:0.99.6.2-12.el5 set to be updated
    ---> Package pam.x86_64 0:0.99.6.2-12.el5 set to be updated
    --> Finished Dependency Resolution

    Dependencies Resolved

    ===============================================================================================================================================================
     Package                           Arch                                 Version                                       Repository                          Size
    ===============================================================================================================================================================
    Updating:
     pam                               i386                                 0.99.6.2-12.el5                               base                               983 k
     pam                               x86_64                               0.99.6.2-12.el5                               base                               982 k

    Transaction Summary
    ===============================================================================================================================================================
    Install       0 Package(s)
    Upgrade       2 Package(s)

    Total size: 1.9 M
    Is this ok [y/N]: y
    Downloading Packages:
    Running rpm_check_debug
    Running Transaction Test
    Finished Transaction Test
    Transaction Test Succeeded
    Running Transaction
    Installing pam-0.99.6.2-12.el5.i386 overwrites puppet-managed file /etc/pam.d/system-auth
    Installing pam-0.99.6.2-12.el5.i386 overwrites puppet-managed file /etc/security/access.conf
    Installing pam-0.99.6.2-12.el5.i386 overwrites puppet-managed file /etc/security/limits.conf
    Installing pam-0.99.6.2-12.el5.x86_64 overwrites puppet-managed file /etc/pam.d/system-auth
    Installing pam-0.99.6.2-12.el5.x86_64 overwrites puppet-managed file /etc/security/access.conf
    Installing pam-0.99.6.2-12.el5.x86_64 overwrites puppet-managed file /etc/security/limits.conf
    Is this ok [y/N]: y
      Updating       : pam                                                                                                                                     1/4
      Updating       : pam                                                                                                                                     2/4
      Cleanup        : pam                                                                                                                                     3/4
      Cleanup        : pam                                                                                                                                     4/4

    Updated:
      pam.i386 0:0.99.6.2-12.el5                                                    pam.x86_64 0:0.99.6.2-12.el5

    Complete!

Сам плагин можно найти в моем репозитории github hacks .


8 ноября 2013 обновление:

Как уже упоминалось в комментариях, я теперь превратил это в более крупный проект, чтобы улучшить взаимодействие между Yum и Puppet. Вы можете найти его на GitHub .


Это прекрасно. Я, конечно, хотел бы, чтобы он знал, что игнорирует% config (noreplace), так как они на самом деле не будут перезаписаны.
Freiheit

Да, я планирую добавить это и многое другое. Этот вопрос дал мне много идей :)
Деннис Каарсемакер

Вот это да ! Вы действительно вышли за рамки служебного долга здесь. Я впечатлен. Это именно то, на что пытался ответить мой вопрос. Я думал сценарий оболочки, но это намного лучше! Теперь я установил ваш плагин в yum, но он не будет загружать плагин puppet. Есть идеи почему? Я вижу .pyc файл, но не .pyo файл как rhnplugin и безопасности нет
Brian

Неважно, мне пришлось установить PyYAML.
Брайан

Можете ли вы добавить лицензию на программное обеспечение?
Брайан

2

Да, это возможно, но это не относится к самой Марионетке.

Системы Linux имеют поддержку механизма inotify , который «может использоваться для мониторинга и обработки событий файловой системы». Кроме того, inotify-toolsесть incronпрограмма, которая работает аналогично cron, но реагирует на события файловой системы. Я думаю, что вы можете использовать его для уведомления об изменении любого файла.

(Кстати, если вы хотите посмотреть /etc/sysctl.confфайл, который я предлагаю проверить, прежде чем делать это - есть ли в вашем Linux поддержка /etc/sysctl.dкаталога?)


0

Я не знаю, как реализовать такие уведомления. Может быть возможно что-то настроить, поставив транзакцию yum, определив список файлов конфигурации, которые могут быть затронуты, а затем проверив, управляет ли puppet каким-либо из них.

Однако в общем случае не рекомендуется управлять файлом, который будет обновляться пакетом. В случае файлов конфигурации (используйте rpm -qlc packagename, чтобы увидеть, помечены ли они как таковые), если пакет содержит новую версию, он сохраняется как filename.rpmnew. После этого вам предоставляется возможность самостоятельно вносить необходимые изменения.

Мы столкнулись с проблемой, когда файл конфигурации был удален puppet, а затем заменен yum при обновлении пакета. Это вызывало проблемы, пока следующий запуск кукол не удалил файл. Наш обходной путь для этой ситуации состоял в том, чтобы установить содержимое «удаленного» файла в комментарий, чтобы он был практически пустым. Другой способ справиться с этим - попытаться убедиться, что Package ['a'] -> File ['/ etc / a'] так, что необходим только один запуск кукол.


Я попытался найти некоторые лучшие практики для кукол, которые говорят, что «не рекомендуется управлять файлом, который будет обновляться пакетом». Я управляю sysctl.conf особенно потому, что в этом файле есть настройки, которые мне нужны для запуска определенных приложений. Какая альтернатива тогда?
Брайан,

1
Совершенно нормально управлять конфигами с марионеткой, к которой также хочет прикоснуться yum. RPM обычно не затрагивает настроенные файлы конфигурации, и даже если это так, Puppet восстановит ваш контент.
Деннис Каарсемакер

Файлы конфигурации будут обновляться только RPM / yum, если они не существуют. Не рекомендуется (обычно) использовать puppet для редактирования других файлов в пакете, потому что ваши изменения могут нарушить функциональность. Я думаю, что было бы лучше сказать «изменить», чем «управлять» в моем ответе, так как управление может обеспечить правильные разрешения. Если вы хотите редактировать файлы, которые не являются файлами конфигурации, вам также следует внедрить своего рода блокировку или исключение версий, чтобы пакеты обновлялись по требованию, а не автоматически. Таким образом, вы можете контролировать весь процесс обновления.
jdkindy


@ 0A0D: Спасибо, это поведение, о котором я говорил. Хотелось бы, чтобы у меня было достаточно представителей, чтобы прокомментировать пост Дениса Каарсемейкера - это начало элегантного решения. Кроме того, каталоги конфигурации ".d" (отмеченные php-coder) очень легко реализовать в puppet, если пакет поддерживает их.
jdkindy
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.