Star 0
                                
                
            
                    
                    Version 1.0.1
                
                
 Maintainers 
                
                            
                            support[at]europeanweather.cloud
                            
                                                                      
                  License
                
              
                                  
                              
                  Support level
                
              
                                  EWC
          
                    Category
                  
                                                                        Network
                                                            
                  Technology
                
                                                      Terraform Module
                                                OpenStack Security Group
💡 The module supports complex rule sets, such as those required to create a subnet security group for IPA services (i.e. Kerberos, LDAP and DNS).
This Terraform module creates and configures an OpenStack Security Group with a user-defined set of rules. It is designed to be reusable, flexible, and aligned with Terraform best practices for OpenStack deployments.
More specifically, the module:
- Creates an OpenStack Security Group with customizable name and description.
 - Attaches an arbitrary number of user-defined rules to the security group.
 
Usage
module "ipa_security_group" {
  source = "/path/to/terraform/module"
  security_group_name = "ipa"
  security_group_rules = [
    {
      direction        = "ingress"
      ether_type       = "IPv4"
      protocol         = "tcp"
      port_range_min   = 80
      port_range_max   = 80
      remote_ip_prefix = "10.0.0.0/0"
    },
    {
      direction        = "ingress"
      ether_type       = "IPv4"
      protocol         = "udp"
      port_range_min   = 123
      port_range_max   = 123
      remote_ip_prefix = "10.0.0.0/0"
    },
    {
      direction        = "ingress"
      ether_type       = "IPv4"
      protocol         = "tcp"
      port_range_min   = 88
      port_range_max   = 88
      remote_ip_prefix = "10.0.0.0/0"
    },
    {
      direction        = "ingress"
      ether_type       = "IPv4"
      protocol         = "udp"
      port_range_min   = 88
      port_range_max   = 88
      remote_ip_prefix = "10.0.0.0/0"
    },
    {
      direction        = "ingress"
      ether_type       = "IPv4"
      protocol         = "tcp"
      port_range_min   = 53
      port_range_max   = 53
      remote_ip_prefix = "10.0.0.0/0"
    },
    {
      direction        = "ingress"
      ether_type       = "IPv4"
      protocol         = "udp"
      port_range_min   = 53
      port_range_max   = 53
      remote_ip_prefix = "10.0.0.0/0"
    },
    {
      direction        = "ingress"
      ether_type       = "IPv4"
      protocol         = "tcp"
      port_range_min   = 389
      port_range_max   = 389
      remote_ip_prefix = "10.0.0.0/0"
    },
    {
      direction        = "ingress"
      ether_type       = "IPv4"
      protocol         = "tcp"
      port_range_min   = 22
      port_range_max   = 22
      remote_ip_prefix = "0.0.0.0/0"
    },
    {
      direction        = "ingress"
      ether_type       = "IPv4"
      protocol         = "tcp"
      port_range_min   = 636
      port_range_max   = 636
      remote_ip_prefix = "10.0.0.0/0"
    },
    {
      direction        = "ingress"
      ether_type       = "IPv4"
      protocol         = "tcp"
      port_range_min   = 464
      port_range_max   = 464
      remote_ip_prefix = "10.0.0.0/0"
    },
    {
      direction        = "ingress"
      ether_type       = "IPv4"
      protocol         = "udp"
      port_range_min   = 464
      port_range_max   = 464
      remote_ip_prefix = "10.0.0.0/0"
    },
    {
      direction        = "ingress"
      ether_type       = "IPv4"
      protocol         = "tcp"
      port_range_min   = 443
      port_range_max   = 443
      remote_ip_prefix = "10.0.0.0/0"
    }
  ]
  tags = {
    environment       = "production"
    project           = "ewc"
    provisioning-tool = "terraform"
  }
}
Inputs
| Name | Description | Type | Default | Required | 
|---|---|---|---|---|
security_group_name | 
Name of the security group. Example: ipa | 
string | 
n/a | yes | 
security_group_description | 
Description of the security group | string | 
n/a | no | 
security_group_rules | 
List of security group rules | list(object({direction = string, ether_type = string, protocol = string, port_range_min = number, port_range_max = number, remote_ip_prefix = string})) | 
n/a | yes | 
tags | 
Map of tags to assign to the security group | map(string) | 
{} | 
no | 
Security Group Rules Input Structure
Each rule in the security_group_rules list is an object with the following attributes:
direction: The direction of the rule (ingressoregress).ether_type: The ether type (IPv4orIPv6).protocol: The protocol (e.g.,tcp,udp,icmp, ornullfor any).port_range_min: The minimum port number (1-65535, ornullfor protocols likeicmp).port_range_max: The maximum port number (1-65535, ornullfor protocols likeicmp).remote_ip_prefix: The remote IP prefix in CIDR notation (e.g.,10.0.0.0/0).
SW Bill of Materials (SBoM)
Third-party components used in the working environment.
The following components will be included in the working environment:
| Component | Version | License | Home URL | 
|---|---|---|---|
| terraform-provider-openstack | 1.53.0 | MPL-2.0 | https://github.com/terraform-provider-openstack/terraform-provider-openstack | 
Outputs
| Name | Description | 
|---|---|
security_group_id | 
ID of the created security group | 
security_group_name | 
Name of the created security group | 
security_group_rules | 
List of created security group rule IDs | 
Other
          Deployable