正在分析要在ansible中映射的标准文本
所以, 我有一份packer制作的清单文件 我想将可用性区域和AMI ID解析为 一张地图,以便我以后用匹配的区域和AMI更新我的地形变量 这是文件:正在分析要在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
{
"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
查找最新版本。您应该使用旁注:比将状态从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"