bash – 如何自动将打包机输出命令链接到变形变量?

我正在使用具有可配置供应器的打包机来构建一个ami,并且用这个ami作为源代码来设置基础设施,这与本文有点类似: http://www.paulstack.co.uk/blog/2016/01/02/building-an-elasticsearch-cluster-in-aws-with-packer-and-terraform

当命令打包程序build.json成功完成时,我将获得以下格式的输出ami id:

eu-central-1: ami-12345678

在我的变形变量variables.tf中,我需要指定源代码,区域等.这里的问题是我不想手动或多次指定它们.对于地区(我事先知道),这很容易,因为我可以在两种情况下使用环境变量,但是输出ami呢?有没有内置的方式链接这些产品或一些不那么黑客的做法呢?

编辑:任何可能感兴趣的人的黑客方法.在这解决方案我在gres区域& ami来自打包输出,并在Perl中使用正则表达式将结果写入terraform.tfvars文件中:

vars=$(pwd)"/terraform.tfvars"
packer build pack.json | \
    tee /dev/tty | \
    grep -E -o '\w{2}-\w+-\w{1}: ami-\w+' | \
    perl -ne '@parts = split /[:,\s]+/,$_; print "aws_amis." . $parts[0] ." = \"" . $parts[1] . "\"\n"' > ${vars}
Hashicorp推荐的“官方”方式是将其产品Atlas作为两者之间的“中间人”.您可以使用 the Atlas post-processor in Packer记录工件(在您的情况下为AMI ids),然后使用 the atlas_artifact resource in Terraform读取ids再次退出以用于terraform.

在这种情况下,您将从资源获取ids,而不是使用变量.

除了阿特拉斯,其他的选择是相当有限的,在某些情况下是黑客.

如果您想在没有任何外部服务的情况下执行此操作,那么您可以尝试使用local shell post-processor作为在您的工件上运行本地命令的方式,也可以使用the machine-readable output提取AMI ID并将其写入terraform的变量文件.

一个选择是编写自己的后处理器插件,与您已经使用的某些软件进行交互,作为Atlas的替代方案.例如,我的一些同事写了a post-processor to record artifacts as metadata in Buildkite,然后我们随后使用Buildkite API进行检索.这需要在Go中编写自定义代码.

在撰写terraform 0.7版本的时候,它仍然在开发中,但是它计划包括一个功能,可以直接查询EC2 API的AMI,这将会(如果确实为0.7),还可以进一步选择标记AMI与Packer,然后直接从EC2使用这些标签.这使用EC2本身作为“中间人”,这可能不那么尴尬,因为它已经涉及AMI的存储.

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...