HCL Language – 21 – Set Functions in HCL

Set Functions in HCL

HCL (HashiCorp Configuration Language) is a versatile configuration language used in tools like Terraform, allowing users to define infrastructure as code. Among its powerful features are set functions, which facilitate operations on sets of elements. In this guide, we’ll explore the set functions available in HCL and how they can be used effectively in your configurations.

Creating Sets

Before we delve into set functions, it’s essential to understand how to create sets in HCL. Sets are defined using curly braces and can contain any data type. Let’s create a simple set as an example:


variable "fruits" {
  type    = set(string)
  default = ["apple", "banana", "cherry"]
}
    

In this example, we define a set of strings representing different fruits.

Set Operations

HCL provides a variety of set functions to perform operations such as union, intersection, difference, and more on sets. These functions enable you to manipulate sets efficiently within your configurations.

Union

The union function combines two sets, eliminating duplicate elements.


variable "moreFruits" {
  type    = set(string)
  default = ["banana", "date", "fig"]
}

output "allFruits" {
  value = setunion(var.fruits, var.moreFruits)
}
    

In this example, we take the union of two sets, “fruits” and “moreFruits,” resulting in a set containing all unique fruit names.

Intersection

The intersection function returns elements that exist in both sets.


output "commonFruits" {
  value = setintersection(var.fruits, var.moreFruits)
}
    

In this example, we find the intersection of “fruits” and “moreFruits,” which gives us a set containing fruits common to both sets.

Difference

The difference function returns elements that exist in one set but not the other.


output "uniqueFruits" {
  value = setdifference(var.fruits, var.moreFruits)
}
    

In this example, we find the difference between “fruits” and “moreFruits,” providing a set of fruits unique to the “fruits” set.

Set Functions for Manipulation

HCL offers functions to manipulate sets, such as adding, removing, and checking for membership.

Add

The setunion function allows you to add elements to a set while eliminating duplicates.


variable "newFruit" {
  type    = string
  default = "apple"
}

output "updatedFruits" {
  value = setunion(var.fruits, list(var.newFruit))
}
    

In this example, we add a new fruit to the “fruits” set using setunion.

Remove

The setdifference function can be used to remove elements from a set.


variable "removedFruit" {
  type    = string
  default = "banana"
}

output "remainingFruits" {
  value = setdifference(var.fruits, list(var.removedFruit))
}
    

Here, we remove a fruit from the “fruits” set using setdifference.

Membership Check

The setintersection function can be employed to check if an element is present in a set.


variable "checkFruit" {
  type    = string
  default = "banana"
}

output "isFruitAvailable" {
  value = length(setintersection(var.fruits, list(var.checkFruit))) > 0
}
    

In this example, we check if the “checkFruit” is available in the “fruits” set.

Summary

Set functions in HCL are essential for performing set operations and manipulations in your configurations. Whether you need to combine sets, find common elements, or modify sets by adding or removing elements, HCL’s set functions provide the tools necessary to work with sets effectively in your Terraform definitions.