我在我的堆栈中使用chef
作为devOps工具。所有更改都是由chef
在我的方案中进行的,而不是任何其他内容。不允许任何用户编辑文件可以使用文件权限进行处理,但仍允许root用户编辑该文件的类型。例如;环境变量特定于test
,prod
等环境,并且这些变量在.bashrc
文件中定义。我想确保这个文件仍然是最新版本中的版本。
我不确定这是否属实,但我的问题是;
是否可以让chef
(可能是chef-client
)在服务器上检测到自定义更改(这意味着不是由厨师自己进行,可能是通过人工编辑),并将其更改为大多数最新版本。
我在文档和网页上查找过,但找不到可能有效的内容。 file
和remote_file
烹饪书具有notifies
功能,但我认为这是检测厨师本身的部署和更改的变化。
谢谢。
答案 0 :(得分:2)
如果您使用file
,cookbook_file
或template
资源并使用默认操作(: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在您的食谱中。