如果需要使用Chef,如果文件的内容不存在(以幂等方式),则需要将该文件的内容放入另一个文件中。
file1.txt
具有以下内容:
subject=/DC=corp/DC=NAME/CN=COMPANY Issuing CA
issuer=/CN=COMPANY Root CA
-----BEGIN CERTIFICATE-----
fewfgwgwegarearentnsrtntrstrntnsrtntnstrntrnsrtnstrnsrtnrtnsrtnr
gregargragregrGRGrgregREGREGRGZTDNBFNFGNFGNFGNFGNBDVvhrhrehrehre
gewgreaghareherhherhhaeharehrehreahreahrehearhreahreahaerhrehher
-----END CERTIFICATE-----
subject=/CN=COMPANY Root CA
issuer=/CN=COMPANY Root CA
-----BEGIN CERTIFICATE-----
INjIVNRIVNRVINRvORIniNNknjnejvejnringringrongrognreonganaI6udddd
febwgpubgiurbguiregbeagubpaegigreaignaeingreaingeaingaeinhaddddd
findaofgbugbrluigblzriugbzrugaRIGjRIJgaprjgarigarianbnblkrnbnjna
wfefrgregeGWGWG=
-----END CERTIFICATE-----
第二个文件是/opt/chef/embedded/ssl/certs/cacert.pem
,如果尚不存在,我需要将file1.txt
中的链放入其中。
我正在使用的资源是这样:
bash 'add company cert chain to chef certs' do
code <<-EOH
cat /etc/pki/ca-trust/source/anchors/comp.corp.ca.chain.2018.crt >> /opt/chef/embedded/ssl/certs/cacert.pem
EOH
not_if 'grep "$(cat /etc/pki/ca-trust/source/anchors/comp.corp.ca.chain.2018.crt)" /opt/chef/embedded/ssl/certs/cacert.pem'
end
由于某种原因,这不起作用。
有人可以向我解释我在做什么错吗?
谢谢。
Gabi
答案 0 :(得分:0)
在过去,您可以使用Chef::Util::FileEdit
,但实际上是deprecated。
相反,您可以使用其他厨师资源来实现它。
其中一次是使用ruby_block
resource,它具有所有的红宝石功能。这意味着您可以利用红宝石的力量为您做到这一点(不要忘记提供not_if
或only_if
护卫...
类似:
ruby_block 'concatenate files' do
block do
f1 = File.read('first.file')
f2 = File.read('second.file')
content = f1 + f2
File.open('combined.file', 'w') { |f| f.write content }
end
not_if { File.read('combined.file').includes? 'some anchor text' }
end
另一种想法是离线创建所需的证书链,将其存储在encrypted data bag中,并使用您的配方将其放置在节点上。
答案 1 :(得分:0)
如果您只想比较两个文件,
not_if 'cmp /etc/pki/ca-trust/source/anchors/sdl.corp.ca.chain.2018.crt /opt/chef/embedded/ssl/certs/cacert.pem'
尝试使用grep
既奇怪又复杂。
如果您要验证file1
作为file2
的子文件存在,则严格来说,可能需要一个简单的Awk脚本或类似脚本。
awk 'BEGIN { rc=1 }
NR == FNR { k[++i] = $0; next }
k[j+1] == $0 { j++ }
j > i { rc=0; nextfile }
k[j] =! $0 { j = 0 }
END { exit rc }' file1 file2
(临时的,未经适当测试的。)
答案 2 :(得分:0)
解决方案实际上要简单得多,它是由我的一位同事给我的。 无需比较一些字符串或文件中是否存在变量或类似的东西。 条件很简单,只需
public function create($id)
{
return view('order-payments.create', compact('orderpayments'));
}
答案 3 :(得分:-1)
我会重写一下。
needle=$(cat /etc/pki/ca-trust/source/anchors/sdl.corp.ca.chain.2018.crt)
if ! grep -Fxq "$needle" /opt/chef/embedded/ssl/certs/cacert.pem
then
$(cat /etc/pki/ca-trust/source/anchors/comp.corp.ca.chain.2018.crt >> /opt/chef/embedded/ssl/certs/cacert.pem)
fi