目录
go 云资源Provider
设计注意事项:
为了让cmdb服务无状态, 因此cmdb服务自己并不做定时任务配置, 只提供同步API
我们的目标: 可以通过云商账号同步不同区域的资产
项目所有源码: CMDB项目源码
效果演示
1 创建secret
2 使用改secret同步腾讯云cvm
- 查看刚才同步的主机
脚本可以吗
如果以解决问题的思路来做, 一个脚本应该就可以了
看下官方SDK: 阿里云官方SDK
建一个表, 把查询出来的数据 写进去
写个API 提供一个接口
下面是伪代码:
func syncHandler() {
// new client
client, err := sdk.NewClientWithAccessKey("REGION_ID", "ACCESS_KEY_ID", "ACCESS_KEY_SECRET")
if err != nil {
// Handle exceptions
panic(err)
}
// query instances
resp, err := client.DescribeInstances(req)
if err != nil {
return nil, err
}
// save hosts
db.save(transfer(resp))
}
func main() {
ht := http.HandlerFunc(syncHandler)
if ht != nil {
http.Handle("/sync", ht)
}
err := http.ListenAndServe(":8090", nil)
if err != nil {
log.Fatal("ListenAndServe: ", err.Error())
}
}
这样写是不是很容易理解?
但是如果后面还有这些需求:
rds, redis, 域名, slb, oss, 账单 都需要同步怎么办
- 需要支持 其他云厂商: 腾讯云/华为云/Vshpere/AWS/...
- 云商有接口有速率限制怎么办
- 需要对接云商的事件, 通过云商创建了资源,需要立马同步
- 资产状态管理, 云商资源释放了,需要标准归档
- 有很多个云账号都需要同步怎么办?
云资产提供商
我们需要提前为4个云商准备API Key
环境变量配置
为了方便调试,我们的key通过环境变量传人, 然后通过vscode的test 进行测试:
但是这个测试用例是读取不掉对应的key的, 怎么办?
vscode提供的项目配置里面可以配置从文件中读取环境变量: .vscode/settings.json
{
"go.testEnvFile": "${workspaceFolder}/etc/cmdb-api.env"
}
这样我们执行go test的时候, vscode读取改配置文件里面的环境变量
下面是本项目测试用例使用到的环境变量设置: etc/cmdb-api.env
TX_CLOUD_SECRET_ID=xxx
TX_CLOUD_SECRET_KEY=xxx
AL_CLOUD_ACCESS_KEY=xx
AL_CLOUD_ACCESS_SECRET=xxx
HW_CLOUD_ACCESS_KEY=xxx
HW_CLOUD_ACCESS_SECRET=xxx
VS_HOST=xxx
VS_USERNAME=xxxx
VS_PASSWORD=xxx
最后测试下 我们可以写个用例测试下
阿里云
我们使用阿里云官方SDK, 来操作我们在云上的资源
标签:err,nil,xxx,ACCESS,CLOUD,Provider,go,资源 From: https://www.cnblogs.com/liwenchao1995/p/16962788.html