-
Notifications
You must be signed in to change notification settings - Fork 55
/
provider.go
executable file
·112 lines (93 loc) · 4.71 KB
/
provider.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
package spotinst
import (
"context"
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/spotinst/terraform-provider-spotinst/spotinst/commons"
)
// Provider returns a terraform.ResourceProvider.
func Provider() *schema.Provider {
p := &schema.Provider{
Schema: map[string]*schema.Schema{
string(commons.ProviderToken): {
Type: schema.TypeString,
Optional: true,
//DefaultFunc: schema.EnvDefaultFunc(credentials.EnvCredentialsVarToken, ""),
Description: "Spotinst Personal API Access Token",
},
string(commons.ProviderAccount): {
Type: schema.TypeString,
Optional: true,
//DefaultFunc: schema.EnvDefaultFunc(credentials.EnvCredentialsVarAccount, ""),
Description: "Spotinst Account ID",
},
string(commons.ProviderFeatureFlags): {
Type: schema.TypeString,
Optional: true,
//DefaultFunc: schema.EnvDefaultFunc(featureflag.EnvVar, ""),
Description: "Spotinst SDK Feature Flags",
},
},
ResourcesMap: map[string]*schema.Resource{
// Elastigroup.
string(commons.ElastigroupAWSResourceName): resourceSpotinstElastigroupAWS(),
string(commons.ElastigroupGCPResourceName): resourceSpotinstElastigroupGCP(),
string(commons.ElastigroupGKEResourceName): resourceSpotinstElastigroupGKE(),
string(commons.ElastigroupAWSBeanstalkResourceName): resourceSpotinstElastigroupAWSBeanstalk(),
string(commons.ElastigroupAzureResourceName): resourceSpotinstElastigroupAzure(),
string(commons.ElastigroupAzureV3ResourceName): resourceSpotinstElastigroupAzureV3(),
string(commons.SubscriptionResourceName): resourceSpotinstSubscription(),
string(commons.MRScalerAWSResourceName): resourceSpotinstMRScalerAWS(),
// Ocean.
string(commons.OceanAWSResourceName): resourceSpotinstOceanAWS(),
string(commons.OceanAWSLaunchSpecResourceName): resourceSpotinstOceanAWSLaunchSpec(),
string(commons.OceanGKEImportResourceName): resourceSpotinstOceanGKEImport(),
string(commons.OceanGKELaunchSpecResourceName): resourceSpotinstOceanGKELaunchSpec(),
string(commons.OceanGKELaunchSpecImportResourceName): resourceSpotinstOceanGKELaunchSpecImport(),
string(commons.OceanECSResourceName): resourceSpotinstOceanECS(),
string(commons.OceanECSLaunchSpecResourceName): resourceSpotinstOceanECSLaunchSpec(),
string(commons.OceanAKSResourceName): resourceSpotinstOceanAKS(),
string(commons.OceanAKSVirtualNodeGroupResourceName): resourceSpotinstOceanAKSVirtualNodeGroup(),
// Multai.
string(commons.MultaiBalancerResourceName): resourceSpotinstMultaiBalancer(),
string(commons.MultaiDeploymentResourceName): resourceSpotinstMultaiDeployment(),
string(commons.MultaiListenerResourceName): resourceSpotinstMultaiListener(),
string(commons.MultaiRoutingRuleResourceName): resourceSpotinstMultaiRoutingRule(),
string(commons.MultaiTargetResourceName): resourceSpotinstMultaiTarget(),
string(commons.MultaiTargetSetResourceName): resourceSpotinstMultaiTargetSet(),
// Managed Instance.
string(commons.ManagedInstanceAWSResourceName): resourceSpotinstMangedInstanceAWS(),
// HealthCheck
string(commons.HealthCheckResourceName): resourceSpotinstHealthCheck(),
// SuspendProcesses
string(commons.SuspendProcessesResourceName): resourceSpotinstElastigroupSuspendProcesses(),
// ExtendedResourceDefinition
string(commons.OceanAWSExtendedResourceDefinitionResourceName): resourceSpotinstOceanAWSExtendedResourceDefinition(),
// Data Integration
string(commons.DataIntegrationResourceName): resourceSpotinstDataIntegration(),
// Stateful
string(commons.StatefulNodeAzureResourceName): resourceSpotinstStatefulNodeAzureV3(),
// Ocean Spark
string(commons.OceanSparkResourceName): resourceSpotinstOceanSpark(),
},
}
p.ConfigureContextFunc = func(ctx context.Context, d *schema.ResourceData) (interface{}, diag.Diagnostics) {
terraformVersion := p.TerraformVersion
if terraformVersion == "" {
// Terraform 0.12 introduced this field to the protocol
// We can therefore assume that if it's missing it's 0.10 or 0.11
terraformVersion = "0.11+compatible"
}
return providerConfigure(d, terraformVersion)
}
return p
}
func providerConfigure(d *schema.ResourceData, terraformVersion string) (interface{}, diag.Diagnostics) {
config := Config{
Token: d.Get(string(commons.ProviderToken)).(string),
Account: d.Get(string(commons.ProviderAccount)).(string),
FeatureFlags: d.Get(string(commons.ProviderFeatureFlags)).(string),
terraformVersion: terraformVersion,
}
return config.Client()
}