providers/alicloud/alicloud_provider.go (97 lines of code) (raw):

// Copyright 2018 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 alicloud import ( "errors" "fmt" "github.com/GoogleCloudPlatform/terraformer/terraformutils" "github.com/zclconf/go-cty/cty" ) // AliCloudProvider Provider for alicloud type AliCloudProvider struct { //nolint terraformutils.Provider region string profile string } const GlobalRegion = "alicloud-global" // GetConfig Converts json config to go-cty func (p *AliCloudProvider) GetConfig() cty.Value { profile := p.profile config, err := LoadConfigFromProfile(profile) if err != nil { fmt.Println("ERROR:", err) } region := p.region if region == "" { region = config.RegionID } var val cty.Value if config.RAMRoleArn != "" { val = cty.ObjectVal(map[string]cty.Value{ "region": cty.StringVal(region), "profile": cty.StringVal(profile), "assume_role": cty.SetVal([]cty.Value{ cty.ObjectVal(map[string]cty.Value{ "role_arn": cty.StringVal(config.RAMRoleArn), }), }), }) } else { val = cty.ObjectVal(map[string]cty.Value{ "region": cty.StringVal(region), "profile": cty.StringVal(profile), }) } return val } // GetResourceConnections Gets resource connections for alicloud func (p AliCloudProvider) GetResourceConnections() map[string]map[string][]string { return map[string]map[string][]string{ // TODO: Not implemented } } // GetProviderData Used for generated HCL2 for the provider func (p AliCloudProvider) GetProviderData(arg ...string) map[string]interface{} { alicloudConfig := map[string]interface{}{} if p.region == GlobalRegion { alicloudConfig["region"] = "cn-hangzhou" } else { alicloudConfig["region"] = p.region } return map[string]interface{}{ "provider": map[string]interface{}{ "alicloud": alicloudConfig, }, } } // Init Loads up command line arguments in the provider func (p *AliCloudProvider) Init(args []string) error { p.region = args[0] p.profile = args[1] return nil } // GetName Gets name of provider func (p *AliCloudProvider) GetName() string { return "alicloud" } // InitService Initializes the AliCloud service func (p *AliCloudProvider) InitService(serviceName string, verbose bool) error { var isSupported bool if _, isSupported = p.GetSupportedService()[serviceName]; !isSupported { return errors.New("alicloud: " + 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, "profile": p.profile, }) return nil } // GetSupportedService Gets a list of all supported services func (p *AliCloudProvider) GetSupportedService() map[string]terraformutils.ServiceGenerator { return map[string]terraformutils.ServiceGenerator{ "dns": &DNSGenerator{}, "ecs": &EcsGenerator{}, "keypair": &KeyPairGenerator{}, "nat": &NatGatewayGenerator{}, "pvtz": &PvtzGenerator{}, "ram": &RAMGenerator{}, "rds": &RdsGenerator{}, "sg": &SgGenerator{}, "slb": &SlbGenerator{}, "vpc": &VpcGenerator{}, "vswitch": &VSwitchGenerator{}, } }