Chef infra 按照主厨的菜谱来做Ansible,有什么可能的等价物呢?

Chef infra 按照主厨的菜谱来做Ansible,有什么可能的等价物呢?,chef-infra,ansible,ansible-playbook,Chef Infra,Ansible,Ansible Playbook,这是我想转换成Ansible的厨师食谱。可能的等价物是什么? 我有路径和url remote_file 'abc_artifact' do path abc_artifact_path source node[:base][:agent][:abc_url] % { :version => node[:base][:agent][:agent_version], :env => environment } checksum node[:base][:a

这是我想转换成Ansible的厨师食谱。可能的等价物是什么? 我有路径和url

remote_file 'abc_artifact' do
  path abc_artifact_path
  source node[:base][:agent][:abc_url] % {
    :version => node[:base][:agent][:agent_version],
    :env => environment
  }
  checksum node[:base][:agent][:agent_sha256]
  notifies :run, 'execute[unzip_abc_artifact]', :immediately
  action :create_if_missing
end
这是第二部分,

其中“node.run_state[:abc]| |=Mash.new”


快速简便的解决方案:

vars:
来源:“https://mydomain/myapp/1.0.0.zip"
abc_工件:/path/to/my/file.zip
代理人:17054df9a6b887dbba25。。。
任务:
-名称:下载abc工件
获取url:
url:“{source}}”
目标:{{abc_工件}}”
sha256sum:“{{agent_sha256}}”
通知:解压缩abc工件
处理程序:
-名称:解压abc工件
shell:“解压-f{{abc_artifact}}”#或其他任何东西
那很容易。好的,我将尝试解释一些需要考虑的事情:

字符串格式化
源节点[:base][:agent][:abc\u url]%{
:version=>node[:base][:agent][:agent\u version],
:env=>环境
}
你可以用这个。有关更多详细信息,请参阅。但它可能是如下所示:

vars:
来源:“https://%(env.mydomain/myapp/%(version)s.zip”
agent_版本:1.0.0
环境:发展
任务:
-名称:下载abc工件
获取url:
url:“{source}格式(**{'version':代理版本,'env':env}}”
通知
通知:运行,'execute[unzip_abc_artifact],:立即
通常,您应该使用处理程序:

任务:
-名称:下载abc工件
获取url:#[…]
通知:解压缩abc工件
处理程序:
-名称:解压abc工件
shell:“解压-f{{abc_artifact}”
但如果您需要立即使用,也可以使用:

任务:
-名称:下载abc工件
获取url:#[…]
注册:abc_工件_下载
-名称:解压abc工件
shell:“解压-f{{abc_artifact}”
时间:abc|U工件|U下载|更改
我在这里看到的唯一问题是,如果zip文件存在但尚未解压缩,解压任务将不会运行。这个问题也存在于您的chef示例中。也许您可以检查是否提取了特定的文件

如果缺少,则创建
操作:如果缺少,则创建
如果出于任何原因需要保持这种行为,请使用和:

任务:
-名称:检查abc_工件_状态是否存在
stat:path={{abc_工件}}
注册:abc_工件_统计
-名称:下载abc工件
获取url:#[…]
何时:不存在abc_工件_stat.stat

我已经添加了厨师食谱的第二部分,但我不理解其中的合并部分。我如何在Ansible中转换它们呢?这段代码合并了散列/字典。run_状态就像Chef中的一个全局变量。该代码非常特定于厨师。无法按原样翻译为Ansible。
abc_属性
似乎是一个带有一些配置值的字典,其中包括一个用户名键。然后这些值用于生成某种URL。如何使用Ansible从这些特定配置值生成URL?我不知道,您需要阅读
im\u abc\u URL
函数实现。
case node[:platform_family]
  when "debian"
    abc_attributes = node[:abc][:default].merge(node[:abcone][:agent]).merge(:username=>node.run_state[:abc][:abc_username])
    abc_url = im_abc_url(Mash.new(abc_attributes.to_hash))