mirror of
https://codeberg.org/scottslowe/learning-tools.git
synced 2026-03-11 09:04:37 +00:00
Add example configurations for Terraform
Add Terraform-formatted configuration. Add JSON-formatted configuration. Add README with instructions on using these configurations.
This commit is contained in:
parent
92e63584aa
commit
98b186e5d3
9 changed files with 213 additions and 0 deletions
26
terraform/README.md
Normal file
26
terraform/README.md
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
# Using Terraform with OpenStack
|
||||
|
||||
These files were created to allow users to use an example Terraform ([http://terraform.io](http://terraform.io)) configuration with OpenStack. These files require a working Terraform installation and a working OpenStack environment.
|
||||
|
||||
## Contents
|
||||
|
||||
* **README.md**: This file you're currently reading.
|
||||
|
||||
* **tf-example**: This directory contains an example Terraform configuration written in Terraform format.
|
||||
|
||||
* **tf-json-example**: This directory contains an example Terraform configuration written in JSON format.
|
||||
|
||||
## Instructions
|
||||
|
||||
These instructions assume you've already installed Terraform. These instructions also assume that you have a working OpenStack environment against which to run the Terraform configurations.
|
||||
|
||||
1. Edit `provider.tf` or `provider.tf.json` with the correct username, tenant, password, and authentication URL for your OpenStack environment.
|
||||
2. Edit `vars.tf` or `vars.tf.json` to provide the correct values for image name, flavor, external network (for the logical router), SSH key pair, and floating IP pool.
|
||||
3. From either the `tf-example` or `tf-json-example` directory, run `terraform plan` to see what changes will be made.
|
||||
4. If you are happy with the output of #3, run `terraform apply`.
|
||||
|
||||
Enjoy!
|
||||
|
||||
## License
|
||||
|
||||
This material is licensed under the MIT License.
|
||||
40
terraform/tf-example/main.tf
Normal file
40
terraform/tf-example/main.tf
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
resource "openstack_networking_network_v2" "tf-net" {
|
||||
name = "tf-net"
|
||||
admin_state_up = "true"
|
||||
}
|
||||
|
||||
resource "openstack_networking_subnet_v2" "tf-subnet" {
|
||||
name = "tf-subnet"
|
||||
network_id = "${openstack_networking_network_v2.tf-net.id}"
|
||||
cidr = "192.168.200.0/24"
|
||||
ip_version = 4
|
||||
dns_nameservers = ["8.8.8.8","8.8.4.4"]
|
||||
}
|
||||
|
||||
resource "openstack_networking_router_v2" "tf-router" {
|
||||
name = "tf-router"
|
||||
admin_state_up = "true"
|
||||
external_gateway = "${var.external_gateway}"
|
||||
}
|
||||
|
||||
resource "openstack_networking_router_interface_v2" "tf-router-interface" {
|
||||
router_id = "${openstack_networking_router_v2.tf-router.id}"
|
||||
subnet_id = "${openstack_networking_subnet_v2.tf-subnet.id}"
|
||||
}
|
||||
|
||||
resource "openstack_compute_floatingip_v2" "tf-fip" {
|
||||
pool = "${var.pool}"
|
||||
depends_on = ["openstack_networking_router_interface_v2.tf-router-interface"]
|
||||
}
|
||||
|
||||
resource "openstack_compute_instance_v2" "tf-instance" {
|
||||
name = "tf-instance"
|
||||
image_name = "${var.image}"
|
||||
flavor_name = "${var.flavor}"
|
||||
key_pair = "${var.key_pair}"
|
||||
security_groups = ["default"]
|
||||
floating_ip = "${openstack_compute_floatingip_v2.tf-fip.address}"
|
||||
network {
|
||||
uuid = "${openstack_networking_network_v2.tf-net.id}"
|
||||
}
|
||||
}
|
||||
3
terraform/tf-example/output.tf
Normal file
3
terraform/tf-example/output.tf
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
output "address" {
|
||||
value = "${openstack_compute_floatingip_v2.tf-fip.address}"
|
||||
}
|
||||
6
terraform/tf-example/provider.tf
Normal file
6
terraform/tf-example/provider.tf
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
provider "openstack" {
|
||||
user_name = "demo"
|
||||
tenant_name = "demo"
|
||||
password = "password"
|
||||
auth_url = "http://openstack.domain.net:5000/v2.0"
|
||||
}
|
||||
19
terraform/tf-example/vars.tf
Normal file
19
terraform/tf-example/vars.tf
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
variable "image" {
|
||||
default = "<INSERT YOUR VALUE HERE>"
|
||||
}
|
||||
|
||||
variable "flavor" {
|
||||
default = "m1.small"
|
||||
}
|
||||
|
||||
variable "external_gateway" {
|
||||
default = "<INSERT YOUR VALUE HERE>"
|
||||
}
|
||||
|
||||
variable "key_pair" {
|
||||
default = "<INSERT YOUR VALUE HERE>"
|
||||
}
|
||||
|
||||
variable "pool" {
|
||||
default = "<INSERT YOUR VALUE HERE>"
|
||||
}
|
||||
71
terraform/tf-json-example/main.tf.json
Normal file
71
terraform/tf-json-example/main.tf.json
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
{
|
||||
"resource": {
|
||||
"openstack_networking_network_v2": {
|
||||
"tf-net": {
|
||||
"name": "tf-net",
|
||||
"admin_state_up": "true"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
"resource": {
|
||||
"openstack_networking_subnet_v2": {
|
||||
"tf-subnet": {
|
||||
"name": "tf-subnet",
|
||||
"network_id": "${openstack_networking_network_v2.tf-net.id}",
|
||||
"cidr": "192.168.200.0/24",
|
||||
"ip_version": 4,
|
||||
"dns_nameservers": [
|
||||
"8.8.8.8",
|
||||
"8.8.4.4"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
"resource": {
|
||||
"openstack_networking_router_v2": {
|
||||
"tf-router": {
|
||||
"name": "tf-router",
|
||||
"admin_state_up": "true",
|
||||
"external_gateway": "${var.external_gateway}"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
"resource": {
|
||||
"openstack_networking_router_interface_v2": {
|
||||
"tf-router-iface": {
|
||||
"router_id": "${openstack_networking_router_v2.tf-router.id}",
|
||||
"subnet_id": "${openstack_networking_subnet_v2.tf-subnet.id}"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
"resource": {
|
||||
"openstack_compute_floatingip_v2": {
|
||||
"tf-fip": {
|
||||
"pool": "${var.pool}",
|
||||
"depends_on": [
|
||||
"openstack_networking_router_interface_v2.tf-router-iface"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
"resource": {
|
||||
"openstack_compute_instance_v2": {
|
||||
"tf-instance": {
|
||||
"name": "tf-instance",
|
||||
"image_name": "${var.image}",
|
||||
"flavor_name": "${var.flavor}",
|
||||
"key_pair": "${var.key_pair}",
|
||||
"floating_ip": "${openstack_compute_floatingip_v2.tf-fip.address}",
|
||||
"security_groups": ["default"],
|
||||
"network": {
|
||||
"uuid": "${openstack_networking_network_v2.tf-net.id}"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
7
terraform/tf-json-example/output.tf.json
Normal file
7
terraform/tf-json-example/output.tf.json
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"output": {
|
||||
"address": {
|
||||
"value": "${openstack_compute_floatingip_v2.tf-fip.address}"
|
||||
}
|
||||
}
|
||||
}
|
||||
10
terraform/tf-json-example/provider.tf.json
Normal file
10
terraform/tf-json-example/provider.tf.json
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"provider": {
|
||||
"openstack": {
|
||||
"user_name": "demo",
|
||||
"tenant_name": "demo",
|
||||
"password": "password",
|
||||
"auth_url": "http://openstack.domain.net:5000/v2.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
31
terraform/tf-json-example/vars.tf.json
Normal file
31
terraform/tf-json-example/vars.tf.json
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
{
|
||||
"variable": {
|
||||
"image": {
|
||||
"default": "INSERT YOUR VALUE HERE"
|
||||
}
|
||||
},
|
||||
|
||||
"variable": {
|
||||
"flavor": {
|
||||
"default": "m1.small"
|
||||
}
|
||||
},
|
||||
|
||||
"variable": {
|
||||
"external_gateway": {
|
||||
"default": "INSERT YOUR VALUE HERE"
|
||||
}
|
||||
},
|
||||
|
||||
"variable": {
|
||||
"key_pair": {
|
||||
"default": "INSERT YOUR VALUE HERE"
|
||||
}
|
||||
},
|
||||
|
||||
"variable": {
|
||||
"pool": {
|
||||
"default": "INSERT YOUR VALUE HERE"
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue