Ansible Tower

Create the Ansible Tower Resource in Terraform to run Ansible Tower Job Templates

To learn more about this OneFuse module, refer to Ansible Tower.

Prerequisites

  1. Configure the OneFuse Provider
  2. Review an overview on OneFuse Modules with Terraform

Steps

  1. Create variables.tf file
  2. Create main.tf file
  3. Run terraform commands to deploy a OneFuse Ansible Tower Deployment and run Provision Job Template(s):
    1. terraform init
    2. terraform plan
    3. terraform apply
  4. Run terraform command to destroy OneFuse Ansible Tower Deployment and run Deprovision Job Template(s), if any:
    • terraform destroy

Create variables.tf

Add the following in the variables.tf file. Update the values as needed.

// SAMPLE VARIABLES.TF FILE CONFIGURATIONS

variable "onefuse_scheme" {
  type    = string
  default = "https"
}

variable "onefuse_address" {
  type = string
}

variable "onefuse_port" {
  type    = string
  default = "443"
}

variable "onefuse_user" {
  type    = string
  default = "admin"
}

variable "onefuse_password" {
  type    = string
  default = "admin"
}

variable "onefuse_verify_ssl" {
  type    = bool
  default = false
}

variable "workspace_url" {
  type    = string
  default = ""              // Default
}

variable "template_properties" {
  type    = map
  default = {
    "Environment" = "d"     //p for production or d for development
    "Location"    = "w"     //e for East or w for West
    "Application" = "wp"    //wp for wordpress or iis for IIS
    "OS"          = "l"     //l for Linux or w for Windows
  }
}

Create main.tf for Ansible Tower resource

Add the following in the main.tf file. Update the values as needed.

Parameter references

The following defines the function of each Ansible Tower specific parameter.

Parameter Name Required? Notes
policy_id Required OneFuse Module Policy ID (integer).
workspace_url Optional OneFuse Workspace URL path. Use "" for the default workspace.
template_properties Optional Additional properties that are referenced within the Policy.

Ansible Tower specific parameters:

Parameter Name Required? Notes
limit Optional Ansible Tower Policy Limit. Pattern matches hosts. For example, dev-* will match all hosts that start with “dev-”.
hosts Optional List of specific hosts to execute against. Similar to limit, but will match against exact hostnames.
timeouts Optional Timeout (in minutes) for create and/or delete operations. (See timeouts block example below.)

Timeouts block example:

timeouts {
  create = "20m"
  delete = "20m"
}

Sample main.tf

// Terraform OneFuse Provider
terraform {
  required_providers {
    onefuse = {
      source  = "CloudBoltSoftware/onefuse"
      version = ">= 1.50.2"
   }
  }
  required_version = ">= 0.13"
}

// Inititalize OneFuse Provider
provider "onefuse" {
  scheme     = var.onefuse_scheme
  address    = var.onefuse_address
  port       = var.onefuse_port
  user       = var.onefuse_user
  password   = var.onefuse_password
  verify_ssl = var.onefuse_verify_ssl
}

// Data Source for Ansible Tower Policy - lookup Policy ID by Policy Name
data "onefuse_ansible_tower_policy" "ansible_tower_policy" {
  name = "my_policy_name"  // Replace with Policy Name
}

// Resource for Ansible Tower
resource "onefuse_ansible_tower_deployment" "my_ansible_tower_deployment" {
  policy_id           = data.onefuse_ansible_tower_policy.ansible_tower_policy.id // Refers to Data Source to get Policy ID
  workspace_url       = ""
  template_properties = var.template_properties
  limit               = "..."
  hosts               = ["host1", "host2"]
  timeouts {
    create    = "20m"
    delete    = "20m"
  }
}

// Outputs for Resource
locals {
  fqdn = "localhost" //fqdn = format("%s.%s", var.hostname, var.dns_suffix)
}

output "ansible_output" {
  value = jsondecode(onefuse_ansible_tower_deployment.my_ansible_tower_deployment.provisioning_job_results)
}

output "ansible_hosts" {
  value = onefuse_ansible_tower_deployment.my_ansible_tower_deployment.hosts
}

output "ansible_inventory" {
  value = onefuse_ansible_tower_deployment.my_ansible_tower_deployment.inventory_name
}

OneFuse module: Ansible Tower import

Create main.tf for Ansible resource import

Add the following in the main.tf file.

The following parameter is required to import an Ansible object.

Ansible Tower specific parameters:

Parameter Name Required? Notes
policy_id Required OneFuse Module Policy ID (integer).

Sample main.tf

// Terraform OneFuse Provider
terraform {
  required_providers {
    onefuse = {
      source  = "CloudBoltSoftware/onefuse"
      version = ">= 1.50.2"
   }
  }
  required_version = ">= 0.13"
}


// Inititalize OneFuse Provider
// Create the separate variables.tf file or hard code the values.
provider "onefuse" {
  scheme     = var.onefuse_scheme
  address    = var.onefuse_address
  port       = var.onefuse_port
  user       = var.onefuse_user
  password   = var.onefuse_password
  verify_ssl = var.onefuse_verify_ssl
}

resource "onefuse_ansible_tower_deployment" "my_ansible_tower_deployment" {
  policy_id       = 1
}

Run the following command to import the OneFuse Ansible resource.

terraform import <resource_type>.<resource_name> <resource_id>
terraform import onefuse_ansible_tower_deployment.my_ansible_tower_deployment 2