diff --git a/.github/workflows/plex.yaml b/.github/workflows/plex.yaml index 68b5d8b..3f45b51 100644 --- a/.github/workflows/plex.yaml +++ b/.github/workflows/plex.yaml @@ -7,18 +7,18 @@ permissions: on: push: paths: - - 'terraform/deployments/plex/**' - - '.github/workflows/plex.yaml' - - '.github/workflows/terraform-ci.yaml' - - '.github/workflows/terraform-cd.yaml' + - "terraform/deployments/plex/**" + - ".github/workflows/plex.yaml" + - ".github/workflows/terraform-ci.yaml" + - ".github/workflows/terraform-cd.yaml" branches: - main pull_request: paths: - - 'terraform/deployments/plex/**' - - '.github/workflows/plex.yaml' - - '.github/workflows/terraform-ci.yaml' - - '.github/workflows/terraform-cd.yaml' + - "terraform/deployments/plex/**" + - ".github/workflows/plex.yaml" + - ".github/workflows/terraform-ci.yaml" + - ".github/workflows/terraform-cd.yaml" env: PROXMOX_VE_API_TOKEN: ${{ secrets.PROXMOX_VE_API_TOKEN }} @@ -27,7 +27,7 @@ jobs: plex-ci: strategy: matrix: - environment: ["plex-dev"] + environment: ["plex-dev", "plex-prd"] uses: ./.github/workflows/terraform-ci.yaml with: working_directory: terraform/deployments/plex @@ -43,7 +43,7 @@ jobs: needs: plex-ci strategy: matrix: - environment: ["plex-dev"] + environment: ["plex-dev", "plex-prd"] uses: ./.github/workflows/terraform-cd.yaml with: working_directory: terraform/deployments/plex diff --git a/terraform/deployments/plex/env/plex-dev/terraform.tfvars b/terraform/deployments/plex/env/plex-dev/terraform.tfvars index b9fb227..a3f7a70 100644 --- a/terraform/deployments/plex/env/plex-dev/terraform.tfvars +++ b/terraform/deployments/plex/env/plex-dev/terraform.tfvars @@ -12,4 +12,7 @@ plex_host = { os_disk_size = 30 disk_interface = "virtio0" network_bridge = "vmbr0" + vlan_id = 201 } +nfs_server_ip = "192.168.201.9" +nfs_server_path = "/export/nfs/media" diff --git a/terraform/deployments/plex/env/plex-prd/terraform.tfvars b/terraform/deployments/plex/env/plex-prd/terraform.tfvars new file mode 100644 index 0000000..21f28c1 --- /dev/null +++ b/terraform/deployments/plex/env/plex-prd/terraform.tfvars @@ -0,0 +1,18 @@ +clone_vm_id = 9000 +vm_disk_datastore_id = "ssd_1641G_thin" +vm_cloudinit_datastore_id = "ssd_1641G_thin" +plex_host = { + env = "prd" + name_prefix = "plex-hibiscus" + description = "Plex Media Server" + tags = ["plex", "prd"] + bios = "ovmf" + cpu_cores = 4 + memory_mb = 8192 + os_disk_size = 30 + disk_interface = "virtio0" + network_bridge = "vmbr0" + vlan_id = 10 +} +nfs_server_ip = "192.168.10.9" +nfs_server_path = "/export/nfs/media" diff --git a/terraform/deployments/plex/locals.tf b/terraform/deployments/plex/locals.tf index 72e9eb3..cc2c969 100644 --- a/terraform/deployments/plex/locals.tf +++ b/terraform/deployments/plex/locals.tf @@ -1,5 +1,8 @@ locals { docker_compose = templatefile("${path.module}/templates/docker-compose.yaml.tftpl", { - release_tag = var.plex_release_tag + release_tag = var.plex_release_tag + volume_mount_path = local.volume_mount_path }) + volume_mount_path = "/home/plex/media" + } diff --git a/terraform/deployments/plex/main.tf b/terraform/deployments/plex/main.tf index 7a372d9..2f77695 100644 --- a/terraform/deployments/plex/main.tf +++ b/terraform/deployments/plex/main.tf @@ -1,21 +1,23 @@ resource "proxmox_virtual_environment_file" "plex_cloudinit" { - provider = pve content_type = "snippets" datastore_id = "snippets" node_name = var.pve.host source_raw { data = templatefile("${path.module}/templates/setup-plex.yaml.tftpl", { - hostname = "${var.plex_host.name_prefix}-${var.plex_host.env}", - admin_username = "plex" - docker_compose = indent(6, local.docker_compose) + hostname = "${var.plex_host.name_prefix}-${var.plex_host.env}", + admin_username = "plex" + docker_compose = indent(6, local.docker_compose) + volume_mount_path = local.volume_mount_path + nfs_server = var.nfs_server_ip + nfs_path = var.nfs_server_path }) file_name = "setup-plex-${var.plex_host.env}.yaml" } } module "plex_host" { - source = "git::https://github.com/krakenhavoc/HomeLab.git//terraform/modules/compute/pm-cloudinit-vm?ref=v0.1" + source = "git::https://github.com/krakenhavoc/HomeLab.git//terraform/modules/compute/pm-cloudinit-vm?ref=v0.2.0" vm_name = "${var.plex_host.name_prefix}-${var.plex_host.env}" vm_node_name = var.pve.host @@ -31,4 +33,5 @@ module "plex_host" { vm_cloudinit_datastore_id = var.vm_cloudinit_datastore_id vm_cloudinit_user_data_file_id = proxmox_virtual_environment_file.plex_cloudinit.id vm_network_bridge = var.plex_host.network_bridge + vm_vlan_id = var.plex_host.vlan_id } diff --git a/terraform/deployments/plex/providers.tf b/terraform/deployments/plex/providers.tf index 013ed74..3801588 100644 --- a/terraform/deployments/plex/providers.tf +++ b/terraform/deployments/plex/providers.tf @@ -1,4 +1,4 @@ -provider "pve" { +provider "proxmox" { endpoint = var.pve.endpoint insecure = false diff --git a/terraform/deployments/plex/templates/docker-compose.yaml.tftpl b/terraform/deployments/plex/templates/docker-compose.yaml.tftpl index 9fb907c..ec589ca 100644 --- a/terraform/deployments/plex/templates/docker-compose.yaml.tftpl +++ b/terraform/deployments/plex/templates/docker-compose.yaml.tftpl @@ -11,7 +11,7 @@ services: - VERSION=docker - PLEX_CLAIM= #optional volumes: - - /home/plex/library:/config - - /home/plex/tvseries:/tv - - /home/plex/movies:/movies + - ${volume_mount_path}/library:/config + - ${volume_mount_path}/tvseries:/tv + - ${volume_mount_path}/movies:/movies restart: unless-stopped diff --git a/terraform/deployments/plex/templates/setup-plex.yaml.tftpl b/terraform/deployments/plex/templates/setup-plex.yaml.tftpl index 734b1d3..da96370 100644 --- a/terraform/deployments/plex/templates/setup-plex.yaml.tftpl +++ b/terraform/deployments/plex/templates/setup-plex.yaml.tftpl @@ -13,6 +13,7 @@ packages: - qemu-guest-agent - docker-ce - docker-ce-cli + - nfs-common users: - name: ${admin_username} @@ -30,11 +31,14 @@ write_files: content: | ${docker_compose} +mounts: + - [ "${nfs_server}:${nfs_path}", "${volume_mount_path}", "nfs", "defaults", "0", "0" ] + runcmd: - - mkdir -p /home/${admin_username}/library - - mkdir -p /home/${admin_username}/tvseries - - mkdir -p /home/${admin_username}/movies - - chown -R ${admin_username}:${admin_username} /home/${admin_username} + - mkdir -p ${volume_mount_path}/library + - mkdir -p ${volume_mount_path}/tvseries + - mkdir -p ${volume_mount_path}/movies + - chown -R ${admin_username}:${admin_username} ${volume_mount_path} - mv /tmp/docker-compose.yaml /home/${admin_username}/docker-compose.yaml || true - chown ${admin_username}:${admin_username} /home/${admin_username}/docker-compose.yaml || true - sudo -u ${admin_username} sudo docker compose -f /home/${admin_username}/docker-compose.yaml up -d diff --git a/terraform/deployments/plex/variables.tf b/terraform/deployments/plex/variables.tf index a8f3cef..e7abaf4 100644 --- a/terraform/deployments/plex/variables.tf +++ b/terraform/deployments/plex/variables.tf @@ -38,6 +38,7 @@ variable "plex_host" { os_disk_size = optional(number, 30) disk_interface = optional(string, "virtio0") network_bridge = optional(string, "vmbr0") + vlan_id = optional(number, null) }) default = {} } @@ -47,3 +48,15 @@ variable "plex_release_tag" { type = string default = "latest" } + +variable "nfs_server_ip" { + description = "IP of the NFS server to mount shares from" + type = string + default = "" +} + +variable "nfs_server_path" { + description = "Path on the NFS server to mount" + type = string + default = "/export/nfs" +} diff --git a/terraform/deployments/plex/versions.tf b/terraform/deployments/plex/versions.tf index 85831ec..915984c 100644 --- a/terraform/deployments/plex/versions.tf +++ b/terraform/deployments/plex/versions.tf @@ -2,7 +2,7 @@ terraform { required_version = "~> 1.14.3" required_providers { - pve = { + proxmox = { source = "bpg/proxmox" version = ">= 0.93.0, < 1.0" }