0

私は奇妙な問題に直面しています。シェフがユーザーデータ (cloud-init) から実行されると、次のシェフ レシピが失敗します。

HOME/COMPOSER_HOME 環境変数を要求します。

ただし、SSH ターミナルから手動で Chef-client を実行すると (またはターミナルで直接コマンドを実行しても)、問題なく動作します。

PS: composer.phar と composer.json は開発者によって提供されます (wordpress zip にバンドルされています)。

== レシピスニペット ==

# Install Composer

script "install_composer" do
    interpreter "bash"
    user "root"
    cwd "#{node.apache.default_docroot}/html"
    code <<-EOH
    /opt/rh/rh-php56/root/usr/bin/php composer.phar install
    EOH
    not_if {File.exists?("#{node.default_docroot}/html/composer.lock")}
end

== SSH端末から実行する場合 ==

  * script[install_composer] action run
    - execute "bash"  "/tmp/chef-script20160722-5397-1sjwxg9"

== Cloud-Init-Output.log スニペット ==

================================================================================
Error executing action `run` on resource 'script[install_composer]'
================================================================================

Mixlib::ShellOut::ShellCommandFailed
------------------------------------
Expected process to exit with [0], but received '1'
---- Begin output of "bash"  "/tmp/chef-script20160722-2013-r6sdpo" ----
STDOUT: 
STDERR: [RuntimeException]                                                                        
  The HOME or COMPOSER_HOME environment variable must be set for composer to run correctly
---- End output of "bash"  "/tmp/chef-script20160722-2013-r6sdpo" ----
Ran "bash"  "/tmp/chef-script20160722-2013-r6sdpo" returned 1

Resource Declaration:
---------------------
# In /var/chef/cache/cookbooks/webps-commportal/recipes/wordpress.rb

 49: script "install_composer" do
 50:    interpreter "bash"
 51:    user "root"
 52:    cwd "#{node.apache.default_docroot}/html"
 53:    code <<-EOH
 54:    /opt/rh/rh-php56/root/usr/bin/php composer.phar install
 55:    EOH
 56:    not_if {File.exists?("#{node.apache.default_docroot}/html/composer.lock")}
 57: end
 58: 

Compiled Resource:
------------------
# Declared in /var/chef/cache/cookbooks/webps-commportal/recipes/wordpress.rb:49:in `from_file'

script("install_composer") do
  action "run"
  retries 0
  retry_delay 2
  guard_interpreter :default
  command "\"bash\"  \"/tmp/chef-script20160722-2013-r6sdpo\""
  backup 5
  cwd "/opt/rh/httpd24/root/var/www/html"
  returns 0
  user "root"
  code "\t/opt/rh/rh-php56/root/usr/bin/php composer.phar install\n"
  interpreter "bash"
  cookbook_name "webps-commportal"
  recipe_name "wordpress"
  not_if { #code block }
end

---- Begin output of "bash"  "/tmp/chef-script20160722-2013-r6sdpo" ----
STDOUT: 
STDERR: [RuntimeException]                                                                        
  The HOME or COMPOSER_HOME environment variable must be set for composer to run correctly
---- End output of "bash"  "/tmp/chef-script20160722-2013-r6sdpo" ----
Ran "bash"  "/tmp/chef-script20160722-2013-r6sdpo" returned 1
4

1 に答える 1

1

リソースに追加environment HOME: '/root'しますscript(または同様のもの)。Chef はこの変数を設定しないため、これが必要です。SSH 経由でログインすると、ログイン シェルによって設定され、chef-client プロセスに継承されます。

于 2016-07-22T09:53:33.970 に答える