providers/ionoscloud/ionoscloud_provider.go (147 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 ionoscloud import ( "errors" "os" "github.com/GoogleCloudPlatform/terraformer/providers/ionoscloud/helpers" ionoscloud "github.com/ionos-cloud/sdk-go/v6" "github.com/GoogleCloudPlatform/terraformer/terraformutils" ) type IonosCloudProvider struct { //nolint terraformutils.Provider username string password string token string url string } func (p *IonosCloudProvider) Init(_ []string) error { username := os.Getenv(ionoscloud.IonosUsernameEnvVar) password := os.Getenv(ionoscloud.IonosPasswordEnvVar) token := os.Getenv(ionoscloud.IonosTokenEnvVar) url := os.Getenv(ionoscloud.IonosApiUrlEnvVar) if (username == "" || password == "") && token == "" { return errors.New(helpers.CredentialsError) } if username != "" && password != "" { p.username = username p.password = password } if token != "" { p.token = token } p.url = url return nil } func (p *IonosCloudProvider) GetName() string { return helpers.ProviderName } func (p *IonosCloudProvider) GetProviderData(_ ...string) map[string]interface{} { return map[string]interface{}{} } func (IonosCloudProvider) GetResourceConnections() map[string]map[string][]string { return map[string]map[string][]string{ "server": { "datacenter": []string{helpers.DcID, "id"}, }, "nic": { "datacenter": []string{helpers.DcID, "id"}, "server": []string{helpers.ServerID, "id"}, }, "volume": { "datacenter": []string{helpers.DcID, "id"}, "server": []string{helpers.ServerID, "id"}, }, "firewall": { "datacenter": []string{helpers.DcID, "id"}, "server": []string{helpers.ServerID, "id"}, "nic": []string{helpers.NicID, "id"}, }, "k8s_node_pool": { "datacenter": []string{helpers.DcID, "id"}, "k8s_cluster": []string{helpers.K8sClusterID, "id"}, }, "networkloadbalancer": { "datacenter": []string{helpers.DcID, "id"}, }, "natgateway": { "datacenter": []string{helpers.DcID, "id"}, }, "application_loadbalancer": { "datacenter": []string{helpers.DcID, "id"}, }, "networkloadbalancer_forwardingrule": { "datacenter": []string{helpers.DcID, "id"}, "loadbalancer": []string{"networkloadbalancer_id", "id"}, }, "loadbalancer": { "datacenter": []string{helpers.DcID, "id"}, }, "natgateway_rule": { "datacenter": []string{helpers.DcID, "id"}, "natgateway": []string{"natgateway_id", "id"}, }, "s3_key": { "user": []string{helpers.UserID, "id"}, }, "share": { "group": []string{helpers.GroupID, "id"}, }, } } func (p *IonosCloudProvider) GetSupportedService() map[string]terraformutils.ServiceGenerator { return map[string]terraformutils.ServiceGenerator{ "datacenter": &DatacenterGenerator{}, "lan": &LanGenerator{}, "nic": &NicGenerator{}, "server": &ServerGenerator{}, "volume": &VolumeGenerator{}, "pg_cluster": &DBaaSPgSQLClusterGenerator{}, "pg_user": &DBaaSPgSQLUserGenerator{}, "pg_database": &DBaaSPgSQLDatabaseGenerator{}, "mongo_cluster": &DBaaSMongoClusterGenerator{}, "mongo_user": &DBaaSMongoUserGenerator{}, "backup_unit": &BackupUnitGenerator{}, "ipblock": &IPBlockGenerator{}, "k8s_cluster": &KubernetesClusterGenerator{}, "k8s_node_pool": &KubernetesNodePoolGenerator{}, "target_group": &TargetGroupGenerator{}, "networkloadbalancer": &NetworkLoadBalancerGenerator{}, "natgateway": &NATGatewayGenerator{}, "group": &GroupGenerator{}, "application_loadbalancer": &ApplicationLoadBalancerGenerator{}, "application_loadbalancer_forwardingrule": &ALBForwardingRuleGenerator{}, "firewall": &FirewallGenerator{}, "networkloadbalancer_forwardingrule": &NetworkLoadBalancerForwardingRuleGenerator{}, "loadbalancer": &LoadBalancerGenerator{}, "natgateway_rule": &NATGatewayRuleGenerator{}, "certificate": &CertificateGenerator{}, "private_crossconnect": &PrivateCrossConnectGenerator{}, "s3_key": &S3KeyGenerator{}, "container_registry": &ContainerRegistryGenerator{}, "dataplatform_cluster": &DataPlatformClusterGenerator{}, "dataplatform_node_pool": &DataPlatformNodePoolGenerator{}, "share": &ShareGenerator{}, "user": &UserGenerator{}, "container_registry_token": &ContainerRegistryTokenGenerator{}, "dns_zone": &DNSZoneGenerator{}, "dns_record": &DNSRecordGenerator{}, "logging_pipeline": &LoggingPipelineGenerator{}, "ipfailover": &IPFailoverGenerator{}, } } func (p *IonosCloudProvider) InitService(serviceName string, verbose bool) error { var isSupported bool if _, isSupported = p.GetSupportedService()[serviceName]; !isSupported { return errors.New(helpers.Ionos + ": " + 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{}{ "username": p.username, "password": p.password, "token": p.token, "url": p.url, }) return nil }