job "vault-cluster-nomad" {
  datacenters = ["dc1"]
  type        = "service"

  group "vault-ch4" {
    count = 1

    constraint {
      attribute = "${node.unique.name}"
      operator  = "="
      value     = "ch4"
    }

    network {
      port "http" {
        static = 8200
        to     = 8200
      }
    }

    task "vault" {
      driver = "exec"

      consul {
        namespace = "default"
      }

      resources {
        cpu    = 500
        memory = 1024
      }

      env {
        VAULT_ADDR = "http://127.0.0.1:8200"
      }

      # 从 consul 读取配置
      template {
        data = <<EOF
{{ key "vault/config" }}
EOF
        destination = "local/vault.hcl"
        perms       = "644"
        wait {
          min = "2s"
          max = "10s"
        }
      }

      config {
        command = "vault"
        args = [
          "server",
          "-config=/local/vault.hcl"
        ]
      }

      restart {
        attempts = 2
        interval = "30m"
        delay    = "15s"
        mode     = "fail"
      }
    }

  update {
    max_parallel     = 3
    health_check     = "checks"
    min_healthy_time = "10s"
    healthy_deadline = "5m"
    progress_deadline = "10m"
    auto_revert      = true
    canary           = 0
  }

    migrate {
      max_parallel     = 1
      health_check     = "checks"
      min_healthy_time = "10s"
      healthy_deadline = "5m"
    }
  }

  group "vault-ash3c" {
    count = 1

    constraint {
      attribute = "${node.unique.name}"
      operator  = "="
      value     = "ash3c"
    }

    network {
      port "http" {
        static = 8200
        to     = 8200
      }
    }

    task "vault" {
      driver = "exec"

      consul {
        namespace = "default"
      }

      resources {
        cpu    = 500
        memory = 1024
      }

      env {
        VAULT_ADDR = "http://127.0.0.1:8200"
      }

      # 从 consul 读取配置
      template {
        data = <<EOF
{{ key "vault/config" }}
EOF
        destination = "local/vault.hcl"
        perms       = "644"
        wait {
          min = "2s"
          max = "10s"
        }
      }

      config {
        command = "vault"
        args = [
          "server",
          "-config=/local/vault.hcl"
        ]
      }

      restart {
        attempts = 2
        interval = "30m"
        delay    = "15s"
        mode     = "fail"
      }
    }

  update {
    max_parallel     = 3
    health_check     = "checks"
    min_healthy_time = "10s"
    healthy_deadline = "5m"
    progress_deadline = "10m"
    auto_revert      = true
    canary           = 0
  }

    migrate {
      max_parallel     = 1
      health_check     = "checks"
      min_healthy_time = "10s"
      healthy_deadline = "5m"
    }
  }

  group "vault-warden" {
    count = 1

    constraint {
      attribute = "${node.unique.name}"
      operator  = "="
      value     = "warden"
    }

    network {
      port "http" {
        static = 8200
        to     = 8200
      }
    }

    task "vault" {
      driver = "exec"

      consul {
        namespace = "default"
      }

      resources {
        cpu    = 500
        memory = 1024
      }

      env {
        VAULT_ADDR = "http://127.0.0.1:8200"
      }

      # 从 consul 读取配置
      template {
        data = <<EOF
{{ key "vault/config" }}
EOF
        destination = "local/vault.hcl"
        perms       = "644"
        wait {
          min = "2s"
          max = "10s"
        }
      }

      config {
        command = "vault"
        args = [
          "server",
          "-config=/local/vault.hcl"
        ]
      }

      restart {
        attempts = 2
        interval = "30m"
        delay    = "15s"
        mode     = "fail"
      }
    }

  update {
    max_parallel     = 3
    health_check     = "checks"
    min_healthy_time = "10s"
    healthy_deadline = "5m"
    progress_deadline = "10m"
    auto_revert      = true
    canary           = 0
  }

    migrate {
      max_parallel     = 1
      health_check     = "checks"
      min_healthy_time = "10s"
      healthy_deadline = "5m"
    }
  }
}
