Search code examples
terraformlocal-variablesterraform-provider-azure

how to remove a key value pair from local map in terraform?


I have a local value like below and i want to remove the Mongo-S pair from that since it doesn't have dbv value

merged_mongo_locals = {
      MongoA-0 = {
           az           = "ap-south-1a"
           dbv          = 50
           service_name = "MongoA"
        }
       MongoC-0 = {
           az           = "ap-south-1a"
           dbv          = 50
           service_name = "MongoC"
        }
       MongoC-1 = {
           az           = "ap-south-1b"
           dbv          = 50
           service_name = "MongoC"
        }
       MongoD-0 = {
           az           = "ap-south-1a"
           dbv          = 100
           service_name = "MongoD"
        }
       MongoD-1 = {
           az           = "ap-south-1b"
           dbv          = 100
           service_name = "MongoD"
        }
       MongoD-2 = {
           az           = "ap-south-1c"
           dbv          = 100
           service_name = "MongoD"
        }
       MongoM-0 = {
           az           = "ap-south-1a"
           dbv          = 50
           service_name = "MongoM"
        }
       MongoS-0 = {
           az           = "ap-south-1a"
           service_name = "MongoS"
        }
       MongoS-1 = {
           az           = "ap-south-1b"
           service_name = "MongoS"
        }
    }

I'm using below method to remove that MongoS key pair

output "Mongo-ips" { value = {for k,v in local.merged_mongo_locals: k => v if ! contains(values(v),"dbv")} }

But the output looks below and it didn't exclude the MongoS pair even though it doesn't have dbv value

Changes to Outputs:
  + Mongo-ips = {
      + MongoA-0 = {
          + az           = "ap-south-1a"
          + dbv          = 50
          + service_name = "MongoA"
        }
      + MongoC-0 = {
          + az           = "ap-south-1a"
          + dbv          = 50
          + service_name = "MongoC"
        }
      + MongoC-1 = {
          + az           = "ap-south-1b"
          + dbv          = 50
          + service_name = "MongoC"
        }
      + MongoD-0 = {
          + az           = "ap-south-1a"
          + dbv          = 100
          + service_name = "MongoD"
        }
      + MongoD-1 = {
          + az           = "ap-south-1b"
          + dbv          = 100
          + service_name = "MongoD"
        }
      + MongoD-2 = {
          + az           = "ap-south-1c"
          + dbv          = 100
          + service_name = "MongoD"
        }
      + MongoM-0 = {
          + az           = "ap-south-1a"
          + dbv          = 50
          + service_name = "MongoM"
        }
      + MongoS-0 = {
          + az           = "ap-south-1a"
          + service_name = "MongoS"
        }
      + MongoS-1 = {
          + az           = "ap-south-1b"
          + service_name = "MongoS"
        }
    }

Please guide me what is the wrong here


Solution

  • This should help you.

    output "Mongo-ips" {
      value = { for k, v in local.merged_mongo_locals : k => v if contains(keys(v), "dbv") }
    }