gpt4 book ai didi

terraform - 捕获 Terraform 配置器输出?

转载 作者:行者123 更新时间:2023-12-04 09:34:27 25 4
gpt4 key购买 nike

用例

尝试配置一个(Docker Swarm 或 Consul)集群,其中首先在一个节点上初始化集群,这会生成一些 token ,然后需要由加入集群的其他节点使用。关键是节点 1 和 2 不应该尝试加入集群,直到节点 0 生成加入 key 。

例如。在节点 0 上,运行 docker swarm init ...将返回一个加入 token 。然后在节点 1 和 2 上,您需要将该 token 传递给相同的命令,例如 docker swarm init ${JOIN_TOKEN} ${NODE_0_IP_ADDRESS}:{SOME_PORT} .和魔法,你有一个整洁的小集群......

迄今为止的尝试

  • 尝试初始化安装了 AWS 开发工具包的所有节点,并将节点 0 的连接 key 存储在 S3 上,然后在其他节点上获取该连接 key 。这是通过带有“remote-exec”配置器的 null_resource 完成的。由于 Terraform 并行执行事物的方式,存在不规则类型的条件,并且可以预见,节点 1 和节点 2 经常尝试从尚未存在的 S3 中获取 key (例如,节点 0 尚未完成其内容)。
  • 尝试使用“local-exec”配置器通过 SSH 连接到节点 0 并捕获其加入 key 输出。这没有奏效,或者我不擅长这样做。


  • 我已经阅读了文档。和堆栈溢出。和 Github 问题,比如 this really long outstanding one .彻底。如果这已在其他地方解决,链接将不胜感激!

    PS - 这与 this question 直接相关并且是其较小的子集,但想重新询问它以集中问题的范围。

    最佳答案

    当我问自己同样的问题“我可以使用来自供应商的输出来输入另一个资源的变量吗?”时,我去了源寻求答案。

    此时,供应商的结果只是流式传输到 terraform 的标准输出,而永远不会被捕获。

    鉴于您正在两个节点上运行远程供应商,并且您正在尝试从 S3 访问值 - 顺便说一下,我同意这种方法,我也会这样做 - 您可能需要做的是处理脚本中的竞争条件与 sleep命令,或通过 at 安排脚本稍后运行或 cron或类似的调度系统。

    通常,Terraform 希望预先访问所有变量,或者作为提供程序的结果访问所有变量。在 Terraform 中,供应商不一定被视为一流的。我不是核心团队的成员,所以我不能说为什么,但我的猜测是,除了成功或失败之外,忽略配置器结果会降低复杂性,因为配置器只是脚本,因此它们的结果通常是非结构化的。

    如果您需要更多增强的功能来设置您的实例,我建议使用专用工具,例如 Ansible、Chef、Puppet 等。Terraform 的重点实际上是基础设施,而不是软件组件。

    关于terraform - 捕获 Terraform 配置器输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44509997/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com