2013-06-26 2 views
3

Я только что установил java, используя поваренную книгу повара и обновленную переменную среды PATH для всех пользователей (добавлен новый файл в /etc/profile.d/).Chef cookbook - reload PATH

Можно ли сказать шеф-повару перезагрузить переменную PATH?

Когда я сделать что-то вроде этого:

execute "java_check" do 
    command "java -version" 
end 

ли говорит, что Java не может быть найден.

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

ответ

2

Я не уверен, что вы можете обновить переменную PATH для будущих прогонов шеф-повара, но вы можете настроить ее вручную, используя атрибут environment в строчке execute. Это также можно использовать и для других ресурсов. См: http://docs.opscode.com/chef/resources.html#execute

от шеф-повара Docs,

environment 
A hash of environment variables: {"ENV_VARIABLE"=>"VALUE"}. 
(These environment variables must exist for a command to execute successfully.) 
Default value: nil. 

Run a command which requires an environment variable

execute "slapadd" do 
    command "slapadd < /tmp/something.ldif" 
    creates "/var/lib/slapd/uid.bdb" 
    action :run 
    environment ({'HOME' => '/home/myhome'}) 
end 
+1

Вы правы, возможно, не возможно обновлять переменные ENV для будущих шеф-поваров, но можно обновлять переменные для будущих команд текущих запусков шеф-повара. Представлено в следующем посте. – Konrad

0
execute "run_updated_bash" do 
    command "bash /etc/profile.d/myscript.sh" 
end 

Вы пробовали что-то вроде этого? Его можно запустить после того, как вы разместите файл в файле /etc/profile.d/

+1

Это не сработало для меня. Скрипт выполняется успешно, но эти переменные ENV экспортируются только для этого единственного контекста bash. Когда скрипт закончен, они теряются. – Konrad

1

Я обнаружил, что это не представляется возможным обновить ENV переменные pemanently (будет доступна после завершения шеф), но можно обновить переменные для будущих команд текущего запуска шеф-повара.

ruby_block "set-env-" do 
    block { ENV[variable_name] = variable_value } 
    not_if { ENV[variable_name] == variable_value } 
end