@@ -25,12 +25,8 @@ import (
25
25
26
26
"github.com/dell/goscaleio"
27
27
scaleiotypes "github.com/dell/goscaleio/types/v1"
28
- "github.com/hashicorp/terraform-plugin-framework-validators/setvalidator"
29
- "github.com/hashicorp/terraform-plugin-framework-validators/stringvalidator"
30
28
"github.com/hashicorp/terraform-plugin-framework/datasource"
31
29
"github.com/hashicorp/terraform-plugin-framework/datasource/schema"
32
- "github.com/hashicorp/terraform-plugin-framework/path"
33
- "github.com/hashicorp/terraform-plugin-framework/schema/validator"
34
30
"github.com/hashicorp/terraform-plugin-framework/types"
35
31
"github.com/hashicorp/terraform-plugin-log/tflog"
36
32
)
@@ -105,92 +101,50 @@ func (d *faultSetDataSource) Read(ctx context.Context, req datasource.ReadReques
105
101
return
106
102
}
107
103
108
- // Fetch Fault set details if IDs are provided
109
- if ! state .FaultSetIDs .IsNull () {
110
- faultSetIDs := make ([]string , 0 )
111
- diags .Append (state .FaultSetIDs .ElementsAs (ctx , & faultSetIDs , true )... )
112
-
113
- for _ , faultSetID := range faultSetIDs {
114
- faultSet , err := d .system .GetFaultSetByID (faultSetID )
115
- if err != nil {
116
- resp .Diagnostics .AddError (
117
- fmt .Sprintf ("Error in getting fault set details using id %v" , faultSetID ), err .Error (),
118
- )
119
- return
120
- }
121
- sdsDetails , err := d .GetSdsDetails (faultSet .ID )
122
- if err != nil {
123
- resp .Diagnostics .AddError (
124
- fmt .Sprintf ("Error in getting SDS details connected to fault set details using id %v" , faultSet .ID ), err .Error (),
125
- )
126
- return
127
- }
104
+ // Fetch Fault set details for all the fault sets
105
+ faultSets , err = helper .GetAllFaultSets (d .system )
106
+ if err != nil {
107
+ resp .Diagnostics .AddError (
108
+ "Error in getting Fault Set details" , err .Error (),
109
+ )
110
+ return
111
+ }
128
112
129
- var sdsStateModels []models.SdsDataModel
130
- for index := range sdsDetails {
131
- sdsState := getSdsState (& sdsDetails [index ])
132
- sdsStateModels = append (sdsStateModels , sdsState )
133
- }
134
- faultSetsModel = append (faultSetsModel , helper .GetAllFaultSetState (* faultSet , sdsStateModels ))
113
+ // Filter if any are set
114
+ if state .FaultSetFilter != nil {
115
+ filtered , err := helper .GetDataSourceByValue (* state .FaultSetFilter , faultSets )
116
+ if err != nil {
117
+ resp .Diagnostics .AddError (
118
+ fmt .Sprintf ("Error in filtering fault sets: %v please validate the filter" , state .FaultSetFilter ), err .Error (),
119
+ )
120
+ return
135
121
}
136
- } else if ! state .FaultSetNames .IsNull () {
137
- // Fetch Fault set details if names are provided
138
- faultSetNames := make ([]string , 0 )
139
- diags .Append (state .FaultSetNames .ElementsAs (ctx , & faultSetNames , true )... )
140
-
141
- for _ , faultSetName := range faultSetNames {
142
- faultSet , err := d .system .GetFaultSetByName (faultSetName )
143
- if err != nil {
144
- resp .Diagnostics .AddError (
145
- fmt .Sprintf ("Error in getting fault set details using name %v" , faultSetName ), err .Error (),
146
- )
147
- return
148
- }
149
- sdsDetails , err := d .GetSdsDetails (faultSet .ID )
150
- if err != nil {
151
- resp .Diagnostics .AddError (
152
- fmt .Sprintf ("Error in getting SDS details connected to fault set details using id %v" , faultSet .ID ), err .Error (),
153
- )
154
- return
155
- }
156
-
157
- var sdsStateModels []models.SdsDataModel
158
- for index := range sdsDetails {
159
- sdsState := getSdsState (& sdsDetails [index ])
160
- sdsStateModels = append (sdsStateModels , sdsState )
161
- }
162
- faultSetsModel = append (faultSetsModel , helper .GetAllFaultSetState (* faultSet , sdsStateModels ))
122
+ filteredvFaultSets := []scaleiotypes.FaultSet {}
123
+ for _ , val := range filtered {
124
+ filteredvFaultSets = append (filteredvFaultSets , val .(scaleiotypes.FaultSet ))
163
125
}
164
- } else {
165
- // Fetch Fault set details for all the fault sets
166
- faultSets , err = d .system .GetAllFaultSets ()
126
+ faultSets = filteredvFaultSets
127
+ }
128
+
129
+ for _ , faultSet := range faultSets {
130
+ sdsDetails , err := d .GetSdsDetails (faultSet .ID )
167
131
if err != nil {
168
132
resp .Diagnostics .AddError (
169
- "Error in getting Fault Set details" , err .Error (),
133
+ fmt . Sprintf ( "Error in getting SDS details connected to fault set details using id %v" , faultSet . ID ) , err .Error (),
170
134
)
171
135
return
172
136
}
173
137
174
- for _ , faultSet := range faultSets {
175
- sdsDetails , err := d .GetSdsDetails (faultSet .ID )
176
- if err != nil {
177
- resp .Diagnostics .AddError (
178
- fmt .Sprintf ("Error in getting SDS details connected to fault set details using id %v" , faultSet .ID ), err .Error (),
179
- )
180
- return
181
- }
182
-
183
- var sdsStateModels []models.SdsDataModel
184
- for index := range sdsDetails {
185
- sdsState := getSdsState (& sdsDetails [index ])
186
- sdsStateModels = append (sdsStateModels , sdsState )
187
- }
188
- faultSetsModel = append (faultSetsModel , helper .GetAllFaultSetState (faultSet , sdsStateModels ))
138
+ var sdsStateModels []models.SdsDataModel
139
+ for index := range sdsDetails {
140
+ sdsState := getSdsState (& sdsDetails [index ])
141
+ sdsStateModels = append (sdsStateModels , sdsState )
189
142
}
143
+ faultSetsModel = append (faultSetsModel , helper .GetAllFaultSetState (faultSet , sdsStateModels ))
190
144
}
191
145
192
146
state .FaultSetDetails = faultSetsModel
193
- state .ID = types .StringValue ("placeholder " )
147
+ state .ID = types .StringValue ("fault-set-datasource-id " )
194
148
diags = resp .State .Set (ctx , state )
195
149
resp .Diagnostics .Append (diags ... )
196
150
if resp .Diagnostics .HasError () {
@@ -204,33 +158,10 @@ var FaultSetDataSourceSchema schema.Schema = schema.Schema{
204
158
MarkdownDescription : "This datasource is used to query the existing fault set from the PowerFlex array. The information fetched from this datasource can be used for getting the details / for further processing in resource block." ,
205
159
Attributes : map [string ]schema.Attribute {
206
160
"id" : schema.StringAttribute {
207
- Description : "Placeholder attribute." ,
208
- MarkdownDescription : "Placeholder attribute." ,
161
+ Description : "Placeholder for fault set datasource attribute." ,
162
+ MarkdownDescription : "Placeholder for fault set datasource attribute." ,
209
163
Computed : true ,
210
164
},
211
- "fault_set_ids" : schema.SetAttribute {
212
- Description : "List of fault set IDs" ,
213
- MarkdownDescription : "List of fault set IDs" ,
214
- Optional : true ,
215
- ElementType : types .StringType ,
216
- Validators : []validator.Set {
217
- setvalidator .ConflictsWith (
218
- path .MatchRoot ("fault_set_names" ),
219
- ),
220
- setvalidator .SizeAtLeast (1 ),
221
- setvalidator .ValueStringsAre (stringvalidator .LengthAtLeast (1 )),
222
- },
223
- },
224
- "fault_set_names" : schema.SetAttribute {
225
- Description : "List of fault set names" ,
226
- MarkdownDescription : "List of fault set names" ,
227
- Optional : true ,
228
- ElementType : types .StringType ,
229
- Validators : []validator.Set {
230
- setvalidator .SizeAtLeast (1 ),
231
- setvalidator .ValueStringsAre (stringvalidator .LengthAtLeast (1 )),
232
- },
233
- },
234
165
"fault_set_details" : schema.SetNestedAttribute {
235
166
Description : "Fault set details" ,
236
167
MarkdownDescription : "Fault set details" ,
@@ -501,6 +432,11 @@ var FaultSetDataSourceSchema schema.Schema = schema.Schema{
501
432
},
502
433
},
503
434
},
435
+ Blocks : map [string ]schema.Block {
436
+ "filter" : schema.SingleNestedBlock {
437
+ Attributes : helper .GenerateSchemaAttributes (helper .TypeToMap (models.FaultSetFilter {})),
438
+ },
439
+ },
504
440
}
505
441
506
442
// FaultSetLinksSchema specifies the schema for fault set links
0 commit comments