как заставить шеф-повара выполняться с конкретным пользователем и загружать его значения среды

Привет, я создаю экземпляр WCS, для которого я должен выполнить команду создания экземпляра, используя пользователя wcs (webadmin), он не может подключиться к БД, поскольку не может получить необходимые переменные env.

поэтому я добавил пример кода для проверки

Я использую приведенный ниже код

bash "wcs-create-instance" do
    user "webadmin"
    group "webspher"
    code <<-EOH        
        ###{node[:websphere][:wcs][:wcs_installLocation]}/bin/config_ant.sh -DinstanceName=#{node[:websphere][:wcs][:wcs_instance]} CreateInstance  
    whoami > /tmp/whoami
    env > /tmp/env              
EOH
    notifies :run, "bash[fix-permission]", :immediately 
    #This not_if is just temporary, a proper mechanism has to be implemented here to loop through all the WCS APars,
    #For the POC keeping it neat and simple such that this does not rerun on execution
    not_if {File.directory?("#{node[:websphere][:wcs][:wcs_installLocation]}/instances/#{node[:websphere][:wcs][:wcs_instance]}/starterstores")}
    #action :nothing
end

Для кого я получаю пользователя

веб-админ

Но для env я получаю env пользователя «root», а не источник .bash_profile для переменных env. Любые идеи


person Saurav    schedule 12.07.2013    source источник


Ответы (2)


В ресурсе bash есть атрибут environment. Или вы можете указать .bash_profile в сценарии. Это одна из возможностей bash (последний пример)

person Paulo Almeida    schedule 12.07.2013
comment
попытался получить исходный код, но он не работает, учитывая, что нужно установить довольно много переменных среды, установка его во время выполнения команды в ресурсе bash была бы очень громоздкой. - person Saurav; 15.07.2013
comment
Кажется, я делал что-то не так, решение, предложенное Пауло, является правильным, я сделал источник .bash_profile (на этот раз правильно), и он работал нормально. Спасибо еще раз - person Saurav; 17.07.2013
comment
@Saurav Вы правильно упомянули, что получили .bash_profile. Можете ли вы сказать мне, как? Даже я столкнулся с проблемой поиска bash_profile - person Vinay Kadalagi; 16.10.2015
comment
@VinayKadalagi перейдите по ссылке, которую предложил Пауло. bash 'foo' сделать код 'source /tmp/foo.sh' end - person Saurav; 29.10.2015
comment
Или вы можете использовать это с помощью атрибута среды. 'wcs_installLocation']}/bin environment( 'ORACLE_HOME' =› '#{node[ora_client][home]}/product/#{node[ora_client][version]}', 'TNS_ADMIN' =› node[ora_client][ tns_home] ) команда ./config_ant.sh -DinstanceName=#{node['wcs']['wcs_instance']} CreateInstance not_if {File.exists?(#{node['wcs']['wcs_installLocation']}/instances /#{узел['wcs']['wcs_instance']}/web/index.html)} конец - person Saurav; 29.10.2015

Похоже, что добавление flags '-l', чтобы сообщить bash, что он действует как оболочка входа в систему, также помогает.

bash 'do something' do
  code 'my_command'
  flags '-l'
end

Или с помощью блока execute:

execute 'foo' do
  command 'bash -l -c "my_command"'
end
person Patrick Gibson    schedule 21.05.2019