Chef - créer un modèle avec variable dynamique?

Je vais avoir un peu de défi sur une recette Chef. Je suis nouveau sur le Chef, de sorte s'il vous plaît garder avec moi.

Étape 1: Ma recette chef installe Ruby Passager, compile les Passagers nginx module avec 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

Étape 2: Après cela, j'ai créer le fichier de configuration de nginx l'aide d'un modèle. Cette configuration nécessite l'emplacement des Passagers, qui dépend de l'étape 1 à la fin.

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

Problème: le Chef s'affiche pour compiler des modèles au th ebeginning de la course. Donc, ce qui finit par arriver, c'est que l'Étape 2 est en fait réalisée avant l'Étape 1 est exécuté. Cela signifie que le passenger_root variable est vide. Il a besoin de l'Étape 1 à accomplir avant de pouvoir obtenir le passenger_root, puis d'exécuter le modèle.

J'ai essayé d'emballage de l'étape 2 du code dans un ruby_block mais cela ne fonctionne pas: undefined methodmodèle " pour le Chef:::: RubyBlock`.

Ne savez pas quoi faire ici, ou quelle est la meilleure pratique pour le Chef de quelque chose comme cela?

Merci d'avance,

Leonard

OriginalL'auteur Leonard Teo | 2013-04-01