1
1
/*
2
- * Copyright 2023 VMware, Inc. All rights reserved. Licensed under the Apache v2 License.
2
+ * Copyright 2024 VMware, Inc. All rights reserved. Licensed under the Apache v2 License.
3
3
*/
4
4
5
5
package govcd
@@ -27,97 +27,37 @@ type IpSpace struct {
27
27
vcdClient * VCDClient
28
28
}
29
29
30
+ // wrap is a hidden helper that helps to facilitate usage of generic CRUD function
31
+ //
32
+ //lint:ignore U1000 this method is used in generic functions, but annoys staticcheck
33
+ func (g IpSpace ) wrap (inner * types.IpSpace ) * IpSpace {
34
+ g .IpSpace = inner
35
+ return & g
36
+ }
37
+
30
38
// CreateIpSpace creates IP Space with desired configuration
31
39
func (vcdClient * VCDClient ) CreateIpSpace (ipSpaceConfig * types.IpSpace ) (* IpSpace , error ) {
32
- client := vcdClient .Client
33
- endpoint := types .OpenApiPathVersion1_0_0 + types .OpenApiEndpointIpSpaces
34
- apiVersion , err := client .getOpenApiHighestElevatedVersion (endpoint )
35
- if err != nil {
36
- return nil , err
37
- }
38
-
39
- urlRef , err := client .OpenApiBuildEndpoint (endpoint )
40
- if err != nil {
41
- return nil , err
42
- }
43
-
44
- result := & IpSpace {
45
- IpSpace : & types.IpSpace {},
46
- vcdClient : vcdClient ,
47
- }
48
-
49
- err = client .OpenApiPostItem (apiVersion , urlRef , nil , ipSpaceConfig , result .IpSpace , nil )
50
- if err != nil {
51
- return nil , err
40
+ c := crudConfig {
41
+ endpoint : types .OpenApiPathVersion1_0_0 + types .OpenApiEndpointIpSpaces ,
42
+ entityName : "IP Space" ,
52
43
}
53
-
54
- return result , nil
44
+ outerType := IpSpace { vcdClient : vcdClient }
45
+ return createOuterEntity ( & vcdClient . Client , outerType , c , ipSpaceConfig )
55
46
}
56
47
57
48
// GetAllIpSpaceSummaries retrieve summaries of all IP Spaces with an optional filter
58
49
// Note. There is no API endpoint to get multiple IP Spaces with their full definitions. Only
59
50
// "summaries" endpoint exists, but it does not include all fields. To retrieve complete structure
60
51
// one can use `GetIpSpaceById` or `GetIpSpaceByName`
61
52
func (vcdClient * VCDClient ) GetAllIpSpaceSummaries (queryParameters url.Values ) ([]* IpSpace , error ) {
62
- client := vcdClient .Client
63
- endpoint := types .OpenApiPathVersion1_0_0 + types .OpenApiEndpointIpSpaceSummaries
64
- apiVersion , err := client .getOpenApiHighestElevatedVersion (endpoint )
65
- if err != nil {
66
- return nil , err
67
- }
68
-
69
- urlRef , err := client .OpenApiBuildEndpoint (endpoint )
70
- if err != nil {
71
- return nil , err
72
- }
73
-
74
- typeResponses := []* types.IpSpace {{}}
75
- err = client .OpenApiGetAllItems (apiVersion , urlRef , queryParameters , & typeResponses , nil )
76
- if err != nil {
77
- return nil , err
78
- }
79
-
80
- // Wrap all typeResponses into IpSpace types with client
81
- results := make ([]* IpSpace , len (typeResponses ))
82
- for sliceIndex := range typeResponses {
83
- results [sliceIndex ] = & IpSpace {
84
- IpSpace : typeResponses [sliceIndex ],
85
- vcdClient : vcdClient ,
86
- }
53
+ c := crudConfig {
54
+ endpoint : types .OpenApiPathVersion1_0_0 + types .OpenApiEndpointIpSpaceSummaries ,
55
+ entityName : "IP Space" ,
56
+ queryParameters : queryParameters ,
87
57
}
88
58
89
- return results , nil
90
- }
91
-
92
- // GetIpSpaceById retrieves IP Space with a given ID
93
- func (vcdClient * VCDClient ) GetIpSpaceById (id string ) (* IpSpace , error ) {
94
- if id == "" {
95
- return nil , fmt .Errorf ("IP Space lookup requires ID" )
96
- }
97
-
98
- client := vcdClient .Client
99
- endpoint := types .OpenApiPathVersion1_0_0 + types .OpenApiEndpointIpSpaces
100
- apiVersion , err := client .getOpenApiHighestElevatedVersion (endpoint )
101
- if err != nil {
102
- return nil , err
103
- }
104
-
105
- urlRef , err := client .OpenApiBuildEndpoint (endpoint , id )
106
- if err != nil {
107
- return nil , err
108
- }
109
-
110
- response := & IpSpace {
111
- vcdClient : vcdClient ,
112
- IpSpace : & types.IpSpace {},
113
- }
114
-
115
- err = client .OpenApiGetItem (apiVersion , urlRef , nil , response .IpSpace , nil )
116
- if err != nil {
117
- return nil , err
118
- }
119
-
120
- return response , nil
59
+ outerType := IpSpace {vcdClient : vcdClient }
60
+ return getAllOuterEntities [IpSpace , types.IpSpace ](& vcdClient .Client , outerType , c )
121
61
}
122
62
123
63
// GetIpSpaceByName retrieves IP Space with a given name
@@ -127,39 +67,50 @@ func (vcdClient *VCDClient) GetIpSpaceByName(name string) (*IpSpace, error) {
127
67
return nil , fmt .Errorf ("IP Space lookup requires name" )
128
68
}
129
69
130
- queryParameters := url.Values {}
131
- queryParameters .Add ("filter" , "name==" + name )
70
+ queryParams := url.Values {}
71
+ queryParams .Add ("filter" , "name==" + name )
132
72
133
- filteredIpSpaces , err := vcdClient .GetAllIpSpaceSummaries (queryParameters )
73
+ filteredEntities , err := vcdClient .GetAllIpSpaceSummaries (queryParams )
134
74
if err != nil {
135
- return nil , fmt . Errorf ( "error getting IP Spaces: %s" , err )
75
+ return nil , err
136
76
}
137
77
138
- singleIpSpace , err := oneOrError ("name" , name , filteredIpSpaces )
78
+ singleIpSpace , err := oneOrError ("name" , name , filteredEntities )
139
79
if err != nil {
140
80
return nil , err
141
81
}
142
82
143
83
return vcdClient .GetIpSpaceById (singleIpSpace .IpSpace .ID )
144
84
}
145
85
86
+ func (vcdClient * VCDClient ) GetIpSpaceById (id string ) (* IpSpace , error ) {
87
+ c := crudConfig {
88
+ entityName : "IP Space" ,
89
+ endpoint : types .OpenApiPathVersion1_0_0 + types .OpenApiEndpointIpSpaces ,
90
+ endpointParams : []string {id },
91
+ }
92
+
93
+ outerType := IpSpace {vcdClient : vcdClient }
94
+ return getOuterEntity [IpSpace , types.IpSpace ](& vcdClient .Client , outerType , c )
95
+ }
96
+
146
97
// GetIpSpaceByNameAndOrgId retrieves IP Space with a given name in a particular Org
147
98
// Note. Only PRIVATE IP spaces belong to Orgs
148
99
func (vcdClient * VCDClient ) GetIpSpaceByNameAndOrgId (name , orgId string ) (* IpSpace , error ) {
149
100
if name == "" || orgId == "" {
150
101
return nil , fmt .Errorf ("IP Space lookup requires name and Org ID" )
151
102
}
152
103
153
- queryParameters := url.Values {}
154
- queryParameters .Add ("filter" , "name==" + name )
155
- queryParameters = queryParameterFilterAnd ("orgRef.id==" + orgId , queryParameters )
104
+ queryParams := url.Values {}
105
+ queryParams .Add ("filter" , "name==" + name )
106
+ queryParams = queryParameterFilterAnd ("orgRef.id==" + orgId , queryParams )
156
107
157
- filteredIpSpaces , err := vcdClient .GetAllIpSpaceSummaries (queryParameters )
108
+ filteredEntities , err := vcdClient .GetAllIpSpaceSummaries (queryParams )
158
109
if err != nil {
159
- return nil , fmt . Errorf ( "error getting IP Spaces: %s" , err )
110
+ return nil , err
160
111
}
161
112
162
- singleIpSpace , err := oneOrError ("name" , name , filteredIpSpaces )
113
+ singleIpSpace , err := oneOrError ("name" , name , filteredEntities )
163
114
if err != nil {
164
115
return nil , err
165
116
}
@@ -169,58 +120,21 @@ func (vcdClient *VCDClient) GetIpSpaceByNameAndOrgId(name, orgId string) (*IpSpa
169
120
170
121
// Update updates IP Space with new config
171
122
func (ipSpace * IpSpace ) Update (ipSpaceConfig * types.IpSpace ) (* IpSpace , error ) {
172
- client := ipSpace .vcdClient .Client
173
- endpoint := types .OpenApiPathVersion1_0_0 + types .OpenApiEndpointIpSpaces
174
- apiVersion , err := client .getOpenApiHighestElevatedVersion (endpoint )
175
- if err != nil {
176
- return nil , err
177
- }
178
-
179
- ipSpaceConfig .ID = ipSpace .IpSpace .ID
180
- urlRef , err := client .OpenApiBuildEndpoint (endpoint , ipSpaceConfig .ID )
181
- if err != nil {
182
- return nil , err
123
+ c := crudConfig {
124
+ endpoint : types .OpenApiPathVersion1_0_0 + types .OpenApiEndpointIpSpaces ,
125
+ endpointParams : []string {ipSpace .IpSpace .ID },
126
+ entityName : "IP Space" ,
183
127
}
184
-
185
- returnIpSpace := & IpSpace {
186
- IpSpace : & types.IpSpace {},
187
- vcdClient : ipSpace .vcdClient ,
188
- }
189
-
190
- err = client .OpenApiPutItem (apiVersion , urlRef , nil , ipSpaceConfig , returnIpSpace .IpSpace , nil )
191
- if err != nil {
192
- return nil , fmt .Errorf ("error updating IP Space: %s" , err )
193
- }
194
-
195
- return returnIpSpace , nil
128
+ outerType := IpSpace {vcdClient : ipSpace .vcdClient }
129
+ return updateOuterEntity (& ipSpace .vcdClient .Client , outerType , c , ipSpaceConfig )
196
130
}
197
131
198
132
// Delete deletes IP Space
199
133
func (ipSpace * IpSpace ) Delete () error {
200
- if ipSpace == nil || ipSpace .IpSpace == nil || ipSpace .IpSpace .ID == "" {
201
- return fmt .Errorf ("IP Space must have ID" )
134
+ c := crudConfig {
135
+ endpoint : types .OpenApiPathVersion1_0_0 + types .OpenApiEndpointIpSpaces ,
136
+ endpointParams : []string {ipSpace .IpSpace .ID },
137
+ entityName : "IP Space" ,
202
138
}
203
-
204
- client := ipSpace .vcdClient .Client
205
- endpoint := types .OpenApiPathVersion1_0_0 + types .OpenApiEndpointIpSpaces
206
- apiVersion , err := client .getOpenApiHighestElevatedVersion (endpoint )
207
- if err != nil {
208
- return err
209
- }
210
-
211
- urlRef , err := client .OpenApiBuildEndpoint (endpoint , ipSpace .IpSpace .ID )
212
- if err != nil {
213
- return err
214
- }
215
-
216
- err = client .OpenApiDeleteItem (apiVersion , urlRef , nil , nil )
217
- if err != nil {
218
- return err
219
- }
220
-
221
- if err != nil {
222
- return fmt .Errorf ("error deleting IP space: %s" , err )
223
- }
224
-
225
- return nil
139
+ return deleteEntityById (& ipSpace .vcdClient .Client , c )
226
140
}
0 commit comments