providers/ibm/ibm_provider.go (163 lines of code) (raw):

// Copyright 2019 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 ibm import ( "errors" "os" "github.com/GoogleCloudPlatform/terraformer/terraformutils" ) const DefaultRegion = "us-south" const NoRegion = "" type IBMProvider struct { //nolint terraformutils.Provider ResourceGroup string Region string VPC string } func (p *IBMProvider) Init(args []string) error { p.ResourceGroup = args[0] p.Region = args[1] p.VPC = args[2] var err error if p.Region != NoRegion { err = os.Setenv("IC_REGION", p.Region) } else { p.Region = DefaultRegion err = os.Setenv("IC_REGION", DefaultRegion) } if err != nil { return err } return nil } func (p *IBMProvider) GetName() string { return "ibm" } func (p *IBMProvider) GetProviderData(arg ...string) map[string]interface{} { return map[string]interface{}{ "provider": map[string]interface{}{ "ibm": map[string]interface{}{ "region": p.Region, }, }, } } func (IBMProvider) GetResourceConnections() map[string]map[string][]string { return map[string]map[string][]string{ "ibm_is_vpc_route": { "ibm_is_vpc": []string{"vpc", "id"}, }, "ibm_is_vpc_routing_table": { "ibm_is_vpc": []string{"vpc", "id"}, }, "ibm_is_subnet": { "ibm_is_vpc": []string{"vpc", "id"}, "ibm_is_public_gateway": []string{"public_gateway", "id"}, }, "ibm_is_vpc_address_prefix": { "ibm_is_vpc": []string{"vpc", "id"}, }, "ibm_is_lb": { "ibm_is_vpc": []string{"vpc", "id"}, "ibm_is_subnet": []string{"subnets", "id"}, "ibm_is_security_group": []string{"security_groups", "id"}, }, "ibm_is_instance": { "ibm_is_vpc": []string{"vpc", "id"}, "ibm_is_image": []string{"image", "id"}, "ibm_is_subnet": []string{"primary_network_interface.subnet", "id"}, "ibm_is_security_group": []string{"primary_network_interface.security_groups", "id"}, "ibm_is_volume": []string{"volumes", "id"}, }, "ibm_is_security_group": { "ibm_is_vpc": []string{"vpc", "id"}, }, "ibm_is_network_acl": { "ibm_is_vpc": []string{"vpc", "id"}, "ibm_is_subnet": []string{"subnets", "id"}, }, "ibm_is_public_gateway": { "ibm_is_vpc": []string{"vpc", "id"}, "ibm_is_floating_ip": []string{"floating_ip.id", "id"}, }, "ibm_container_vpc_cluster": { "ibm_is_vpc": []string{"vpc_id", "id"}, "ibm_is_subnet": []string{"zones.subnet_id", "id"}, }, "ibm_vpe_gateway": { "ibm_is_vpc": []string{"vpc", "id"}, "ibm_is_security_group": []string{"security_groups", "id"}, "ibm_is_subnet": []string{"ips.subnet", "id"}, }, "ibm_is_vpn_gateway": { "ibm_is_subnet": []string{"subnet", "id"}, }, } } func (p *IBMProvider) GetSupportedService() map[string]terraformutils.ServiceGenerator { return map[string]terraformutils.ServiceGenerator{ "ibm_kp": &KPGenerator{}, "ibm_container_vpc_cluster": &VPCClusterGenerator{}, "ibm_container_cluster": &ContainerClusterGenerator{}, "ibm_cos": &COSGenerator{}, "ibm_database_elasticsearch": &DatabaseElasticSearchGenerator{}, "ibm_database_etcd": &DatabaseETCDGenerator{}, "ibm_database_mongo": &DatabaseMongoGenerator{}, "ibm_database_postgresql": &DatabasePostgresqlGenerator{}, "ibm_database_rabbitmq": &DatabaseRabbitMQGenerator{}, "ibm_database_redis": &DatabaseRedisGenerator{}, "ibm_iam": &IAMGenerator{}, "ibm_is_instance_group": &InstanceGroupGenerator{}, "ibm_is_vpc": &VPCGenerator{}, "ibm_is_vpc_address_prefix": &VPCAddressPrefixGenerator{}, "ibm_is_vpc_route": &VPCRouteGenerator{}, "ibm_is_vpc_routing_table": &VPCRoutingTableGenerator{}, "ibm_is_subnet": &SubnetGenerator{}, "ibm_is_instance": &InstanceGenerator{}, "ibm_is_security_group": &SecurityGroupGenerator{}, "ibm_cis": &CISGenerator{}, "ibm_is_network_acl": &NetworkACLGenerator{}, "ibm_is_public_gateway": &PublicGatewayGenerator{}, "ibm_is_volume": &VolumeGenerator{}, "ibm_is_vpn_gateway": &VPNGatewayGenerator{}, "ibm_is_lb": &LBGenerator{}, "ibm_is_ssh_key": &SSHKeyGenerator{}, "ibm_is_floating_ip": &FloatingIPGenerator{}, "ibm_is_image": &ImageGenerator{}, "ibm_is_ipsec_policy": &IpsecGenerator{}, "ibm_is_ike_policy": &IkeGenerator{}, "ibm_is_flow_log": &FlowLogGenerator{}, "ibm_is_instance_template": &InstanceTemplateGenerator{}, "ibm_function": &CloudFunctionGenerator{}, "ibm_private_dns": &privateDNSTemplateGenerator{}, "ibm_certificate_manager": &CMGenerator{}, "ibm_direct_link": &DLGenerator{}, "ibm_transit_gateway": &TGGenerator{}, "ibm_vpe_gateway": &VPEGenerator{}, "ibm_satellite_control_plane": &SatelliteControlPlaneGenerator{}, "ibm_satellite_data_plane": &SatelliteDataPlaneGenerator{}, "ibm_secrets_manager": &SecretsManagerGenerator{}, "ibm_continuous_delivery": &ContinuousDeliveryGenerator{}, "ibm_cloud_sysdig_monitor": &MonitoringGenerator{}, "ibm_cloud_logdna": &LogAnalysisGenerator{}, "ibm_cloud_atracker": &ActivityTrackerGenerator{}, "ibm_cloud_watson_studio": &WatsonStudioGenerator{}, "ibm_cloud_watson_machine_learning": &WatsonMachineLearningGenerator{}, "ibm_cloudant": &CloudantGenerator{}, "ibm_code_engine": &CodeEngineGenerator{}, } } func (p *IBMProvider) InitService(serviceName string, verbose bool) error { var isSupported bool if _, isSupported = p.GetSupportedService()[serviceName]; !isSupported { return errors.New("IBM: " + 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{}{ "resource_group": p.ResourceGroup, "region": p.Region, "vpc": p.VPC, }) return nil }