forked from zededa/terraform-provider-zedcloud
/
net_inst_filter.go
145 lines (131 loc) · 4.2 KB
/
net_inst_filter.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
package schemas
import (
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/xyuria-zededa/terraform-provider-zedcloud/v2/models"
)
func NetInstFilterModel(d *schema.ResourceData) *models.NetInstFilter {
deviceName, _ := d.Get("device_name").(string)
deviceNamePattern, _ := d.Get("device_name_pattern").(string)
namePattern, _ := d.Get("name_pattern").(string)
projectName, _ := d.Get("project_name").(string)
projectNamePattern, _ := d.Get("project_name_pattern").(string)
tags := map[string]string{}
tagsInterface, tagsIsSet := d.GetOk("tags")
if tagsIsSet {
tagsMap := tagsInterface.(map[string]interface{})
for k, v := range tagsMap {
if v == nil {
continue
}
tags[k] = v.(string)
}
}
return &models.NetInstFilter{
DeviceName: deviceName,
DeviceNamePattern: deviceNamePattern,
NamePattern: namePattern,
ProjectName: projectName,
ProjectNamePattern: projectNamePattern,
Tags: tags,
}
}
func NetInstFilterModelFromMap(m map[string]interface{}) *models.NetInstFilter {
deviceName := m["device_name"].(string)
deviceNamePattern := m["device_name_pattern"].(string)
namePattern := m["name_pattern"].(string)
projectName := m["project_name"].(string)
projectNamePattern := m["project_name_pattern"].(string)
tags := map[string]string{}
tagsInterface, tagsIsSet := m["tags"]
if tagsIsSet {
tagsMap := tagsInterface.(map[string]interface{})
for k, v := range tagsMap {
if v == nil {
continue
}
tags[k] = v.(string)
}
}
return &models.NetInstFilter{
DeviceName: deviceName,
DeviceNamePattern: deviceNamePattern,
NamePattern: namePattern,
ProjectName: projectName,
ProjectNamePattern: projectNamePattern,
Tags: tags,
}
}
// Update the underlying NetInstFilter resource data in the Terraform configuration using the resource model built from the CREATE/UPDATE/READ LM API request response
func SetNetInstFilterResourceData(d *schema.ResourceData, m *models.NetInstFilter) {
d.Set("device_name", m.DeviceName)
d.Set("device_name_pattern", m.DeviceNamePattern)
d.Set("name_pattern", m.NamePattern)
d.Set("project_name", m.ProjectName)
d.Set("project_name_pattern", m.ProjectNamePattern)
d.Set("tags", m.Tags)
}
// Iterate through and update the NetInstFilter resource data within a pagination response (typically defined in the items array field) retrieved from a READ operation for multiple LM resources
func SetNetInstFilterSubResourceData(m []*models.NetInstFilter) (d []*map[string]interface{}) {
for _, NetInstFilterModel := range m {
if NetInstFilterModel != nil {
properties := make(map[string]interface{})
properties["device_name"] = NetInstFilterModel.DeviceName
properties["device_name_pattern"] = NetInstFilterModel.DeviceNamePattern
properties["name_pattern"] = NetInstFilterModel.NamePattern
properties["project_name"] = NetInstFilterModel.ProjectName
properties["project_name_pattern"] = NetInstFilterModel.ProjectNamePattern
properties["tags"] = NetInstFilterModel.Tags
d = append(d, &properties)
}
}
return
}
// Schema mapping representing the NetInstFilter resource defined in the Terraform configuration
func NetInstFilterSchema() map[string]*schema.Schema {
return map[string]*schema.Schema{
"device_name": {
Description: ``,
Type: schema.TypeString,
Optional: true,
},
"device_name_pattern": {
Description: ``,
Type: schema.TypeString,
Optional: true,
},
"name_pattern": {
Description: ``,
Type: schema.TypeString,
Optional: true,
},
"project_name": {
Description: ``,
Type: schema.TypeString,
Optional: true,
},
"project_name_pattern": {
Description: ``,
Type: schema.TypeString,
Optional: true,
},
"tags": {
Description: ``,
Type: schema.TypeMap, //GoType: map[string]string
Elem: &schema.Schema{
Type: schema.TypeString,
},
Optional: true,
},
}
}
// Retrieve property field names for updating the NetInstFilter resource
func GetNetInstFilterPropertyFields() (t []string) {
return []string{
"device_name",
"device_name_pattern",
"name_pattern",
"project_name",
"project_name_pattern",
"tags",
}
}