forked from hashicorp/terraform-provider-azurerm
-
Notifications
You must be signed in to change notification settings - Fork 0
/
internal.go
149 lines (120 loc) · 3.66 KB
/
internal.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
140
141
142
143
144
145
146
147
148
149
package relay
import (
"context"
"fmt"
"log"
"github.com/kevinklinger/terraform-provider-azurerm/v2/helpers/azure"
"github.com/kevinklinger/terraform-provider-azurerm/v2/internal/services/relay/sdk/2017-04-01/hybridconnections"
"github.com/kevinklinger/terraform-provider-azurerm/v2/internal/services/relay/sdk/2017-04-01/namespaces"
"github.com/kevinklinger/terraform-provider-azurerm/v2/internal/tf/pluginsdk"
)
func authorizationRuleSchemaFrom(s map[string]*pluginsdk.Schema) map[string]*pluginsdk.Schema {
authSchema := map[string]*pluginsdk.Schema{
"listen": {
Type: pluginsdk.TypeBool,
Optional: true,
Default: false,
},
"send": {
Type: pluginsdk.TypeBool,
Optional: true,
Default: false,
},
"manage": {
Type: pluginsdk.TypeBool,
Optional: true,
Default: false,
},
"primary_key": {
Type: pluginsdk.TypeString,
Computed: true,
Sensitive: true,
},
"primary_connection_string": {
Type: pluginsdk.TypeString,
Computed: true,
Sensitive: true,
},
"secondary_key": {
Type: pluginsdk.TypeString,
Computed: true,
Sensitive: true,
},
"secondary_connection_string": {
Type: pluginsdk.TypeString,
Computed: true,
Sensitive: true,
},
}
return azure.MergeSchema(s, authSchema)
}
func expandAuthorizationRuleRights(d *pluginsdk.ResourceData) []namespaces.AccessRights {
rights := make([]namespaces.AccessRights, 0)
if d.Get("listen").(bool) {
rights = append(rights, namespaces.AccessRightsListen)
}
if d.Get("send").(bool) {
rights = append(rights, namespaces.AccessRightsSend)
}
if d.Get("manage").(bool) {
rights = append(rights, namespaces.AccessRightsManage)
}
return rights
}
func flattenAuthorizationRuleRights(rights []namespaces.AccessRights) (listen, send, manage bool) {
// zero (initial) value for a bool in go is false
for _, right := range rights {
switch right {
case namespaces.AccessRightsListen:
listen = true
case namespaces.AccessRightsSend:
send = true
case namespaces.AccessRightsManage:
manage = true
default:
log.Printf("[DEBUG] Unknown Authorization Rule Right '%s'", right)
}
}
return listen, send, manage
}
func expandHybridConnectionAuthorizationRuleRights(d *pluginsdk.ResourceData) []hybridconnections.AccessRights {
rights := make([]hybridconnections.AccessRights, 0)
if d.Get("listen").(bool) {
rights = append(rights, hybridconnections.AccessRightsListen)
}
if d.Get("send").(bool) {
rights = append(rights, hybridconnections.AccessRightsSend)
}
if d.Get("manage").(bool) {
rights = append(rights, hybridconnections.AccessRightsManage)
}
return rights
}
func flattenHybridConnectionAuthorizationRuleRights(rights []hybridconnections.AccessRights) (listen, send, manage bool) {
// zero (initial) value for a bool in go is false
for _, right := range rights {
switch right {
case hybridconnections.AccessRightsListen:
listen = true
case hybridconnections.AccessRightsSend:
send = true
case hybridconnections.AccessRightsManage:
manage = true
default:
log.Printf("[DEBUG] Unknown Authorization Rule Right '%s'", right)
}
}
return listen, send, manage
}
func authorizationRuleCustomizeDiff(ctx context.Context, d *pluginsdk.ResourceDiff, _ interface{}) error {
listen, hasListen := d.GetOk("listen")
send, hasSend := d.GetOk("send")
manage, hasManage := d.GetOk("manage")
if !hasListen && !hasSend && !hasManage {
return fmt.Errorf("One of the `listen`, `send` or `manage` properties needs to be set")
}
if manage.(bool) && (!listen.(bool) || !send.(bool)) {
return fmt.Errorf("if `manage` is set both `listen` and `send` must be set to true too")
}
return nil
}