Skip to content

Commit 0595464

Browse files
committed
updates to resource pool qualifiers
1 parent ee6e04c commit 0595464

File tree

13 files changed

+231
-1643
lines changed

13 files changed

+231
-1643
lines changed

defaults.yaml

Lines changed: 75 additions & 603 deletions
Large diffs are not rendered by default.

locals.tf

Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

outputs.tf

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,31 +15,41 @@ output "data_pools" {
1515

1616
output "ip" {
1717
description = "Moids of the IP Pools."
18-
value = { for v in sort(keys(intersight_ippool_pool.map)) : v => intersight_ippool_pool.map[v].moid }
18+
value = { for k, v in intersight_ippool_pool.map : k => v.moid }
1919
}
2020
output "iqn" {
2121
description = "Moids of the IQN Pools."
22-
value = { for v in sort(keys(intersight_iqnpool_pool.map)) : v => intersight_iqnpool_pool.map[v].moid }
22+
value = { for k, v in intersight_iqnpool_pool.map : k => v.moid }
2323
}
2424
output "mac" {
2525
description = "Moids of the MAC Pools."
26-
value = { for v in sort(keys(intersight_macpool_pool.map)) : v => intersight_macpool_pool.map[v].moid }
26+
value = { for k, v in intersight_macpool_pool.map : k => v.moid }
2727
}
2828
output "resource" {
2929
description = "Moids of the Resource Pools."
30-
value = { for v in sort(keys(intersight_resourcepool_pool.map)) : v => intersight_resourcepool_pool.map[v].moid }
30+
value = { for k, v in intersight_resourcepool_pool.map : k => v.moid }
3131
}
3232
output "uuid" {
3333
description = "Moids of the UUID Pools."
34-
value = { for v in sort(keys(intersight_uuidpool_pool.map)) : v => intersight_uuidpool_pool.map[v].moid }
34+
value = { for k, v in intersight_uuidpool_pool.map : k => v.moid }
3535
}
3636
output "wwnn" {
3737
description = "Moids of the WWNN Pools."
38-
value = { for v in sort(keys(intersight_fcpool_pool.wwnn)) : v => intersight_fcpool_pool.wwnn[v].moid }
38+
value = { for k, v in intersight_fcpool_pool.wwnn : k => v.moid }
3939
}
4040
output "wwpn" {
4141
description = "Moids of the WWPN Pools."
42-
value = { for v in sort(keys(intersight_fcpool_pool.wwpn)) : v => intersight_fcpool_pool.wwpn[v].moid }
42+
value = { for k, v in intersight_fcpool_pool.wwpn : k => v.moid }
43+
}
44+
45+
#__________________________________________________________
46+
#
47+
# Server Pool Qualification Policy
48+
#__________________________________________________________
49+
50+
output "server_pool_qualification" {
51+
description = "Moids of the Server Pool Qualfication Policies."
52+
value = {for k, v in intersight_resourcepool_qualification_policy.map : k => v.moid }
4353
}
4454

4555
#__________________________________________________________
Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
1+
#____________________________________________________________
2+
#
3+
# Intersight IP Pool Resource
4+
# GUI Location: Pools > Create Pool
5+
#____________________________________________________________
6+
17
resource "intersight_resourcepool_qualification_policy" "map" {
28
for_each = local.server_pool_qualification
39
description = each.value.description != "" ? each.value.description : "${each.value.name} Server Pool Qualification."
410
name = each.value.name
5-
#organization { moid = var.orgs[each.value.org] }
11+
organization { moid = var.orgs[each.value.org] }
612
qualifiers = [for e in local.spqt : lookup(each.value, e, {}) if length(lookup(each.value, e, {})) > 0]
713
dynamic "tags" {
814
for_each = { for v in each.value.tags : v.key => v }

rpq/config.yaml

Lines changed: 0 additions & 8 deletions
This file was deleted.

0 commit comments

Comments
 (0)