内容丰富的 Chef "file" 资源
Chef "file" resource with huge content
我正在使用文件资源并将文件内容指定为内容属性。但是内容比较大,我不能直接在文件属性里面声明内容。
file "/var/django/.ssh/id_rsa" do
content "huge content"
owner "django"
group "django"
mode 00600
end
请提出是否有更好的声明内容的方法(当内容很大时)。
将内容放入食谱 files/
下的文件中,并使用 cookbook_file
资源。
尽管您提到不需要单独的文件,但创建 SSH 私钥的正确方法是使用加密数据包。管理加密数据包的最简单方法是通过 Chef Vault。您可以在此处阅读有关如何使用 Chef vault 进行设置的更多信息:http://jtimberman.housepub.org/blog/2013/09/10/managing-secrets-with-chef-vault/.
vault_ssh = ChefVault::Item.load("secrets", "vaultuser-ssh-private")
directory "/home/vaultuser/.ssh" do
owner "vaultuser"
group "vaultuser"
mode 0700
end
file "/home/vaultuser/.ssh/id_rsa" do
content vault_ssh["vaultuser-ssh-private"]
owner "vaultuser"
group "vaultuser"
mode 0600
end
如果你想跳过数据包,你可以将 vault_ssh["vaultuser-ssh-private"] 属性的值设置为键,或者将它设置为你的 role/cookbook.
使用 cookbook_file coderanger 描述的资源可能是更正确的方法。
但是如果你真的想在没有单独文件的情况下这样做,你可以使用带有文件资源的 heredoc。
file '/tmp/somefile' do
content <<-EOF.gsub(/^\s+/, '')
some line here
some other line here
more lines
EOF
end
我正在使用文件资源并将文件内容指定为内容属性。但是内容比较大,我不能直接在文件属性里面声明内容。
file "/var/django/.ssh/id_rsa" do
content "huge content"
owner "django"
group "django"
mode 00600
end
请提出是否有更好的声明内容的方法(当内容很大时)。
将内容放入食谱 files/
下的文件中,并使用 cookbook_file
资源。
尽管您提到不需要单独的文件,但创建 SSH 私钥的正确方法是使用加密数据包。管理加密数据包的最简单方法是通过 Chef Vault。您可以在此处阅读有关如何使用 Chef vault 进行设置的更多信息:http://jtimberman.housepub.org/blog/2013/09/10/managing-secrets-with-chef-vault/.
vault_ssh = ChefVault::Item.load("secrets", "vaultuser-ssh-private")
directory "/home/vaultuser/.ssh" do
owner "vaultuser"
group "vaultuser"
mode 0700
end
file "/home/vaultuser/.ssh/id_rsa" do
content vault_ssh["vaultuser-ssh-private"]
owner "vaultuser"
group "vaultuser"
mode 0600
end
如果你想跳过数据包,你可以将 vault_ssh["vaultuser-ssh-private"] 属性的值设置为键,或者将它设置为你的 role/cookbook.
使用 cookbook_file coderanger 描述的资源可能是更正确的方法。
但是如果你真的想在没有单独文件的情况下这样做,你可以使用带有文件资源的 heredoc。
file '/tmp/somefile' do
content <<-EOF.gsub(/^\s+/, '')
some line here
some other line here
more lines
EOF
end