Chef ruby 即使在应用防护后也阻止更新值
Chef ruby block updating value even after applying guard
我正在 Chef 中编写食谱,我正在使用 ruby_block 资源更新文件。每次我进行收敛时,它都会在文件末尾添加相同的行。
为了使其幂等,我也添加了一个 not if 守卫,但它仍然不起作用。
ruby_block 'edit httpd conf' do
block do
rc = Chef::Util::FileEdit.new('/etc/httpd/conf/httpd.conf')
rc.insert_line_if_no_match("IncludeOptional\ssites-enabled\/\*\.conf",
"IncludeOptional sites-enabled/*.conf")
rc.write_file
end
not_if "grep \"IncludeOptional\ssites-enabled\/\*\.conf\"
/etc/httpd/conf/httpd.conf"
end
有两件事我不清楚。
首先,当我正在使用插入行,如果不匹配 那么为什么它不检查正则表达式并更新文件。
第二个为什么 not_if 守卫不能正常工作。
我这里的正则表达式可能是错误的,我在几个地方读到不要使用这种方法进行文件编辑,但我想在这里附加一些东西到文件中。
请指导我如何更好地附加到文件或用更新的值替换文件中的内容。
使用 not_if grep 需要 -c 以仅 return 退出状态代码。
所以关于 not_if 的引述是
A string is executed as a shell command. If the command returns 0, the guard is applied. If the command returns any other value, then the guard attribute is not applied
在您的情况下,它不是 return 零,因此未应用保护。
check the grep result screenshot
not_if { File.open('/etc/httpd/conf/httpd.conf').lines.any?{|line| line.include?('IncludeOptional sites-enabled')} }
它使用 not_if 守卫以这种方式工作,它逐行评估文件,如果该行存在则 return 布尔值。
如果没有匹配项,则插入行,但不知道为什么它不起作用
我正在 Chef 中编写食谱,我正在使用 ruby_block 资源更新文件。每次我进行收敛时,它都会在文件末尾添加相同的行。
为了使其幂等,我也添加了一个 not if 守卫,但它仍然不起作用。
ruby_block 'edit httpd conf' do
block do
rc = Chef::Util::FileEdit.new('/etc/httpd/conf/httpd.conf')
rc.insert_line_if_no_match("IncludeOptional\ssites-enabled\/\*\.conf",
"IncludeOptional sites-enabled/*.conf")
rc.write_file
end
not_if "grep \"IncludeOptional\ssites-enabled\/\*\.conf\"
/etc/httpd/conf/httpd.conf"
end
有两件事我不清楚。
首先,当我正在使用插入行,如果不匹配 那么为什么它不检查正则表达式并更新文件。
第二个为什么 not_if 守卫不能正常工作。
我这里的正则表达式可能是错误的,我在几个地方读到不要使用这种方法进行文件编辑,但我想在这里附加一些东西到文件中。
请指导我如何更好地附加到文件或用更新的值替换文件中的内容。
使用 not_if grep 需要 -c 以仅 return 退出状态代码。 所以关于 not_if 的引述是
A string is executed as a shell command. If the command returns 0, the guard is applied. If the command returns any other value, then the guard attribute is not applied
在您的情况下,它不是 return 零,因此未应用保护。
check the grep result screenshot
not_if { File.open('/etc/httpd/conf/httpd.conf').lines.any?{|line| line.include?('IncludeOptional sites-enabled')} }
它使用 not_if 守卫以这种方式工作,它逐行评估文件,如果该行存在则 return 布尔值。
如果没有匹配项,则插入行,但不知道为什么它不起作用