@@ -1 +1 @@ | |||||
terraform/.terraform | |||||
.terraform |
@@ -0,0 +1,51 @@ | |||||
variable "ansible_inventory_filename" { | |||||
type = string | |||||
default = "inventory.json" | |||||
} | |||||
locals { | |||||
vm_hosts_with_groups = { | |||||
for hostname, host in var.vm_hosts: hostname => host if contains(keys(host),"groups") | |||||
} | |||||
vm_hosts_without_groups = { | |||||
for hostname, host in var.vm_hosts: hostname => host if !contains(keys(host),"groups") | |||||
} | |||||
vm_groups = distinct(flatten(values(local.hetzner_vm_hosts_with_groups)[*].groups)) | |||||
ansible_inventory = { | |||||
all = { | |||||
hosts = { | |||||
for hostname,host in var.vm_hosts: hostname => {} | |||||
} | |||||
children = merge( | |||||
{ | |||||
for group in local.vm_groups: group => { | |||||
hosts = { | |||||
for hostname, host in local.vm_hosts_with_groups: | |||||
hostname => {} | |||||
if contains(host.groups,group) | |||||
} | |||||
} | |||||
},{ | |||||
for providername, provider in local.providers: "provider_${providername}" => { | |||||
hosts = { | |||||
for hostname, host in local.vm_hosts_with_groups: | |||||
hostname => local.providers[host.provider].hostvars[hostname] | |||||
if host.provider == providername | |||||
} | |||||
} | |||||
} | |||||
) | |||||
} | |||||
} | |||||
} | |||||
output "ansible_inventory" { | |||||
value = local.ansible_inventory | |||||
} | |||||
resource "local_file" "foo" { | |||||
content = jsonencode(local.ansible_inventory) | |||||
filename = var.ansible_inventory_filename | |||||
file_permission = "0644" | |||||
directory_permission = "0755" | |||||
} |
@@ -0,0 +1,14 @@ | |||||
--- | |||||
- hosts: | |||||
- controllers | |||||
- nameservers | |||||
remote_user: root | |||||
roles: | |||||
- role: common | |||||
- hosts: | |||||
- controllers | |||||
remote_user: root | |||||
roles: | |||||
- role: tools |
@@ -0,0 +1,10 @@ | |||||
--- | |||||
- hosts: controllers | |||||
remote_user: root | |||||
roles: | |||||
#- role: nginx | |||||
#- role: gitea | |||||
#- role: buildbot | |||||
#- role: netbox | |||||
#- role: alerta |
@@ -1,18 +0,0 @@ | |||||
--- | |||||
- hosts: ovh_vms | |||||
remote_user: root | |||||
gather_facts: false | |||||
roles: | |||||
- role: terraform-vm | |||||
- hosts: localhost | |||||
tasks: | |||||
- debug: | |||||
msg: |- | |||||
to apply terraform updates run: | |||||
cd "{{playbook_dir}}/terraform" | |||||
terraform apply | |||||
# - terraform: | |||||
# project_path: "{{playbook_dir}}/terraform" |
@@ -0,0 +1,7 @@ | |||||
#terraform { | |||||
# backend "etcdv3" { | |||||
# endpoints = ["localhost:2379"] | |||||
# lock = true | |||||
# prefix = "testing/terraform-state/" | |||||
# } | |||||
#} |
@@ -0,0 +1 @@ | |||||
alerta_server_name: alerts.testing.thengo.net |
@@ -0,0 +1 @@ | |||||
certificate_provider: letsencrypt |
@@ -0,0 +1 @@ | |||||
gitea_server_name: git.testing.thengo.net |
@@ -0,0 +1 @@ | |||||
netbox_server_name: netbox.testing.thengo.net |
@@ -1,3 +0,0 @@ | |||||
ansible_host: "{{terraform_vm.access_ip_v4}}" | |||||
openstack_region: GRA7 | |||||
openstack_flavor: s1-2 |
@@ -1 +0,0 @@ | |||||
{"terraform_vm":{"access_ip_v4":"54.37.77.37","access_ip_v6":"[2001:41d0:701:1000::ad9]","admin_pass":null,"all_metadata":{},"all_tags":[],"availability_zone":"nova","block_device":[],"config_drive":null,"flavor_id":"d31419c1-8e1e-48c2-8a4c-28190650c817","flavor_name":"s1-2","floating_ip":null,"force_delete":false,"id":"cf23e031-b299-477b-af6a-989826c4c9aa","image_id":"6a27a33f-9cb9-4c65-b99c-bb904dfb43aa","image_name":"Debian 10","key_pair":"terraform-default","metadata":null,"name":"controller.testing.thengo.net","network":[{"access_network":false,"fixed_ip_v4":"54.37.77.37","fixed_ip_v6":"[2001:41d0:701:1000::ad9]","floating_ip":"","mac":"fa:16:3e:84:3d:f1","name":"Ext-Net","port":"","uuid":"ed0ab0c6-93ee-44f8-870b-d103065b1b34"}],"personality":[],"power_state":"active","region":"DE1","scheduler_hints":[],"security_groups":["default"],"stop_before_destroy":false,"tags":null,"timeouts":null,"user_data":"3670b43deeb2d5936a31f7eb5c20593fd64c7a0e","vendor_options":[],"volume":[]}} |
@@ -1,9 +0,0 @@ | |||||
[ovh_vms] | |||||
controller.testing.thengo.net openstack_region=DE1 | |||||
#ns.testing.thengo.net openstack_region=DE1 | |||||
[controllers] | |||||
controller.testing.thengo.net | |||||
[nameservers] | |||||
ns.testing.thengo.net |
@@ -0,0 +1 @@ | |||||
{"all":{"children":{"controllers":{"hosts":{"controller.testing.thengo.net":{}}},"provider_hetzner":{"hosts":{"controller.testing.thengo.net":{"ansible_host":"116.203.152.103","external_ip":"116.203.152.103"}}}},"hosts":{"controller.testing.thengo.net":{}}}} |
@@ -0,0 +1,13 @@ | |||||
variable "vm_hosts" { | |||||
default = { | |||||
"controller.testing.thengo.net" = { provider = "hetzner", groups = [ "controllers" ] } | |||||
#"ns.testing.thengo.net" = { provider = "hetzner", groups = [ "nameservers" ] } | |||||
} | |||||
} | |||||
variable "groups" { | |||||
default = { | |||||
reverse_proxies = { | |||||
} | |||||
} | |||||
} |
@@ -0,0 +1 @@ | |||||
hetzner_token = "nCsHpDLur3bZyLdibay4CvdlP4MnJ1gREFkale18x2Onjv69URriP6roQUvBbqDT" |
@@ -0,0 +1,107 @@ | |||||
# Provider Setup | |||||
variable "hetzner_token" { | |||||
type = string | |||||
description = "Hetzner Cloud API-Token" | |||||
} | |||||
variable "hetzner_default_location" { | |||||
type = string | |||||
default = "nbg1" | |||||
} | |||||
variable "hetzner_server_image" { | |||||
type = string | |||||
default = "debian-10" | |||||
} | |||||
variable "hetzner_default_server_type" { | |||||
type = string | |||||
default = "cx11" | |||||
} | |||||
variable "hetzner_ssh_keys_filenames" { | |||||
type = set(string) | |||||
default = [ | |||||
"~/.ssh/id_ed25519.pub", | |||||
] | |||||
} | |||||
provider "hcloud" { | |||||
token = var.hetzner_token | |||||
} | |||||
# Network | |||||
#resource "hcloud_network" "internal_network" { | |||||
# name = "internal_network" | |||||
# ip_range = "10.0.0.0/8" | |||||
#} | |||||
#resource "hcloud_network_subnet" "internal_network" { | |||||
# network_id = hcloud_network.internal_network.id | |||||
# type = "server" | |||||
# network_zone = "eu-central" | |||||
# ip_range = "10.9.0.0/16" | |||||
#} | |||||
# VMs | |||||
resource "hcloud_ssh_key" "ssh_keys" { | |||||
name = each.value | |||||
public_key = file(each.value) | |||||
for_each = var.hetzner_ssh_keys_filenames | |||||
} | |||||
locals { | |||||
hetzner_vm_hosts = { | |||||
for hostname, host in var.vm_hosts: hostname => host | |||||
if host.provider == "hetzner" | |||||
} | |||||
hetzner_vm_hosts_with_groups = { | |||||
for hostname, host in local.hetzner_vm_hosts: hostname => host if contains(keys(host),"groups") | |||||
} | |||||
hetzner_vm_hosts_without_groups = { | |||||
for hostname, host in local.hetzner_vm_hosts: hostname => host if !contains(keys(host),"groups") | |||||
} | |||||
} | |||||
resource "hcloud_server" "vms" { | |||||
name = each.key | |||||
image = var.hetzner_server_image | |||||
server_type = var.hetzner_default_server_type | |||||
location = var.hetzner_default_location | |||||
ssh_keys = [for value in hcloud_ssh_key.ssh_keys: value.id] | |||||
lifecycle { | |||||
ignore_changes = [ | |||||
ssh_keys, | |||||
] | |||||
} | |||||
for_each = local.hetzner_vm_hosts | |||||
} | |||||
#resource "hcloud_server_network" "vms" { | |||||
# server_id = hcloud_server.vms[each.key].id | |||||
# network_id = hcloud_network.internal_network.id | |||||
# | |||||
# for_each = local.hetzner_vm_hosts | |||||
#} | |||||
# Provider Variable | |||||
locals { | |||||
provider_hetzner = { | |||||
hostvars = { | |||||
for hostname, host in var.vm_hosts: hostname => | |||||
{ | |||||
external_ip = hcloud_server.vms[hostname].ipv4_address | |||||
ansible_host = hcloud_server.vms[hostname].ipv4_address | |||||
#internal_ip = hcloud_server_network.vms[hostname].ip | |||||
} | |||||
if host.provider == "hetzner" | |||||
} | |||||
} | |||||
} |
@@ -0,0 +1,5 @@ | |||||
locals { | |||||
providers = { | |||||
hetzner = local.provider_hetzner | |||||
} | |||||
} |
@@ -0,0 +1,173 @@ | |||||
{ | |||||
"version": 4, | |||||
"terraform_version": "0.12.24", | |||||
"serial": 26, | |||||
"lineage": "0f8651e8-593e-1889-aef1-d79f69de7a9a", | |||||
"outputs": { | |||||
"ansible_inventory": { | |||||
"value": { | |||||
"all": { | |||||
"children": { | |||||
"controllers": { | |||||
"hosts": { | |||||
"controller.testing.thengo.net": {} | |||||
} | |||||
}, | |||||
"provider_hetzner": { | |||||
"hosts": { | |||||
"controller.testing.thengo.net": { | |||||
"ansible_host": "116.203.152.103", | |||||
"external_ip": "116.203.152.103" | |||||
} | |||||
} | |||||
} | |||||
}, | |||||
"hosts": { | |||||
"controller.testing.thengo.net": {} | |||||
} | |||||
} | |||||
}, | |||||
"type": [ | |||||
"object", | |||||
{ | |||||
"all": [ | |||||
"object", | |||||
{ | |||||
"children": [ | |||||
"object", | |||||
{ | |||||
"controllers": [ | |||||
"object", | |||||
{ | |||||
"hosts": [ | |||||
"object", | |||||
{ | |||||
"controller.testing.thengo.net": [ | |||||
"object", | |||||
{} | |||||
] | |||||
} | |||||
] | |||||
} | |||||
], | |||||
"provider_hetzner": [ | |||||
"object", | |||||
{ | |||||
"hosts": [ | |||||
"object", | |||||
{ | |||||
"controller.testing.thengo.net": [ | |||||
"object", | |||||
{ | |||||
"ansible_host": "string", | |||||
"external_ip": "string" | |||||
} | |||||
] | |||||
} | |||||
] | |||||
} | |||||
] | |||||
} | |||||
], | |||||
"hosts": [ | |||||
"object", | |||||
{ | |||||
"controller.testing.thengo.net": [ | |||||
"object", | |||||
{} | |||||
] | |||||
} | |||||
] | |||||
} | |||||
] | |||||
} | |||||
] | |||||
} | |||||
}, | |||||
"resources": [ | |||||
{ | |||||
"mode": "managed", | |||||
"type": "hcloud_server", | |||||
"name": "vms", | |||||
"each": "map", | |||||
"provider": "provider.hcloud", | |||||
"instances": [ | |||||
{ | |||||
"index_key": "controller.testing.thengo.net", | |||||
"schema_version": 0, | |||||
"attributes": { | |||||
"backup_window": "", | |||||
"backups": false, | |||||
"datacenter": "nbg1-dc3", | |||||
"id": "5685515", | |||||
"image": "debian-10", | |||||
"ipv4_address": "116.203.152.103", | |||||
"ipv6_address": "2a01:4f8:c0c:c828::1", | |||||
"ipv6_network": "2a01:4f8:c0c:c828::/64", | |||||
"iso": null, | |||||
"keep_disk": false, | |||||
"labels": {}, | |||||
"location": "nbg1", | |||||
"name": "controller.testing.thengo.net", | |||||
"rescue": null, | |||||
"server_type": "cx11", | |||||
"ssh_keys": [ | |||||
"1501431" | |||||
], | |||||
"status": "running", | |||||
"user_data": null | |||||
}, | |||||
"private": "bnVsbA==", | |||||
"dependencies": [ | |||||
"hcloud_ssh_key.ssh_keys" | |||||
] | |||||
} | |||||
] | |||||
}, | |||||
{ | |||||
"mode": "managed", | |||||
"type": "hcloud_ssh_key", | |||||
"name": "ssh_keys", | |||||
"each": "map", | |||||
"provider": "provider.hcloud", | |||||
"instances": [ | |||||
{ | |||||
"index_key": "~/.ssh/id_ed25519.pub", | |||||
"schema_version": 0, | |||||
"attributes": { | |||||
"fingerprint": "75:3c:1e:51:61:71:51:48:d0:45:18:e4:66:19:de:6e", | |||||
"id": "1501431", | |||||
"labels": {}, | |||||
"name": "~/.ssh/id_ed25519.pub", | |||||
"public_key": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGwdEkFBdQfY5YB6LR1l+copG7rZXlGLQyWWwhZdNkpW ka\n" | |||||
}, | |||||
"private": "bnVsbA==" | |||||
} | |||||
] | |||||
}, | |||||
{ | |||||
"mode": "managed", | |||||
"type": "local_file", | |||||
"name": "foo", | |||||
"provider": "provider.local", | |||||
"instances": [ | |||||
{ | |||||
"schema_version": 0, | |||||
"attributes": { | |||||
"content": "{\"all\":{\"children\":{\"controllers\":{\"hosts\":{\"controller.testing.thengo.net\":{}}},\"provider_hetzner\":{\"hosts\":{\"controller.testing.thengo.net\":{\"ansible_host\":\"116.203.152.103\",\"external_ip\":\"116.203.152.103\"}}}},\"hosts\":{\"controller.testing.thengo.net\":{}}}}", | |||||
"content_base64": null, | |||||
"directory_permission": "0755", | |||||
"file_permission": "0644", | |||||
"filename": "inventory.json", | |||||
"id": "0f2b79f769f5dcbdebc46242e9b0484c11646b71", | |||||
"sensitive_content": null | |||||
}, | |||||
"private": "bnVsbA==", | |||||
"dependencies": [ | |||||
"hcloud_server.vms" | |||||
] | |||||
} | |||||
] | |||||
} | |||||
] | |||||
} |
@@ -0,0 +1,238 @@ | |||||
{ | |||||
"version": 4, | |||||
"terraform_version": "0.12.24", | |||||
"serial": 22, | |||||
"lineage": "0f8651e8-593e-1889-aef1-d79f69de7a9a", | |||||
"outputs": { | |||||
"ansible_inventory": { | |||||
"value": { | |||||
"all": { | |||||
"children": { | |||||
"controllers": { | |||||
"hosts": { | |||||
"controller.testing.thengo.net": {} | |||||
} | |||||
}, | |||||
"nameservers": { | |||||
"hosts": { | |||||
"ns.testing.thengo.net": {} | |||||
} | |||||
}, | |||||
"provider_hetzner": { | |||||
"hosts": { | |||||
"controller.testing.thengo.net": { | |||||
"ansible_host": "116.203.152.103", | |||||
"external_ip": "116.203.152.103" | |||||
}, | |||||
"ns.testing.thengo.net": { | |||||
"ansible_host": "116.203.152.95", | |||||
"external_ip": "116.203.152.95" | |||||
} | |||||
} | |||||
} | |||||
}, | |||||
"hosts": { | |||||
"controller.testing.thengo.net": {}, | |||||
"ns.testing.thengo.net": {} | |||||
} | |||||
} | |||||
}, | |||||
"type": [ | |||||
"object", | |||||
{ | |||||
"all": [ | |||||
"object", | |||||
{ | |||||
"children": [ | |||||
"object", | |||||
{ | |||||
"controllers": [ | |||||
"object", | |||||
{ | |||||
"hosts": [ | |||||
"object", | |||||
{ | |||||
"controller.testing.thengo.net": [ | |||||
"object", | |||||
{} | |||||
] | |||||
} | |||||
] | |||||
} | |||||
], | |||||
"nameservers": [ | |||||
"object", | |||||
{ | |||||
"hosts": [ | |||||
"object", | |||||
{ | |||||
"ns.testing.thengo.net": [ | |||||
"object", | |||||
{} | |||||
] | |||||
} | |||||
] | |||||
} | |||||
], | |||||
"provider_hetzner": [ | |||||
"object", | |||||
{ | |||||
"hosts": [ | |||||
"object", | |||||
{ | |||||
"controller.testing.thengo.net": [ | |||||
"object", | |||||
{ | |||||
"ansible_host": "string", | |||||
"external_ip": "string" | |||||
} | |||||
], | |||||
"ns.testing.thengo.net": [ | |||||
"object", | |||||
{ | |||||
"ansible_host": "string", | |||||
"external_ip": "string" | |||||
} | |||||
] | |||||
} | |||||
] | |||||
} | |||||
] | |||||
} | |||||
], | |||||
"hosts": [ | |||||
"object", | |||||
{ | |||||
"controller.testing.thengo.net": [ | |||||
"object", | |||||
{} | |||||
], | |||||
"ns.testing.thengo.net": [ | |||||
"object", | |||||
{} | |||||
] | |||||
} | |||||
] | |||||
} | |||||
] | |||||
} | |||||
] | |||||
} | |||||
}, | |||||
"resources": [ | |||||
{ | |||||
"mode": "managed", | |||||
"type": "hcloud_server", | |||||
"name": "vms", | |||||
"each": "map", | |||||
"provider": "provider.hcloud", | |||||
"instances": [ | |||||
{ | |||||
"index_key": "controller.testing.thengo.net", | |||||
"schema_version": 0, | |||||
"attributes": { | |||||
"backup_window": "", | |||||
"backups": false, | |||||
"datacenter": "nbg1-dc3", | |||||
"id": "5685515", | |||||
"image": "debian-10", | |||||
"ipv4_address": "116.203.152.103", | |||||
"ipv6_address": "2a01:4f8:c0c:c828::1", | |||||
"ipv6_network": "2a01:4f8:c0c:c828::/64", | |||||
"iso": null, | |||||
"keep_disk": false, | |||||
"labels": {}, | |||||
"location": "nbg1", | |||||
"name": "controller.testing.thengo.net", | |||||
"rescue": null, | |||||
"server_type": "cx11", | |||||
"ssh_keys": [ | |||||
"1501431" | |||||
], | |||||
"status": "running", | |||||
"user_data": null | |||||
}, | |||||
"private": "bnVsbA==", | |||||
"dependencies": [ | |||||
"hcloud_ssh_key.ssh_keys" | |||||
] | |||||
}, | |||||
{ | |||||
"index_key": "ns.testing.thengo.net", | |||||
"schema_version": 0, | |||||
"attributes": { | |||||
"backup_window": "", | |||||
"backups": false, | |||||
"datacenter": "nbg1-dc3", | |||||
"id": "5685513", | |||||
"image": "debian-10", | |||||
"ipv4_address": "116.203.152.95", | |||||
"ipv6_address": "2a01:4f8:c0c:c827::1", | |||||
"ipv6_network": "2a01:4f8:c0c:c827::/64", | |||||
"iso": null, | |||||
"keep_disk": false, | |||||
"labels": {}, | |||||
"location": "nbg1", | |||||
"name": "ns.testing.thengo.net", | |||||
"rescue": null, | |||||
"server_type": "cx11", | |||||
"ssh_keys": [ | |||||
"1501431" | |||||
], | |||||
"status": "running", | |||||
"user_data": null | |||||
}, | |||||
"private": "bnVsbA==", | |||||
"dependencies": [ | |||||
"hcloud_ssh_key.ssh_keys" | |||||
] | |||||
} | |||||
] | |||||
}, | |||||
{ | |||||
"mode": "managed", | |||||
"type": "hcloud_ssh_key", | |||||
"name": "ssh_keys", | |||||
"each": "map", | |||||
"provider": "provider.hcloud", | |||||
"instances": [ | |||||
{ | |||||
"index_key": "~/.ssh/id_ed25519.pub", | |||||
"schema_version": 0, | |||||
"attributes": { | |||||
"fingerprint": "75:3c:1e:51:61:71:51:48:d0:45:18:e4:66:19:de:6e", | |||||
"id": "1501431", | |||||
"labels": {}, | |||||
"name": "~/.ssh/id_ed25519.pub", | |||||
"public_key": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGwdEkFBdQfY5YB6LR1l+copG7rZXlGLQyWWwhZdNkpW ka\n" | |||||
}, | |||||
"private": "bnVsbA==" | |||||
} | |||||
] | |||||
}, | |||||
{ | |||||
"mode": "managed", | |||||
"type": "local_file", | |||||
"name": "foo", | |||||
"provider": "provider.local", | |||||
"instances": [ | |||||
{ | |||||
"schema_version": 0, | |||||
"attributes": { | |||||
"content": "{\"all\":{\"children\":{\"controllers\":{\"hosts\":{\"controller.testing.thengo.net\":{}}},\"nameservers\":{\"hosts\":{\"ns.testing.thengo.net\":{}}},\"provider_hetzner\":{\"hosts\":{\"controller.testing.thengo.net\":{\"ansible_host\":\"116.203.152.103\",\"external_ip\":\"116.203.152.103\"},\"ns.testing.thengo.net\":{\"ansible_host\":\"116.203.152.95\",\"external_ip\":\"116.203.152.95\"}}}},\"hosts\":{\"controller.testing.thengo.net\":{},\"ns.testing.thengo.net\":{}}}}", | |||||
"content_base64": null, | |||||
"directory_permission": "0755", | |||||
"file_permission": "0644", | |||||
"filename": "inventory.json", | |||||
"id": "24344b5c76e5b8f59034052299c331fe9ea170c3", | |||||
"sensitive_content": null | |||||
}, | |||||
"private": "bnVsbA==", | |||||
"dependencies": [ | |||||
"hcloud_server.vms" | |||||
] | |||||
} | |||||
] | |||||
} | |||||
] | |||||
} |
@@ -1,31 +0,0 @@ | |||||
resource "openstack_compute_instance_v2" "controller--testing--thengo--net" { | |||||
name = "controller.testing.thengo.net" | |||||
region = "DE1" | |||||
flavor_name = "s1-2" | |||||
key_pair = "terraform-default" | |||||
user_data = "#cloud-config\ndisable_root: false" | |||||
image_name = "Debian 10" | |||||
network { | |||||
name = "Ext-Net" | |||||
} | |||||
lifecycle { | |||||
ignore_changes = [ | |||||
key_pair, | |||||
user_data | |||||
] | |||||
} | |||||
} | |||||
resource "local_file" "controller--testing--thengo--net-info" { | |||||
content = jsonencode({ | |||||
"terraform_vm": openstack_compute_instance_v2.controller--testing--thengo--net | |||||
}) | |||||
filename = "../host_vars/controller.testing.thengo.net/terraform-info.json" | |||||
} | |||||
@@ -1,7 +0,0 @@ | |||||
terraform { | |||||
backend "etcdv3" { | |||||
endpoints = ["localhost:2379"] | |||||
lock = true | |||||
prefix = "testing/terraform-state/" | |||||
} | |||||
} |
@@ -1,32 +0,0 @@ | |||||
provider "ovh" { | |||||
endpoint = "ovh-eu" | |||||
} | |||||
resource "ovh_cloud_user" "user" { | |||||
project_id = "2044653399df4877a72b77333c25557e" | |||||
description = "terraform user" | |||||
} | |||||
provider "openstack" { | |||||
auth_url = "https://auth.cloud.ovh.net/v3" | |||||
user_name = ovh_cloud_user.user.username | |||||
password = ovh_cloud_user.user.password | |||||
tenant_id = ovh_cloud_user.user.project_id | |||||
} | |||||
variable "ovh_regions" { | |||||
type = list(string) | |||||
default = [ | |||||
"DE1", | |||||
"GRA7", | |||||
] | |||||
} | |||||
resource "openstack_compute_keypair_v2" "default" { | |||||
name = "terraform-default" | |||||
region = each.value | |||||
public_key = file("~/.ssh/id_rsa.pub") | |||||
for_each = toset(var.ovh_regions) | |||||
} |