Проблемы с установкой composer.phar (cloudinit vs manual)

Я сталкиваюсь со странной проблемой. Мой следующий рецепт шеф-повара терпит неудачу, когда шеф-повар выполняется из пользовательских данных (cloud-init).

Он запрашивает переменную HOME/COMPOSER_HOME env.

Однако он работает нормально, если я выполняю ручной шеф-клиент, запускаемый с терминала SSH (или даже запускаю команды непосредственно на терминале).

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

1 ответ

Решение

Добавлять environment HOME: '/root' на ваш script ресурс (или аналогичный). Это необходимо, потому что Chef не устанавливает эту переменную для вас. Когда вы входите через SSH, он устанавливается вашей оболочкой входа, которая затем наследуется процессом chef-client.

Другие вопросы по тегам