Skip to content

Instantly share code, notes, and snippets.

@mvasilenko
Last active December 5, 2018 15:30
Show Gist options
  • Save mvasilenko/ae911577d2e1df05b7220fae51547aad to your computer and use it in GitHub Desktop.
Save mvasilenko/ae911577d2e1df05b7220fae51547aad to your computer and use it in GitHub Desktop.
resource "opentelekomcloud_dns_zone_v2" "dnszone" {
name = "${var.dnszone}"
email = "info@${var.dnszone}"
ttl = 6000
}
resource "opentelekomcloud_dns_recordset_v2" "test_a" {
zone_id = "${opentelekomcloud_dns_zone_v2.dnszone.id}"
name = "${var.dnszone}"
ttl = 300
type = "A"
records = ["${opentelekomcloud_networking_floatingip_v2.floatip_test_addr.address}"]
}
data "opentelekomcloud_images_image_v2" "sd_image" {
name = "${var.image_name}"
}
resource "opentelekomcloud_compute_instance_v2" "sd_test_instance" {
count = "1"
name = "${var.dnszone}"
image_name = "${var.image_name}"
flavor_name = "s1.medium"
key_pair = "${opentelekomcloud_compute_keypair_v2.keypair.name}"
security_groups = [
"${opentelekomcloud_compute_secgroup_v2.secgrp_web.name}"
]
availability_zone = "${var.availability_zone}"
user_data = "${data.template_cloudinit_config.cloud-init-data.rendered}"
network {
uuid = "${opentelekomcloud_networking_network_v2.otc_test_network.id}"
}
}
# template provisioning - include docker-compose file
data "template_file" "docker-compose-file" {
template = "${file("files/${var.docker_compose_file}")}"
}
# template provisioning - include - cloud-init file
data "template_file" "cloud-init-cfg" {
template = "${file("files/${var.cloud_init_cfg}")}"
# set vars for cloud-init
vars {
fqdn = "${var.dnszone}"
# docker compose file names and content
docker_compose_file = "${var.docker_compose_file}"
docker_compose_content = "${base64gzip(data.template_file.docker-compose-file.rendered)}"
}
}
# cloudinit provisioning - get rendered data from data sources and put it into cloud-init file
data "template_cloudinit_config" "cloud-init-data" {
gzip = false
base64_encode = false
# include cloud-init.cfg rendered from template
part {
filename = "${var.cloud_init_cfg}"
content_type = "text/cloud-config"
content = "${data.template_file.cloud-init-cfg.rendered}"
}
}
resource "opentelekomcloud_blockstorage_volume_v2" "sd_test_data_disk" {
count = "1"
name = "${var.dnsname}-data-disk"
size = "${var.disk_size_gb}"
lifecycle { ignore_changes = [ "instance" ]}
availability_zone = "${var.availability_zone}"
}
resource "opentelekomcloud_compute_volume_attach_v2" "volume_attach" {
count = "1"
instance_id = "${opentelekomcloud_compute_instance_v2.sd_test_instance.id}"
volume_id = "${opentelekomcloud_blockstorage_volume_v2.sd_test_data_disk.id}"
}
resource "opentelekomcloud_compute_keypair_v2" "keypair" {
count = "1"
name = "${var.dnsname}-key"
public_key = "${file("${var.ssh_pub_key}")}"
}
resource "opentelekomcloud_networking_network_v2" "otc_test_network" {
count = "1"
name = "${var.dnsname}-network"
admin_state_up = "true"
lifecycle { ignore_changes = [ "instance" ]}
}
resource "opentelekomcloud_networking_subnet_v2" "otc_test_subnet" {
name = "${var.dnsname}-subnet"
count = "1"
network_id = "${opentelekomcloud_networking_network_v2.otc_test_network.id}"
cidr = "${var.subnet_cidr}"
ip_version = 4
dns_nameservers = ["8.8.8.8", "8.8.4.4"]
lifecycle { ignore_changes = [ "instance" ]}
}
# get external IP
resource "opentelekomcloud_networking_floatingip_v2" "floatip_test_addr" {
pool = "admin_external_net"
}
# attach it to SSH server
resource "opentelekomcloud_compute_floatingip_associate_v2" "floatip_test_map" {
floating_ip = "${opentelekomcloud_networking_floatingip_v2.floatip_test_addr.address}"
instance_id = "${opentelekomcloud_compute_instance_v2.sd_test_instance.id}"
}
resource "opentelekomcloud_networking_router_v2" "otc_test_router" {
count = "1"
name = "${var.dnsname}-router"
admin_state_up = "true"
external_gateway = "0a2228f2-7f8a-45f1-8e09-9039e1d09975"
}
resource "opentelekomcloud_networking_router_interface_v2" "interface" {
count = "${var.instance_count}"
router_id = "${opentelekomcloud_networking_router_v2.otc_test_router.id}"
subnet_id = "${opentelekomcloud_networking_subnet_v2.otc_test_subnet.id}"
}
resource "opentelekomcloud_compute_secgroup_v2" "secgrp_web" {
count = "${var.instance_count}"
name = "${var.dnsname}-secgrp"
description = "${var.dnsname} Security Group"
rule {
from_port = 22
to_port = 22
ip_protocol = "tcp"
cidr = "0.0.0.0/0"
}
rule {
from_port = 80
to_port = 80
ip_protocol = "tcp"
cidr = "0.0.0.0/0"
}
rule {
from_port = 443
to_port = 443
ip_protocol = "tcp"
cidr = "0.0.0.0/0"
}
rule {
from_port = -1
to_port = -1
ip_protocol = "icmp"
cidr = "0.0.0.0/0"
}
lifecycle { ignore_changes = [ "instance" ]}
}
provider "opentelekomcloud" {
user_name = "${var.username}"
password = "${var.password}"
tenant_name = "${var.tenant_name}"
domain_name = "${var.domain_name}"
auth_url = "${var.endpoint}"
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment