Mam trochę wyzwanie na przepis na szefa kuchni. Jestem nowym szefem kuchni, więc proszę, dajcie mi spokój.Szef kuchni - utwórz szablon ze zmienną dynamiczną?
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 utworzę plik konfiguracyjny nginx za pomocą szablonu. Ta konfiguracja wymaga lokalizacji pasażera, która jest zależna od ukończenia etapu 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 wydaje się kompilować szablony na początku biegu. Tak więc dzieje się tak, że krok 2 jest właściwie kompilowany przed uruchomieniem kroku 1. Oznacza to, że zmienna_pasażerka jest pusta. Zanim będzie można pobrać plik guest_root, konieczne będzie wykonanie kroku 1, a następnie uruchomienie szablonu.
Próbowałem owijać kod kroku 2 w ruby_block
, ale to nie działa: undefined method
szablon "dla Chef :: Resource :: RubyBlock".
Nie jesteś pewien, co tutaj robić, a jaka jest najlepsza praktyka dla szefa kuchni w takich sytuacjach?
Dzięki z góry,
Leonard