IBM Cloud и terraform: как создать и скачать ключ API?

С помощью подключаемого модуля поставщика IBM Cloud для terraform можно получить доступ к текущему токену аутентификации.

data "ibm_iam_auth_token" "tokendata" {}

Я также успешно создал идентификатор службы.

resource "ibm_iam_service_id" "serviceID" {
  name        = "test"
  description = "New ServiceID"
}

Как создать ключ API, загрузить его и использовать для запуска следующего terraform apply под сервисным ID?

1 ответ

Решение

Задача немного сложная, потому что плагин не возвращает iam_id для идентификаторов служб, а только уникальный идентификатор.

Есть два варианта. Один из них - использовать ресурсы NULL с curl и jq для

  1. сначала ПОЛУЧИТЕ детали идентификатора службы, включая iam_id,
  2. затем с помощью POST создать ключ API.

Фрагмент для 1. может выглядеть так:

resource "null_resource" "devops_iam_id" {
  // Get iam_id for service ID
  provisioner "local-exec" {
    command = "curl -X GET 'https://iam.cloud.ibm.com/v1/serviceids/${ibm_iam_service_id.myServiceID.id}' -H 'Authorization: ${data.ibm_iam_auth_token.iam_tokendata.iam_access_token}' -H 'Content-Type: application/json' | jq '.iam_id'"
  }
}

Другой вариант - использовать тот факт, что iam_id кажется просто префиксом iam-за которым следует уникальный идентификатор. Таким образом, у меня работает следующее:

// Create a service ID for devops tasks
    resource "ibm_iam_service_id" "myServiceID" {
      name        = "myServiceID"
      description = "ServiceID for deploying the app and devops tasks"
    
      // create and download API key
      provisioner "local-exec" {
        command = "curl -X POST 'https://iam.cloud.ibm.com/v1/apikeys' -H 'Authorization: ${data.ibm_iam_auth_token.iam_tokendata.iam_access_token}' -H 'Content-Type: application/json' -d '{ \"name\":\"henrikTestKey\", \"iam_id\":\"iam-${ibm_iam_service_id.myServiceID.id}\", \"store_value\": true}' > apikeyOutput.json"
      }
    }

Необходимый токен Bearer можно получить с помощью источника данных токена IAM:

data "ibm_iam_auth_token" "tokendata" {}
Другие вопросы по тегам