consul - 将 consul 中的 2 KV 文件夹与 http 端点相结合
问题描述
我在 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-) 我知道这是不合法的:| . 你觉得这种方式好不好?
解决方案
您可以通过使用envconsul或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 下使用teller run
. 此命令语法的详细信息记录在https://github.com/SpectralOps/teller#running-running-subprocesses中。
推荐阅读
- c# - C#无法从导入的库中反序列化类的对象
- powershell - 从自定义属性中列出的每个 CN 获取电子邮件地址
- html - HTML/VBA 在特定时间自动发送电子邮件
- python - 分层组 Django 查询
- r - 使用 ifelse 有条件地在 tidyr r 中使用单独
- google-cloud-platform - GSuite OAuth 客户端 ID
- mysql - 像这样的响应“错误代码:2068。由于访问限制,LOAD DATA LOCAL INFILE 文件请求被拒绝。” 当我从 CSV 加载数据时
- cesium - QuadTreeProvider 和 WFS 数据
- macos - macOS - 如何在 /Volumes 中找到“僵尸”文件夹(不是挂载)
- reactjs - 通过从 useSelector Hook 返回的 Props 传递字符串值