terraform - IBM Cloud 和 terraform:如何创建和下载 API 密钥?
问题描述
使用用于 terraform 的 IBM Cloud 提供程序插件,可以访问当前的身份验证令牌。
data "ibm_iam_auth_token" "tokendata" {}
我还成功创建了一个服务 ID。
resource "ibm_iam_service_id" "serviceID" {
name = "test"
description = "New ServiceID"
}
如何创建 API 密钥,下载它并使用它terraform apply
在服务 ID 下运行下一个?
解决方案
在最近的更新中,添加了为服务 ID 创建和引用 API 密钥的功能。
老的
这个任务有点棘手,因为插件不返回服务 ID 的iam_id,只返回唯一 ID。
有两种选择。一种是使用带有curl和jq的 NULL 资源来
- 首先获取服务 ID 详细信息,包括 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-
后跟唯一 ID 的事实。因此,以下对我有用:
// 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"
}
}
更新:使用此最新版本,返回iam_id并可直接寻址:
// 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\":\"${ibm_iam_service_id.myServiceID.id}\", \"store_value\": true}' > apikeyOutput.json"
}
}
可以使用IAM 令牌数据源获取必要的 Bearer 令牌:
data "ibm_iam_auth_token" "tokendata" {}
推荐阅读
- html - 如何在引导程序 4 的导航栏下拉菜单中增加 div 大小
- c# - Visual Studios 2017 - 无法将类型“System.Collections.Generic.List<>”隐式转换为“System.Collections.Generic.List<>”
- java - @DataJpaTest 自动装配数据源
- powershell - PowerShell:如何将 $env:HOSTNAME/$env:Computer) 作为文本替换的一部分插入文本文件?
- scala - java.lang.NoSuchMethodError:在纱线集群上提交火花时
- android - 如何使抽屉导航页面可滚动?
- discord.js - 不和谐的js和mysql
- html - 在 Beautiful soup 中使用另一个标签查找标签值
- reactjs - 从 mapStateToProps 到 setState
- python - 代码没有遍历我的 CSV 文件中的每个名称