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 для
- сначала ПОЛУЧИТЕ детали идентификатора службы, включая iam_id,
- затем с помощью 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" {}