diff --git a/config/custom_format/format_av1.yaml b/config/custom_format/format_av1.yaml index 7d146e2..30244b9 100644 --- a/config/custom_format/format_av1.yaml +++ b/config/custom_format/format_av1.yaml @@ -1,9 +1,7 @@ include_custom_format_when_renaming: false specifications: - - name: av1 - implementation: ReleaseTitleSpecification - negate: false - required: false - fields: - - name: value - value: "av1" +- name: av1 + implementation: ReleaseTitleSpecification + negate: false + required: false + value: av1 diff --git a/config/custom_format/format_x264.yaml b/config/custom_format/format_x264.yaml index b16d308..a06824e 100644 --- a/config/custom_format/format_x264.yaml +++ b/config/custom_format/format_x264.yaml @@ -1,9 +1,7 @@ include_custom_format_when_renaming: false specifications: - - name: x264 - implementation: ReleaseTitleSpecification - negate: false - required: false - fields: - - name: value - value: "(x|h)\\.?264" +- name: x264 + implementation: ReleaseTitleSpecification + negate: false + required: false + value: (x|h)\.?264 diff --git a/config/custom_format/format_x265.yaml b/config/custom_format/format_x265.yaml index bb0e8b5..e357a62 100644 --- a/config/custom_format/format_x265.yaml +++ b/config/custom_format/format_x265.yaml @@ -1,9 +1,7 @@ include_custom_format_when_renaming: false specifications: - - name: x265 - implementation: ReleaseTitleSpecification - negate: false - required: false - fields: - - name: value - value: "(((x|h)\\.?265)|(HEVC))" +- name: x265 + implementation: ReleaseTitleSpecification + negate: false + required: false + value: (((x|h)\.?265)|(HEVC)) diff --git a/config/custom_format/hdr10.yaml b/config/custom_format/hdr10.yaml index be31992..5bfe379 100644 --- a/config/custom_format/hdr10.yaml +++ b/config/custom_format/hdr10.yaml @@ -1,23 +1,17 @@ include_custom_format_when_renaming: false specifications: - - name: hdr10 - implementation: ReleaseTitleSpecification - negate: false - required: true - fields: - - name: value - value: "hdr10" - - name: x265 - implementation: ReleaseTitleSpecification - negate: false - required: true - fields: - - name: value - value: "(((x|h)\\.?265)|(HEVC))" - - name: Surround Sound - implementation: ReleaseTitleSpecification - negate: false - required: true - fields: - - name: value - value: "DTS.?(HD|ES|X(?!\\D))|TRUEHD|ATMOS|DD(\\+|P).?([5-9])|EAC3.?([5-9])" +- name: hdr10 + implementation: ReleaseTitleSpecification + negate: false + required: true + value: hdr10 +- name: x265 + implementation: ReleaseTitleSpecification + negate: false + required: true + value: (((x|h)\.?265)|(HEVC)) +- name: Surround Sound + implementation: ReleaseTitleSpecification + negate: false + required: true + value: DTS.?(HD|ES|X(?!\D))|TRUEHD|ATMOS|DD(\+|P).?([5-9])|EAC3.?([5-9]) diff --git a/config/custom_format/hvec_10bit.yaml b/config/custom_format/hvec_10bit.yaml index fc4a7c3..c9304fe 100644 --- a/config/custom_format/hvec_10bit.yaml +++ b/config/custom_format/hvec_10bit.yaml @@ -1,30 +1,22 @@ include_custom_format_when_renaming: false specifications: - - name: 10bit - implementation: ReleaseTitleSpecification - negate: false - required: true - fields: - - name: value - value: "10bit" - - name: hvec - implementation: ReleaseTitleSpecification - negate: false - required: false - fields: - - name: value - value: "hvec" - - name: x265 - implementation: ReleaseTitleSpecification - negate: false - required: true - fields: - - name: value - value: "(((x|h)\\.?265)|(HEVC))" - - name: "release_iVy: iVy" - implementation: ReleaseGroupSpecification - negate: false - required: true - fields: - - name: value - value: "-iVy$" +- name: 10bit + implementation: ReleaseTitleSpecification + negate: false + required: true + value: 10bit +- name: hvec + implementation: ReleaseTitleSpecification + negate: false + required: false + value: hvec +- name: x265 + implementation: ReleaseTitleSpecification + negate: false + required: true + value: (((x|h)\.?265)|(HEVC)) +- name: 'release_iVy: iVy' + implementation: ReleaseGroupSpecification + negate: false + required: true + value: -iVy$ diff --git a/config/custom_format/release_AsmoFuscated.yaml b/config/custom_format/release_AsmoFuscated.yaml index f2a6c3d..121ba05 100644 --- a/config/custom_format/release_AsmoFuscated.yaml +++ b/config/custom_format/release_AsmoFuscated.yaml @@ -1,9 +1,7 @@ include_custom_format_when_renaming: false specifications: - - name: "AsmoFuscated " - implementation: ReleaseGroupSpecification - negate: false - required: false - fields: - - name: value - value: "AsmoFuscated$" +- name: 'AsmoFuscated ' + implementation: ReleaseGroupSpecification + negate: false + required: false + value: AsmoFuscated$ diff --git a/config/custom_format/release_d3g.yaml b/config/custom_format/release_d3g.yaml index a9c9c69..2b6f8bd 100644 --- a/config/custom_format/release_d3g.yaml +++ b/config/custom_format/release_d3g.yaml @@ -1,9 +1,7 @@ include_custom_format_when_renaming: false specifications: - - name: d3g - implementation: ReleaseGroupSpecification - negate: false - required: false - fields: - - name: value - value: "d3g$" +- name: d3g + implementation: ReleaseGroupSpecification + negate: false + required: false + value: d3g$ diff --git a/config/custom_format/release_iVy.yaml b/config/custom_format/release_iVy.yaml index 767f70b..f38d7c6 100644 --- a/config/custom_format/release_iVy.yaml +++ b/config/custom_format/release_iVy.yaml @@ -1,9 +1,7 @@ include_custom_format_when_renaming: false specifications: - - name: iVy - implementation: ReleaseGroupSpecification - negate: false - required: false - fields: - - name: value - value: "iVy$" +- name: iVy + implementation: ReleaseGroupSpecification + negate: false + required: false + value: iVy$ diff --git a/config/custom_format/resolution_1080p.yaml b/config/custom_format/resolution_1080p.yaml index b0343e5..b5bf75d 100644 --- a/config/custom_format/resolution_1080p.yaml +++ b/config/custom_format/resolution_1080p.yaml @@ -1,9 +1,7 @@ include_custom_format_when_renaming: false specifications: - - name: 1080p - implementation: ResolutionSpecification - negate: false - required: false - fields: - - name: value - value: "1080" +- name: 1080p + implementation: ResolutionSpecification + negate: false + required: false + value: '1080' diff --git a/config/custom_format/resolution_2160p.yaml b/config/custom_format/resolution_2160p.yaml index c554727..9f759b7 100644 --- a/config/custom_format/resolution_2160p.yaml +++ b/config/custom_format/resolution_2160p.yaml @@ -1,9 +1,7 @@ include_custom_format_when_renaming: false specifications: - - name: 2160p - implementation: ResolutionSpecification - negate: false - required: false - fields: - - name: value - value: "2160" +- name: 2160p + implementation: ResolutionSpecification + negate: false + required: false + value: '2160' diff --git a/config/custom_format/resolution_720p.yaml b/config/custom_format/resolution_720p.yaml index 3661b07..4a16fa7 100644 --- a/config/custom_format/resolution_720p.yaml +++ b/config/custom_format/resolution_720p.yaml @@ -1,9 +1,7 @@ include_custom_format_when_renaming: false specifications: - - name: 720p - implementation: ResolutionSpecification - negate: false - required: false - fields: - - name: value - value: "720" +- name: 720p + implementation: ResolutionSpecification + negate: false + required: false + value: '720' diff --git a/config/custom_format/size_0_800.yaml b/config/custom_format/size_0_800.yaml index ffb1a25..66ed03b 100644 --- a/config/custom_format/size_0_800.yaml +++ b/config/custom_format/size_0_800.yaml @@ -1,11 +1,8 @@ include_custom_format_when_renaming: false specifications: - - name: size_0_800 - implementation: SizeSpecification - negate: false - required: false - fields: - - name: min - value: "0" - - name: max - value: "0.8" +- name: size_0_800 + implementation: SizeSpecification + negate: false + required: false + min: 0 + max: 0.8 diff --git a/config/custom_format/size_1500_3000.yaml b/config/custom_format/size_1500_3000.yaml index 2b56a5e..df3a550 100644 --- a/config/custom_format/size_1500_3000.yaml +++ b/config/custom_format/size_1500_3000.yaml @@ -1,11 +1,8 @@ include_custom_format_when_renaming: false specifications: - - name: size_1500_3000 - implementation: SizeSpecification - negate: false - required: false - fields: - - name: min - value: "1.5" - - name: max - value: "3" +- name: size_1500_3000 + implementation: SizeSpecification + negate: false + required: false + min: 1.5 + max: 3 diff --git a/config/custom_format/size_3000_6000.yaml b/config/custom_format/size_3000_6000.yaml index ad1c052..1f19989 100644 --- a/config/custom_format/size_3000_6000.yaml +++ b/config/custom_format/size_3000_6000.yaml @@ -1,11 +1,8 @@ include_custom_format_when_renaming: false specifications: - - name: size_3000_6000 - implementation: SizeSpecification - negate: false - required: false - fields: - - name: min - value: "3" - - name: max - value: "6" +- name: size_3000_6000 + implementation: SizeSpecification + negate: false + required: false + min: 3 + max: 6 diff --git a/config/custom_format/size_6000_10000.yaml b/config/custom_format/size_6000_10000.yaml index d1c673e..b7fdfd4 100644 --- a/config/custom_format/size_6000_10000.yaml +++ b/config/custom_format/size_6000_10000.yaml @@ -1,11 +1,8 @@ include_custom_format_when_renaming: false specifications: - - name: size_6000_10000 - implementation: SizeSpecification - negate: false - required: false - fields: - - name: min - value: "6" - - name: max - value: "10" +- name: size_6000_10000 + implementation: SizeSpecification + negate: false + required: false + min: 6 + max: 10 diff --git a/config/custom_format/size_800_1500.yaml b/config/custom_format/size_800_1500.yaml index e852f31..bd9f923 100644 --- a/config/custom_format/size_800_1500.yaml +++ b/config/custom_format/size_800_1500.yaml @@ -1,11 +1,8 @@ include_custom_format_when_renaming: false specifications: - - name: size_800_1500 - implementation: SizeSpecification - negate: false - required: false - fields: - - name: min - value: "0.8" - - name: max - value: "1.5" +- name: size_800_1500 + implementation: SizeSpecification + negate: false + required: false + min: 0.8 + max: 1.5 diff --git a/config/custom_format/source_bluray.yaml b/config/custom_format/source_bluray.yaml index a2814af..2b952ff 100644 --- a/config/custom_format/source_bluray.yaml +++ b/config/custom_format/source_bluray.yaml @@ -1,9 +1,7 @@ include_custom_format_when_renaming: false specifications: - - name: bluray - implementation: SourceSpecification - negate: false - required: false - fields: - - name: value - value: "6" +- name: bluray + implementation: SourceSpecification + negate: false + required: false + value: '6' diff --git a/config/custom_format/source_hdtv.yaml b/config/custom_format/source_hdtv.yaml index b402341..5686431 100644 --- a/config/custom_format/source_hdtv.yaml +++ b/config/custom_format/source_hdtv.yaml @@ -1,9 +1,7 @@ include_custom_format_when_renaming: false specifications: - - name: hdtv - implementation: SourceSpecification - negate: false - required: false - fields: - - name: value - value: "1" +- name: hdtv + implementation: SourceSpecification + negate: false + required: false + value: '1' diff --git a/config/custom_format/source_webdl.yaml b/config/custom_format/source_webdl.yaml index f95ff1a..141849f 100644 --- a/config/custom_format/source_webdl.yaml +++ b/config/custom_format/source_webdl.yaml @@ -1,16 +1,12 @@ include_custom_format_when_renaming: false specifications: - - name: webdl - implementation: SourceSpecification - negate: false - required: false - fields: - - name: value - value: "3" - - name: webrip - implementation: SourceSpecification - negate: false - required: false - fields: - - name: value - value: "4" +- name: webdl + implementation: SourceSpecification + negate: false + required: false + value: '3' +- name: webrip + implementation: SourceSpecification + negate: false + required: false + value: '4' diff --git a/config/indexer/NZBgeek.yaml b/config/indexer/NZBgeek.yaml index ac12b0b..d3d907b 100644 --- a/config/indexer/NZBgeek.yaml +++ b/config/indexer/NZBgeek.yaml @@ -12,4 +12,3 @@ categories: - 5070 - 5080 anime_categories: [] -season_search_maximum_single_episode_age: 0 diff --git a/config/indexer/NZBgeek_Prowlarr.yaml b/config/indexer/NZBgeek_Prowlarr.yaml index 971201a..07ad87d 100644 --- a/config/indexer/NZBgeek_Prowlarr.yaml +++ b/config/indexer/NZBgeek_Prowlarr.yaml @@ -14,4 +14,3 @@ categories: - 5050 anime_categories: - 5070 -season_search_maximum_single_episode_age: 0 diff --git a/env b/env new file mode 100644 index 0000000..7288c46 --- /dev/null +++ b/env @@ -0,0 +1 @@ +export VAULT_ROLEID=3dd4f36f-222b-59e4-8f93-f7a39dec8cae diff --git a/environments/sonarr.service.consul/.terraform.lock.hcl b/environments/sonarr.service.consul/.terraform.lock.hcl new file mode 100644 index 0000000..5f2f77d --- /dev/null +++ b/environments/sonarr.service.consul/.terraform.lock.hcl @@ -0,0 +1,25 @@ +# This file is maintained automatically by "tofu init". +# Manual edits may be lost in future updates. + +provider "registry.opentofu.org/devopsarr/sonarr" { + version = "3.4.2" + constraints = "3.4.2" + hashes = [ + "h1:2XcXWqATWjGrdkC4lngY4LvqUgwxfy5pjpLWRlNVYcY=", + "zh:01d675253aef5586b165bc4749d006f91cda6ce65b24842c7911cc178fe7e09d", + "zh:2da242ee58c1726cff9ce9260bc94756bc8a775a717da5aec8e9a8bf60578ac6", + "zh:30acc52a3a31ac75387728c27b3193f0419dcb72ee7488e8dbcd407884921205", + "zh:47adaba9c7915c832a9d8dfb5d0a18dd08b60fd7c531a810b2642ab75d200ee1", + "zh:551b580729cd82cc7a303d836985286e79a26062f02629bf51081ba2e4edf471", + "zh:5e5c5b1614cf0c61aa154543da1d5bda295a405fda52746d9193b0b8db922ddb", + "zh:65ebe76847129677f747364ee20591f01f5df4a67b06c5dff1bf53b813ec613a", + "zh:67db823f6016e345f2cbceb5300d0cce595bdeb0da32b15a1743724f0a4f978f", + "zh:75f119f674b3b0988133d38c1645e97cf6f0aee62a4131dfd62c8462636c2a94", + "zh:7ca3d6cfd4ccc2a9fb008ca93362c97a98f2ae98b55a56a7902fd33030d64179", + "zh:82033841c5a3fceecc1e3b84ef7328f027e2bb4bf63dfc24886510fed9d8a843", + "zh:890df766e9b839623b1f0437355032a3c006226a6c200cd911e15ee1a9014e9f", + "zh:9aee54de9fcce6ef4f6b4f4f394a5628690d7d4849b03cd996ff991f8b29433a", + "zh:cda3fd66138de23856f869549aa06c82ce1f899474bc133d29d8463bfa032b16", + "zh:e4f8a67b8d08702056073a5ac8928dbb991767a52d3f36c3726399df0b5f2b96", + ] +} diff --git a/modules/sonarr/main.tf b/modules/sonarr/main.tf index f4f7675..86598ae 100644 --- a/modules/sonarr/main.tf +++ b/modules/sonarr/main.tf @@ -1,61 +1,26 @@ resource "sonarr_custom_format" "this" { - for_each = var.custom_formats - name = each.key + for_each = var.custom_formats + name = each.key include_custom_format_when_renaming = lookup(each.value, "include_custom_format_when_renaming", false) - - dynamic "specifications" { - for_each = each.value.specifications - content { - name = specifications.value.name - implementation = specifications.value.implementation - negate = lookup(specifications.value, "negate", false) - required = lookup(specifications.value, "required", false) - - dynamic "fields" { - for_each = lookup(specifications.value, "fields", []) - content { - name = fields.value.name - value = tostring(lookup(fields.value, "value", "")) - } - } - } - } + specifications = each.value.specifications } resource "sonarr_quality_profile" "this" { - for_each = var.quality_profiles - name = each.key - upgrade_allowed = lookup(each.value, "upgrade_allowed", false) - cutoff = each.value.cutoff - cutoff_format_score = lookup(each.value, "cutoff_format_score", 0) - min_format_score = lookup(each.value, "min_format_score", 0) + for_each = var.quality_profiles + name = each.key + upgrade_allowed = lookup(each.value, "upgrade_allowed", false) + cutoff = each.value.cutoff + cutoff_format_score = lookup(each.value, "cutoff_format_score", 0) + min_format_score = lookup(each.value, "min_format_score", 0) + quality_groups = each.value.quality_groups - dynamic "quality_groups" { - for_each = each.value.quality_groups - content { - id = quality_groups.value.id - name = lookup(quality_groups.value, "name", null) - - dynamic "qualities" { - for_each = quality_groups.value.qualities - content { - id = qualities.value.id - name = qualities.value.name - source = qualities.value.source - resolution = qualities.value.resolution - } - } + format_items = [ + for fi in lookup(each.value, "format_items", []) : { + name = fi.name + format = sonarr_custom_format.this[fi.format].id + score = fi.score } - } - - dynamic "format_items" { - for_each = lookup(each.value, "format_items", []) - content { - name = format_items.value.name - format = format_items.value.format - score = format_items.value.score - } - } + ] } resource "sonarr_download_client_nzbget" "this" { @@ -74,18 +39,17 @@ resource "sonarr_download_client_nzbget" "this" { } resource "sonarr_indexer_newznab" "this" { - for_each = var.indexers - name = each.key - enable_automatic_search = lookup(each.value, "enable_automatic_search", true) - enable_interactive_search = lookup(each.value, "enable_interactive_search", true) - enable_rss = lookup(each.value, "enable_rss", true) - priority = lookup(each.value, "priority", 25) - base_url = each.value.base_url - api_path = lookup(each.value, "api_path", "/api") - api_key = lookup(each.value, "api_key", "") - categories = lookup(each.value, "categories", []) - anime_categories = lookup(each.value, "anime_categories", []) - season_search_maximum_single_episode_age = lookup(each.value, "season_search_maximum_single_episode_age", 0) + for_each = var.indexers + name = each.key + enable_automatic_search = lookup(each.value, "enable_automatic_search", true) + enable_interactive_search = lookup(each.value, "enable_interactive_search", true) + enable_rss = lookup(each.value, "enable_rss", true) + priority = lookup(each.value, "priority", 25) + base_url = each.value.base_url + api_path = lookup(each.value, "api_path", "/api") + api_key = lookup(each.value, "api_key", "") + categories = lookup(each.value, "categories", []) + anime_categories = lookup(each.value, "anime_categories", []) } resource "sonarr_notification_emby" "this" { @@ -94,32 +58,32 @@ resource "sonarr_notification_emby" "this" { host = each.value.host port = each.value.port use_ssl = lookup(each.value, "use_ssl", false) - api_key = lookup(each.value, "api_key", "") + api_key = each.value.api_key notify = lookup(each.value, "notify", false) update_library = lookup(each.value, "update_library", true) - on_grab = lookup(each.value, "on_grab", true) - on_download = lookup(each.value, "on_download", true) - on_upgrade = lookup(each.value, "on_upgrade", true) - on_rename = lookup(each.value, "on_rename", true) - on_series_add = lookup(each.value, "on_series_add", true) - on_series_delete = lookup(each.value, "on_series_delete", true) - on_episode_file_delete = lookup(each.value, "on_episode_file_delete", true) - on_episode_file_delete_for_upgrade = lookup(each.value, "on_episode_file_delete_for_upgrade", true) - on_application_update = lookup(each.value, "on_application_update", true) + on_grab = lookup(each.value, "on_grab", true) + on_download = lookup(each.value, "on_download", true) + on_upgrade = lookup(each.value, "on_upgrade", true) + on_rename = lookup(each.value, "on_rename", true) + on_series_add = lookup(each.value, "on_series_add", true) + on_series_delete = lookup(each.value, "on_series_delete", true) + on_episode_file_delete = lookup(each.value, "on_episode_file_delete", true) + on_episode_file_delete_for_upgrade = lookup(each.value, "on_episode_file_delete_for_upgrade", true) + on_application_update = lookup(each.value, "on_application_update", true) } resource "sonarr_delay_profile" "this" { - for_each = var.delay_profiles - enable_usenet = lookup(each.value, "enable_usenet", true) - enable_torrent = lookup(each.value, "enable_torrent", true) - preferred_protocol = lookup(each.value, "preferred_protocol", "usenet") - usenet_delay = lookup(each.value, "usenet_delay", 0) - torrent_delay = lookup(each.value, "torrent_delay", 0) - bypass_if_highest_quality = lookup(each.value, "bypass_if_highest_quality", true) + for_each = var.delay_profiles + enable_usenet = lookup(each.value, "enable_usenet", true) + enable_torrent = lookup(each.value, "enable_torrent", true) + preferred_protocol = lookup(each.value, "preferred_protocol", "usenet") + usenet_delay = lookup(each.value, "usenet_delay", 0) + torrent_delay = lookup(each.value, "torrent_delay", 0) + bypass_if_highest_quality = lookup(each.value, "bypass_if_highest_quality", true) bypass_if_above_custom_format_score = lookup(each.value, "bypass_if_above_custom_format_score", false) - minimum_custom_format_score = lookup(each.value, "minimum_custom_format_score", 0) - tags = lookup(each.value, "tags", []) + minimum_custom_format_score = lookup(each.value, "minimum_custom_format_score", 0) + tags = each.value.tags } resource "sonarr_root_folder" "this" {