@@ -23,7 +23,18 @@ locals {
2323 } }
2424 org_keys = sort (keys (var. model ))
2525 org_names = merge ({ for k , v in var . orgs : v => k }, jsondecode (" {\" 5ddfd9ff6972652d31ee6582\" :\" x_cisco_intersight_internal\" }" ))
26+ policy_defaults = yamldecode (file (" ${ path . module } /defaults.yaml" )). policies
27+ policies_model = { for org in local . org_keys : org => lookup (var. model [org ], " policies" , {}) }
28+ policy_names = [" server_pool_qualification" ]
2629 pool_type = [" ip" , " iqn" , " mac" , " resource" , " uuid" , " wwnn" , " wwpn" ]
30+ ppfx = { for org in keys (var. orgs ) : org => {
31+ for e in local . policy_names : e => lookup (lookup (lookup (lookup (var. model , org, {}), " policies" , {}), " name_prefix" , {}
32+ ), e, lookup (lookup (lookup (lookup (var. model , org, {}), " policies" , {}), " name_prefix" , local. policy_defaults . name_prefix ), " default" , " " ))
33+ } }
34+ psfx = { for org in keys (var. orgs ) : org => {
35+ for e in local . policy_names : e => lookup (lookup (lookup (lookup (var. model , org, {}), " policies" , {}), " name_suffix" , {}
36+ ), e, lookup (lookup (lookup (lookup (var. model , org, {}), " policies" , {}), " name_suffix" , local. policy_defaults . name_suffix ), " default" , " " ))
37+ } }
2738
2839 # ____________________________________________________________
2940 #
@@ -120,6 +131,127 @@ locals {
120131 wwpn = { for v in sort (keys (intersight_fcpool_reservation. wwpn )) : v => intersight_fcpool_reservation . wwpn [v ]. moid }
121132 }
122133
134+ # ____________________________________________________________
135+ #
136+ # Intersight Server Pool Qualification Policy
137+ # GUI Location: Policies > Create Policy: Server Pool Qualification
138+ # ____________________________________________________________
139+ qka = { AdaptersRange = " number_of_network_adapters" }
140+ qkb = { AssetTags = " asset_tags" , ChassisPids = " chassis_pids" , Pids = " blade_pids" , UserLabels = " user_labels" }
141+ qkd = { DomainNames = " domain_names" , FabricInterConnectPids = " fabric_interconnect_pids" }
142+ qkc = { CPUCoresRange = " number_of_cores" , SpeedRange = " speed" }
143+ qkg = { GpuControllersRange = " number_of_gpus" }
144+ qkm = { MemoryCapacityRange = " capacity" , MemoryUnitsRange = " number_of_units" }
145+ qko = { CPUCoresRange = " resource.CPUCoreRangeFilter" , SpeedRange = " resource.CpuSpeedRangeFilter" }
146+ qkr = { AssetTags = " asset_tags" , Pids = " rack_pids" , UserLabels = " user_labels" }
147+ qkt = { ChassisTags = " chassis_tags" , DomainProfileTags = " domain_profile_tags" , ServerTags = " server_tags" }
148+ spq = local.policy_defaults.server_pool_qualification
149+ spqt = [" adapter" , " blade_server" , " cpu" , " domain" , " gpu" , " memory" , " rack_server" , " tag_qualifier" ]
150+ server_pool_qualification = { for i in flatten ([for org in local . org_keys : [
151+ for v in lookup (local. policies_model [org ], " server_pool_qualification" , []) : {
152+ adapter = length (lookup (lookup (v, " hardware_qualifiers" , {}), " network_adapter" , {})) > 0 ? {
153+ additional_properties = jsonencode ({ for a , b in local . qka : a => {
154+ ConditionType = " RANGE"
155+ MaxValue = lookup (lookup (v. hardware_qualifiers . network_adapter , b, {}), " maximum" , 0 )
156+ MinValue = lookup (lookup (v. hardware_qualifiers . network_adapter , b, {}), " minimum" , 0 )
157+ ObjectType = " ${ a } Filter"
158+ } })
159+ class_id = " resource.NetworkAdaptorQualifier"
160+ object_type = " resource.NetworkAdaptorQualifier"
161+ } : {}
162+ blade_server = length (lookup (lookup (v, " server_qualifiers" , {}), " blade_server" , {})) > 0 ? {
163+ additional_properties = jsonencode (merge ({ for a , b in local . qkb : a => lookup (v. server_qualifiers . blade_server , b, []) },
164+ { ChassisAndSlotIdRange = [for e in lookup (v. server_qualifiers . blade_server , " chassis_slot_qualifier" , []) : {
165+ ChassisIdRange = {
166+ ClassId = " resource.ChassisIdRangeFilter"
167+ ConditionType = " RANGE"
168+ MaxValue = e.chassis_ids.to
169+ MinValue = e.chassis_ids.from
170+ ObjectType = " resource.ChassisIdRangeFilter"
171+ }
172+ ObjectType = " resource.ChassisAndSlotQualification"
173+ SlotIdRanges = [for d in lookup (e, " slot_ids" , []) : {
174+ ClassId = " resource.SlotIdRangeFilter"
175+ ConditionType = " RANGE"
176+ MaxValue = d.to
177+ MinValue = d.from
178+ ObjectType = " resource.SlotIdRangeFilter"
179+ }]
180+ }] }))
181+ class_id = " resource.BladeQualifier"
182+ object_type = " resource.BladeQualifier"
183+ } : {}
184+ cpu = length (lookup (lookup (v, " hardware_qualifiers" , {}), " cpu" , {})) > 0 ? {
185+ additional_properties = jsonencode (merge ({ for a , b in local . qkc : a => {
186+ ConditionType = " RANGE"
187+ MaxValue = lookup (lookup (v. hardware_qualifiers . cpu , b, {}), " maximum" , 0 )
188+ MinValue = lookup (lookup (v. hardware_qualifiers . cpu , b, {}), " minimum" , 0 )
189+ ObjectType = local.qko[a]
190+ } }, {
191+ Pids = lookup (v. hardware_qualifiers . cpu , " pids" , [])
192+ Vendor = lookup (v. hardware_qualifiers . cpu , " vendor" , " " )
193+ }))
194+ class_id = " resource.ProcessorQualifier"
195+ object_type = " resource.ProcessorQualifier"
196+ } : {}
197+ description = lookup (v, " description" , " " )
198+ domain = length (lookup (v, " domain_qualifiers" , {})) > 0 ? {
199+ additional_properties = jsonencode ({ for a , b in local . qkd : a => lookup (v. domain_qualifiers , b, []) })
200+ class_id = " resource.DomainQualifier"
201+ object_type = " resource.DomainQualifier"
202+ } : {}
203+ gpu = {
204+ additional_properties = jsonencode (merge ({ for a , b in local . qkg : a => {
205+ ConditionType = " RANGE"
206+ MaxValue = lookup (lookup (lookup (lookup (v, " hardware_qualifiers" , {}), " gpu" , {}), b, {}), " maximum" , 0 )
207+ MinValue = lookup (lookup (lookup (lookup (v, " hardware_qualifiers" , {}), " gpu" , {}), b, {}), " minimum" , 0 )
208+ ObjectType = " ${ a } Filter"
209+ } }, {
210+ GpuEvaluationType = lookup (lookup (lookup (v, " hardware_qualifiers" , {}), " gpu" , {}), " evaluation_type" , " ServerWithoutGpu" )
211+ Pids = lookup (lookup (lookup (v, " hardware_qualifiers" , {}), " gpu" , {}), " pids" , [])
212+ Vendor = lookup (lookup (lookup (v, " hardware_qualifiers" , {}), " gpu" , {}), " vendor" , " " )
213+ }))
214+ class_id = " resource.GpuQualifier"
215+ object_type = " resource.GpuQualifier"
216+ }
217+ memory = length (lookup (lookup (v, " hardware_qualifiers" , {}), " memory" , {})) > 0 ? {
218+ additional_properties = jsonencode ({ for a , b in local . qkm : a => {
219+ ConditionType = " RANGE"
220+ MaxValue = lookup (lookup (v. hardware_qualifiers . memory , b, {}), " maximum" , 0 )
221+ MinValue = lookup (lookup (v. hardware_qualifiers . memory , b, {}), " minimum" , 0 )
222+ ObjectType = " ${ a } Filter"
223+ } })
224+ class_id = " resource.MemoryQualifier"
225+ object_type = " resource.MemoryQualifier"
226+ } : {}
227+ name = " ${ local . ppfx [org ]. server_pool_qualification } ${ v . name } ${ local . psfx [org ]. server_pool_qualification } "
228+ org = org
229+ rack_server = length (lookup (lookup (v, " server_qualifiers" , {}), " rack_server" , {})) > 0 ? {
230+ additional_properties = jsonencode (merge ({
231+ for a , b in local . qkr : a => lookup (v. server_qualifiers . rack_server , b, []) },
232+ { RackIdRange = [for e in lookup (v. server_qualifiers . rack_server , " rack_ids" , []) : {
233+ ConditionType = " RANGE"
234+ MaxValue = e.to
235+ MinValue = e.from
236+ ObjectType = " resource.RackIdRangeFilter"
237+ }] }
238+ ))
239+ class_id = " resource.RackServerQualifier"
240+ object_type = " resource.RackServerQualifier"
241+ } : {}
242+ tag_qualifier = length (lookup (v, " tag_qualifiers" , {})) > 0 ? {
243+ additional_properties = jsonencode ({
244+ for a , b in local . qkt : a => [
245+ for e in lookup (v. tag_qualifiers , b, []) : { Key = e.key, ObjectType = " resource.Tag" , Value = e.value }
246+ ]
247+ })
248+ class_id = " resource.TagQualifier"
249+ object_type = " resource.TagQualifier"
250+ } : {}
251+ tags = lookup (v, " tags" , local. global_settings . tags )
252+ }
253+ ] if length (lookup (local. policies_model [org ], " server_pool_qualification" , [])) > 0 ]) : " ${ i . org } /${ i . name } " => i }
254+
123255 # ____________________________________________________________
124256 #
125257 # Intersight Resource Pool
0 commit comments