在创建服务之前处理的 Chef 模板
Posted
技术标签:
【中文标题】在创建服务之前处理的 Chef 模板【英文标题】:Chef template processed before service is created 【发布时间】:2016-03-15 16:54:47 【问题描述】:我在 AWS OpsWorks 中运行 chef 12 时遇到问题。
基本上,我在部署期间的一个部署方法会为每个部署的应用程序创建一个 nginx-App.conf。这个很好用。
但是我想创建并运行这个模板只有当 NGINX 安装在服务器上时,如果我有一个实例而不把 webserver/nginx 放在那里。
我的 run_list 会这样:
-
Nginx 包,nginx 服务已启用,已启动。
在部署 Nginx-app 的过程中会创建特定的 conf 文件。
我创建 Nginx-app conf 的方法如下:
template 'nginx.conf' do
path "/etc/nginx/conf.d/#params[:something].conf"
source 'nginxapp.conf.erb'
cookbook 'nginx'
owner 'root'
group 'root'
mode 0644
notifies :reload, 'service[nginx]'
only_if File.exists?('/usr/sbin/nginx')
end
如果我添加“only_if”条件会失败,因为在处理此模板之前似乎没有安装 Nginx。
如果我第二次运行它,它将正常工作,因为已经安装了 nginx。
有人知道这里有什么问题吗?
问候, 安德烈斯
【问题讨论】:
【参考方案1】:所以显然我是这样工作的:
-
将“模板”部分移至原始“nginx”厨师作为定义,并将 only_if 部分留在那里。
在 Deploy 食谱/食谱中,我只是从创建模板的“nginx”食谱中调用此自定义定义。
这种方式文件存在并且条件正常工作,我不知道为什么......
这是否与使用其他食谱中的模板在其他所有操作之前执行有关?
【讨论】:
这与它在哪个食谱中无关,更多的是被移入定义中。我感觉你的 run_list 不是你认为它应该工作的顺序。 好的,谢谢!然后它可能看起来像是 AWS OpsWorks 的新厨师环境中的错误。虽然这很奇怪。如果我的 Deploy 说明书会在 Nginx 设置之前完整运行,那么所有其他命令也会失败。 在这种情况下,OPSworks chef 版本可能对守卫有不同的行为,听起来不太可能。旁注:尝试使用 ::File.exists?
(前面加上两个冒号以获取根文件类)以确保使用Ruby类而不是Chef的类,我认为这有问题,但不记得确切的位置。以上是关于在创建服务之前处理的 Chef 模板的主要内容,如果未能解决你的问题,请参考以下文章