【问题标题】:Chef template processed before service is created在创建服务之前处理的 Chef 模板
【发布时间】:2016-03-15 16:54:47
【问题描述】:

我在 AWS OpsWorks 中运行 chef 12 时遇到问题。

基本上,我在部署期间的一个部署方法会为每个部署的应用程序创建一个 NGINX-App.conf。这个很好用。

但是我想创建并运行这个模板只有当 NGINX 安装在服务器上时,如果我有一个实例而不把 webserver/nginx 放在那里。

我的 run_list 会这样:

  1. Nginx 包,nginx 服务已启用,已启动。
  2. 在部署 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。

有人知道这里有什么问题吗?

问候, 安德烈斯

【问题讨论】:

    标签: nginx chef-infra chef-recipe aws-opsworks


    【解决方案1】:

    所以显然我是这样工作的:

    1. 将“模板”部分移至原始“nginx”厨师作为定义,并将 only_if 部分留在那里。
    2. 在 Deploy 食谱/食谱中,我只是从创建模板的“nginx”食谱中调用此自定义定义。

    这种方式文件存在并且条件正常工作,我不知道为什么......

    这是否与使用其他食谱中的模板在其他所有操作之前执行有关?

    【讨论】:

    • 这与它在哪个食谱中无关,更多的是被移入定义中。我感觉你的 run_list 不是你认为它应该工作的顺序。
    • 好的,谢谢!然后它可能看起来像是 AWS OpsWorks 的新厨师环境中的错误。虽然这很奇怪。如果我的 Deploy 说明书会在 Nginx 设置之前完整运行,那么所有其他命令也会失败。
    • 在这种情况下,OPSworks chef 版本可能对守卫有不同的行为,听起来不太可能。旁注:尝试使用{ ::File.exists?(前面加上两个冒号以获取根文件类)以确保使用Ruby类而不是Chef的类,我认为这有问题,但不记得确切的位置。
    猜你喜欢
    • 1970-01-01
    • 2020-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 2021-03-20
    • 2013-10-03
    相关资源
    最近更新 更多