Chef - stwórz szablon z dynamiczną zmienną?

Mam trochę wyzwania w przepisie szefa kuchni. Jestem nowym szefem kuchni, więc proszę o wyrozumiałość.

Krok 1: Mój przepis na szefa kuchni instaluje Ruby Passenger, a następnie kompiluje moduł Passenger nginx wraz z Nginx.

# Install passenger and nginx module
bash "Install Passenger" do
  code <<-EOF
  source /usr/local/rvm/scripts/rvm
  gem install passenger
  EOF
  user "root"
  not_if { `gem list`.lines.grep(/^passenger \(.*\)/).count > 0 }
end

# Install passenger
# Note that we have to explicitly include the RVM script otherwise it won't setup the environment correctly
bash "Install passenger nginx module and nginx from source" do
  code <<-EOF
  source /usr/local/rvm/scripts/rvm
  passenger-install-nginx-module --auto --prefix=/opt/nginx --auto-download
  EOF
  user "root"
  not_if { File.directory? "/opt/nginx" }
end

Krok 2: Następnie tworzę plik konfiguracyjny nginx przy użyciu szablonu. Ta konfiguracja wymaga lokalizacji Pasażera, która zależy od ukończenia kroku 1.

template "/opt/nginx/conf/nginx.conf" do
  source "nginx.conf.erb"
  action :create
  variables(
    deploy_user: deploy_user,
    passenger_root: `bash -c "source /usr/local/rvm/scripts/rvm; passenger-config --root"`.chomp,
    passenger_ruby: `bash -c "source /usr/local/rvm/scripts/rvm; which ruby"`.chomp,
    passenger: node[:passenger]
  )
end

Problem: Chef pojawia się, aby skompilować szablony na początku biegu. Tak więc kończy się to, że krok 2 jest skompilowany przed uruchomieniem kroku 1. Oznacza to, że zmienna passenger_root jest pusta. Aby móc uzyskać parametr pasażer_root, należy wykonać krok 1, a następnie uruchomić szablon.

Próbowałem zawinąć kod kroku 2 wruby_block ale to nie działa:undefined methodtemplate 'dla Chef :: Resource :: RubyBlock`.

Nie wiesz, co tu robić, lub jaka jest najlepsza praktyka dla szefa kuchni na coś takiego?

Z góry dziękuję,

Leonard

questionAnswers(3)

yourAnswerToTheQuestion