首页 > 解决方案 > Chef - 在条件检查中嵌入模板块

问题描述

我正在寻找一些红宝石帮助。我有这个代码块来检查我的 NGIX 服务器是否正在侦听特定端口,如果没有,则使用 Chef 模板进行更改并重新启动服务器。我在这里遇到的问题是我无法获得在另一个 Ruby 块中使用模板块的正确语法。

我可以要求一些语法帮助吗?

谢谢 :)

ruby_block "check sayc" do
  block do
    server = node['fqdn']
    port = puts global_ssl_port.to_i

    begin
      Timeout.timeout(5) do
        Socket.tcp(server, port){}
      end
      Chef::Log.info 'connections open'
      rescue
      Chef::Log.fatal 'connections refused'

            #Configures Server NGIX Port
            template '/etc/opscode/server.rb' do
              source 'server.erb'
              mode '0755'
              owner 'root'
              group 'root'
              #Add new NGIX port configuration
              variables(non_ssl_port: global_non_ssl_port, ssl_port: global_ssl_port)
            end

    end
  end
end

标签: rubysyntaxnestedchef-infra

解决方案


如果你仍然在你的 ruby​​ 块中,你可以template用新的实例替换 DSLChef::Resource::Template.new('nginx config')并在之后设置类属性sourcemode等等。

这是Chef::Resource::Template运行所需的最少代码

ruby_block 'create template' do
  block do

    r = Chef::Resource::Template.new('template_name', run_context)
    r.path       '/tmp/file.txt'
    r.source     'file.erb'
    r.cookbook   'cookbook_name'
    r.mode       00600
    r.run_action :create
  end
end

例如,您需要加入,并且需要用file.erb您的食谱替换。templates/default/file.erbcookbook_name


推荐阅读