我如何知道厨师的文件内容

时间:2014-02-19 20:26:30

标签: bash chef chef-recipe

我正在尝试使用执行资源更改gem源,但我需要这样做一次。

remove_rubygems = 'gem sources -r http://rubygems.org/'

execute 'change sources to our gem server' do
  command "#{remove_rubygems} && gem sources -a http://mygemserver"
  creates "~/.gemrc"
end

这一切都是因为当我多次执行此资源时, .gemrc文件看起来就像它。

vagrant@leibniz-app:~$ gem source
*** CURRENT SOURCES ***

http://mygemserver/
http://mygemserver/
http://mygemserver/
http://mygemserver/
...

然后,我想在.gemrc文件中使用mygemserver一次。

我该怎么做?

有没有办法在执行我的资源之前知道.gemrc的内容。?

1 个答案:

答案 0 :(得分:2)

不要在路径中使用~/;这就是creates行无法阻止execute资源在文件已存在时运行的原因。

execute 'change sources to our gem server' do
  command "#{remove_rubygems} && gem sources -a http://mygemserver"
  creates "/root/.gemrc"
end

或者,如果要检查文件是否包含特定行:

execute 'change sources to our gem server' do
  command "#{remove_rubygems} && gem sources -a http://mygemserver"
  not_if "grep -F -q -e http://mygemserver/ ~/.gemrc" # this uses a shell, so the
                                                      # tilde should work here.
end