Configure Consul-Terraform-Sync
A task captures a network automation process by defining which network resources to update on a given condition. Configure CTS with one or more tasks that contain a list of Consul services, a Terraform module, and various Terraform providers.
Within the task block, the list of services for a task represents the service layer that drives network automation. The is the discovery location of the Terraform module that defines the network automation process for the task. The condition
, not shown below, defaults to the services condition when unconfigured such that network resources are updated on changes to the list of services over time.
task {
name = "website-x"
description = "automate services for website-x"
module = "namespace/example/module"
version = "1.0.0"
providers = ["myprovider"]
condition "services" {
names = ["web", "api"]
}
}
Configuring Terraform providers within CTS requires 2 config components. The first component is required within the . All providers configured for CTS must be listed within the required_providers
stanza to satisfy a Terraform v0.13+ requirement for Terraform to discover and install them. The providers listed are later organized by CTS to be included in the appropriate Terraform configuration files for each task.
driver "terraform" {
required_providers {
myprovider = {
source = "namespace/myprovider"
version = "1.3.0"
}
}
The second component for configuring a provider is the . This block resembles provider blocks for Terraform configuration and has the same responsibility for understanding API interactions and exposing resources for a specific infrastructure platform.
terraform_provider "myprovider" {
address = "myprovider.example.com"
}
Piecing it all together, the configuration file for CTS will have several HCL blocks in addition to other options for configuring the CTS daemon: task
, driver.terraform
, and terraform_provider
blocks.
An example HCL configuration file is shown below to automate one task to execute a Terraform module on the condition when there are changes to two services.
cts-example-config.hcl
log_level = "info"
syslog {
enabled = true
}
consul {
address = "consul.example.com"
}
task {
name = "website-x"
description = "automate services for website-x"
module = "namespace/example/module"
providers = ["myprovider"]
condition "services" {
}
buffer_period {
min = "10s"
}
}
driver "terraform" {
log = true
required_providers {
myprovider = {
source = "namespace/myprovider"
version = "1.3.0"
}
}
}
terraform_provider "myprovider" {
}