正在分析要在ansible中映射的标准文本

正在分析要在ansible中映射的标准文本,ansible,terraform,packer,Ansible,Terraform,Packer,所以, 我有一份packer制作的清单文件 我想将可用性区域和AMI ID解析为 一张地图,以便我以后用匹配的区域和AMI更新我的地形变量 这是文件: { "builds": [ { "name": "amazon-ebs", "builder_type": "amazon-ebs", "build_time": 1545650590, "files": null, "artifact_id": "us-east-1:ami

所以, 我有一份packer制作的清单文件

我想将可用性区域和AMI ID解析为 一张地图,以便我以后用匹配的区域和AMI更新我的地形变量

这是文件:

{
  "builds": [
    {
      "name": "amazon-ebs",
      "builder_type": "amazon-ebs",
      "build_time": 1545650590,
      "files": null,
      "artifact_id": "us-east-1:ami-0caa33152d1160000",
      "packer_run_uuid": "ba1f3c4c-9da1-60ed-e45e-1dc374bc148b"
    }
  ],
  "last_run_uuid": "ba1f3c4c-9da1-60ed-e45e-1dc374bc148b"
}
grep与regex的相关线路,并将其清理干净是小菜一碟:

grep-E“ami-\w”manifest.json|tr-d“[:space:],\”“\tr:”“sed的/artifact\u id,//g

(输出:us-east-1,ami-0CAA3352D1160000


但是,我找不到如何将输出注册到映射并稍后使用循环和条件访问它。

如果变量在packer-manifest.txt文件中,您可能需要使用json\u查询

结果是:


如果变量在packer-manifest.txt文件中,您可能希望使用json\u查询

结果是:


您应该使用解析json文件并将其重写为json文件,您可以使用
-var file
参数将其传递给terraform


旁注:将状态从打包机传递到Terraform的更好策略是将状态保存在AWS中。通过在打包机构建的结果AMI上设置一些标记,然后使用
数据.AWS_AMI_id
查找最新版本。

您应该使用解析json文件,并将其重写为可以传递到Terraform的json文件ode>-var文件参数


旁注:比将状态从Packer传递到Terraform更好的策略是将状态保存在AWS中。通过在Packer构建的结果AMI上设置一些标记,然后使用
数据。AWS\u AMI\u id
查找最新版本。

我不会这样做。此时我会让Packer一个人呆着,您可以轻松地使用其中的数据资源Terraform要查找ami ID,请参见以下示例:


我不会这样做。此时,我将不使用packer,您可以轻松使用Terraform中的数据资源来查找ami ID,请参见以下示例:


避免使用bash解析文本非常好,现在要感谢另一项任务,将其实际转换为key:value mapOk…我对它做了一些更改,找到了解决方案
msg:“{ami_id[0].split(':')[1]}”“
避免使用bash解析文本非常好,现在非常感谢另一项任务,将其实际转换为键:value mapOk。。。我对它做了一些更改,找到了我的解决方案
msg:“{ami_id[0].split(':')[1]}”
在后端保存状态将是v2.0;-)使用AWS数据源不需要将状态保存在任何地方,它们直接查询AWS API。此外,这个答案还将通过一个例子得到改进,即如何在Packer中使用
aws_ami
数据源以及标记/命名方案在Packer和Terraform之间进行切换(这是一种比另一个答案给出的更好的方法)。我要指出的是,状态已经在aws中,您只需要使其有用。当然有一个国家。AMI和标记是状态。在后端保存状态将是v2.0;-)使用AWS数据源不需要将状态保存在任何地方,它们直接查询AWS API。此外,这个答案还将通过一个例子得到改进,即如何在Packer中使用
aws_ami
数据源以及标记/命名方案在Packer和Terraform之间进行切换(这是一种比另一个答案给出的更好的方法)。我要指出的是,状态已经在aws中,您只需要使其有用。当然有一个国家。AMI的和标记是状态。
vars_files:
  - packer-manifest.txt
tasks:
  - set_fact:
      ami_id: "{{ builds | json_query('[].artifact_id') }}"
  - debug:
      msg: "{{ ami_id[0].split(':')[1] }}"
   "msg": "ami-0caa33152d1160000"