【发布时间】:2018-07-30 16:15:00
【问题描述】:
我正在运行 Chef 12 Opsworks 堆栈,并创建了一个自定义说明书来备份我的网络服务器上的一些文件夹。
也许我的处理方法是错误的,但我基本上对每个要备份的网站都有两个(或更多)食谱,然后我会更新每个食谱中的一些属性(站点名称、备份文件夹等)。
所以我从属性文件夹中的 default.rb 文件中的以下内容开始:
default['backup']['site'] = "SITE1"
default['backup']['root'] = "/var/www/SITE1"
然后在每个备份配方中,我在配方顶部都有以下内容,然后是我的备份代码:
site1.rb
node.override['backup']['site'] = "SITE1"
node.override['backup']['root'] = "/var/www/SITE1"
site2.rb
node.override['backup']['site'] = "SITE2"
node.override['backup']['root'] = "/var/www/SITE2"
现在在 Opsworks 层的设置步骤中,我添加了所有备份配方,但是当我启动实例(或从部署运行设置步骤)时出现问题,因为属性似乎设置为最后一个配方按字母顺序设置它们。
因此,例如 SITE1 备份脚本最终将在其配置中使用 /var/www/SITE2 根文件夹构建,因此不会备份正确的站点。
有没有办法防止这种情况发生?根据我收集的信息(从我的示例和阅读 Chef 文档),所有属性在开始时都被编译在一起,然后食谱正在运行 - 这就是为什么最后一组属性被设置为最终版本,然后所有使用这些属性的食谱属性将获得这些值。
目前我可以部署它们的唯一方法是独立运行每个配方,从而使用正确的属性值,但是当实例重新启动或手动运行设置步骤时,所有备份脚本都将返回备份一个站点。
我的处理方法有问题吗?我应该为每个配方创建单独的命名属性吗?
【问题讨论】:
标签: attributes aws-opsworks chef-infra