-
Notifications
You must be signed in to change notification settings - Fork 2
/
gateway_fqdn_resource.go
139 lines (105 loc) · 3.57 KB
/
gateway_fqdn_resource.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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
package provider
import (
p "github.com/pulumi/pulumi-go-provider"
"github.com/pulumi/pulumi-go-provider/infer"
"github.com/threefoldtech/zos/pkg/gridtypes/zos"
)
// GatewayFQDN controlling struct
type GatewayFQDN struct{}
// GatewayFQDNArgs is defining what arguments it accepts
type GatewayFQDNArgs struct {
NodeID interface{} `pulumi:"node_id"`
Name string `pulumi:"name"`
FQDN string `pulumi:"fqdn"`
Backends []zos.Backend `pulumi:"backends"`
NetworkName string `pulumi:"network_name,optional"`
Description string `pulumi:"description,optional"`
TLSPassthrough bool `pulumi:"tls_pass_through,optional"`
SolutionType string `pulumi:"solution_type,optional"`
}
// GatewayFQDNState is describing the fields that exist on the fqdn gateway resource
type GatewayFQDNState struct {
GatewayFQDNArgs
ContractID int64 `pulumi:"contract_id"`
NodeDeploymentID map[string]int64 `pulumi:"node_deployment_id"`
}
// Create creates a fqdn gateway
func (*GatewayFQDN) Create(
ctx p.Context,
id string,
input GatewayFQDNArgs,
preview bool) (string, GatewayFQDNState, error) {
state := GatewayFQDNState{GatewayFQDNArgs: input}
if preview {
return id, state, nil
}
fqdnGateway, err := parseToGatewayFQDN(input)
if err != nil {
return id, state, err
}
config := infer.GetConfig[Config](ctx)
if err := config.TFPluginClient.GatewayFQDNDeployer.Deploy(ctx, &fqdnGateway); err != nil {
return id, state, err
}
if err := config.TFPluginClient.GatewayFQDNDeployer.Sync(ctx, &fqdnGateway); err != nil {
return id, state, err
}
state = parseToGatewayFQDNState(fqdnGateway)
return id, state, nil
}
// Update updates the arguments of a fqdn gateway resource
func (*GatewayFQDN) Update(
ctx p.Context,
id string,
oldState GatewayFQDNState,
input GatewayFQDNArgs,
preview bool) (string, GatewayFQDNState, error) {
state := GatewayFQDNState{GatewayFQDNArgs: input}
if preview {
return id, state, nil
}
fqdnGateway, err := parseToGatewayFQDN(input)
if err != nil {
return id, state, err
}
if err := updateGatewayFQDNFromState(&fqdnGateway, oldState); err != nil {
return id, state, err
}
config := infer.GetConfig[Config](ctx)
if err := config.TFPluginClient.GatewayFQDNDeployer.Deploy(ctx, &fqdnGateway); err != nil {
return id, state, err
}
if err := config.TFPluginClient.GatewayFQDNDeployer.Sync(ctx, &fqdnGateway); err != nil {
return id, state, err
}
state = parseToGatewayFQDNState(fqdnGateway)
return id, state, nil
}
// Read gets the state of the fqdn gateway resource
func (*GatewayFQDN) Read(ctx p.Context, id string, oldState GatewayFQDNState) (string, GatewayFQDNState, error) {
fqdnGateway, err := parseToGatewayFQDN(oldState.GatewayFQDNArgs)
if err != nil {
return id, oldState, err
}
if err := updateGatewayFQDNFromState(&fqdnGateway, oldState); err != nil {
return id, oldState, err
}
config := infer.GetConfig[Config](ctx)
if err := config.TFPluginClient.GatewayFQDNDeployer.Sync(ctx, &fqdnGateway); err != nil {
return id, oldState, err
}
state := parseToGatewayFQDNState(fqdnGateway)
return id, state, nil
}
// Delete deletes a fqdn gateway resource
func (*GatewayFQDN) Delete(ctx p.Context, id string, oldState GatewayFQDNState) error {
fqdnGateway, err := parseToGatewayFQDN(oldState.GatewayFQDNArgs)
if err != nil {
return err
}
if err := updateGatewayFQDNFromState(&fqdnGateway, oldState); err != nil {
return err
}
config := infer.GetConfig[Config](ctx)
return config.TFPluginClient.GatewayFQDNDeployer.Cancel(ctx, &fqdnGateway)
}