Mastering Terraform Contains and Strcontains Functions
Tags: terraform, devops, learning, cloud
Published: 2024-05-30 15:39:56

As a Senior DevOps Engineer and  [Docker Captain](https://www.docker.com/captains/vladimir-mikhalev/), I'd like to delve into the functionalities of Terraform's **`contains`** and **`strcontains`** functions. These tools are indispensable for crafting dynamic infrastructures and offer a fine-tuned approach to managing your resources efficiently.

## Understanding the Terraform "contains" Function

The **`contains`** function in Terraform is a collection-based utility designed to ascertain whether a specific value exists within a given list or set. The function is straightforward; it returns **`true`** if the specified value is found, and **`false`** if it is not.

Here’s the syntax for the **`contains`** function:

```bash
contains(list, value)
```

- **list:** This parameter represents the list, map, or set that you are searching within.
- **value:** This is the value you are looking for in the specified list or set.

For a comprehensive understanding, refer to the official [Terraform documentation on functions](https://www.terraform.io/language/functions).

### Practical Examples of "contains"

Consider a scenario where you need to verify the presence of a virtual machine size in a specific Azure region before deployment:

```hcl
variable "region" {
  description = "Azure region"
  type        = string
  default     = "uksouth"
}

variable "vm_size" {
  description = "VM size"
  type        = string
  default     = "Standard_DS2_v2"
}

data "azurarm_virtual_machine_sizes" "example" {
  location = var.region
}

output "vm_size_supported" {
  value = contains(data.azurerm_virtual_machine_sizes.example.sizes, var.vm_size)
}
```

This example demonstrates how **`contains`** can be effectively used to prevent deployment errors by ensuring the necessary resources are available in the specified region.

## Exploring the Terrafront "strcontains" Function

Moving on to string operations, the **`strcontains`** function checks for the presence of a substring within a given string, proving especially useful in parsing and conditional logic based on textual data.

Here’s how you define it:

```bash
strcontains(string, substr)
```

- **string:** The main string in which to search for the substring.
- **substr:** The substring you're trying to find within the main string.

### Example Usage of "strcontains"

Suppose you want to check if a particular configuration tag is part of a server's setup:

```bash
strcontains("us-east-1b-optimal", "optimal")
```

This would return **`true`**, indicating that the "optimal" configuration is indeed a part of the server's setup description.

## Conclusion

Both **`contains`** and **`strcontains`** are vital in a Terraform practitioner’s toolkit, facilitating precise control and checks within infrastructure code. They empower you to implement complex logic based on the data structure and string content dynamically.

Moreover, as the landscape of Terraform evolves, it's crucial to stay updated with the latest practices and community-driven alternatives like OpenTofu, which continue to push the boundaries of what's possible with open-source infrastructure as code tools. Visit [OpenTofu’s website](https://opentofu.org/) for more details on their offerings.

## My Services

💼 Take a look at my [service catalog](https://www.heyvaldemar.com/services/) and find out how we can make your technological life better. Whether it's increasing the efficiency of your IT infrastructure, advancing your career, or expanding your technological horizons — I'm here to help you achieve your goals. From DevOps transformations to building gaming computers — let's make your technology unparalleled!

## Refill the Author's Coffee Supplies

💖 [PayPal](https://www.paypal.com/paypalme/heyValdemarCOM)
🏆 [Patreon](https://www.patreon.com/heyValdemar)
💎 [GitHub](https://github.com/sponsors/heyValdemar)
🥤 [BuyMeaCoffee](https://www.buymeacoffee.com/heyValdemar)
🍪 [Ko-fi](https://ko-fi.com/heyValdemar)