2015-06-26 4 views
0

У меня есть странная проблема с рецептом шеф-повара. Позвольте мне сказать вам, что я новичок в Шеф-поваре, простите меня, если что-то выглядит ужасно неправильно.Выполнение шеф-повара в первый раз

У меня есть файл войны, который построен Spring Boot. Мне просто нужно запустить java -jar <file>.war -config=config/ для запуска моего приложения.

Недавно я начал экспериментировать с шеф-поваром и получаю рецепты, которые выполняют эту работу.

код из моего рецепта заключается в следующем:

#Some code has been omitted intentionally. 

directory "#{home}" do 
    owner 'root' 
    group 'root' 
    mode '0755' 
    recursive true 
end 

directory "#{home}/config" do 
    owner 'root' 
    group 'root' 
    mode '0755' 
end 
cookbook_file "#{home}/config/ehcache.xml" do 
    source "ehcache.xml" 
    mode "0644" 
end 
# Get the war file from the repo 
remote_file "#{home}/app.war" do 
    source "#{node['baseos']['files_repo_url']}/wars/app.war" 
    owner 'root' 
    group 'root' 
    mode '0644' 
end 

execute 'Run the war file' do 
    command "java -jar '#{home}/app.war' -config='#{home}/config/'" 
    action :run 
end 

войны файл, и связанный с ним папку конфигурации вместе с его содержимым успешно копируются в соответствующие пункты назначения перед командой execute увольняют. Проблема в том, что машина снова создается с kitchen create, первый kitchen verify потерпит неудачу, заявив 'Errno::ENOENT: No such file or directory - java -jar /opt/com/app.war -config=config/'. Это происходит только в первый раз. Удивительно, но, снова сказав kitchen verify, приложение запускается и успешно запускается.

Это странно из-за того, что требуемый файл app.war и config/находятся [или должны быть] уже на машине с соответствующими привилегиями.

Я знаю, что шеф-повар обрабатывает эти вещи последовательно, поэтому, учитывая, что команда execute является самой последней строкой в ​​моем рецепте, она должна уже иметь то, что требуется для запуска военного файла. Я схожу с ума, может ли кто-нибудь объяснить это?

Спасибо!

+0

Возможный дубликат [как запустить программу java на фоне рецепта шеф-повара] (http://stackoverflow.com/questions/18414090/how-to-run-a-java-program-at-background-from- chef-recipe) –

+0

может помочь сущность или что-то вроде прогона и отладочного вывода. и мне интересно, не жалуется на войну, но конфиг, и я заметил, что у вас есть gh_home в ресурсе cookbook_file, чтобы удалить конфигурацию. ваш вывод ошибки также выглядит так, как будто он не соответствует ресурсу execute, когда дело доходит до аргумента config. – lamont

+0

Извините, это опечатка, это на самом деле дом, а не gb_home. Исправил его сейчас. –

ответ

1

Хотя это несколько противоречит интуиции, это, вероятно, потому, что у вас нет java, доступных на вашем $PATH. Это может означать, что java не установлен или установлен, но не так, как его может найти шеф-повар. Помните, что переменные окружения наследуются только при запуске процесса, поэтому, если вы установили Java таким образом, чтобы установщик установил некоторые глобальные изменения на $PATH, это не было видно для шеф-повара. Хорошим решением было бы использовать полный путь к двоичному файлу JVM (/opt/whatever/bin/java или что-то еще).

+0

Отлично. Это очень помогло. Спасибо огромное! –