diff --git a/domain-test/.terraform.lock.hcl b/domain-test/.terraform.lock.hcl new file mode 100644 index 0000000..46adc9b --- /dev/null +++ b/domain-test/.terraform.lock.hcl @@ -0,0 +1,20 @@ +# This file is maintained automatically by "terraform init". +# Manual edits may be lost in future updates. + +provider "registry.terraform.io/inwx/inwx" { + version = "1.4.2" + constraints = "1.4.2" + hashes = [ + "h1:P0eXBoEM310xtKnkXHa4vzPxDW+G0C5TJm6PAtaepJE=", + "zh:04f9bde7215ac87d8a3f4b7b8fd3c4760141e985bec817199351d6e5208a8a46", + "zh:32955d9c5e089a4b7679ff27ac92ee77f35ce0869eae52c1df31ff860095577a", + "zh:3cdc572911665a2441cb43c6e0abdcf5ddb5866d7d051cde05ce9077e32bdaea", + "zh:40c8d3698bcfd6b08b1828d0f326c2c90edb94ac24f2d5b47fd411a61bb72686", + "zh:43a4d11cbc60b8a612260d4cab535878bd7c0668c9988528d7fa5e42f50849da", + "zh:448f40504e4c2a94f530e250a2b7a7131101038dfe4dbd19dd3fcfcb11a65f8c", + "zh:4686ed779f5156dc4169b876fc055badfcb08a9e46aeb1f224aa45a8717cedab", + "zh:82f4c210d7427512313794d846c8aaf5e2983cbff248709841716ad1d1ebec46", + "zh:9cf669d0caba5b44a90b97c7e0cd57d2eb219ed3d969c5d1e972af755d7c553f", + "zh:d685589ae68db4ee9c4d9c22eeb145bb51c3966f128c85c0a722a9d961317ddd", + ] +} diff --git a/domain-test/.terraform/environment b/domain-test/.terraform/environment new file mode 100644 index 0000000..17eb7c9 --- /dev/null +++ b/domain-test/.terraform/environment @@ -0,0 +1 @@ +domain-test \ No newline at end of file diff --git a/domain-test/.terraform/providers/registry.terraform.io/inwx/inwx/1.4.2/darwin_arm64/LICENSE b/domain-test/.terraform/providers/registry.terraform.io/inwx/inwx/1.4.2/darwin_arm64/LICENSE new file mode 100644 index 0000000..ff833c2 --- /dev/null +++ b/domain-test/.terraform/providers/registry.terraform.io/inwx/inwx/1.4.2/darwin_arm64/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 INWX GmbH + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/domain-test/.terraform/providers/registry.terraform.io/inwx/inwx/1.4.2/darwin_arm64/README.md b/domain-test/.terraform/providers/registry.terraform.io/inwx/inwx/1.4.2/darwin_arm64/README.md new file mode 100644 index 0000000..64e0884 --- /dev/null +++ b/domain-test/.terraform/providers/registry.terraform.io/inwx/inwx/1.4.2/darwin_arm64/README.md @@ -0,0 +1,23 @@ +

+ + + +

+ +INWX Terraform Provider +========= + +INWX Terraform Provider is a plugin for Terraform that allows registration and management of domains and their domain contacts. This plugin is on Terraform Registry: https://registry.terraform.io/providers/inwx/inwx + +Documentation +------ +You can find a detailed description of the provider and all resources under [docs/](docs/) or at https://registry.terraform.io/providers/inwx/inwx/. + +If you still experience any kind of problems don't hesitate to contact our [support via email](mailto:support@inwx.de). + +------- + +License +---- + +MIT diff --git a/domain-test/.terraform/providers/registry.terraform.io/inwx/inwx/1.4.2/darwin_arm64/terraform-provider-inwx_v1.4.2 b/domain-test/.terraform/providers/registry.terraform.io/inwx/inwx/1.4.2/darwin_arm64/terraform-provider-inwx_v1.4.2 new file mode 100755 index 0000000..b7e1280 Binary files /dev/null and b/domain-test/.terraform/providers/registry.terraform.io/inwx/inwx/1.4.2/darwin_arm64/terraform-provider-inwx_v1.4.2 differ diff --git a/domain-test/.terraform/terraform.tfstate b/domain-test/.terraform/terraform.tfstate new file mode 100644 index 0000000..980f63e --- /dev/null +++ b/domain-test/.terraform/terraform.tfstate @@ -0,0 +1,18 @@ +{ + "version": 3, + "terraform_version": "1.9.5", + "backend": { + "type": "cloud", + "config": { + "hostname": null, + "organization": "2martens", + "token": null, + "workspaces": { + "name": "domain-test", + "project": null, + "tags": null + } + }, + "hash": 3293156678 + } +} \ No newline at end of file diff --git a/domain-test/domains.tf b/domain-test/domains.tf new file mode 100644 index 0000000..f0b7db0 --- /dev/null +++ b/domain-test/domains.tf @@ -0,0 +1,162 @@ +locals { + domain_period = "1Y" + domain_renewal = "AUTORENEW" +} + +resource "inwx_domain_contact" "admin" { + // contact configuration + type = "PERSON" + name = var.admin_name + street_address = var.admin_street + city = var.admin_city + postal_code = var.admin_postal_code + country_code = var.admin_country_code + phone_number = var.admin_phone_number + email = var.admin_email +} + +resource "inwx_nameserver" "twomartens_de_nameserver" { + domain = local.domain + type = "MASTER" + nameservers = [ + "ns.inwx.de", + "ns2.inwx.de", + "ns3.inwx.eu" + ] +} + +resource "inwx_domain" "twomartens_de" { + name = local.domain + nameservers = [ + "ns.inwx.de", + "ns2.inwx.de", + "ns3.inwx.eu" + ] + period = local.domain_period + renewal_mode = local.domain_renewal + transfer_lock = true + contacts { + // references to terraform managed contact "example_person" + registrant = inwx_domain_contact.admin.id + admin = inwx_domain_contact.admin.id + tech = 1 + billing = 1 + } +} + +resource "inwx_domain" "twomartens_eu" { + name = "2martens.eu" + nameservers = [ + "ns.inwx.de", + "ns2.inwx.de", + "ns3.inwx.eu" + ] + period = local.domain_period + renewal_mode = local.domain_renewal + transfer_lock = true + contacts { + // references to terraform managed contact "example_person" + registrant = inwx_domain_contact.admin.id + admin = inwx_domain_contact.admin.id + tech = 1 + billing = 1 + } + extra_data = { + "EU-COUNTRY-OF-CITIZENSHIP" : "DE" + } +} + +// NS records +# resource "inwx_nameserver_record" "twomartens_de_ns1" { +# domain = local.domain +# name = local.domain +# content = "ns.inwx.de" +# type = "NS" +# ttl = 86400 +# } +# +# resource "inwx_nameserver_record" "twomartens_de_ns2" { +# domain = local.domain +# name = local.domain +# content = "ns2.inwx.de" +# type = "NS" +# ttl = 86400 +# } +# +# resource "inwx_nameserver_record" "twomartens_de_ns3" { +# domain = local.domain +# name = local.domain +# content = "ns3.inwx.eu" +# type = "NS" +# ttl = 86400 +# } + +resource "inwx_nameserver_record" "twomartens_eu_ns1" { + domain = "2martens.eu" + name = "2martens.eu" + content = "ns.inwx.de" + type = "NS" + ttl = 86400 +} + +resource "inwx_nameserver_record" "twomartens_eu_ns2" { + domain = "2martens.eu" + name = "2martens.eu" + content = "ns2.inwx.de" + type = "NS" + ttl = 86400 +} + +resource "inwx_nameserver_record" "twomartens_eu_ns3" { + domain = "2martens.eu" + name = "2martens.eu" + content = "ns3.inwx.eu" + type = "NS" + ttl = 86400 +} + +// SOAs + +# resource "inwx_nameserver_record" "twomartens_de_soa" { +# domain = local.domain +# name = local.domain +# content = "ns.inwx.de hostmaster.inwx.de 2023103008 10800 3600 604800 3600" +# type = "SOA" +# ttl = 86400 +# +# lifecycle { +# ignore_changes = [content] +# } +# } + +resource "inwx_nameserver_record" "twomartens_eu_soa" { + domain = "2martens.eu" + name = "2martens.eu" + content = "ns.inwx.de hostmaster.inwx.de 2023103001 10800 3600 604800 3600" + type = "SOA" + ttl = 86400 + + lifecycle { + ignore_changes = [content] + } +} + +// redirect 2martens.eu to 2martens.de +resource "inwx_nameserver_record" "twomartens_eu_root_redirect" { + domain = "2martens.eu" + name = "2martens.eu" + content = "https://2martens.de" + type = "URL" + url_redirect_type = "HEADER301" + prio = 301 + ttl = 3600 +} +resource "inwx_nameserver_record" "twomartens_eu_www_redirect" { + domain = "2martens.eu" + name = "www.2martens.eu" + content = "https://2martens.de" + type = "URL" + url_redirect_type = "HEADER301" + prio = 301 + ttl = 3600 +} \ No newline at end of file diff --git a/domain-test/imports.tf b/domain-test/imports.tf new file mode 100644 index 0000000..e69de29 diff --git a/domain-test/main.tf b/domain-test/main.tf new file mode 100644 index 0000000..875e6a1 --- /dev/null +++ b/domain-test/main.tf @@ -0,0 +1,3 @@ +locals { + domain = "2martens.de" +} \ No newline at end of file diff --git a/domain-test/modules/domain/main.tf b/domain-test/modules/domain/main.tf new file mode 100644 index 0000000..b841ebe --- /dev/null +++ b/domain-test/modules/domain/main.tf @@ -0,0 +1,31 @@ +resource "inwx_nameserver_record" "a" { + domain = var.domain + name = var.subdomain != "" ? format("%s.%s", var.subdomain, var.domain) : var.domain + content = var.ipv4 + type = "A" + ttl = 3600 +} +resource "inwx_nameserver_record" "aaaa" { + domain = var.domain + name = var.subdomain != "" ? format("%s.%s", var.subdomain, var.domain) : var.domain + content = var.ipv6 + type = "AAAA" + ttl = 3600 +} +resource "inwx_nameserver_record" "mx" { + domain = var.domain + name = var.subdomain != "" ? format("%s.%s", var.subdomain, var.domain) : var.domain + content = var.hostName + type = "MX" + prio = var.mxPrio + ttl = 3600 + count = var.hasMXRecord ? 1 : 0 +} +resource "inwx_nameserver_record" "mx-spf" { + domain = var.domain + name = var.subdomain != "" ? format("%s.%s", var.subdomain, var.domain) : var.domain + content = var.mxSpf + type = "TXT" + ttl = 3600 + count = var.hasMXRecord ? 1 : 0 +} \ No newline at end of file diff --git a/domain-test/modules/domain/outputs.tf b/domain-test/modules/domain/outputs.tf new file mode 100644 index 0000000..e69de29 diff --git a/domain-test/modules/domain/variables.tf b/domain-test/modules/domain/variables.tf new file mode 100644 index 0000000..e2bf774 --- /dev/null +++ b/domain-test/modules/domain/variables.tf @@ -0,0 +1,35 @@ +variable "ipv4" { + type = string +} + +variable "ipv6" { + type = string +} + +variable "domain" { + type = string +} + +variable "subdomain" { + type = string +} + +variable "hasMXRecord" { + type = bool + default = false +} + +variable "hostName" { + type = string + default = "" +} + +variable "mxPrio" { + type = number + default = 0 +} + +variable "mxSpf" { + type = string + default = "" +} \ No newline at end of file diff --git a/domain-test/modules/domain/versions.tf b/domain-test/modules/domain/versions.tf new file mode 100644 index 0000000..6eb3c55 --- /dev/null +++ b/domain-test/modules/domain/versions.tf @@ -0,0 +1,8 @@ +terraform { + required_providers { + inwx = { + source = "inwx/inwx" + version = "1.4.2" + } + } +} diff --git a/domain-test/nameserver_records.tf b/domain-test/nameserver_records.tf new file mode 100644 index 0000000..b4a75ef --- /dev/null +++ b/domain-test/nameserver_records.tf @@ -0,0 +1,116 @@ +// A records +resource "inwx_nameserver_record" "twomartens_de_allris_a" { + domain = local.domain + name = "allris.2martens.de" + content = "185.26.156.105" + type = "A" + ttl = 3600 +} + +resource "inwx_nameserver_record" "twomartens_de_autoconfig_a" { + domain = local.domain + name = "autoconfig.2martens.de" + content = "185.26.156.22" + type = "A" + ttl = 3600 +} + +resource "inwx_nameserver_record" "twomartens_de_autodiscover_a" { + domain = local.domain + name = "autodiscover.2martens.de" + content = "185.26.156.22" + type = "A" + ttl = 3600 +} + +resource "inwx_nameserver_record" "twomartens_de_jim_a" { + domain = local.domain + name = "jim.2martens.de" + content = "185.26.156.65" + type = "A" + ttl = 3600 +} + +resource "inwx_nameserver_record" "twomartens_de_pad_a" { + domain = local.domain + name = "pad.2martens.de" + content = "185.26.156.132" + type = "A" + ttl = 3600 +} + +resource "inwx_nameserver_record" "twomartens_de_short_a" { + domain = local.domain + name = "short.2martens.de" + content = "95.143.172.56" + type = "A" + ttl = 3600 +} + +// AAAA records + +resource "inwx_nameserver_record" "twomartens_de_allris_aaaa" { + domain = local.domain + name = "allris.2martens.de" + content = "2a00:d0c0:200:0:b9:1a:9c:61" + type = "AAAA" + ttl = 3600 +} + +resource "inwx_nameserver_record" "twomartens_de_autoconfig_aaaa" { + domain = local.domain + name = "autoconfig.2martens.de" + content = "2a00:d0c0:200:0:b9:1a:9c16:5d" + type = "AAAA" + ttl = 3600 +} + +resource "inwx_nameserver_record" "twomartens_de_autodiscover_aaaa" { + domain = local.domain + name = "autodiscover.2martens.de" + content = "2a00:d0c0:200:0:b9:1a:9c16:5d" + type = "AAAA" + ttl = 3600 +} + +resource "inwx_nameserver_record" "twomartens_de_jim_aaaa" { + domain = local.domain + name = "jim.2martens.de" + content = "2a00:d0c0:200:0:b9:1a:9c:40" + type = "AAAA" + ttl = 3600 +} + +resource "inwx_nameserver_record" "twomartens_de_pad_aaaa" { + domain = local.domain + name = "pad.2martens.de" + content = "2a00:d0c0:200:0:c0bf:e0ff:fec1:af72" + type = "AAAA" + ttl = 3600 +} + +resource "inwx_nameserver_record" "twomartens_de_short_aaaa" { + domain = local.domain + name = "short.2martens.de" + content = "2001:1a50:11:0:3854:d4ff:fe62:e0d8" + type = "AAAA" + ttl = 3600 +} + +// CNAME records + +resource "inwx_nameserver_record" "twomartens_de_cdn_cname" { + domain = local.domain + name = "cdn.2martens.de" + content = "d1fvxyvcoii67h.cloudfront.net" + type = "CNAME" + ttl = 3600 +} + +resource "inwx_nameserver_record" "twomartens_de_aws-validations-cdn_cname" { + domain = local.domain + name = "_4741e2d9c8a605950eebfa048029e4ef.cdn.2martens.de" + content = "_cf71e85bb40cc12717f2718e4590ad23.acm-validations.aws" + type = "CNAME" + ttl = 3600 +} diff --git a/domain-test/outputs.tf b/domain-test/outputs.tf new file mode 100644 index 0000000..97e0cc3 --- /dev/null +++ b/domain-test/outputs.tf @@ -0,0 +1,8 @@ +output "ansible_inventory" { + value = templatefile("${path.module}/templates/inventory.tftpl", { + devops = hcloud_server.server_devops.ipv4_address, + k8s_servers = concat( + module.test_cluster.node_ipv6_addresses + ) + }) +} \ No newline at end of file diff --git a/domain-test/providers.tf b/domain-test/providers.tf new file mode 100644 index 0000000..30ab6b9 --- /dev/null +++ b/domain-test/providers.tf @@ -0,0 +1,5 @@ +provider "inwx" { + api_url = "https://api.ote.domrobot.com/jsonrpc/" + username = var.inwx_user + password = var.inwx_password +} diff --git a/domain-test/variables.tf b/domain-test/variables.tf new file mode 100644 index 0000000..dff7ac6 --- /dev/null +++ b/domain-test/variables.tf @@ -0,0 +1,72 @@ +variable "inwx_user" { + type = string + sensitive = true +} +variable "inwx_password" { + type = string + sensitive = true +} +variable "admin_name" { + type = string + sensitive = true +} +variable "admin_street" { + type = string + sensitive = true +} +variable "admin_city" { + type = string +} +variable "admin_postal_code" { + type = string +} +variable "admin_country_code" { + type = string +} +variable "admin_phone_number" { + type = string + sensitive = true +} +variable "admin_email" { + type = string + sensitive = true +} + + +variable "hcloud_token" { + type = string + sensitive = true +} + +variable "terraform_private_ssh_key" { + description = "Private SSH key to be used by Terraform to connect with remote machines" + type = string + sensitive = true +} + +variable "terraform_public_ssh_key" { + description = "Public SSH key for the private key used by Terraform to connect with remote machines" + type = string +} + +variable "vault_client_id" { + description = "Client ID of the service principal used to access Hashicorp Cloud" + type = string + sensitive = true +} +variable "vault_client_secret" { + description = "Client Secret of the service principal used to access Hashicorp Cloud" + type = string + sensitive = true +} + +variable "aws_access_key" { + description = "Access key for AWS" + type = string + sensitive = true +} +variable "aws_secret_key" { + description = "Secret key for AWS" + type = string + sensitive = true +} \ No newline at end of file diff --git a/domain-test/versions.tf b/domain-test/versions.tf new file mode 100644 index 0000000..921e769 --- /dev/null +++ b/domain-test/versions.tf @@ -0,0 +1,15 @@ +terraform { + cloud { + organization = "2martens" + + workspaces { + name = "domain-test" + } + } + required_providers { + inwx = { + source = "inwx/inwx" + version = "1.4.2" + } + } +} \ No newline at end of file