【发布时间】:2017-11-14 13:16:33
【问题描述】:
用例
尝试配置一个(Docker Swarm 或 Consul)集群,其中初始化集群首先发生在一个节点上,这会生成一些令牌,然后需要由加入集群的其他节点使用。关键是节点 1 和 2 在节点 0 生成加入密钥之前不应尝试加入集群。
例如。在节点 0 上,运行 docker swarm init ... 将返回一个加入令牌。然后在节点 1 和 2 上,您需要将该令牌传递给同一命令,例如 docker swarm init ${JOIN_TOKEN} ${NODE_0_IP_ADDRESS}:{SOME_PORT}。还有魔法,你有一个整洁的小集群......
目前的尝试
尝试初始化安装了 AWS 开发工具包的所有节点,并将节点 0 的连接密钥存储在 S3 上,然后在其他节点上获取该连接密钥。这是通过带有“remote-exec”供应商的 null_resource 完成的。由于 Terraform 并行执行事物的方式,存在一些竞争类型的条件,并且可以预见,节点 1 和 2 经常尝试从 S3 获取尚未存在的密钥(例如,节点 0 尚未完成其工作)。
尝试使用“local-exec”配置程序通过 SSH 连接到节点 0 并捕获其连接密钥输出。这效果不好,或者我做的很烂。
我已阅读文档。和堆栈溢出。还有 Github 问题,例如 this really long outstanding one。彻底。如果这已在其他地方得到解决,链接表示赞赏!
PS - 这与this question 直接相关并且是其较小的子集,但想重新询问它以集中问题的范围。
【问题讨论】:
标签: terraform