11 个版本

0.2.0 2021 年 9 月 18 日
0.1.9 2021 年 9 月 18 日

#9 in #discover

每月下载 22

MIT 许可证

38KB
749

Rust 云提供商节点发现

node-discover 是一个基于 Rust 的库和命令行工具,用于根据环境提供的元信息(如标签)发现云环境中节点的 IP 地址。它是 go-discover 库的 Rust 版本。

提供商的配置以 key=val key=val ... 的元组列表提供。

重复的键将报告为错误,并且通过 provider 键确定提供商。

支持的提供商

以下云提供商在 node-discover/src/providers 包中实现了。

即将推出的提供商

配置示例

# Aliyun (Alibaba) Cloud
provider=aliyun region=... tag_key=consul tag_value=... access_key_id=... access_key_secret=...

# Amazon AWS
provider=aws region=eu-west-1 tag_key=consul tag_value=... access_key_id=... secret_access_key=...

# DigitalOcean
provider=digitalocean region=... tag_name=... api_token=...

# Google Cloud
provider=gce project_name=... zone_pattern=eu-west-* tag_value=consul credentials_file=...

# Linode
provider=linode tag_name=... region=us-east address_type=private_v4 api_token=...

# mDNS
provider=mdns service=consul domain=local

# Microsoft Azure
provider=azure tag_name=consul tag_value=... tenant_id=... client_id=... subscription_id=... secret_access_key=...

# Openstack
provider=os tag_key=consul tag_value=server username=... password=... auth_url=...

# Scaleway
provider=scaleway organization=my-org tag_name=consul-server token=... region=...

# SoftLayer
provider=softlayer datacenter=dal06 tag_value=consul username=... api_key=...

# TencentCloud
provider=tencentcloud region=ap-guangzhou tag_key=consul tag_value=... access_key_id=... access_key_secret=...

# Triton
provider=triton account=testaccount url=https://us-sw-1.api.joyentcloud.com key_id=... tag_key=consul-role tag_value=server

# vSphere
provider=vsphere category_name=consul-role tag_name=consul-server host=... user=... password=... insecure_ssl=[true|false]

# Packet
provider=packet auth_token=token project=uuid url=... address_type=...

# Kubernetes
provider=k8s label_selector="app = consul-server"

命令行工具使用方法

使用以下命令安装命令行工具

cargo install node-discover --all-features

然后运行它

$ node-discover help
$ node-discover help aws
$ node-discover addrs provider=aws region=eu-west-1 ...

库使用

Cargo.toml 中的活动提供程序

[dependencies]
# Choose which providers you need in features list
node-discover = { version = "x.y.z", features = ["digitalocean", "aws"] }

有关完整的 API 文档,请参阅 docs.rscrates.io

测试

可以使用以下命令运行配置测试

$ cargo test

默认情况下,除非为提供程序设置了凭据,否则与提供程序通信的测试不会运行。要运行提供程序测试,您必须设置必要的环境变量。

注意:这将通过凭据提供的账户进行实际 API 调用。

$ AWS_ACCESS_KEY_ID=... AWS_ACCESS_KEY_SECRET=... AWS_REGION=... cargo test

这需要存在与测试中指定的资源相匹配的资源(例如,AWS 的情况下的实例标签)。要创建这些资源,在 tests/tf 目录中有为支持的提供程序提供的 Terraform 配置。

您必须使用上述相同的账户和访问凭证。相同的环境变量应适用于 Terraform 并由其读取。

$ cd tests/tf/aws
$ export AWS_ACCESS_KEY_ID=... AWS_ACCESS_KEY_SECRET=... AWS_REGION=...
$ terraform init
...
$ terraform apply
...

在 Terraform 成功运行后,假设您已将凭据导出到环境中,您应该能够成功运行测试。

$ cargo test

要销毁资源,您需要再次使用 Terraform。

$ cd tests/tf/aws
$ terraform destroy
...

注意:除了凭据和 Terraform 之外,不应有创建和测试这些资源的其他要求。这是为了确保测试可以在所有提供程序的开发和 CI 环境中一致地运行。

依赖项

~8–27MB
~376K SLoC