Terraform modules
# main.tf
resource "hcloud_server" "myServer" { ... }
resource "local_file" "hostdata" {
content = templatefile("Tpl/hostdata.json", {
ip4 = hcloud_server.helloServer.ipv4_address
ip6 = hcloud_server.helloServer.ipv6_address
location = hcloud_server.helloServer.location
})
filename = "Gen/hostdata.json"
}{ "network": {
"ipv4": "${ip4}","ipv6": "${ip6}"},
"location": "${location}"} |
{
"network": {
"ipv4": "157.180.78.16",
"ipv6": "2a01:4f9:c013:be69::1"
},
"location": "hel1"
} |
├── CreateHostByModule │ ├── main.tf │ ├── Readme.md │ └── variables.tf └── Modules └── HostMetaData ├── main.tf ├── outputs.tf ├── providers.tf ├── Readme.md ├── Tpl │ └── hostdata.json └── variables.tf
# variable.tf
variable "hcloud_token" { sensitive = true }# main.tf
module "createHostAmongMetaData" {
source = "../Modules/HostMetaData"
name = "myServer"
hcloud_token = var.hcloud_token
}# variable.tf variable "name" { type = string nullable = false } variable "hcloud_token" { type = string nullable = false } |
# main.tf
resource "hcloud_server" "newServer" {
name = var.name
image = "debian-13"
server_type = "cx23" }
resource "local_file" "hostdata" {
content = templatefile("${path.module}/Tpl/hostdata.json", {
ip4 = hcloud_server.newServer.ipv4_address
ip6 = hcloud_server.newServer.ipv6_address
location = hcloud_server.newServer.location
})
filename = "Gen/${var.name}.json" } |
{
"network": {
"ipv4": "${ip4}",
"ipv6": "${ip6}"
},
"location": "${location}"
} |
{
"network": {
"ipv4": "157.180.78.16",
"ipv6": "2a01:4f9:c013:be69::1"
},
"location": "hel1"
} |
resource "local_file" "hostdata" { content = templatefile( "${path.module}/Tpl/hostdata.json" ... } |
├── CreateHostByModule │ ├── main.tf │ ├── Readme.md │ └── variables.tf │ └── Tpl │ └── hostdata.json └── Modules └── HostMetaData ├── main.tf ├── outputs.tf ├── providers.tf ├── Readme.md ├── Tpl │ └── hostdata.json └── variables.tf |
No. 19
A module for ssh host key handling
|
Q: |
Create a SshKnownHosts module for generating
...
resource "hcloud_server" "helloServer" {
name = "hello"
...
}
module "createSshKnownHosts" {
source = "../Modules/SshKnownHosts"
loginUserName = hcloud_ssh_key.loginUser.name
serverNameOrIp = hcloud_server.helloServer.ipv4_address
serverHostPublicKey = tls_private_key.host.public_key_openssh
}Your overall project layout may look like: . ├── KnownHostsByModule │ ├── bin │ │ ├── scp │ │ └── ssh │ ├── gen │ │ └── known_hosts │ ├── main.tf │ ├── network.tf │ ├── outputs.tf │ ├── providers.tf │ ├── Readme.md │ ├── tpl │ │ └── userData.yml │ └── variables.tf └── Modules └── SshKnownHosts ├── main.tf ├── Readme.md ├── tpl │ ├── scp.sh │ └── ssh.sh └── variables.tf In this tree all generated resources are being shown in red colour. |
