Skip to content

Commit

Permalink
Updating provider to 1.0.61
Browse files Browse the repository at this point in the history
  • Loading branch information
scotttyso committed Jan 24, 2025
1 parent 0595464 commit cf0f295
Show file tree
Hide file tree
Showing 8 changed files with 79 additions and 34 deletions.
8 changes: 6 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,12 @@ A Terraform module to configure Intersight Infrastructure Pools.
| Name | Version |
|------|---------|
| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | >=1.3.0 |
| <a name="requirement_intersight"></a> [intersight](#requirement\_intersight) | >=1.0.59 |
| <a name="requirement_intersight"></a> [intersight](#requirement\_intersight) | >=1.0.61 |
## Providers

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

No modules.
Expand All @@ -37,6 +37,7 @@ No modules.

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

Expand All @@ -61,8 +63,10 @@ No modules.
| [intersight_macpool_pool.map](https://registry.terraform.io/providers/CiscoDevNet/intersight/latest/docs/resources/macpool_pool) | resource |
| [intersight_macpool_reservation.map](https://registry.terraform.io/providers/CiscoDevNet/intersight/latest/docs/resources/macpool_reservation) | resource |
| [intersight_resourcepool_pool.map](https://registry.terraform.io/providers/CiscoDevNet/intersight/latest/docs/resources/resourcepool_pool) | resource |
| [intersight_resourcepool_qualification_policy.map](https://registry.terraform.io/providers/CiscoDevNet/intersight/latest/docs/resources/resourcepool_qualification_policy) | resource |
| [intersight_uuidpool_pool.map](https://registry.terraform.io/providers/CiscoDevNet/intersight/latest/docs/resources/uuidpool_pool) | resource |
| [intersight_uuidpool_reservation.map](https://registry.terraform.io/providers/CiscoDevNet/intersight/latest/docs/resources/uuidpool_reservation) | resource |
| [intersight_compute_physical_summary.servers](https://registry.terraform.io/providers/CiscoDevNet/intersight/latest/docs/data-sources/compute_physical_summary) | data source |
| [intersight_search_search_item.policies](https://registry.terraform.io/providers/CiscoDevNet/intersight/latest/docs/data-sources/search_search_item) | data source |
| [intersight_search_search_item.pools](https://registry.terraform.io/providers/CiscoDevNet/intersight/latest/docs/data-sources/search_search_item) | data source |
<!-- END_TF_DOCS -->
9 changes: 7 additions & 2 deletions data.tf
Original file line number Diff line number Diff line change
@@ -1,8 +1,13 @@
#__________________________________________________________________
#
# Data Objects - Pools
# Data Objects - Pools and Policies
#__________________________________________________________________

data "intersight_search_search_item" "policies" {
for_each = { for v in local.policy_types : v => v if length(compact(local.data_policies[v])) > 0 }
additional_properties = jsonencode(
{ "ObjectType" = "${local.policies[each.key].object}' and Name in ('${trim(join("', '", local.data_policies[each.key]), ", '")}') and ClassId eq '${local.policies[each.key].object}" }
)
}
data "intersight_search_search_item" "pools" {
for_each = { for v in local.pool_types : v => v if length(local.data_pools[v]) > 0 }
additional_properties = length(regexall("wwnn|wwpn", each.key)
Expand Down
6 changes: 4 additions & 2 deletions defaults.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -177,9 +177,11 @@ pools:
assignment_order: 'sequential'
description: ''
name: '**REQUIRED**'
pool_type: Static
pool_type: Dynamic
resource_type: Server
server_type: Blades
server_pool_qualification_policies: []
static_resource_selection: []
target_platform: FIAttached
tags:
key: ''
value: ''
Expand Down
48 changes: 33 additions & 15 deletions locals.tf
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@ locals {
#
# local defaults and name suffix/prefix
#____________________________________________________________
defaults = yamldecode(file("${path.module}/defaults.yaml")).pools
model = { for org in local.org_keys : org => lookup(var.model[org], "pools", {}) }
defaults = yamldecode(file("${path.module}/defaults.yaml")).pools
model = { for org in local.org_keys : org => lookup(var.model[org], "pools", {}) }
pool_type = ["ip", "iqn", "mac", "resource", "uuid", "wwnn", "wwpn"]
name_prefix = { for org in local.org_keys : org => {
for e in local.pool_type : e => lookup(lookup(local.model[org], "name_prefix", {}
), e, lookup(lookup(local.model[org], "name_prefix", local.defaults.name_prefix), "default", ""))
Expand All @@ -21,12 +22,11 @@ locals {
for e in local.pool_type : e => lookup(lookup(lookup(local.model, org, {}), "name_suffix", {}
), e, lookup(lookup(lookup(local.model, org, {}), "name_suffix", local.defaults.name_suffix), "default", ""))
} }
org_keys = sort(keys(var.model))
org_names = merge({ for k, v in var.orgs : v => k }, jsondecode("{\"5ddfd9ff6972652d31ee6582\":\"x_cisco_intersight_internal\"}"))
org_keys = sort(keys(var.model))
org_names = merge({ for k, v in var.orgs : v => k }, jsondecode("{\"5ddfd9ff6972652d31ee6582\":\"x_cisco_intersight_internal\"}"))
policy_defaults = yamldecode(file("${path.module}/defaults.yaml")).policies
policies_model = { for org in local.org_keys : org => lookup(var.model[org], "policies", {}) }
policy_names = ["server_pool_qualification"]
pool_type = ["ip", "iqn", "mac", "resource", "uuid", "wwnn", "wwpn"]
ppfx = { for org in keys(var.orgs) : org => {
for e in local.policy_names : e => lookup(lookup(lookup(lookup(var.model, org, {}), "policies", {}), "name_prefix", {}
), e, lookup(lookup(lookup(lookup(var.model, org, {}), "policies", {}), "name_prefix", local.policy_defaults.name_prefix), "default", ""))
Expand Down Expand Up @@ -104,6 +104,14 @@ locals {
wwnn = distinct(compact([for v in local.reservations : v.pool_name if v.identity_type == "wwnn"]))
wwpn = distinct(compact([for v in local.reservations : v.pool_name if v.identity_type == "wwpn"]))
}
pp = {
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"]])))
}
policies = {
server_pool_qualification = { keys = keys(local.server_pool_qualification), object = "resourcepool.QualificationPolicy" }
}
# policy_types = []
policy_types = ["server_pool_qualification"]
pools = {
ip = { moids = keys(local.ip), object = "ippool.Pool" }
iqn = { moids = keys(local.iqn), object = "iqnpool.Pool" }
Expand All @@ -112,9 +120,17 @@ locals {
wwnn = { moids = keys(local.wwnn), object = "fcpool.Pool" }
wwpn = { moids = keys(local.wwpn), object = "fcpool.Pool" }
}
pool_types = ["ip", "iqn", "mac", "uuid", "wwnn", "wwpn"]
pool_types = ["ip", "iqn", "mac", "uuid", "wwnn", "wwpn"]
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] }
data_pools = { for e in local.pool_types : e => [for v in local.reservation[e] : element(split("/", v), 1
) if contains(local.pools[e].moids, v) == false] }
policies_data = { for k in keys(data.intersight_search_search_item.policies) : k => {
for e in lookup(data.intersight_search_search_item.policies[k], "results", []
) : "${local.org_names[jsondecode(e.additional_properties).Organization.Moid]}/${jsondecode(e.additional_properties).Name}" => merge({
additional_properties = jsondecode(e.additional_properties)
moid = e.moid
})
} }
pools_data = { for k in keys(data.intersight_search_search_item.pools) : k => {
for e in lookup(data.intersight_search_search_item.pools[k], "results", []
) : "${local.org_names[jsondecode(e.additional_properties).Organization.Moid]}/${jsondecode(e.additional_properties).Name}" => merge({
Expand Down Expand Up @@ -145,7 +161,6 @@ locals {
qko = { CPUCoresRange = "resource.CPUCoreRangeFilter", SpeedRange = "resource.CpuSpeedRangeFilter" }
qkr = { AssetTags = "asset_tags", Pids = "rack_pids", UserLabels = "user_labels" }
qkt = { ChassisTags = "chassis_tags", DomainProfileTags = "domain_profile_tags", ServerTags = "server_tags" }
spq = local.policy_defaults.server_pool_qualification
spqt = ["adapter", "blade_server", "cpu", "domain", "gpu", "memory", "rack_server", "tag_qualifier"]
server_pool_qualification = { for i in flatten([for org in local.org_keys : [
for v in lookup(local.policies_model[org], "server_pool_qualification", []) : {
Expand Down Expand Up @@ -205,7 +220,7 @@ locals {
ConditionType = "RANGE"
MaxValue = lookup(lookup(lookup(lookup(v, "hardware_qualifiers", {}), "gpu", {}), b, {}), "maximum", 0)
MinValue = lookup(lookup(lookup(lookup(v, "hardware_qualifiers", {}), "gpu", {}), b, {}), "minimum", 0)
ObjectType = "${a}Filter"
ObjectType = "resource.${a}Filter"
} }, {
GpuEvaluationType = lookup(lookup(lookup(v, "hardware_qualifiers", {}), "gpu", {}), "evaluation_type", "ServerWithoutGpu")
Pids = lookup(lookup(lookup(v, "hardware_qualifiers", {}), "gpu", {}), "pids", [])
Expand All @@ -219,7 +234,7 @@ locals {
ConditionType = "RANGE"
MaxValue = lookup(lookup(v.hardware_qualifiers.memory, b, {}), "maximum", 0)
MinValue = lookup(lookup(v.hardware_qualifiers.memory, b, {}), "minimum", 0)
ObjectType = "${a}Filter"
ObjectType = "resource.${a}Filter"
} })
class_id = "resource.MemoryQualifier"
object_type = "resource.MemoryQualifier"
Expand Down Expand Up @@ -248,7 +263,7 @@ locals {
class_id = "resource.TagQualifier"
object_type = "resource.TagQualifier"
} : {}
tags = lookup(v, "tags", local.global_settings.tags)
tags = lookup(v, "tags", var.global_settings.tags)
}
] if length(lookup(local.policies_model[org], "server_pool_qualification", [])) > 0]) : "${i.org}/${i.name}" => i }

Expand All @@ -259,13 +274,16 @@ locals {
#____________________________________________________________
resource = { for i in flatten([for org in local.org_keys : [
for v in lookup(local.model[org], "resource", []) : merge(local.defaults.resource, v, {
name = "${local.name_prefix[org].resource}${v.name}${local.name_suffix[org].resource}"
org = org
serial_number_list = v.serial_number_list
tags = lookup(v, "tags", var.global_settings.tags)
name = "${local.name_prefix[org].resource}${v.name}${local.name_suffix[org].resource}"
org = org
server_pool_qualification_policies = [for e in [for d in lookup(v, "server_pool_qualification_policies", []) : {
name = length(regexall("/", d)) > 0 ? element(split("/", d), 1) : d
org = length(regexall("/", d)) > 0 ? element(split("/", d), 0) : org
}] : "${e.org}/${local.ppfx[e.org].server_pool_qualification}${e.name}${local.psfx[e.org].server_pool_qualification}"]
tags = lookup(v, "tags", var.global_settings.tags)
})
] if length(lookup(local.model[org], "resource", [])) > 0]) : "${i.org}/${i.name}" => i }
serial_number_list = flatten([for k, v in local.resource : v.serial_number_list])
serial_number_list = flatten([for k, v in local.resource : v.static_resource_selection])

#____________________________________________________________
#
Expand Down
7 changes: 6 additions & 1 deletion outputs.tf
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,11 @@
# Data Object Outputs
#__________________________________________________________

output "data_policies" {
description = "Moid's of the Policies that were not defined locally."
value = { for e in sort(keys(local.policies_data)) : e => { for k, v in local.policies_data[e] : k => v.moid } }
}

output "data_pools" {
description = "Moid's of the Pools that were not defined locally."
value = { for e in sort(keys(local.pools_data)) : e => { for k, v in local.pools_data[e] : k => v.moid } }
Expand Down Expand Up @@ -49,7 +54,7 @@ output "wwpn" {

output "server_pool_qualification" {
description = "Moids of the Server Pool Qualfication Policies."
value = {for k, v in intersight_resourcepool_qualification_policy.map : k => v.moid }
value = { for k, v in intersight_resourcepool_qualification_policy.map : k => v.moid }
}

#__________________________________________________________
Expand Down
2 changes: 1 addition & 1 deletion provider.tf
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ terraform {
required_providers {
intersight = {
source = "CiscoDevNet/intersight"
version = ">=1.0.59"
version = ">=1.0.61"
}
}
required_version = ">=1.3.0"
Expand Down
29 changes: 20 additions & 9 deletions resource.tf
Original file line number Diff line number Diff line change
Expand Up @@ -17,33 +17,44 @@ data "intersight_compute_physical_summary" "servers" {
#____________________________________________________________

resource "intersight_resourcepool_pool" "map" {
depends_on = [intersight_resourcepool_qualification_policy.map]
for_each = local.resource
assignment_order = each.value.assignment_order
description = each.value.description != "" ? each.value.description : "${each.value.name} Resource Pool."
name = each.value.name
pool_type = each.value.pool_type
pool_type = length(each.value.server_pool_qualification_policies) > 0 && length(each.value.static_resource_selection
) > 0 ? "Hybrid" : length(each.value.server_pool_qualification_policies) > 0 ? "Dynamic" : "Static"
resource_pool_parameters = [
{
additional_properties = jsonencode(
{ ManagementMode = data.intersight_compute_physical_summary.servers[each.value.serial_number_list[0]].results[0].management_mode }
{ ManagementMode = each.value.target_platform == "Standalone" ? "IntersightStandalone" : "Intersight" }
)
class_id = "resourcepool.ServerPoolParameters"
object_type = "resourcepool.ServerPoolParameters"
}
]
resource_type = each.value.resource_type
selectors = [
{
organization { moid = var.orgs[each.value.org] }
dynamic "qualification_policies" {
for_each = { for v in each.value.server_pool_qualification_policies : v => v if element(split("/", v), 1) != "UNUSED" }
content {
moid = contains(keys(local.server_pool_qualification), qualification_policies.value
) == true ? intersight_resourcepool_qualification_policy.map[qualification_policies.value
].moid : local.policies_data["server_pool_qualification"][qualification_policies.value].moid
}
}
dynamic "selectors" {
for_each = { for e in ["map"] : e => each.value.static_resource_selection if length(each.value.static_resource_selection) > 0 }
content {
additional_properties = ""
class_id = "resource.Selector"
object_type = "resource.Selector"
selector = "/api/v1/compute/${element(split(".", data.intersight_compute_physical_summary.servers[each.value.serial_number_list[0]
selector = "/api/v1/compute/${element(split(".", data.intersight_compute_physical_summary.servers[each.value.static_resource_selection[0]
].results[0].source_object_type), 1)}s?$filter=(Serial in (${format("'%s'", join("','", [
for s in each.value.serial_number_list : s
]))})) and (ManagementMode eq '${data.intersight_compute_physical_summary.servers[each.value.serial_number_list[0]].results[0].management_mode}')"
for s in each.value.static_resource_selection : s
]))})) and (ManagementMode eq '${data.intersight_compute_physical_summary.servers[each.value.static_resource_selection[0]].results[0].management_mode}')"
}
]
organization { moid = var.orgs[each.value.org] }
}
dynamic "tags" {
for_each = { for v in each.value.tags : v.key => v }
content {
Expand Down
4 changes: 2 additions & 2 deletions resource_pool_qualifiers.tf
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#____________________________________________________________
#
# Intersight IP Pool Resource
# GUI Location: Pools > Create Pool
# Intersight Server Pool Qualfication Policy Resource
# GUI Location: Policies > Create Pool > Server Pool Qualfication
#____________________________________________________________

resource "intersight_resourcepool_qualification_policy" "map" {
Expand Down

0 comments on commit cf0f295

Please sign in to comment.