Chef - 观察并重置自定义远程文件更改

时间:2016-10-31 20:23:18

标签: chef

我在我的堆栈中使用chef作为devOps工具。所有更改都是由chef在我的方案中进行的,而不是任何其他内容。不允许任何用户编辑文件可以使用文件权限进行处理,但仍允许root用户编辑该文件的类型。例如;环境变量特定于testprod等环境,并且这些变量在.bashrc文件中定义。我想确保这个文件仍然是最新版本中的版本。

我不确定这是否属实,但我的问题是;

是否可以让chef(可能是chef-client)在服务器上检测到自定义更改(这意味着不是由厨师自己进行,可能是通过人工编辑),并将其更改为大多数最新版本。

我在文档和网页上查找过,但找不到可能有效的内容。 fileremote_file烹饪书具有notifies功能,但我认为这是检测厨师本身的部署和更改的变化。

谢谢。

1 个答案:

答案 0 :(得分:2)

如果您使用filecookbook_filetemplate资源并使用默认操作(:create),则厨师将始终overwrite文件内容,如果它与理想的状态。

:create
  Default. Create a file. If a file already exists (but does not match), an update that file to match.

正如您所提到的,如果您想对文件更改采取任何其他操作,则可以添加notifies

如果您出于某种原因需要,可以在主厨备份目录(默认为/var/chef/backup/Chef::Config["file_backup_path"])中找到以前版本的文件。

默认情况下remote_file根据ETag或If-Modified-Since标题重新下载文件。

如果要在本地更改上重新下载文件,则必须向资源调用添加checksum,在节点/角色/环境中的某处存储校验和,并在每个版本中更新它。

如果您提到的文件只是配置文件,您可以考虑将它们存储在数据库中(或基于数据库构建它们),或者只将它们存储为cookbook_file / template在您的食谱中。