首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Terraform DigitalOcean液滴标签成群标记

Terraform DigitalOcean液滴标签成群标记
EN

Stack Overflow用户
提问于 2018-04-29 05:29:41
回答 1查看 387关注 0票数 1

假设我们有一些DO标记:

代码语言:javascript
复制
resource "digitalocean_tag" "foo" {
  name = "foo"
}

resource "digitalocean_tag" "bar" {
  name = "bar"
}

我们已经用上面提到的标记配置了群工作节点。

代码语言:javascript
复制
resource "digitalocean_droplet" "swarm_data_worker" {
  name = "swarm-worker-${count.index}"
  tags = [
    "${digitalocean_tag.foo.id}",
    "${digitalocean_tag.bar.id}"
  ]

  // swarm node config stuff

  provisioner "remote-exec" {
    inline = [
      "docker swarm join --token ${data.external.swarm_join_token.result.worker} ${digitalocean_droplet.swarm_manager.ipv4_address_private}:2377"
    ]
  }
}

我想用相应的资源(液滴)标记来标记创建的群集节点。

要标记工作节点,我们需要运行在群集master上。

代码语言:javascript
复制
docker node update --label-add foo --label-add bar worker-node

我们怎样才能用地形来实现这一点呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-02 10:17:09

明白了!也许不是解决这个问题的最好方法,但是直到Terraform完全支持没有发布才能找到更好的东西。

其主要思想是使用预先安装的DO键:

代码语言:javascript
复制
variable "public_key_path" {
  description = "DigitalOcean public key"
  default = "~/.ssh/hcmc_swarm/key.pub"
}

variable "do_key_name" {
  description = "Name of the key on Digital Ocean"
  default = "terraform"
}

resource "digitalocean_ssh_key" "default" {
  name = "${var.do_key_name}"
  public_key = "${file(var.public_key_path)}"

}

那么我们就可以提供经理:

代码语言:javascript
复制
resource "digitalocean_droplet" "swarm_manager" {
  ...
  ssh_keys = ["${digitalocean_ssh_key.default.id}"]

  provisioner "remote-exec" {
    inline = [
      "docker swarm init --advertise-addr ${digitalocean_droplet.swarm_manager.ipv4_address_private}"
    ]
  }
}

毕竟,在worker准备好之后,我们可以通过ssh连接到swarm_manager:

代码语言:javascript
复制
# Docker swarm labels list

variable "swarm_data_worker__lables" {
  type = "list"
  default = ["type=data-worker"]
}

resource "digitalocean_droplet" "swarm_data_worker" {
  ...
  provisioner "remote-exec" {
    inline = [
      "ssh -o StrictHostKeyChecking=no root@${digitalocean_droplet.swarm_manager.ipv4_address_private} docker node update --label-add ${join(" --label-add ", var.swarm_data_worker__lables)} ${self.name}",
    ]
  }
}

如果你知道一个更好的方法来解决这个问题,请不要犹豫,通过新的答案或评论来指出。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50083681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档