Ansible Tower
4 minute read
To learn more about this OneFuse module, refer to Ansible Tower.
Prerequisites
- Configure the OneFuse Provider
- Review an overview on OneFuse Modules with Terraform
Steps
- Create
variables.tffile - Create
main.tffile - Run terraform commands to deploy a OneFuse Ansible Tower Deployment and run Provision Job Template(s):
terraform initterraform planterraform apply
- 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.
It is a best practice to separate configurations into identifiable files, refer to Best practices for OneFuse modules.
The sample below shows all configurations in one variables.tf file for simplicity.
// 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