/
provider.go
117 lines (97 loc) · 2.83 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
113
114
115
116
117
package provider
import (
"log"
"os"
"github.com/Paperspace/paperspace-go"
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
)
func Provider() *schema.Provider {
return &schema.Provider{
Schema: map[string]*schema.Schema{
"api_key": &schema.Schema{
Type: schema.TypeString,
Optional: true,
DefaultFunc: envDefaultFunc("PAPERSPACE_API_KEY"),
},
"api_host": &schema.Schema{
Type: schema.TypeString,
Optional: true,
DefaultFunc: envDefaultFuncAllowMissingDefault("PAPERSPACE_API_HOST", "https://api.paperspace.io"),
},
"region": &schema.Schema{
Type: schema.TypeString,
Optional: true,
DefaultFunc: envDefaultFuncAllowMissing("PAPERSPACE_REGION"),
},
},
ResourcesMap: map[string]*schema.Resource{
"paperspace_autoscaling_group": resourceAutoscalingGroup(),
"paperspace_machine": resourceMachine(),
"paperspace_network": resourceNetwork(),
"paperspace_script": resourceScript(),
},
DataSourcesMap: map[string]*schema.Resource{
"paperspace_job_storage": dataSourceJobStorage(),
"paperspace_network": dataSourceNetwork(),
"paperspace_template": dataSourceTemplate(),
"paperspace_user": dataSourceUser(),
},
ConfigureFunc: providerConfigure,
}
}
func envDefaultFunc(k string) schema.SchemaDefaultFunc {
return func() (interface{}, error) {
if v := os.Getenv(k); v != "" {
return v, nil
}
return nil, nil
}
}
func envDefaultFuncAllowMissing(k string) schema.SchemaDefaultFunc {
return func() (interface{}, error) {
v := os.Getenv(k)
return v, nil
}
}
func envDefaultFuncAllowMissingDefault(k string, d string) schema.SchemaDefaultFunc {
return func() (interface{}, error) {
if v := os.Getenv(k); v != "" {
return v, nil
}
return d, nil
}
}
func providerConfigure(d *schema.ResourceData) (interface{}, error) {
config := ClientConfig{
APIKey: d.Get("api_key").(string),
APIHost: d.Get("api_host").(string),
Region: d.Get("region").(string),
}
log.Printf("[INFO] paperspace provider api_key %v", config.APIKey)
log.Printf("[INFO] paperspace provider api_host %v", config.APIHost)
if config.Region != "" {
log.Printf("[INFO] paperspace provider region %v", config.Region)
}
return config, nil
}
func newInternalPaperspaceClient(v interface{}) PaperspaceClient {
config, ok := v.(ClientConfig)
if !ok {
return PaperspaceClient{}
}
return config.Client()
}
func newPaperspaceClient(v interface{}) *paperspace.Client {
client := paperspace.NewClient()
config, ok := v.(ClientConfig)
if !ok {
return paperspace.NewClient()
}
apiBackend := paperspace.NewAPIBackend()
if config.APIHost != "" {
apiBackend.BaseURL = config.APIHost
}
client = paperspace.NewClientWithBackend(paperspace.Backend(apiBackend))
client.APIKey = config.APIKey
return client
}