将领事中的 2 KV 文件夹与 http 端点结合起来

Combine 2 KV folder in consul with http endpoint

我在 consul 上为我的测试 jenkins 管道创建了 4 kv 文件夹(我的意思是目录。每对包含 10 个键值对)。这样我就可以为我的应用程序创建 .env 文件。 它们是 public_stable、private_stable、public_temp、private_temp。我想将 public_stable 和 public_temp 合并到一个新的 KV 文件夹中,新名称如 public_my_testing_env_name。私有值也是如此。我想合并,因为我的同事将更新 运行 环境的值。这样他们就可以使用 testing_env_name.

轻松地在数千个 .env 文件中找到他们的 .env 文件

1-) 我可以在不读取所有值的情况下使用 consul http 端点执行此操作吗?我不想以编程方式进行。

2-) 我用 consul-template 读取值。我可以用 consul-template 创建那个文件夹吗?

3-) 我知道这是不合法的 :| .你觉得这样好吗?

您可以使用 envconsul or Teller

引用 envconsul 的文档,“Envconsul 提供了一种使用从 HashiCorp Consul 和 Vault 填充的环境变量启动子进程的便捷方式。”

另一方面,除了 Consul 之外,Teller 还支持从其他提供商读取数据。

这里有两个使用 envconsul 和 Teller 从 public_stable/public_temp/ 读取密钥的示例,并将这些密钥作为环境变量提供给启动的子进程。

首先,在每个路径下创建一个测试密钥。

$ consul kv put public_stable/STABLE_URL https://example.com/stable_website
Success! Data written to: public_stable/STABLE_URL

$ consul kv put public_temp/TEMP_RELOAD_INTERVAL 600
Success! Data written to: public_temp/TEMP_RELOAD_INTERVAL

envconsul

下载 envconsul。将 CONSUL_HTTP_ADDR 环境变量设置为您的 Consul 客户端的地址 API。如果在环境中启用了 ACL,您还需要配置 CONSUL_HTTP_TOKEN 环境变量。

export CONSUL_HTTP_ADDR=http://localhost:8500
export CONSUL_HTTP_TOKEN=<token>

运行 以下命令指示 envconsul 查询 public_temp 和 public_stable 下的键,并将它们作为环境变量提供。 envconsul 将 运行 env 命令,以便我们可以看到提供给子进程的变量集。

$ envconsul -pristine -prefix public_temp -prefix public_stable -once env
TEMP_RELOAD_INTERVAL=600
STABLE_URL=https://example.com/stable_website

柜员

安装 Teller 并在项目目录中创建 .teller.yml,内容如下。

.teller.yml

---
opts:
  environment: public

# Providers
providers:
  # Configure via environment:
  # CONSUL_HTTP_ADDR
  # CONSUL_HTTP_TOKEN, if ACLs are enabled
  consul:
    env_sync:
      path: "{{environment}}_stable/"
  consul2:
    kind: consul
    env_sync:
      path: "{{environment}}_temp/"

使用teller env.env文件格式输出检索到的键值对,以验证数据是否正确合并到一组环境变量中。

$ teller env
TEMP_RELOAD_INTERVAL=600
STABLE_URL=https://example.com/stable_website

然后您可以使用 teller run 运行 您在 Teller 下的应用程序。 https://github.com/SpectralOps/teller#running-running-subprocesses.

中记录了此命令语法的详细信息