0

我在 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-) 我用领事模板读取值。我可以用领事模板创建那个文件夹吗?

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

4

1 回答 1

1

您可以通过使用envconsulTeller来实现这一点。

引用 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 下使用teller run. 此命令语法的详细信息记录在https://github.com/SpectralOps/teller#running-running-subprocesses中。

于 2021-06-08T13:57:27.710 回答