加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 01:25:25 所属栏目:安全 来源:网络整理
导读:我正在使用具有可配置供应器的打包机来构建一个ami,并且用这个ami作为源代码来设置基础设施,这与本文有点类似: http://www.paulstack.co.uk/blog/2016/01/02/building-an-elasticsearch-cluster-in-aws-with-packer-and-terraform 当命令打包程序build.json
我正在使用具有可配置供应器的打包机来构建一个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的存储.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读