1+ //
2+ // Licensed to the Apache Software Foundation (ASF) under one
3+ // or more contributor license agreements. See the NOTICE file
4+ // distributed with this work for additional information
5+ // regarding copyright ownership. The ASF licenses this file
6+ // to you under the Apache License, Version 2.0 (the
7+ // "License"); you may not use this file except in compliance
8+ // with the License. You may obtain a copy of the License at
9+ //
10+ // http://www.apache.org/licenses/LICENSE-2.0
11+ //
12+ // Unless required by applicable law or agreed to in writing,
13+ // software distributed under the License is distributed on an
14+ // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+ // KIND, either express or implied. See the License for the
16+ // specific language governing permissions and limitations
17+ // under the License.
18+ //
19+
20+ package cloudstack
21+
22+ import (
23+ "fmt"
24+
25+ "github.com/apache/cloudstack-go/v2/cloudstack"
26+ "github.com/hashicorp/terraform/helper/schema"
27+ )
28+
29+ func resourceCloudStackConfiguration () * schema.Resource {
30+ return & schema.Resource {
31+ Create : resourceCloudStackConfigurationCreate ,
32+ Read : resourceCloudStackConfigurationRead ,
33+ Update : resourceCloudStackConfigurationUpdate ,
34+ Delete : resourceCloudStackConfigurationDelete ,
35+ Importer : & schema.ResourceImporter {
36+ State : importStatePassthrough ,
37+ },
38+
39+ Schema : map [string ]* schema.Schema {
40+ "name" : {
41+ Type : schema .TypeString ,
42+ Required : true ,
43+ },
44+ "accountid" : {
45+ Type : schema .TypeString ,
46+ Optional : true ,
47+ },
48+ "clusterid" : {
49+ Type : schema .TypeString ,
50+ Optional : true ,
51+ },
52+ "domainid" : {
53+ Type : schema .TypeString ,
54+ Optional : true ,
55+ },
56+ "imagestoreuuid" : {
57+ Type : schema .TypeString ,
58+ Optional : true ,
59+ },
60+ "storeid" : {
61+ Type : schema .TypeString ,
62+ Optional : true ,
63+ },
64+ "value" : {
65+ Type : schema .TypeString ,
66+ Optional : true ,
67+ },
68+ "zoneid" : {
69+ Type : schema .TypeString ,
70+ Optional : true ,
71+ },
72+ // computed
73+ "category" : {
74+ Type : schema .TypeString ,
75+ Computed : true ,
76+ },
77+ "description" : {
78+ Type : schema .TypeString ,
79+ Computed : true ,
80+ },
81+ "is_dynamic" : {
82+ Type : schema .TypeString ,
83+ Computed : true ,
84+ },
85+ "scope" : {
86+ Type : schema .TypeString ,
87+ Computed : true ,
88+ },
89+ },
90+ }
91+ }
92+
93+ func resourceCloudStackConfigurationRead (d * schema.ResourceData , meta interface {}) error {
94+ cs := meta .(* cloudstack.CloudStackClient )
95+ p := cs .Configuration .NewListConfigurationsParams ()
96+
97+ // required
98+ p .SetName (d .Id ())
99+
100+ // optional
101+ if v , ok := d .GetOk ("accountid" ); ok {
102+ p .SetAccountid (v .(string ))
103+ }
104+ if v , ok := d .GetOk ("category" ); ok {
105+ p .SetCategory (v .(string ))
106+ }
107+ if v , ok := d .GetOk ("clusterid" ); ok {
108+ p .SetClusterid (v .(string ))
109+ }
110+ if v , ok := d .GetOk ("domainid" ); ok {
111+ p .SetDomainid (v .(string ))
112+ }
113+ if v , ok := d .GetOk ("imagestoreuuid" ); ok {
114+ p .SetImagestoreuuid (v .(string ))
115+ }
116+ if v , ok := d .GetOk ("storeid" ); ok {
117+ p .SetStorageid (v .(string ))
118+ }
119+ if v , ok := d .GetOk ("zoneid" ); ok {
120+ p .SetZoneid (v .(string ))
121+ }
122+
123+ cfg , err := cs .Configuration .ListConfigurations (p )
124+ if err != nil {
125+ return err
126+ }
127+
128+ found := false
129+ for _ , v := range cfg .Configurations {
130+ if v .Name == d .Id () {
131+ d .Set ("category" , v .Category )
132+ d .Set ("description" , v .Description )
133+ d .Set ("is_dynamic" , v .Isdynamic )
134+ d .Set ("name" , v .Name )
135+ d .Set ("value" , v .Value )
136+ d .Set ("scope" , v .Scope )
137+ found = true
138+ }
139+ }
140+
141+ if ! found {
142+ return fmt .Errorf ("listConfiguration failed. no matching names found %s" , d .Id ())
143+ }
144+
145+ return nil
146+
147+ }
148+
149+ func resourceCloudStackConfigurationCreate (d * schema.ResourceData , meta interface {}) error {
150+ if v , ok := d .GetOk ("name" ); ok {
151+ d .SetId (v .(string ))
152+ }
153+
154+ resourceCloudStackConfigurationUpdate (d , meta )
155+
156+ return nil
157+
158+ }
159+
160+ func resourceCloudStackConfigurationUpdate (d * schema.ResourceData , meta interface {}) error {
161+ cs := meta .(* cloudstack.CloudStackClient )
162+ p := cs .Configuration .NewUpdateConfigurationParams (d .Id ())
163+
164+ // Optional
165+ if v , ok := d .GetOk ("accountid" ); ok {
166+ p .SetAccountid (v .(string ))
167+ }
168+ if v , ok := d .GetOk ("clusterid" ); ok {
169+ p .SetClusterid (v .(string ))
170+ }
171+ if v , ok := d .GetOk ("domainid" ); ok {
172+ p .SetDomainid (v .(string ))
173+ }
174+ if v , ok := d .GetOk ("imagestoreuuid" ); ok {
175+ p .SetImagestoreuuid (v .(string ))
176+ }
177+ if v , ok := d .GetOk ("storeid" ); ok {
178+ p .SetStorageid (v .(string ))
179+ }
180+ if v , ok := d .GetOk ("value" ); ok {
181+ p .SetValue (v .(string ))
182+ }
183+ if v , ok := d .GetOk ("zoneid" ); ok {
184+ p .SetZoneid (v .(string ))
185+ }
186+
187+ _ , err := cs .Configuration .UpdateConfiguration (p )
188+ if err != nil {
189+ return err
190+ }
191+
192+ resourceCloudStackConfigurationRead (d , meta )
193+
194+ return nil
195+ }
196+
197+ func resourceCloudStackConfigurationDelete (d * schema.ResourceData , meta interface {}) error {
198+ cs := meta .(* cloudstack.CloudStackClient )
199+ p := cs .Configuration .NewResetConfigurationParams (d .Id ())
200+
201+ // Optional
202+ if v , ok := d .GetOk ("accountid" ); ok {
203+ p .SetAccountid (v .(string ))
204+ }
205+ if v , ok := d .GetOk ("clusterid" ); ok {
206+ p .SetClusterid (v .(string ))
207+ }
208+ if v , ok := d .GetOk ("domainid" ); ok {
209+ p .SetDomainid (v .(string ))
210+ }
211+ if v , ok := d .GetOk ("imagestoreuuid" ); ok {
212+ p .SetImagestoreid (v .(string ))
213+ }
214+ if v , ok := d .GetOk ("storeid" ); ok {
215+ p .SetStorageid (v .(string ))
216+ }
217+ if v , ok := d .GetOk ("zoneid" ); ok {
218+ p .SetZoneid (v .(string ))
219+ }
220+
221+ _ , err := cs .Configuration .ResetConfiguration (p )
222+ if err != nil {
223+ return err
224+ }
225+
226+ return nil
227+ }
0 commit comments