modules/vcenter-resource-pool/main.tf (81 lines of code) (raw):
/**
* Copyright 2022 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
locals {
parent_type = split("/", var.parent_path)[0]
parent_name = split("/", var.parent_path)[1]
roles = toset(flatten([
for k, v in var.role_assignments : [
v.role
]
]))
parent_resource_pool_id = (
local.parent_type == "Host" ?
data.vsphere_host.vsphere_host[0].resource_pool_id :
(
local.parent_type == "Cluster" ?
data.vsphere_compute_cluster.vsphere_compute_cluster[0].resource_pool_id :
data.vsphere_resource_pool.vsphere_resource_pool[0].id)
)
}
data "vsphere_datacenter" "vsphere_datacenter" {
name = var.datacenter
}
data "vsphere_host" "vsphere_host" {
count = local.parent_type == "Host" ? 1 : 0
name = local.parent_name
datacenter_id = data.vsphere_datacenter.vsphere_datacenter.id
}
data "vsphere_compute_cluster" "vsphere_compute_cluster" {
count = local.parent_type == "Cluster" ? 1 : 0
name = local.parent_name
datacenter_id = data.vsphere_datacenter.vsphere_datacenter.id
}
data "vsphere_resource_pool" "vsphere_resource_pool" {
count = local.parent_type == "ResourcePool" ? 1 : 0
name = local.parent_name
datacenter_id = data.vsphere_datacenter.vsphere_datacenter.id
}
data "vsphere_role" "vsphere_role" {
for_each = local.roles
label = each.value
}
resource "vsphere_resource_pool" "resource_pool" {
name = var.name
parent_resource_pool_id = local.parent_resource_pool_id
cpu_share_level = var.cpu_share_level
cpu_shares = var.cpu_shares
cpu_reservation = var.cpu_reservation
cpu_expandable = var.cpu_expandable
cpu_limit = var.cpu_limit
memory_share_level = var.memory_share_level
memory_shares = var.memory_shares
memory_reservation = var.memory_reservation
memory_expandable = var.memory_expandable
memory_limit = var.memory_limit
scale_descendants_shares = var.scale_descendants_shares
tags = var.resource_pool_tags
}
resource "vsphere_entity_permissions" "entity_permissions" {
for_each = var.role_assignments
entity_id = vsphere_resource_pool.resource_pool.id
entity_type = "ResourcePool"
permissions {
user_or_group = each.value.user_or_group
is_group = each.value.is_group
propagate = each.value.propagate
role_id = data.vsphere_role.vsphere_role[each.value.role].id
}
}