2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Chefのnot_if, only_ifはor条件。ではand条件でスキップさせたい場合にはどう書くか。

Last updated at Posted at 2018-06-07

Chefのリソースに複数のnot_ifやonly_ifがあった場合、それらは全てor条件で判断され、一つでも合致すると実行されない。

#ブロック書式

##OR条件の例


execute '/usr/local/bin/foo' do

  ...  

  not_if { File.file?('/tmp/bar') }
  not_if { File.file?('/tmp/baz') }
end

この場合、一つでも対象ファイルがあるとスキップされる

##AND条件の例
ではand条件は?
これは単にブロック内でand条件を使えば実現可能。

...
  not_if { 
    File.file?('/tmp/bar') &&
    File.file?('/tmp/baz') 
  }
...

この場合、両方のファイルがあるときのみスキップされる

#文字列書式
only_ifやnot_ifは、文字列を指定することもでき、その場合、その内容を実行した戻り値が判断に使用される。

##OR条件の例

...  
  not_if 'test -f /tmp/bar'
  not_if 'test -f /tmp/baz'
...

同様に、一つでも対象ファイルがあるとスキップされる。

##AND条件の例

さて、この場合のandはどの様に表すか。。。

  not_if '
    test -f /tmp/bar &&
    test -f /tmp/baz
  '

これで行けますね。

#備忘

文字列書式はsystem()でブロック書式に書き換え可能

  # これらは同じ意味
  not_if 'test -f /tmp/bar'
  not_if { system('test -f /tmp/bar') }

#参照

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?