resource "sonarr_custom_format" "this" { for_each = var.custom_formats name = each.key include_custom_format_when_renaming = lookup(each.value, "include_custom_format_when_renaming", false) specifications = each.value.specifications } data "sonarr_custom_formats" "all" {} locals { custom_format_ids = merge( { for cf in data.sonarr_custom_formats.all.custom_formats : cf.name => cf.id }, { for k, v in sonarr_custom_format.this : k => v.id }, ) } 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) min_upgrade_format_score = lookup(each.value, "min_upgrade_format_score", 0) quality_groups = each.value.quality_groups format_items = [ for fi in lookup(each.value, "format_items", []) : { name = fi.name format = local.custom_format_ids[fi.format] score = fi.score } ] } resource "sonarr_download_client_nzbget" "this" { for_each = var.download_clients name = lookup(each.value, "name", each.key) enable = lookup(each.value, "enable", true) priority = lookup(each.value, "priority", 1) host = each.value.host port = each.value.port use_ssl = lookup(each.value, "use_ssl", false) username = lookup(each.value, "username", "") password = lookup(each.value, "password", "") tv_category = lookup(each.value, "tv_category", "") remove_completed_downloads = lookup(each.value, "remove_completed_downloads", true) remove_failed_downloads = lookup(each.value, "remove_failed_downloads", true) lifecycle { ignore_changes = [password] } } resource "sonarr_indexer_newznab" "this" { for_each = var.indexers name = lookup(each.value, "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", []) lifecycle { ignore_changes = [api_key] } } resource "sonarr_notification_emby" "this" { for_each = var.notifications name = lookup(each.value, "name", each.key) host = each.value.host port = each.value.port use_ssl = lookup(each.value, "use_ssl", false) api_key = lookup(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) lifecycle { ignore_changes = [api_key] } } 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) 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 = each.value.tags } resource "sonarr_root_folder" "this" { for_each = var.root_folders path = each.value.path }