IBM-Cloud / terraform-provider-ibm

https://registry.terraform.io/providers/IBM-Cloud/ibm/latest/docs
Mozilla Public License 2.0
336 stars 645 forks source link

Resource to filter the IBM Cloud Catalog #5435

Open pauljegouic opened 1 week ago

pauljegouic commented 1 week ago

Hello there,

I'd like a resource that will allow me to manage this page :

image

Here is my current implementation to handle this with automation:

variable "global_catalog_configuration" {
  description = "Filter object to apply to global catalog"
  type = object({
    include_all = bool
    category_filters = object({
      provider = object({
        include = bool
        filter = object({
          filter_terms = list(string)
        })
      })
    })
    id_filters = object({
      include = object({
        filter_terms = list(string)
      })
      exclude = object({
        filter_terms = list(string)
      })
    })
  })
}

resource "null_resource" "patch_global_catalog" {
  triggers = {
    catalog_filter_payload = local.catalog_filter_payload
  }
  provisioner "local-exec" {
    command = <<EOT
      if [ ! -z $IC_IAM_TOKEN ]
      then
          export TOKEN="$IC_IAM_TOKEN"
      else
          export TOKEN=$(curl -X POST "https://iam.cloud.ibm.com/identity/token" --header 'Content-Type: application/x-www-form-urlencoded'   --header 'Accept: application/json'   --data-urlencode 'grant_type=urn:ibm:params:oauth:grant-type:apikey'   --data-urlencode "apikey=$IC_API_KEY" | jq -r .access_token)
      fi

      res=$(curl -X "GET" "https://cm.globalcatalog.cloud.ibm.com/api/v1-beta/catalogaccount" -H "accept: */*" -H "Authorization: Bearer $TOKEN")
      rev=$(echo $res | grep -Eo '"_rev"[^,]*' | grep -Eo '[^:]*$' | sed 's/\"//g')
      id=$(echo $res | grep -Eo '"id"[^,]*' | grep -Eo '[^:]*$' | sed 's/\"//g')
      echo "REV" $rev
      echo "ID" $id

      data_final=$(echo '{ "id": "ID", "_rev": "REV","account_filters": ${local.catalog_filter_payload}}' | sed "s/ID/$id/g" | sed "s/REV/$rev/g")
      echo $data_final > payload.json

      curl -X "PUT" "https://cm.globalcatalog.cloud.ibm.com/api/v1-beta/catalogaccount" -H "content-type: application/json" -H "accept: */*" -H "Authorization: Bearer $TOKEN" --data-binary @payload.json
    EOT
  }

  provisioner "local-exec" {
    when    = destroy
    command = <<EOT
      if [ ! -z $IC_IAM_TOKEN ]
      then
          export TOKEN="$IC_IAM_TOKEN"
      else
          export TOKEN=$(curl -X POST "https://iam.cloud.ibm.com/identity/token" --header 'Content-Type: application/x-www-form-urlencoded'   --header 'Accept: application/json'   --data-urlencode 'grant_type=urn:ibm:params:oauth:grant-type:apikey'   --data-urlencode "apikey=qYlr_FvI8RkZsC0cvadCqBnWJRNJy-qxsNA5PwsqyKCw" | jq -r .access_token)
      fi

      res=$(curl -X "GET" "https://cm.globalcatalog.cloud.ibm.com/api/v1-beta/catalogaccount" -H "accept: */*" -H "Authorization: Bearer $TOKEN")
      rev=$(echo $res | grep -Eo '"_rev"[^,]*' | grep -Eo '[^:]*$' | sed 's/\"//g')
      id=$(echo $res | grep -Eo '"id"[^,]*' | grep -Eo '[^:]*$' | sed 's/\"//g')
      echo "REV" $rev
      echo "ID" $id

      data_final=$(echo '{ "id": "ID", "_rev": "REV","account_filters": {"include_all": true,"category_filters":{"provider":{"filter":{"filter_terms":[]},"include":true}},"id_filters":{"exclude":{"filter_terms":[]},"include":{"filter_terms":[]}},"include_all":true}}' | sed "s/ID/$id/g" | sed "s/REV/$rev/g")

      echo $data_final > payload.json

      curl -X "PUT" "https://cm.globalcatalog.cloud.ibm.com/api/v1-beta/catalogaccount" -H "content-type: application/json" -H "accept: */*" -H "Authorization: Bearer $TOKEN" --data-binary @payload.json
    EOT
  }
}