Extract packer-backed droplet logic to a shared module
This commit is contained in:
parent
44553a3e1d
commit
4cce60af67
@ -4,43 +4,12 @@ provider "digitalocean" {
|
||||
spaces_secret_key = var.spaces_secret_key
|
||||
}
|
||||
|
||||
data "terraform_remote_state" "do_ssh_keys" {
|
||||
backend = "s3"
|
||||
|
||||
config = {
|
||||
skip_credentials_validation = true
|
||||
skip_metadata_api_check = true
|
||||
access_key = var.spaces_access_id
|
||||
secret_key = var.spaces_secret_key
|
||||
region = "us-east-1"
|
||||
endpoint = "nyc3.digitaloceanspaces.com"
|
||||
bucket = "jdormit-tf-state"
|
||||
key = "mgmt/do-ssh-keys.tfstate"
|
||||
}
|
||||
}
|
||||
|
||||
data "local_file" "packer_manifest" {
|
||||
filename = "${path.module}/../packer/packer-manifest.json"
|
||||
}
|
||||
|
||||
locals {
|
||||
packer_manifest = jsondecode(data.local_file.packer_manifest.content)
|
||||
packer_builds = local.packer_manifest.builds
|
||||
packer_image_str = element(local.packer_builds, length(local.packer_builds) - 1).artifact_id
|
||||
packer_image = split(":", local.packer_image_str)[1]
|
||||
}
|
||||
|
||||
resource "digitalocean_droplet" "syncthing" {
|
||||
name = "syncthing"
|
||||
image = local.packer_image
|
||||
region = "nyc1"
|
||||
size = "s-1vcpu-1gb"
|
||||
backups = true
|
||||
volume_ids = [digitalocean_volume.syncthing_volume.id]
|
||||
ssh_keys = [
|
||||
data.terraform_remote_state.do_ssh_keys.outputs.jdormit_laptop_ssh_key_id,
|
||||
data.terraform_remote_state.do_ssh_keys.outputs.jdormit_macbook_lola_ssh_key_id
|
||||
]
|
||||
module "packer_droplet" {
|
||||
source = "../../../terraform-modules/packer_droplet"
|
||||
name = "syncthing"
|
||||
do_token = var.do_token
|
||||
spaces_access_id = var.spaces_access_id
|
||||
spaces_secret_key = var.spaces_secret_key
|
||||
}
|
||||
|
||||
resource "digitalocean_volume" "syncthing_volume" {
|
||||
@ -55,3 +24,8 @@ resource "digitalocean_volume" "syncthing_volume" {
|
||||
prevent_destroy = true
|
||||
}
|
||||
}
|
||||
|
||||
resource "digitalocean_volume_attachment" "syncthing" {
|
||||
droplet_id = module.packer_droplet.droplet_id
|
||||
volume_id = digitalocean_volume.syncthing_volume.id
|
||||
}
|
||||
|
@ -1,9 +1,9 @@
|
||||
output "ip_address" {
|
||||
value = digitalocean_droplet.syncthing.ipv4_address
|
||||
value = module.packer_droplet.droplet_ip_address
|
||||
}
|
||||
|
||||
output "urn" {
|
||||
value = digitalocean_droplet.syncthing.urn
|
||||
value = module.packer_droplet.droplet_urn
|
||||
}
|
||||
|
||||
output "volume_urn" {
|
||||
|
@ -4,40 +4,10 @@ provider "digitalocean" {
|
||||
spaces_secret_key = var.spaces_secret_key
|
||||
}
|
||||
|
||||
data "terraform_remote_state" "do_ssh_keys" {
|
||||
backend = "s3"
|
||||
|
||||
config = {
|
||||
skip_credentials_validation = true
|
||||
skip_metadata_api_check = true
|
||||
access_key = var.spaces_access_id
|
||||
secret_key = var.spaces_secret_key
|
||||
region = "us-east-1"
|
||||
endpoint = "nyc3.digitaloceanspaces.com"
|
||||
bucket = "jdormit-tf-state"
|
||||
key = "mgmt/do-ssh-keys.tfstate"
|
||||
}
|
||||
}
|
||||
|
||||
data "local_file" "packer_manifest" {
|
||||
filename = "${path.module}/../packer/packer-manifest.json"
|
||||
}
|
||||
|
||||
locals {
|
||||
packer_manifest = jsondecode(data.local_file.packer_manifest.content)
|
||||
packer_builds = local.packer_manifest.builds
|
||||
packer_image_str = element(local.packer_builds, length(local.packer_builds) - 1).artifact_id
|
||||
packer_image = split(":", local.packer_image_str)[1]
|
||||
}
|
||||
|
||||
resource "digitalocean_droplet" "wallabag" {
|
||||
name = "wallabag"
|
||||
image = local.packer_image
|
||||
region = "nyc1"
|
||||
size = "s-1vcpu-1gb"
|
||||
backups = true
|
||||
ssh_keys = [
|
||||
data.terraform_remote_state.do_ssh_keys.outputs.jdormit_laptop_ssh_key_id,
|
||||
data.terraform_remote_state.do_ssh_keys.outputs.jdormit_macbook_lola_ssh_key_id
|
||||
]
|
||||
module "packer_droplet" {
|
||||
source = "../../../terraform-modules/packer_droplet"
|
||||
name = "wallabag"
|
||||
do_token = var.do_token
|
||||
spaces_access_id = var.spaces_access_id
|
||||
spaces_secret_key = var.spaces_secret_key
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
output "ip_address" {
|
||||
value = digitalocean_droplet.wallabag.ipv4_address
|
||||
value = module.packer_droplet.droplet_ip_address
|
||||
}
|
||||
|
||||
output "urn" {
|
||||
value = digitalocean_droplet.wallabag.urn
|
||||
value = module.packer_droplet.droplet_urn
|
||||
}
|
||||
|
55
terraform-modules/packer_droplet/interface.tf
Normal file
55
terraform-modules/packer_droplet/interface.tf
Normal file
@ -0,0 +1,55 @@
|
||||
variable "do_token" {
|
||||
type = string
|
||||
}
|
||||
|
||||
variable "spaces_access_id" {
|
||||
type = string
|
||||
}
|
||||
|
||||
variable "spaces_secret_key" {
|
||||
type = string
|
||||
}
|
||||
|
||||
variable "name" {
|
||||
description = "Droplet name"
|
||||
type = string
|
||||
}
|
||||
|
||||
variable "packer_manifest" {
|
||||
description = "Path to the packer manifest JSON file"
|
||||
type = string
|
||||
default = "../packer/packer-manifest.json"
|
||||
}
|
||||
|
||||
variable "region" {
|
||||
description = "Droplet region"
|
||||
type = string
|
||||
default = "nyc1"
|
||||
}
|
||||
|
||||
variable "droplet_size" {
|
||||
description = "Droplet size descriptor"
|
||||
type = string
|
||||
default = "s-1vcpu-1gb"
|
||||
}
|
||||
|
||||
variable "backups" {
|
||||
description = "Whether to enable droplet backups"
|
||||
type = bool
|
||||
default = true
|
||||
}
|
||||
|
||||
output "droplet_id" {
|
||||
description = "Droplet ID"
|
||||
value = digitalocean_droplet.droplet.id
|
||||
}
|
||||
|
||||
output "droplet_ip_address" {
|
||||
description = "Droplet IPv4 address"
|
||||
value = digitalocean_droplet.droplet.ipv4_address
|
||||
}
|
||||
|
||||
output "droplet_urn" {
|
||||
description = "Droplet URN"
|
||||
value = digitalocean_droplet.droplet.urn
|
||||
}
|
43
terraform-modules/packer_droplet/main.tf
Normal file
43
terraform-modules/packer_droplet/main.tf
Normal file
@ -0,0 +1,43 @@
|
||||
provider "digitalocean" {
|
||||
token = var.do_token
|
||||
spaces_access_id = var.spaces_access_id
|
||||
spaces_secret_key = var.spaces_secret_key
|
||||
}
|
||||
|
||||
data "terraform_remote_state" "do_ssh_keys" {
|
||||
backend = "s3"
|
||||
|
||||
config = {
|
||||
skip_credentials_validation = true
|
||||
skip_metadata_api_check = true
|
||||
access_key = var.spaces_access_id
|
||||
secret_key = var.spaces_secret_key
|
||||
region = "us-east-1"
|
||||
endpoint = "nyc3.digitaloceanspaces.com"
|
||||
bucket = "jdormit-tf-state"
|
||||
key = "mgmt/do-ssh-keys.tfstate"
|
||||
}
|
||||
}
|
||||
|
||||
data "local_file" "packer_manifest" {
|
||||
filename = "${path.root}/${var.packer_manifest}"
|
||||
}
|
||||
|
||||
locals {
|
||||
packer_manifest = jsondecode(data.local_file.packer_manifest.content)
|
||||
packer_builds = local.packer_manifest.builds
|
||||
packer_image_str = element(local.packer_builds, length(local.packer_builds) - 1).artifact_id
|
||||
packer_image = split(":", local.packer_image_str)[1]
|
||||
}
|
||||
|
||||
resource "digitalocean_droplet" "droplet" {
|
||||
name = var.name
|
||||
image = local.packer_image
|
||||
region = var.region
|
||||
size = var.droplet_size
|
||||
backups = var.backups
|
||||
ssh_keys = [
|
||||
data.terraform_remote_state.do_ssh_keys.outputs.jdormit_laptop_ssh_key_id,
|
||||
data.terraform_remote_state.do_ssh_keys.outputs.jdormit_macbook_lola_ssh_key_id
|
||||
]
|
||||
}
|
8
terraform-modules/packer_droplet/terraform.tf
Normal file
8
terraform-modules/packer_droplet/terraform.tf
Normal file
@ -0,0 +1,8 @@
|
||||
terraform {
|
||||
required_providers {
|
||||
digitalocean = {
|
||||
source = "digitalocean/digitalocean"
|
||||
version = "~> 2.3.0"
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user