我想在开源木偶中运行一个命令来激活Unity3D许可证,但我不想在我的git repo中输入序列号或密码:
exec { 'license-unity':
command => '/opt/Unity/Editor/Unity -batchmode -nographics -serial A1-ABCD-1234-ETC -username my.user@a.b.ca -password myPassword -quit'
subscribe => Package['UnityEditor'],
refreshonly => true,
}
如何从文件中读取序列号和密码(在puppetserver或节点上)并将其替换为命令?
例如,如果我在puppet服务器上有一个名为.secret
的文件,由root和perms 400拥有。如何将内容读入变量以便在puppet清单中使用?
答案 0 :(得分:2)
根据您喜欢的路线,有两种标准方法可以实现这一目标:
使用file
功能。这适用于无主的Puppet或文件托管在Puppet Master上。
# using the module path instead of the absolute path would end up storing your secret in git, which is what you are trying to avoid
$password = file('/absolute/path/to/.secret')
exec { 'license-unity':
command => "/opt/Unity/Editor/Unity -batchmode -nographics -serial A1-ABCD-1234-ETC -username my.user@a.b.ca -password $password -quit"
subscribe => Package['UnityEditor'],
refreshonly => true,
}
Doc:https://puppet.com/docs/puppet/5.3/function.html#file
推论:如果你需要对文件进行某种解析,例如,如果它不仅仅是一个带有密码的文本文件,那么你可以使用现代Ruby API的自定义函数。 https://puppet.com/docs/puppet/5.3/functions_ruby_overview.html。如果是这种情况,请告诉我。
使用自定义事实。这用于在主/客户端设置中将文件存储在客户端上。使用外部事实也最终将秘密存储在git中,这会出现您试图避免的问题。
# module/lib/facter/password.rb
Facter.add(:password) do
setcode do
File.read('/absolute/path/to/.secret')
end
end
# manifest.pp
exec { 'license-unity':
command => "/opt/Unity/Editor/Unity -batchmode -nographics -serial A1-ABCD-1234-ETC -username my.user@a.b.ca -password $password -quit"
subscribe => Package['UnityEditor'],
refreshonly => true,
}
Doc:https://puppet.com/docs/facter/3.9/custom_facts.html#configuring-facts
推论:如果你需要对文件进行某种解析,例如,如果它不仅仅是一个带有密码的文本文件,那么你可以使用本机Ruby类和方法(即{{1} }或JSON.parse
如果文件采用这些格式。)
您正在寻求的方法的显着替代方法包括使用Puppet从秘密管理软件(如Vault)检索,或使用加密/解密算法(如AES-256)将加密文件存储在SCM中然后解密它在目录编译期间。