Terraform
有关 IBM Cloud Schematics 工作空间的常见问题的答案分为以下部分。
IBM Cloud Schematics 是否支持多个 Terraform 提供者版本?
是,IBM Cloud Schematics 支持多个 Terraform 提供程序版本。 您需要添加具有提供者版本的 Terraform 提供者块。 缺省情况下,支持提供程序运行当前版本 1.21.0
和先前的四个版本,例如 1.20.1
,1.20.0
,1.19.0
和 1.18.0
。
多提供程序配置的示例:
terraform{
required_providers{
ibm = ">= 1.21.0" // Error !! version unavailable.
ibm = ">= 1.20.0" // Execute against latest version.
ibm = "== 1.20.1" // Executes version v1.20.1.
}
}
目前,已发布 V 1.21.0。 有关更多信息,请参阅 提供者版本。
如何更新 Terraform 版本
IBM Cloud Schematics 不推荐使用旧版本的 Terraform。 有关更多信息,请参阅 在 IBM Cloud Schematics。
IBM Cloud Schematics 不推荐使用 2024 年 4 月 2nd 周的 IBM Cloud Provider Plug-in for Terraform v1.2和 v1.3 模板来创建工作空间。
您可以遵循主题从一个 Terraform 版本升级到另一个版本
如何使用命令行从 Git 存储库 pull latest
代码?
通过命令行更新 IBM Cloud® Schematics 工作空间需要所需的字段 name
。
您需要运行 ibmcloud schematics workspace update --id <workspace-id> --file <updatefile.json>
命令。 样本 updatefile.json
包含具有值的名称字段。
{
"name":"testworkspace"
}
运行时中使用了哪些工具和实用程序?
Schematics 运行时是使用通用基本映像 (UBI-8) 构建的,UBI-8 随附的运行时 utilities/softwares
可用于 Terraform 供应和 Ansible 操作。 有关更多信息,请参阅 Schematics 运行时中使用的 工具和实用程序 的列表。
如何在使用 CLI 创建工作空间时修正 Git 令牌问题
使用 schematics workspace new --file schematic-file.json -g xxxx
命令会抛出 Access token creation failed status
,因为该命令中未指定令牌。
在通过命令行执行操作之前,需要检查 认证。 然后,使用 schematics workspace new --file schematic-file.json --github-token xxxx
命令创建工作空间。 有关更多信息,请参阅 ibmcloud schematics workspace new
命令。
如何在创建或更新工作空间时修正授权问题?
在更新工作空间时,当角色和许可权访问权不足时,您会看到授权问题。 有关更多信息,请参阅管理用户访问权。
如何将 Schematics 服务与测试标识配合使用?
这些测试标识被视为有效的 IBM ID
,用于设置与全局目录或资源控制器相关的 API 调用。 如果无法访问,请执行 联系支持服务。
如何限制 Git 存储库文件夹克隆
缺省情况下,通过 UI 创建工作空间时,Schematics 缺省为克隆完整的 Git 存储库和所有子目录。 取消选择 Use full repository
标志以限制克隆的文件夹并提高下载性能。
Schematics 在 创建工作空间 和 更新工作空间 API 中引入了 compact
标志,以下载 Git 存储库中的 sub directories
。 如果压缩标志设置为
true,那么它将以递归方式下载并保存 sub directories
,否则,您可以在创建工作空间时继续下载并保存完整存储库。
您可以通过启动 get workspace API
以查看压缩标志值来获取响应。 仅当传递了 template_repo.url
字段时,才能提供压缩标志。 更新时,如果未通过此字段,但通过了 URL,则下载为压缩格式。
有效内容中的压缩用法为 .template_data[0].compact = true/false
。 有关更多信息,请参阅 Compact download for Schematics 工作空间。
如何在删除失败时删除工作空间?
如果在 Schematics外部删除资源,那么工作空间删除操作将显示为 resource no longer exists
。
您需要删除工作空间,而不是像资源不可用一样销毁资源。 有关更多信息,请参阅 删除工作空间。
使用凭证或私钥部署 Helm Chart 的最佳方法是什么?
最佳方法是使用 IBM Cloud 目录来管理 Helm 图表,在这些图表中,您可以保留凭证并将其标记为受保护。 有关更多信息,请参阅 与 Helm相关的目录列表。
如何解决由维护活动导致的作业故障?
由于维护而产生的意外影响导致 Schematics 工作空间中正在运行的活动失败。 此类工作空间和正在进行的活动将标记为 Failed
。 然后,用户可以重新运行该活动。 有关更多信息,请参阅 工作空间状态图。
如何设置 Git 发行版标记?
2021/11/08 12:34:06 ----- New Action -----
2021/11/08 12:34:06 Request: RepoURL=https://github.ibm.com/wh-hp-insights/hi-cloud-automation, workspaceSource=Schematics, Branch=2021.10, Release=, Folder=terraform-v2/workspace-hi-qa-automation-app
2021/11/08 12:34:06 Related Activity: action=UPDATE_WORKSPACE,processedBy=sandbox-6bcf8bffcd-rxbww_2478
2021/11/08 12:34:06 Getting download command
2021/11/08 12:34:11 Fatal, could not download repo, Failed to clone git repository, couldn't find remote ref "refs/heads/2021.10" (most likely invalid branch name is passed)
2021/11/08 12:34:12 Problems found with the Repository. Please Rectify and Retry
如果 Release
参数为空,并且使用发行版标记设置了 Branch
。
Schematics 不支持 release
标签,因为很难从 Git 存储库 URL 识别它是发布标签还是分支。 您需要通过 Schematics 设置 release
标签。
使用无效工作空间标识时,为什么我收到 403 错误而不是 404 错误?
curl -X GET https://schematics.cloud.ibm.com/v1/workspaces/badWOrkspaceId -H "Authorization: $IAM_TOKEN"
{"requestid":"3a3cbffe-e23a-4ccf-b764-042f7379c084","timestamp":"2021-11-11T17:00:07.169953698Z","messageid":"M1078","message":"Error while validating the location in the account. Verify you have permission to the location in the global catalog settings.","statuscode":403}
是,API 中存在先检查位置的更改,如果未获得工作空间的正确位置,那么会返回 403 错误而不是 404 错误。
如何启用 Terraform 调试日志记录
您可以设置环境变量以在有效内容中设置 Terraform 日志调试 TF_LOG=debug
跟踪,如样本有效内容中所示。 有关更多信息,请参阅 Schematics 工作空间更新。
{
"name": "sample",
"type": [
"terraform_v1.4"
],
"description": "terraform workspace",
"tags": [
],
"template_repo": {
"url": "<your repo>"
},
"template_data": [
{
"folder": ".",
"type": "terraform_v1.4",
"env_values":[
{
"TF_LOG":"debug"
}
]
}
]
}
如何将云资源导入工作空间?
使用 ibmcloud schematics workspace import --options value, -o value : Optional
命令和样本语法从命令行导入。 有关更多信息,请参阅 Schematics 工作空间导入。
ibmcloud schematics workspaces import --id <workspace_id> --address <my terraform resource address> --resourceID <the CRN of the item to import> --options "-var IC_API_KEY=XXXXXXXX"
or
ibmcloud schematics workspaces import --id <workspace_id> --address <my terraform resource address> --resourceID <the CRN of the item to import> --options "--var-file=<path-to-var-file>"
如何下载作业文件?
可以,您可以下载 Schematics 作业文件。 有关更多信息,请参阅 下载 Schematics 作业文件。
如何解决 Terraform 资源超时故障?
根据 Terraform 块中显示的服务,您需要将超时值更新或增大 5 分钟或 10 分钟。 或者,您需要发送 null value
以使用缺省值。
variable "create_timeout"
{
type = String
description = "Timeout duration to create LogDNA instance in Schematics."
default = "15m"
}
如何设置 TF_CLI_ARGS 环境变量?
否,不能直接在 Schematics 工作空间控制台中设置环境变量值。 相反,您可以使用 Schematics API 或 Schematics 命令行 来使用 CURL。
"env_values": [
{
"TF_LOG": "debug"
},
]
能否将专用 Git 存储库用于模块?
是的,Schematics 支持从专用存储库下载 Terraform 模块。 有关更多信息,请参阅 支持从专用远程主机下载模块。
可以编辑工作空间中的所有变量吗?
一次只能从 Schematics 控制台编辑一个变量。 您可以从命令行使用 ibmcloud schematics workspace update
命令以 JSON 格式编辑工作空间的所有变量。
导入 KMS 资源时如何导入密钥?
是,您可以使用 ibm_kms_key
来设置或管理密钥,如样本代码块中所示。 有关更多信息,请参阅 ibm_kms_key。
resource "ibm_resource_instance" "kms_instance" {
name = "instance-name"
service = "kms"
plan = "tiered-pricing"
location = "us-south"
}
resource "ibm_kms_key" "test" {
instance_id = ibm_resource_instance.kms_instance.guid
key_name = "key-name"
standard_key = false
force_delete =true
}
resource "ibm_cos_bucket" "smart-us-south" {
bucket_name = "atest-bucket"
resource_instance_id = "cos-instance-id"
region_location = "us-south"
storage_class = "smart"
key_protect = ibm_kms_key.test.id
}
能否在运行工作空间列表命令时启用 TRACE 以帮助 DEBUG Schematics API?
否,当前 Schematics 在运行 IBMCLOUD_TRACE=true ibmcloud schematics workspace list
命令时不支持此功能。
如何解决列示工作空间中的错误?
列示或检索工作空间时,可能会收到以下错误。Error while retrieving Schematics Instance for the given account
。
Error:
Bad status code [400] returned when getting workspace from Schematics: {"requestid":"fe5f0d6d-1d43-4643-a689-35d090463ce8","timestamp":"2022-01-25T20:23:54.727208017Z","messageid":"M1070","message":"Error while retrieving Schematics Instance for the given account.","statuscode":400}
对于指定位置中的工作空间,您可能没有足够的访问权来访存实例。 请检查为帐户提供的许可权以及需要创建实例的位置。 有关更多信息,请参阅 在何处存储信息?
如何使用 (IBM) GitLab 存储库?
是,您可以使用具有特权的 Schematics 来访问专用 (IBM) GitLab 存储库。
-
如果使用 IAM 令牌时不需要专用 (IBM) GitLab 存储库
git.cloud.ibm.com
访问令牌。 -
如果需要公共 GitLab
gitlab.com
,read_repository
和read_api
访问权来验证专用存储库的分支名称。
您可以使用样本 Terraform 代码块来配置 GitLab 存储库详细信息。
"template_repo": {
"url": "<gitlab_source_repo_url>",
"branch": ""
},
可以在 Schematics中管理 IAM 访问组吗?
是,Schematics 支持完整的 IBM Cloud 提供程序资源集。 有关 IAM 访问组如何工作的更多信息? 请参阅 ibm_iam_access_group。
如何使用其他帐户中的资源?
可以,您可以在 IBM Cloud 源帐户中创建 Schematics 工作空间。 然后,运行 Terraform,提供目标帐户中的资源,以通过 CLI 和 API 调用通过使用目标帐户服务标识来配置认证,相应的跨帐户授权或 API 密钥。 有关更多信息,请参阅 管理其他帐户中的资源。
North America
位置指示什么?
在创建 Schematics 工作空间期间,北美始终指示 us-south
和 us-east
位置。 有关更多信息,请参阅 何处可以创建 Schematics 工作空间? 和 我的信息存储在何处?
Schematics使用哪些端口和 IP 地址?
Schematics 与相关资源指定的端口进行通信。 例如,与 VPC 相关的端口,请参阅 VPC: 在其他网络防火墙中打开必需的端口和 IP 地址。
我何时使用 Schematics,何时使用单独的资源仪表板?
通过 IBM Cloud Schematics,您可以在 IBM Cloud 中运行基础设施代码,以管理云资源的生命周期。 供应资源后,可以使用单个资源的仪表板来使用资源并与其进行交互。 例如,如果您在虚拟专用云(VPC)中配置了虚拟服务器实例,并使用 IBM Cloud Schematics。 您可以使用 VPC 控制台,API 或命令行来 stop
,reboot
和 power on
虚拟服务器实例。
不过,要删除虚拟服务器实例,您可以发送电子邮件至 IBM Cloud Schematics。
是否在 Schematics中刷新了对 Git 存储库的更改?
不,如果您在 GitHub, 中更改Terraform模板的代码,则在 IBM Cloud Schematics 中创建执行计划时,这些更改不会自动生效。 要从您的 GitHub 存储库中提取当前更改,请确保在创建执行计划之前,从工作区 settings
页面中点击 Pull latest
选项。
Terraform 状态文件存储在何处?
在您通过运行 Schematics 申请操作成功预置云资源后,资源状态将存储在Terraform状态文件(terraform.tfstate
)中。Schematics 使用此状态文件作为确定您的账户中存在哪些资源的唯一来源。 状态文件将您在Terraform配置文件中指定的资源映射到您预置的云资源。
删除工作空间时是否除去了资源?
从 IBM Cloud Schematics 删除工作区不会删除您的任何云资源。 如果您在删除资源之前删除了工作区,则必须从各个资源仪表板中手动删除所有云资源。
移除云资源操作无法撤销。 在删除资源之前,请确保已备份所有数据。 如果除去资源定义或注释掉 Terraform 配置文件中的资源,那么将除去 (删除) 资源。 请查看计划日志文件,以验证您的所有资源是否都包含在除去操作中。
可以为工作空间设置环境变量吗?
您可以使用 CLI 和 API 为工作空间设置 env values
。 有关更多信息,请参阅 env_values
的用法。
样本有效内容
{
"name": "newName",
"template_data": [
{
"type": "<same_as_before>",
"env_values": [
{
"env_key1": "dummy_text"
},
{
"env_key2": "dummy_text"
}
],
"env_values_metadata": [
{
"name": "env_values_1",
"hidden": false,
"secure": false
},
{
"name": "env_values_2",
"hidden": false,
"secure": false
}
]
}
]
}
漂移检测是否自动运行?
否,漂移检测不是 IBM Cloud Schematics中的自动检测方法。 有关更多信息,请参阅 在 Schematics中检测漂移。
如何启动漂移检测?
您可以使用 UI 和 CLI 来启动漂移检测。 有关更多信息,请参阅 在 Schematics中检测漂移。
在哪里可以看到漂移检测作业的状态?
要验证漂移检测作业的结果,需要检查漂移检测作业日志。 作业日志提供了作为 in progress
或 completed
的漂移检测的详细信息以及相应的状态,例如 failure
或 success
。 有关更多信息,请参阅 在 Schematics中检测漂移。
我可以 interrupt
或 terminate
运行作业吗?
可以,您可以使用作业类型在 Schematics 中中断,强制停止或终止供应资源或正在运行的作业。 有关更多信息,请参阅 停止作业类型。
如何更正 Incorrect Location Input
错误?
错误
{
"requestid": "3f59c342-cd2c-4703-aa10-9e8e7072a3ac",
"timestamp": "2022-06-28T20:02:58.529765308Z",
"messageid": "M1097",
"message": "Incorrect Location Input.",
"statuscode": 400
}
Schematics 全局端点缺省为 us
环境。 因此,您需要使用 区域端点 将位置指向 eu-de
区域。
如何查看工作空间资源?
使用 state list
CLI 命令来查看与 IBM Cloud Schematics UI 中相同的资源。
如何修正 CreateworkspaceWithContext failed Bad request
错误?
错误
CreateWorkspaceWithContext failed Bad request. Check that the information you entered in the payload is complete and formatted correctly in JSON.
默认情况下,Schematics 公共或私有终端的全URL 指向 us
区域。 作为变通方法,您可以在 Terraform 命令之前设置 环境变量键。
```sh
export IBMCLOUD_SCHEMATICS_API_ENDPOINT="https://eu-de.schematics.cloud.ibm.com"
```
您还可以将端点添加到 JSON 文件,以将端点服务分类为公用或专用。
样本提供程序声明
{
"IBMCLOUD_SCHEMATICS_API_ENDPOINT":{
"public":{
"eu-de":"https://eu-de.schematics.cloud.ibm.com"
}
}
}
示例提供程序块
provider "ibm" {
endpoints_file_path= "endpoints.json"
}
状态文件中的敏感值是否已加密?
Schematics 在存储 Terraform 状态文件时以及在使用 TLS 进行传输时对其进行加密。 Terraform 不会单独加密敏感值。 有关更多信息,请参阅状态文件中的 sensitive-data。
为何使用 CLI 定义的工作空间变量会抛出 400 个错误?
Schematics 工作空间列表变量存储值应该始终为 HCL 字符串。 value
字段必须包含列表,映射或复杂变量的变量库的转义字符串。 有关更多信息,请参阅 针对声明的变量向 Schematics 提供值。
能否使用 JSON
文件更新 Terraform 版本 (TF_VERSION
)?
目前,更新 TF_VERSION
的变通方法是在更新变量库时传递 TF_VERSION
。Schematics 自动检测在 TF
文件中的 Terraform 版本块中指定的内容。 这是缺省行为。
有关更多信息,请参阅 设置和更改版本。
可以在每次作业运行时从新的 Terraform 状态文件开始吗?
否,您需要创建新的工作空间。 有关更多信息,请参阅 工作空间作业执行。
我可以导入现有的Terraform状态文件吗?
可以,您可以通过 ibmcloud schematics workspace new 使用 --state
标志选项。
字符的最大可变长度是什么?
Schematics 工作空间变量支持的最大字符长度为 1 MB。
要导入的最大状态文件是什么?
terraform.tfstate
文件必须小于 16 MB。 从现有 Terraform 状态文件创建工作空间时,terraform.tfstate
文件必须小于 16 MB。 Schematics中不支持大于 16 MB 的状态文件。 您将看到带有 413 Request Entity Too Large error when creating a new workspace
的错误消息。
如何在使用 API 时修正认证错误?
您需要为 IBM Cloud 帐户创建 IAM 访问令牌。 有关更多信息,请参阅 获取令牌密码。 您可以看到以下样本错误消息以及认证错误的解决方案。
Error: Request fails with status code: 400, BXNIMO137E: For the original authentication, client id 'default' was passed, refresh the token, client id 'bx' is used.
IAM API 文档显示了如何创建 default token
。 如果该令牌已到期,那么可以使用 refresh token
来获取新的 IAM 访问令牌。 当缺省客户机 (无基本授权头) 时,如本文档中所述。 无法使用 refresh_token
来检索新的 IAM 访问令牌。 IAM 访问令牌即将到期时,请使用 API 密钥创建列出的新访问令牌。
-
您需要创建
access_token
和refresh_token
。export IBMCLOUD_API_KEY=<ibmcloud-api_key> curl -X POST "https://iam.cloud.ibm.com/identity/token" -H "Content-Type: application/x-www-form-urlencoded" -d "grant_type=urn:ibm:params:oauth:grant-type:apikey&apikey=$IBMCLOUD_API_KEY" -u bx:bx
-
将步骤 1 中获取的
access_token
和refresh_token
导出为ACCESS_TOKEN
和REFRESH_TOKEN
的环境变量。export ACCESS_TOKEN=<access_token> export REFRESH_TOKEN=<refresh_token>
-
创建工作空间
curl --request POST --url https://cloud.ibm.com/schematics/overview/v1/workspaces -H "Authorization: Bearer <access_token>" -d '{"name":"","type": ["terraform_v1.4"],"description": "","resource_group": "","tags": [],"template_repo": {"url": ""},"template_data": [{"folder": ".","type": "terraform_v1.4","variablestore": [{"name": "variable_name1","value": "variable_value1"},{"name": "variable_name2","value": "variable_value2"}]}]}'
如何将 Schematics 工作空间标识作为环境变量进行检索?
您可以使用以下代码将 Schematics 工作空间标识作为环境变量进行检索。 在运行计划或应用之前,会自动将 IC_SCHEMATICS_WORKSPACE_ID
,TF_VAR_IC_SCHEMATICS_WORKSPACE_ID
,TF_VAR_IC_SCHEMATICS_WORKSPACE_RG_I
,IC_IAM_TOKEN
和 IC_IAM_REFRESH_TOKEN
环境变量设置为 Terraform 脚本。
data "external" "env" {
program = ["jq", "-n", "env"]
}
output "workspace_id" {
value = "${lookup(data.external.env.result, "TF_VAR_IC_SCHEMATICS_WORKSPACE_ID")}"
如果要查看工作空间中的所有可用环境变量,请使用 output "${jsonencode(data.external.env.result)}"
代码。
删除 Schematics 对象时,如何纠正来自代理调用的 401 错误?
Schematics 对象删除后,如果 Schematics 服务无法删除账户中的对象。 您需要提交 Schematics 支持票据,以便从资源控制器中删除。