Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions manila.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
resource "openstack_sharedfilesystem_sharetype_v2" "sharetypes" {
for_each = var.sharetypes

name = each.key

description = lookup(each.value, "description", null)
is_public = lookup(each.value, "is_public", true)

extra_specs = {
driver_handles_share_servers = each.value.extra_specs.driver_handles_share_servers
snapshot_support = lookup(each.value.extra_specs, "snapshot_support", null)
share_backend_name = each.value.extra_specs.share_backend_name
"vast:vippoolname" = vastdata_vip_pool.vippools[each.value.extra_specs.vast_vip_pool_name].name
}
}

resource "openstack_sharedfilesystem_sharetype_access_v2" "sharetypes_access" {
for_each = var.sharetypes_access

share_type_id = each.value.sharetype_name != null ? openstack_sharedfilesystem_sharetype_v2.sharetypes[each.value.sharetype_name].id : each.value.share_type_id
project_id = each.value.project != null ? openstack_identity_project_v3.project[each.value.project].id : each.value.project_id
}
121 changes: 119 additions & 2 deletions variables.tf
Original file line number Diff line number Diff line change
Expand Up @@ -130,14 +130,14 @@ variable "networks" {
mtu: Optional number
port_security_enabled: Optional bool, default false
tags: Optional list
segments: Optional list of maps. Keys are unique tofu resource names. Elements are maps with keys/values -
segments: Optional list of objects -
physical_network: Optional string
network_type: Optional string
segmentation_id: Optional number

subnets: Optional map -
key: Required string, tofu resource name
name: Require string, openstack name
name: Required string, openstack name
region: Optional string
cidr: Optional string
ip_version: Optional number, default 4
Expand All @@ -146,8 +146,13 @@ variable "networks" {
dns_nameservers: Optional list
dns_publish_fixed_ip: Optional bool, default false
service_types: Optional list
subnetpool_id: Optional string
prefix_length: Optional number
no_gateway: Optional bool
tags: Optional list
allocation_pool: Optional list of objects -
start: Required string
end: Required string
EOT
type = map(
object({
Expand Down Expand Up @@ -337,6 +342,118 @@ variable "images"{
default = {}
}

variable "sharetypes" {
description = <<-EOT
Mapping of sharetype definitions. Key is sharetype name. Values are mappings with keys/values:
description: Optional string
is_public: Optional bool, default true
extra_specs: Required map
driver_handles_share_servers: Required bool
snapshot_support: Optional bool
share_backend_name: Required string
vast_vip_pool_name: Required string, tofu resource vippool name
EOT
type = map(
object({
description = optional(string)
is_public = optional(bool, true)

extra_specs = optional(
object({
driver_handles_share_servers = bool
snapshot_support = optional(bool, null)
share_backend_name = string
vast_vip_pool_name = string
})
)
})
)
default = {}
}

variable "sharetypes_access" {
description = <<-EOT
Mappings of sharetype access definitions. Key is tofu sharetype access resource name. Values are mappings with keys/values:
sharetype_name: Optional string, tofu sharetype resource name, overrides share_type_id
share_type_id: Optional string, overridden by sharetype_name
project: Optional string, tofu project resource name
project_id: Optional string
EOT
type = map(
object({
sharetype_name = optional(string)
share_type_id = optional(string)
project = optional(string)
project_id = optional(string)
})
)
default = {}
}

variable "vippools" {
description = <<-EOT
Map of vippools. Key is tofu resource name. Values are mappings with keys/values:
name: Optional string, if not provided network is used to template name of format "openstack_vlan_<segmentation_id>"

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Surely we just use the key? This just seems to make it really unclear to me, what am I missing?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The name will be the name in VAST, both Hollie and Stig used the format of openstack_vlan_<segmentation_id> , because the network is created at the same time the segmentation_id is not known, so this ensures the vippool from that network is named in that format. But you can override that just by setting the name = "..." , I guess it would be best to ask to @oneswig or @holliefae if this is a required/preferred naming for all VAST vippools.

network: Optional string, tofu network resource name, used to template name and vlan if provided (using segmentation_id)
vlan: Optional number
role: Optional string
subnet_cidr: Optional number
tenant_id: Optional string, overridden by vast_tenant
vast_tenant: Optional string, vast tenant name, overrides tenant_id
vip_ranges: Optional list of objects -
subnet: Required string, tofu subnet resource name
start: Required number
end: Required number
ip_ranges: Optional list of strings.
EOT
type = map(
object({
name = optional(string)
network = optional(string)
vlan = optional(number)
role = optional(string)
subnet_cidr = optional(number)
tenant_id = optional(string)
vast_tenant = optional(string)
# may need renaming
vip_ranges = optional(list(object({
subnet = string
start = number
end = number
})), [])
ip_ranges = optional(list(list(string)), null)
})
)
default = {}
}

variable "vast_tenants" {
description = <<-EOT
Map of vast tenants. Key is tofu resource name. Values are mappings with keys/values:
allow_locked_users: Optional bool
allow_disabled_users: Optional bool
client_ranges: Optional list of objects, overridden by client_ip_ranges
subnet: Required string, tofu subnet resource name
start: Required number
end: Required number
client_ip_ranges: Optional list, overrides client_ip_ranges
EOT
type = map(
object({
allow_locked_users = optional(bool, null)
allow_disabled_users = optional(bool, null)
# may need renaming
client_ranges = optional(list(object({
subnet = string
start = number
end = number
})), [])
client_ip_ranges = optional(list(list(string)), [])
})
)
default = {}
}

# TODO: more outputs?
output "projects" {
#value = {for k, v in openstack_identity_project_v3.project: k => v.id}
Expand Down
31 changes: 31 additions & 0 deletions vast.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
resource "vastdata_vip_pool" "vippools" {
for_each = var.vippools

name = each.value.name != null ? (each.value.name) : (each.value.network != null ? format("openstack_vlan_%04d",
one(openstack_networking_network_v2.networks[each.value.network].segments).segmentation_id)
: each.key)
vlan = each.value.vlan != null ? (each.value.vlan) : one(openstack_networking_network_v2.networks[each.value.network].segments).segmentation_id
role = lookup(each.value, "role", null)
subnet_cidr = lookup(each.value, "subnet_cidr", null)
tenant_id = (each.value.vast_tenant != null ? vastdata_tenant.vast_tenant[each.value.vast_tenant].id : each.value.tenant_id)
ip_ranges = each.value.ip_ranges != null ? (each.value.ip_ranges) : [
for r in each.value.vip_ranges : [
cidrhost(openstack_networking_subnet_v2.subnets[r.subnet].cidr, r.start),
cidrhost(openstack_networking_subnet_v2.subnets[r.subnet].cidr, r.end)
]
]
}

resource "vastdata_tenant" "vast_tenant" {
for_each = var.vast_tenants

name = each.key
allow_locked_users = lookup(each.value, "allow_locked_users", null)
allow_disabled_users = lookup(each.value, "allow_disabled_users", null)
client_ip_ranges = each.value.client_ip_ranges != null ? (each.value.client_ip_ranges) : [
for p in each.value.client_ranges : [
cidr(openstack_networking_subnet_v2.subnets[p.subnet].cidr, p.start),
cidr(openstack_networking_subnet_v2.subnets[p.subnet].cidr, p.end)
]
]
}