我想讓廚師交換官方rubygems回購與我自己的本地。它有用,但讓我們說'不總是'。更多關於下面的內容。廚師跑VS廚師系統下 - 不同的寶石回購
bash-4.2$ /opt/chef/embedded/bin/gem sources
*** CURRENT SOURCES ***
https://rubygems.org/
廚師在systemd的控制下運行。當我在雜誌上檢查什麼廚師迄今所做我得到
Jan 14 07:39:24 myserver.srv chef-client[32274]: [2016-01-14T07:39:24+01:00] INFO: Processing execute[add_my_own_repo] action run (mycookbook::gem line 5)
Jan 14 07:39:24 myserver.srv chef-client[32274]: [2016-01-14T07:39:24+01:00] INFO: Processing execute[Guard resource] action run (dynamically defined)
Jan 14 07:39:24 myserver.srv chef-client[32274]: [2016-01-14T07:39:24+01:00] INFO: execute[Guard resource] ran successfully
Jan 14 07:39:24 myserver.srv chef-client[32274]: [2016-01-14T07:39:24+01:00] INFO: Processing execute[del_official_https_rubygems_repo] action run (mycookbook::gem line 10)
Jan 14 07:39:24 myserver.srv chef-client[32274]: [2016-01-14T07:39:24+01:00] INFO: Processing execute[Guard resource] action run (dynamically defined)
我的食譜mycookbook的代碼::寶石如下
execute 'add_my_own_repo' do
command '/opt/chef/embedded/bin/gem sources --add http://myrepo'
not_if '/opt/chef/embedded/bin/gem sources --list | grep myrepo'
end.run_action(:run)
execute 'del_official_https_rubygems_repo' do
command '/opt/chef/embedded/bin/gem sources --remove https://rubygems.org/'
only_if '/opt/chef/embedded/bin/gem sources --list | grep https://rubygems.org'
end.run_action(:run)
如果我再我檢查寶石源列表我會得到
bash-4.2$ /opt/chef/embedded/bin/gem sources
*** CURRENT SOURCES ***
https://rubygems.org/
不幸的是到目前爲止沒有任何改變。現在,如果我直接從控制檯運行廚師客戶端,我最終會看到廚師正在做我想做的事情。
Recipe: mycookbook::gem
* execute[add_my_own_repo] action run
- execute /opt/chef/embedded/bin/gem sources --add http://myrepo
* execute[del_official_https_rubygems_repo] action run
- execute /opt/chef/embedded/bin/gem sources --remove https://rubygems.org/
當我打開調試模式下,我注意到廚師聲稱條件不成立
DEBUG: Skipping execute[del_official_https_rubygems_repo] due to only_if command `gem sources --list | /usr/bin/grep https://rubygems.org`
問心無愧?我做了一些進一步的調查,並在絕望中加入配方
execute 'CHEF_ENV' do
command 'env >> /tmp/chef_env'
end.run_action(:run)
execute 'GEM_SOURCES' do
command 'gem sources --list >> /tmp/chef_gem_sources'
end.run_action(:run)
現在,當我檢查我被徹底搞糊塗
cat chef_gem_sources
*** CURRENT SOURCES ***
http://myrepo
最後,在/ tmp/chef_env我發現的/ tmp/chef_gem_sources內容HOME = /。當我自己啓動廚師客戶時顯然是HOME =/root。它有很大的不同,因爲.gemrc有兩個位置,並且在sources部分可能有不同的值。
使用grep的完整路徑,因此您確定它不是父環境PATH中的PATH問題。我很確定'env -i/opt/chef/bin/chef-client'也會失敗。 – Tensibai
我記錄了文件chef-cllient所具有的$ PATH變量的值。一切安好。沒有必要使用grep的完整路徑。 – Zenith
在您的systemd啓動中添加-l調試,以便您在日誌中獲得更多信息。如果grep行爲正常,我看不到任何理由。 – Tensibai