配置管理工具如何处理手动更改配置文件的情况

50次阅读
没有评论

问题描述

正在研究一些配置管理工具,如Salt、Chef、Puppet、Ansible等,并试图了解它们如何处理管理员直接在服务器上手动更改配置文件的情况:
1. 由配置管理工具直接管理的配置文件,例如nginx/apache/Postgres配置文件。
2. 系统隐式依赖的配置文件,但不由配置管理工具直接管理(即使用底层操作系统提供的默认值),例如rsyslog配置文件。
这些工具是否会对/etc(和类似的)文件夹中的所有文件进行快照/校验和,并在管理员在背后更改文件时向系统管理员发出警报?

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

如果文件被标记为由配置管理工具管理,配置管理工具会使用Jinja或ERB模板覆盖配置文件,以处理管理员手动更改配置文件的情况。
尽管对于老派UNIX管理员来说,当他们的更改在几分钟或几小时内被配置管理工具覆盖时,这可能会感到沮丧(我见过一些人使用扩展文件属性来绕过这个问题),但这种方法更优越,因为它1)强制执行了“牛群而非宠物”的思维方式,2)自动记录了部署过程,这一点在升级系统时非常重要,因为在5-10年后,可能需要检查数百个配置文件,如主机文件、限制文件、日志轮转文件、syslog文件、systemctl默认文件、firewalld/iptables配置文件、selinux文件、cron文件等等,这些都需要考虑使用“宠物”部署哲学。
这种情况通常是因为懒惰或不愿意学习新潮的配置管理技术。然而,我强烈建议,如果您要使用配置管理工具来管理配置文件,请使用Salt、Chef、Puppet、Ansible等工具来标记您已接管该配置文件的管理,以便管理员在可能的情况下不会完全被蒙在鼓里。
您还可以支持增量配置 – 例如,我使用salt来管理rsyslog.conf和/etc/rsyslog.d/中的一些文件,但不是所有文件。这样可以提供一组基线默认值,同时仍然支持一些自定义,而无需使用配置管理工具(这样做可能会让人感到不舒服),从而让您能够“两全其美”。

方案2

对于Ansible,它不会自动管理这些情况,您有以下选项:
– 对于您依赖的配置文件,但默认值适用的情况,您需要将其添加到您的配置中。
– 对于干扰的文件,您需要添加规则:state=absent。例如,我使用Ansible来配置Lamp服务器,并需要管理一系列已删除的站点。
– 对于您更改文件中的行的情况,您可能还需要添加删除行的规则。

正文完