Skip to content

Commit cf0f295

Browse files
committed
Updating provider to 1.0.61
1 parent 0595464 commit cf0f295

File tree

8 files changed

+79
-34
lines changed

8 files changed

+79
-34
lines changed

README.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,12 @@ A Terraform module to configure Intersight Infrastructure Pools.
1717
| Name | Version |
1818
|------|---------|
1919
| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | >=1.3.0 |
20-
| <a name="requirement_intersight"></a> [intersight](#requirement\_intersight) | >=1.0.59 |
20+
| <a name="requirement_intersight"></a> [intersight](#requirement\_intersight) | >=1.0.61 |
2121
## Providers
2222

2323
| Name | Version |
2424
|------|---------|
25-
| <a name="provider_intersight"></a> [intersight](#provider\_intersight) | 1.0.59 |
25+
| <a name="provider_intersight"></a> [intersight](#provider\_intersight) | 1.0.61 |
2626
## Modules
2727

2828
No modules.
@@ -37,6 +37,7 @@ No modules.
3737

3838
| Name | Description |
3939
|------|-------------|
40+
| <a name="output_data_policies"></a> [data\_policies](#output\_data\_policies) | Moid's of the Policies that were not defined locally. |
4041
| <a name="output_data_pools"></a> [data\_pools](#output\_data\_pools) | Moid's of the Pools that were not defined locally. |
4142
| <a name="output_ip"></a> [ip](#output\_ip) | Moids of the IP Pools. |
4243
| <a name="output_iqn"></a> [iqn](#output\_iqn) | Moids of the IQN Pools. |
@@ -45,6 +46,7 @@ No modules.
4546
| <a name="output_uuid"></a> [uuid](#output\_uuid) | Moids of the UUID Pools. |
4647
| <a name="output_wwnn"></a> [wwnn](#output\_wwnn) | Moids of the WWNN Pools. |
4748
| <a name="output_wwpn"></a> [wwpn](#output\_wwpn) | Moids of the WWPN Pools. |
49+
| <a name="output_server_pool_qualification"></a> [server\_pool\_qualification](#output\_server\_pool\_qualification) | Moids of the Server Pool Qualfication Policies. |
4850
| <a name="output_reservations"></a> [reservations](#output\_reservations) | Moids of the Pool Reservations. |
4951
## Resources
5052

@@ -61,8 +63,10 @@ No modules.
6163
| [intersight_macpool_pool.map](https://registry.terraform.io/providers/CiscoDevNet/intersight/latest/docs/resources/macpool_pool) | resource |
6264
| [intersight_macpool_reservation.map](https://registry.terraform.io/providers/CiscoDevNet/intersight/latest/docs/resources/macpool_reservation) | resource |
6365
| [intersight_resourcepool_pool.map](https://registry.terraform.io/providers/CiscoDevNet/intersight/latest/docs/resources/resourcepool_pool) | resource |
66+
| [intersight_resourcepool_qualification_policy.map](https://registry.terraform.io/providers/CiscoDevNet/intersight/latest/docs/resources/resourcepool_qualification_policy) | resource |
6467
| [intersight_uuidpool_pool.map](https://registry.terraform.io/providers/CiscoDevNet/intersight/latest/docs/resources/uuidpool_pool) | resource |
6568
| [intersight_uuidpool_reservation.map](https://registry.terraform.io/providers/CiscoDevNet/intersight/latest/docs/resources/uuidpool_reservation) | resource |
6669
| [intersight_compute_physical_summary.servers](https://registry.terraform.io/providers/CiscoDevNet/intersight/latest/docs/data-sources/compute_physical_summary) | data source |
70+
| [intersight_search_search_item.policies](https://registry.terraform.io/providers/CiscoDevNet/intersight/latest/docs/data-sources/search_search_item) | data source |
6771
| [intersight_search_search_item.pools](https://registry.terraform.io/providers/CiscoDevNet/intersight/latest/docs/data-sources/search_search_item) | data source |
6872
<!-- END_TF_DOCS -->

data.tf

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
11
#__________________________________________________________________
22
#
3-
# Data Objects - Pools
3+
# Data Objects - Pools and Policies
44
#__________________________________________________________________
5-
5+
data "intersight_search_search_item" "policies" {
6+
for_each = { for v in local.policy_types : v => v if length(compact(local.data_policies[v])) > 0 }
7+
additional_properties = jsonencode(
8+
{ "ObjectType" = "${local.policies[each.key].object}' and Name in ('${trim(join("', '", local.data_policies[each.key]), ", '")}') and ClassId eq '${local.policies[each.key].object}" }
9+
)
10+
}
611
data "intersight_search_search_item" "pools" {
712
for_each = { for v in local.pool_types : v => v if length(local.data_pools[v]) > 0 }
813
additional_properties = length(regexall("wwnn|wwpn", each.key)

defaults.yaml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -177,9 +177,11 @@ pools:
177177
assignment_order: 'sequential'
178178
description: ''
179179
name: '**REQUIRED**'
180-
pool_type: Static
180+
pool_type: Dynamic
181181
resource_type: Server
182-
server_type: Blades
182+
server_pool_qualification_policies: []
183+
static_resource_selection: []
184+
target_platform: FIAttached
183185
tags:
184186
key: ''
185187
value: ''

locals.tf

Lines changed: 33 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,9 @@ locals {
33
#
44
# local defaults and name suffix/prefix
55
#____________________________________________________________
6-
defaults = yamldecode(file("${path.module}/defaults.yaml")).pools
7-
model = { for org in local.org_keys : org => lookup(var.model[org], "pools", {}) }
6+
defaults = yamldecode(file("${path.module}/defaults.yaml")).pools
7+
model = { for org in local.org_keys : org => lookup(var.model[org], "pools", {}) }
8+
pool_type = ["ip", "iqn", "mac", "resource", "uuid", "wwnn", "wwpn"]
89
name_prefix = { for org in local.org_keys : org => {
910
for e in local.pool_type : e => lookup(lookup(local.model[org], "name_prefix", {}
1011
), e, lookup(lookup(local.model[org], "name_prefix", local.defaults.name_prefix), "default", ""))
@@ -21,12 +22,11 @@ locals {
2122
for e in local.pool_type : e => lookup(lookup(lookup(local.model, org, {}), "name_suffix", {}
2223
), e, lookup(lookup(lookup(local.model, org, {}), "name_suffix", local.defaults.name_suffix), "default", ""))
2324
} }
24-
org_keys = sort(keys(var.model))
25-
org_names = merge({ for k, v in var.orgs : v => k }, jsondecode("{\"5ddfd9ff6972652d31ee6582\":\"x_cisco_intersight_internal\"}"))
25+
org_keys = sort(keys(var.model))
26+
org_names = merge({ for k, v in var.orgs : v => k }, jsondecode("{\"5ddfd9ff6972652d31ee6582\":\"x_cisco_intersight_internal\"}"))
2627
policy_defaults = yamldecode(file("${path.module}/defaults.yaml")).policies
2728
policies_model = { for org in local.org_keys : org => lookup(var.model[org], "policies", {}) }
2829
policy_names = ["server_pool_qualification"]
29-
pool_type = ["ip", "iqn", "mac", "resource", "uuid", "wwnn", "wwpn"]
3030
ppfx = { for org in keys(var.orgs) : org => {
3131
for e in local.policy_names : e => lookup(lookup(lookup(lookup(var.model, org, {}), "policies", {}), "name_prefix", {}
3232
), e, lookup(lookup(lookup(lookup(var.model, org, {}), "policies", {}), "name_prefix", local.policy_defaults.name_prefix), "default", ""))
@@ -104,6 +104,14 @@ locals {
104104
wwnn = distinct(compact([for v in local.reservations : v.pool_name if v.identity_type == "wwnn"]))
105105
wwpn = distinct(compact([for v in local.reservations : v.pool_name if v.identity_type == "wwpn"]))
106106
}
107+
pp = {
108+
server_pool_qualification = distinct(compact(flatten([for v in local.resource : [for e in v.server_pool_qualification_policies : e if element(split("/", e), 1) != "UNUSED"]])))
109+
}
110+
policies = {
111+
server_pool_qualification = { keys = keys(local.server_pool_qualification), object = "resourcepool.QualificationPolicy" }
112+
}
113+
# policy_types = []
114+
policy_types = ["server_pool_qualification"]
107115
pools = {
108116
ip = { moids = keys(local.ip), object = "ippool.Pool" }
109117
iqn = { moids = keys(local.iqn), object = "iqnpool.Pool" }
@@ -112,9 +120,17 @@ locals {
112120
wwnn = { moids = keys(local.wwnn), object = "fcpool.Pool" }
113121
wwpn = { moids = keys(local.wwpn), object = "fcpool.Pool" }
114122
}
115-
pool_types = ["ip", "iqn", "mac", "uuid", "wwnn", "wwpn"]
123+
pool_types = ["ip", "iqn", "mac", "uuid", "wwnn", "wwpn"]
124+
data_policies = { for e in local.policy_types : e => [for v in local.pp[e] : element(split("/", v), 1) if contains(local.policies[e].keys, v) == false] }
116125
data_pools = { for e in local.pool_types : e => [for v in local.reservation[e] : element(split("/", v), 1
117126
) if contains(local.pools[e].moids, v) == false] }
127+
policies_data = { for k in keys(data.intersight_search_search_item.policies) : k => {
128+
for e in lookup(data.intersight_search_search_item.policies[k], "results", []
129+
) : "${local.org_names[jsondecode(e.additional_properties).Organization.Moid]}/${jsondecode(e.additional_properties).Name}" => merge({
130+
additional_properties = jsondecode(e.additional_properties)
131+
moid = e.moid
132+
})
133+
} }
118134
pools_data = { for k in keys(data.intersight_search_search_item.pools) : k => {
119135
for e in lookup(data.intersight_search_search_item.pools[k], "results", []
120136
) : "${local.org_names[jsondecode(e.additional_properties).Organization.Moid]}/${jsondecode(e.additional_properties).Name}" => merge({
@@ -145,7 +161,6 @@ locals {
145161
qko = { CPUCoresRange = "resource.CPUCoreRangeFilter", SpeedRange = "resource.CpuSpeedRangeFilter" }
146162
qkr = { AssetTags = "asset_tags", Pids = "rack_pids", UserLabels = "user_labels" }
147163
qkt = { ChassisTags = "chassis_tags", DomainProfileTags = "domain_profile_tags", ServerTags = "server_tags" }
148-
spq = local.policy_defaults.server_pool_qualification
149164
spqt = ["adapter", "blade_server", "cpu", "domain", "gpu", "memory", "rack_server", "tag_qualifier"]
150165
server_pool_qualification = { for i in flatten([for org in local.org_keys : [
151166
for v in lookup(local.policies_model[org], "server_pool_qualification", []) : {
@@ -205,7 +220,7 @@ locals {
205220
ConditionType = "RANGE"
206221
MaxValue = lookup(lookup(lookup(lookup(v, "hardware_qualifiers", {}), "gpu", {}), b, {}), "maximum", 0)
207222
MinValue = lookup(lookup(lookup(lookup(v, "hardware_qualifiers", {}), "gpu", {}), b, {}), "minimum", 0)
208-
ObjectType = "${a}Filter"
223+
ObjectType = "resource.${a}Filter"
209224
} }, {
210225
GpuEvaluationType = lookup(lookup(lookup(v, "hardware_qualifiers", {}), "gpu", {}), "evaluation_type", "ServerWithoutGpu")
211226
Pids = lookup(lookup(lookup(v, "hardware_qualifiers", {}), "gpu", {}), "pids", [])
@@ -219,7 +234,7 @@ locals {
219234
ConditionType = "RANGE"
220235
MaxValue = lookup(lookup(v.hardware_qualifiers.memory, b, {}), "maximum", 0)
221236
MinValue = lookup(lookup(v.hardware_qualifiers.memory, b, {}), "minimum", 0)
222-
ObjectType = "${a}Filter"
237+
ObjectType = "resource.${a}Filter"
223238
} })
224239
class_id = "resource.MemoryQualifier"
225240
object_type = "resource.MemoryQualifier"
@@ -248,7 +263,7 @@ locals {
248263
class_id = "resource.TagQualifier"
249264
object_type = "resource.TagQualifier"
250265
} : {}
251-
tags = lookup(v, "tags", local.global_settings.tags)
266+
tags = lookup(v, "tags", var.global_settings.tags)
252267
}
253268
] if length(lookup(local.policies_model[org], "server_pool_qualification", [])) > 0]) : "${i.org}/${i.name}" => i }
254269

@@ -259,13 +274,16 @@ locals {
259274
#____________________________________________________________
260275
resource = { for i in flatten([for org in local.org_keys : [
261276
for v in lookup(local.model[org], "resource", []) : merge(local.defaults.resource, v, {
262-
name = "${local.name_prefix[org].resource}${v.name}${local.name_suffix[org].resource}"
263-
org = org
264-
serial_number_list = v.serial_number_list
265-
tags = lookup(v, "tags", var.global_settings.tags)
277+
name = "${local.name_prefix[org].resource}${v.name}${local.name_suffix[org].resource}"
278+
org = org
279+
server_pool_qualification_policies = [for e in [for d in lookup(v, "server_pool_qualification_policies", []) : {
280+
name = length(regexall("/", d)) > 0 ? element(split("/", d), 1) : d
281+
org = length(regexall("/", d)) > 0 ? element(split("/", d), 0) : org
282+
}] : "${e.org}/${local.ppfx[e.org].server_pool_qualification}${e.name}${local.psfx[e.org].server_pool_qualification}"]
283+
tags = lookup(v, "tags", var.global_settings.tags)
266284
})
267285
] if length(lookup(local.model[org], "resource", [])) > 0]) : "${i.org}/${i.name}" => i }
268-
serial_number_list = flatten([for k, v in local.resource : v.serial_number_list])
286+
serial_number_list = flatten([for k, v in local.resource : v.static_resource_selection])
269287

270288
#____________________________________________________________
271289
#

outputs.tf

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,11 @@
33
# Data Object Outputs
44
#__________________________________________________________
55

6+
output "data_policies" {
7+
description = "Moid's of the Policies that were not defined locally."
8+
value = { for e in sort(keys(local.policies_data)) : e => { for k, v in local.policies_data[e] : k => v.moid } }
9+
}
10+
611
output "data_pools" {
712
description = "Moid's of the Pools that were not defined locally."
813
value = { for e in sort(keys(local.pools_data)) : e => { for k, v in local.pools_data[e] : k => v.moid } }
@@ -49,7 +54,7 @@ output "wwpn" {
4954

5055
output "server_pool_qualification" {
5156
description = "Moids of the Server Pool Qualfication Policies."
52-
value = {for k, v in intersight_resourcepool_qualification_policy.map : k => v.moid }
57+
value = { for k, v in intersight_resourcepool_qualification_policy.map : k => v.moid }
5358
}
5459

5560
#__________________________________________________________

provider.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ terraform {
88
required_providers {
99
intersight = {
1010
source = "CiscoDevNet/intersight"
11-
version = ">=1.0.59"
11+
version = ">=1.0.61"
1212
}
1313
}
1414
required_version = ">=1.3.0"

resource.tf

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,33 +17,44 @@ data "intersight_compute_physical_summary" "servers" {
1717
#____________________________________________________________
1818

1919
resource "intersight_resourcepool_pool" "map" {
20+
depends_on = [intersight_resourcepool_qualification_policy.map]
2021
for_each = local.resource
2122
assignment_order = each.value.assignment_order
2223
description = each.value.description != "" ? each.value.description : "${each.value.name} Resource Pool."
2324
name = each.value.name
24-
pool_type = each.value.pool_type
25+
pool_type = length(each.value.server_pool_qualification_policies) > 0 && length(each.value.static_resource_selection
26+
) > 0 ? "Hybrid" : length(each.value.server_pool_qualification_policies) > 0 ? "Dynamic" : "Static"
2527
resource_pool_parameters = [
2628
{
2729
additional_properties = jsonencode(
28-
{ ManagementMode = data.intersight_compute_physical_summary.servers[each.value.serial_number_list[0]].results[0].management_mode }
30+
{ ManagementMode = each.value.target_platform == "Standalone" ? "IntersightStandalone" : "Intersight" }
2931
)
3032
class_id = "resourcepool.ServerPoolParameters"
3133
object_type = "resourcepool.ServerPoolParameters"
3234
}
3335
]
3436
resource_type = each.value.resource_type
35-
selectors = [
36-
{
37+
organization { moid = var.orgs[each.value.org] }
38+
dynamic "qualification_policies" {
39+
for_each = { for v in each.value.server_pool_qualification_policies : v => v if element(split("/", v), 1) != "UNUSED" }
40+
content {
41+
moid = contains(keys(local.server_pool_qualification), qualification_policies.value
42+
) == true ? intersight_resourcepool_qualification_policy.map[qualification_policies.value
43+
].moid : local.policies_data["server_pool_qualification"][qualification_policies.value].moid
44+
}
45+
}
46+
dynamic "selectors" {
47+
for_each = { for e in ["map"] : e => each.value.static_resource_selection if length(each.value.static_resource_selection) > 0 }
48+
content {
3749
additional_properties = ""
3850
class_id = "resource.Selector"
3951
object_type = "resource.Selector"
40-
selector = "/api/v1/compute/${element(split(".", data.intersight_compute_physical_summary.servers[each.value.serial_number_list[0]
52+
selector = "/api/v1/compute/${element(split(".", data.intersight_compute_physical_summary.servers[each.value.static_resource_selection[0]
4153
].results[0].source_object_type), 1)}s?$filter=(Serial in (${format("'%s'", join("','", [
42-
for s in each.value.serial_number_list : s
43-
]))})) and (ManagementMode eq '${data.intersight_compute_physical_summary.servers[each.value.serial_number_list[0]].results[0].management_mode}')"
54+
for s in each.value.static_resource_selection : s
55+
]))})) and (ManagementMode eq '${data.intersight_compute_physical_summary.servers[each.value.static_resource_selection[0]].results[0].management_mode}')"
4456
}
45-
]
46-
organization { moid = var.orgs[each.value.org] }
57+
}
4758
dynamic "tags" {
4859
for_each = { for v in each.value.tags : v.key => v }
4960
content {

resource_pool_qualifiers.tf

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#____________________________________________________________
22
#
3-
# Intersight IP Pool Resource
4-
# GUI Location: Pools > Create Pool
3+
# Intersight Server Pool Qualfication Policy Resource
4+
# GUI Location: Policies > Create Pool > Server Pool Qualfication
55
#____________________________________________________________
66

77
resource "intersight_resourcepool_qualification_policy" "map" {

0 commit comments

Comments
 (0)