Chef - встраивание блока шаблона в условную проверку - PullRequest
0 голосов
/ 06 мая 2018

Мне нужна помощь Рубина. У меня есть этот блок кода, чтобы проверить, прослушивает ли мой сервер 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

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Если вы все еще находитесь в своем рубиновом блоке, вы можете заменить template DSL новым экземпляром Chef::Resource::Template.new('nginx config') и установить атрибуты класса после этого - source, mode и т. Д.

Вот минимальный код для запуска 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.erb, и вам нужно заменить cookbook_name вашей кулинарной книгой.

0 голосов
/ 06 мая 2018

Это не совсем то, как работает шеф-повар. Вы указываете, как вы хотите, чтобы файл конфигурации выглядел в шаблоне, и если конфигурация устарела, Chef обновит ее.

Более непосредственно к вопросу: вы не можете использовать рецепт шеф-повара DSL внутри ресурса ruby_block. Как следует из названия, он допускает только простой код Ruby. Вы должны будете превратить это в пользовательский ресурс, если хотите сделать что-то подобное. Но, опять же, вероятно, нет:)

...