providers/tencentcloud/tencentcloud_provider.go (190 lines of code) (raw):

// Copyright 2022 The Terraformer Authors. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package tencentcloud import ( "errors" "os" "github.com/GoogleCloudPlatform/terraformer/terraformutils" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile" "github.com/zclconf/go-cty/cty" ) type TencentCloudProvider struct { //nolint terraformutils.Provider region string credential common.Credential } func (p *TencentCloudProvider) getCredential() error { secretID := os.Getenv("TENCENTCLOUD_SECRET_ID") if secretID == "" { return errors.New("TENCENTCLOUD_SECRET_ID must be set") } secretKey := os.Getenv("TENCENTCLOUD_SECRET_KEY") if secretKey == "" { return errors.New("TENCENTCLOUD_SECRET_KEY must be set") } token := os.Getenv("TENCENTCLOUD_SECURITY_TOKEN") p.credential = common.Credential{ SecretId: secretID, SecretKey: secretKey, Token: token, } return nil } func (p *TencentCloudProvider) GetConfig() cty.Value { return cty.ObjectVal(map[string]cty.Value{ "region": cty.StringVal(p.region), }) } func (p *TencentCloudProvider) GetName() string { return "tencentcloud" } func (p *TencentCloudProvider) GetSource() string { return "tencentcloudstack/" + p.GetName() } func (p *TencentCloudProvider) Init(args []string) error { err := p.getCredential() if err != nil { return err } p.region = args[0] return nil } func (p *TencentCloudProvider) InitService(serviceName string, verbose bool) error { var isSupported bool if _, isSupported = p.GetSupportedService()[serviceName]; !isSupported { return errors.New("tencentcloud: " + serviceName + " not supported service") } p.Service = p.GetSupportedService()[serviceName] p.Service.SetName(serviceName) p.Service.SetVerbose(verbose) p.Service.SetProviderName(p.GetName()) p.Service.SetArgs(map[string]interface{}{ "region": p.region, "credential": p.credential, }) return nil } func (p *TencentCloudProvider) GetSupportedService() map[string]terraformutils.ServiceGenerator { return map[string]terraformutils.ServiceGenerator{ "cvm": &CvmGenerator{}, "vpc": &VpcGenerator{}, "cdn": &CdnGenerator{}, "as": &AsGenerator{}, "clb": &ClbGenerator{}, "cos": &CosGenerator{}, "key_pair": &KeyPairGenerator{}, "security_group": &SecurityGroupGenerator{}, "cbs": &CbsGenerator{}, "cfs": &CfsGenerator{}, "elasticsearch": &EsGenerator{}, "gaap": &GaapGenerator{}, "mongodb": &MongodbGenerator{}, "mysql": &MysqlGenerator{}, "redis": &RedisGenerator{}, "ssl": &SslGenerator{}, "scf": &ScfGenerator{}, "tcaplus": &TcaplusGenerator{}, "vpn": &VpnGenerator{}, "eip": &EipGenerator{}, "subnet": &SubnetGenerator{}, "route_table": &RouteTableGenerator{}, "nat_gateway": &NatGatewayGenerator{}, "acl": &ACLGenerator{}, "pts": &PtsGenerator{}, "tat": &TatGenerator{}, "dnspod": &DnspodGenerator{}, "ses": &SesGenerator{}, } } func (p *TencentCloudProvider) GetResourceConnections() map[string]map[string][]string { return map[string]map[string][]string{ "cvm": { "vpc": []string{"vpc_id", "id"}, "subnet": []string{"subnet_id", "id"}, "security_group": []string{"security_groups", "id"}, "key_pair": []string{"key_name", "id"}, }, "as": { "vpc": []string{"vpc_id", "id"}, "subnet": []string{"subnet_ids", "id"}, "clb": []string{"forward_balancer_ids", "id"}, }, "clb": { "vpc": []string{"vpc_id", "id", "target_region_info_vpc_id", "id"}, "subnet": []string{"subnet_id", "id"}, "security_group": []string{"security_groups", "id"}, "cvm": []string{"targets.instance_id", "id"}, }, "cfs": { "vpc": []string{"vpc_id", "id"}, "subnet": []string{"subnet_id", "id"}, }, "elasticsearch": { "vpc": []string{"vpc_id", "id"}, "subnet": []string{"subnet_id", "id"}, }, "mongodb": { "vpc": []string{"vpc_id", "id"}, "subnet": []string{"subnet_id", "id"}, }, "mysql": { "vpc": []string{"vpc_id", "id"}, "subnet": []string{"subnet_id", "id"}, "security_group": []string{"security_groups", "id"}, }, "redis": { "vpc": []string{"vpc_id", "id"}, "subnet": []string{"subnet_id", "id"}, }, "scf": { "vpc": []string{"vpc_id", "id"}, "subnet": []string{"subnet_id", "id"}, "cos": []string{"cos_bucket_name", "id"}, }, "tcaplus": { "vpc": []string{"vpc_id", "id"}, "subnet": []string{"subnet_id", "id"}, }, "vpn": { "vpc": []string{"vpc_id", "id"}, }, "subnet": { "vpc": []string{"vpc_id", "id"}, "route_table": []string{"route_table_id", "id"}, }, "route_table": { "vpc": []string{"vpc_id", "id"}, "route_table": []string{"route_table_id", "id"}, "nat_gateway": []string{"next_hub", "id"}, "vpn": []string{"next_hub", "id"}, }, "nat_gateway": { "vpc": []string{"vpc_id", "id"}, }, "acl": { "vpc": []string{"vpc_id", "id"}, "subnet": []string{"subnet_id", "id"}, }, "eip": { "cvm": []string{"instance_id", "id"}, }, "cbs": { "cvm": []string{"instance_id", "id"}, }, } } func (p *TencentCloudProvider) GetProviderData(arg ...string) map[string]interface{} { return map[string]interface{}{ "provider": map[string]interface{}{ p.GetName(): map[string]interface{}{ "region": p.region, }, }, } } func NewTencentCloudClientProfile() *profile.ClientProfile { cpf := profile.NewClientProfile() // all request use method POST cpf.HttpProfile.ReqMethod = "POST" // request timeout cpf.HttpProfile.ReqTimeout = 300 // default language cpf.Language = "en-US" return cpf }