/
provider.go
77 lines (63 loc) · 2.17 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
// Package edgeworkers contains implementation for Akamai Terraform sub-provider responsible for maintaining EdgeWorkers functions to dynamically manage web traffic
package edgeworkers
import (
"sync"
"github.com/akamai/AkamaiOPEN-edgegrid-golang/v7/pkg/edgeworkers"
"github.com/akamai/terraform-provider-akamai/v5/pkg/meta"
"github.com/akamai/terraform-provider-akamai/v5/pkg/subprovider"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
)
type (
// Subprovider gathers edgeworkers resources and data sources
Subprovider struct {
client edgeworkers.Edgeworkers
}
option func(p *Subprovider)
)
var (
once sync.Once
inst *Subprovider
)
var _ subprovider.Plugin = &Subprovider{}
// NewSubprovider returns a core sub provider
func NewSubprovider(opts ...option) *Subprovider {
once.Do(func() {
inst = &Subprovider{}
for _, opt := range opts {
opt(inst)
}
})
return inst
}
func withClient(c edgeworkers.Edgeworkers) option {
return func(p *Subprovider) {
p.client = c
}
}
// Client returns the edgeworkers interface
func (p *Subprovider) Client(meta meta.Meta) edgeworkers.Edgeworkers {
if p.client != nil {
return p.client
}
return edgeworkers.Client(meta.Session())
}
// Resources returns terraform resources for edgeworkers
func (p *Subprovider) Resources() map[string]*schema.Resource {
return map[string]*schema.Resource{
"akamai_edgekv": resourceEdgeKV(),
"akamai_edgekv_group_items": resourceEdgeKVGroupItems(),
"akamai_edgeworkers_activation": resourceEdgeworkersActivation(),
"akamai_edgeworker": resourceEdgeWorker(),
}
}
// DataSources returns terraform data sources for edgeworkers
func (p *Subprovider) DataSources() map[string]*schema.Resource {
return map[string]*schema.Resource{
"akamai_edgekv_group_items": dataSourceEdgeKVGroupItems(),
"akamai_edgekv_groups": dataSourceEdgeKVGroups(),
"akamai_edgeworkers_resource_tier": dataSourceEdgeworkersResourceTier(),
"akamai_edgeworkers_property_rules": dataSourceEdgeworkersPropertyRules(),
"akamai_edgeworker": dataSourceEdgeWorker(),
"akamai_edgeworker_activation": dataSourceEdgeWorkerActivation(),
}
}