# Consul KV 命名规范

本文档描述了在Consul KV中存储配置信息的统一命名规范，以确保所有配置管理的一致性和可维护性。

## 命名规范

### 基本格式

```
config/{environment}/{provider}/{region_or_service}/{key}
```

### 各部分说明

- **config**: 固定前缀，表示这是一个配置项
- **environment**: 环境名称，如 `dev`、`staging`、`prod` 等
- **provider**: 云服务提供商，如 `oracle`、`digitalocean`、`aws`、`gcp` 等
- **region_or_service**: 区域或服务名称，如 `kr`、`us`、`sgp` 等
- **key**: 具体的配置键名，如 `token`、`tenancy_ocid`、`user_ocid` 等

### 示例

#### Oracle Cloud 配置

```
config/dev/oracle/kr/tenancy_ocid
config/dev/oracle/kr/user_ocid
config/dev/oracle/kr/fingerprint
config/dev/oracle/kr/private_key
config/dev/oracle/kr/region

config/dev/oracle/us/tenancy_ocid
config/dev/oracle/us/user_ocid
config/dev/oracle/us/fingerprint
config/dev/oracle/us/private_key
config/dev/oracle/us/region
```

#### DigitalOcean 配置

```
config/dev/digitalocean/token
```

#### 其他云服务商配置（示例）

```
config/dev/aws/access_key
config/dev/aws/secret_key
config/dev/aws/region

config/dev/gcp/project_id
config/dev/gcp/credentials_file
config/dev/gcp/region
```

## 使用说明

### 添加新配置

当需要为新的云服务商或环境添加配置时，请遵循上述命名规范：

1. 确定环境名称（如 `dev`）
2. 确定云服务提供商（如 `aws`）
3. 确定区域或服务（如 `ap-northeast-2`）
4. 确定具体的配置键名（如 `access_key`）

例如：
```
consul kv put config/dev/aws/ap-northeast-2/access_key your_access_key
```

### 在Terraform中使用

在Terraform配置中，使用 `consul_keys` 数据源获取配置：

```hcl
data "consul_keys" "aws_config" {
  key {
    name = "access_key"
    path = "config/dev/aws/ap-northeast-2/access_key"
  }
  key {
    name = "secret_key"
    path = "config/dev/aws/ap-northeast-2/secret_key"
  }
}

provider "aws" {
  access_key = data.consul_keys.aws_config.var.access_key
  secret_key = data.consul_keys.aws_config.var.secret_key
  region     = "ap-northeast-2"
}
```

### 与Vault集成

当需要与Vault集成时，可以使用相同的命名规范，确保Consul和Vault中的配置路径保持一致。

## 维护说明

- 所有Agent在添加新的Consul KV键时，必须遵循此命名规范
- 定期检查Consul KV中的键，确保符合规范
- 如需修改命名规范，请更新此文档并通知所有相关Agent

## 常见问题

### Q: 为什么不使用服务名称作为前缀（如 `oracle/config/dev/...`）？

A: 使用 `config` 作为统一前缀可以更容易地区分配置项和其他类型的键值对，便于管理和筛选。

### Q: 如何处理敏感信息？

A: 敏感信息（如API密钥、私钥等）应存储在Vault中，Consul主要用于非敏感配置。如果必须在Consul中存储敏感信息，请确保Consul集群的安全性。

### Q: 如何处理多环境配置？

A: 通过修改 `environment` 部分来区分不同环境，如 `config/dev/...`、`config/staging/...`、`config/prod/...`。

## 更新历史

- 2024-01-01: 初始版本，定义了基本的命名规范
- 2024-01-02: 统一DigitalOcean配置路径，从 `consul/digitalocean/token` 改为 `config/dev/digitalocean/token`