From 8102cdc7f9709f591a46ef2e8a747fc36811f2d7 Mon Sep 17 00:00:00 2001 From: jianli-97 Date: Tue, 25 Jul 2023 10:43:40 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E5=85=85terraform=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E6=A8=A1=E6=9D=BF=E6=96=87=E4=BB=B6=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/json/main.tf.json | 25 ---------- data/templates/openstack/main.tf.template | 61 +++++++++++++++++++---- 2 files changed, 50 insertions(+), 36 deletions(-) delete mode 100644 data/json/main.tf.json diff --git a/data/json/main.tf.json b/data/json/main.tf.json deleted file mode 100644 index 927d0b7..0000000 --- a/data/json/main.tf.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "openstack": { - "user_name": "XXXXXXXXXX", - "password": "XXXXXXXXXX", - "tenant_name": "XXXXXXXXXX", - "auth_url": "XXXXXXXXXX", - "region": "XXXXXXXXXX" - }, - "flavor": { - "name": "XXXXXXXXXX", - "ram": "XXXXXXXXXX", - "vcpus": "XXXXXXXXXX", - "disk": "XXXXXXXXXX", - "is_public": "true" - }, - "instance": { - "count": "XXXXXXXXXX", - "name": "XXXXXXXXXX", - "image_name": "XXXXXXXXXX", - "key_pair": "XXXXXXXXXX" - }, - "floatip": { - "pool": "XXXXXXXXXX" - } -} \ No newline at end of file diff --git a/data/templates/openstack/main.tf.template b/data/templates/openstack/main.tf.template index 20583d2..ec69fa5 100644 --- a/data/templates/openstack/main.tf.template +++ b/data/templates/openstack/main.tf.template @@ -1,8 +1,8 @@ terraform { - required_version = ">= 0.14.0" required_providers { openstack = { - source = "XXXXXXXXXX" + source = "terraform-provider-openstack/openstack" + version = "1.52.1" } } } @@ -15,6 +15,20 @@ provider "openstack" { region = "{{.Openstack.Region}}" } +resource "openstack_images_image_v2" "image" { + name = "{{.Image.Name}}" + + image_source_url = "{{.Image.Image_source_url}}" + image_source_username = "{{.Image.Image_source_username}}" + image_source_password = "{{.Image.Image_source_password}}" + web_download = "{{.Image.Web_download}}" + + local_file_path = "{{.Image.local_file_path}}" + + container_format = "{{.Image.Container_format}}" + disk_format = "{{.Image.Disk_format}}" +} + resource "openstack_compute_flavor_v2" "flavor" { name = "{{.Flavor.Name}}" ram = "{{.Flavor.Ram}}" @@ -23,17 +37,41 @@ resource "openstack_compute_flavor_v2" "flavor" { is_public = "{{.Flavor.Is_public}}" } +resource "openstack_compute_keypair_v2" "keypair" { + name = "{{.Keypair.Name}}" + public_key = "{{.Keypair.Public_key}}" +} + +resource "openstack_compute_secgroup_v2" "secgroup" { + name = "{{.Secgroup.Name}}" + description = "{{.Secgroup.Name}}" + + rule { + from_port = 22 + to_port = 22 + 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" + } +} + resource "openstack_compute_instance_v2" "instance" { count = "{{.Instance.Count}}" name = "{{.Instance.Name}}" - image_name = "{{.Instance.Image_name}}" + image_name = openstack_images_image_v2.image.name flavor_name = openstack_compute_flavor_v2.flavor.name - key_pair = "{{.Instance.Key_pair}}" - security_groups = ["XXXXXXXXXX"] - user_data = "${file("XXXXXXXXXX")}" + key_pair = openstack_compute_keypair_v2.keypair.name + security_groups = [openstack_compute_secgroup_v2.secgroup.name] + user_data = "{{.Instance.User_data}}" network { - name = "XXXXXXXXXX" + name = "{{.Instance.Network.Name}}" } } @@ -42,15 +80,16 @@ resource "openstack_networking_floatingip_v2" "floatip" { pool = "{{.Floatip.Pool}}" } -resource "openstack_compute_floatingip_associate_v2" "floatip" { - count = length(openstack_compute_instance_v2.instance) - instance_id = openstack_compute_instance_v2.instance.*.id[count.index] +resource "openstack_compute_floatingip_associate_v2" "fip_associate" { + count = length(openstack_compute_instance_v2.instance) floating_ip = openstack_networking_floatingip_v2.floatip.*.address[count.index] + instance_id = openstack_compute_instance_v2.instance.*.id[count.index] } output "instance_info" { value = { - floating_ip_addresses = openstack_networking_floatingip_v2.floatip.*.address instance_status = openstack_compute_instance_v2.instance.*.power_state + access_ip_v4 = openstack_compute_instance_v2.instance.*.access_ip_v4 + floating_ip = openstack_networking_floatingip_v2.floatip.*.address } } -- Gitee