IBM Cloud Docs
远程状态和跨工作空间访问

远程状态和跨工作空间访问

IBM Cloud® 提供针对 Terraform 的内置 远程状态 管理。 Terraform 状态文件会在运行之间自动保留,并且可供 IBM Cloud® 命令和操作访问。IBM Cloud® 远程状态管理支持团队工作和工作空间共享操作,内置状态锁定可防止针对同一状态文件的并发操作。

内置工作空间远程状态管理支持许多 Schematics 用例:

  • 工作空间之间的资源信息共享。 通过使用 Schematics 远程状态数据源在环境之间传递只读资源信息,可以将基础结构细分为更小的组件。 由数据源链接的离散环境允许将不同基础架构元素的职责委派给不同团队,并将工作空间之间共享的信息作为只读资源。
  • 将工作空间和操作操作与 操作 集成。 可以直接将工作空间资源信息作为 Ansible 动态库存 传递,而无需手动创建主机库存或使用库存脚本。

访问工作空间状态和输出

您可以使用 ibm_schematics_outputibm_schematics_state 数据源从帐户中的其他工作空间访问有关您在工作空间中管理的资源的信息。

IBM Cloud® 使用 local 内置 Terraform 状态支持,而不使用 Terraform 后端 支持。 Terraform configs 中不需要其他配置来启用 IBM Cloud® 远程状态管理。Schematics 不使用 Terraform remote_state 数据源,而是使用 ibm_schematics_output 数据源来访问信息。

ibm_schematics_state 数据源与 remote_state 数据源有何不同?
使用 remote_state 数据源时,必须配置后端以连接到工作空间。 通过 ibm_schematics_state 数据源,您可以自动访问内置 Schematics 后端,并且可以直接访问工作空间信息。

我需要执行哪些操作才能访问其他工作空间中的资源信息?
remote_state 数据源类似,您只能访问在 Terraform 模板中配置为输出值的信息。 例如,假设您有一个用于供应 VPC 的工作空间。 要访问 VPC 标识,必须将该标识定义为 Terraform 配置文件中的输出变量。

要使用 ibm_schematics_output 数据源:

  1. 遵循 入门教程 中的示例以创建 Schematics 工作空间并在 VPC 中供应虚拟服务器。 按照指示信息进行操作时,请查看 vpc.tf Terraform 配置文件末尾定义的输出变量。

    如果您已在其中一个工作空间中使用了其他 Terraform 配置文件,那么可以将此工作空间用于练习。 请确保将此示例中概述的输出值添加到配置文件中,以便稍后可以访问工作空间信息。

    output sshcommand {
        value = "ssh root@ibm_is_floating_ip.fip1.address"
    }
    
    output vpc_id {
    value = ibm_is_vpc.vpc.id
    }
    

    在此示例中,定义了两个输出值: sshcommand 以访问 VPC 和 vpc_id 中的虚拟服务器实例。

  2. 检索您创建的 VPC 工作空间的标识。

    通过控制台:

    • 工作空间仪表板 外部链接图标中,选择 VPC 工作空间。
    • 选择设置选项卡。
    • 摘要 部分中查找工作空间标识。

    通过 CLI:

    • 列出账户中可用的工作空间。
      ibmcloud schematics workspace list
      
    • 在命令行输出的 标识 列中查找工作空间标识。

    Schematics ibmcloud terraform 命令用法显示警告和不推荐使用消息,因为不推荐使用 别名 "terraform"。 在命令中使用 "schematics "或 "sch"。

  3. 创建另一个名为 remotestate.tf 的 Terraform 配置文件,以使用 ibm_schematics_output 数据源访问 vpc.tf 文件的输出参数。 要允许此文件的版本控制,请确保将此配置文件存储在 GitHub 或 GitLab 存储库中。

    data "ibm_schematics_workspace" "vpc" {
        workspace_id = "<schematics_workspace_ID>"
    }
    
    data "ibm_schematics_output" "vpc" {
        workspace_id = "<schematics_workspace_ID>"
        template_id = data.ibm_schematics_workspace.vpc.runtime_data.0.id
    }
    
    output "output_vars" {
        value = data.ibm_schematics_output.vpc.output_values
    }
    
    output "ssh_command" {
        value = data.ibm_schematics_output.vpc.output_values.sshcommand
    }
    
    output "vpc_id" {
        value = data.ibm_schematics_output.vpc.output_values.vpc_id
    }
    
    配置文件组件
    <img src="images/idea.png" alt=""构想" 图标"> 了解配置文件组件
    data.ibm_schematics_workspace.workspace_id 输入在其中定义了要访问的输出值的 VPC 工作空间的标识。 您需要此数据源以在 ibm_schematics_output 数据源中检索工作空间的模板标识。
    data.ibm_schematics_output.workspace_id 输入在其中定义了要访问的输出值的 VPC 工作空间的标识。
    data.ibm_schematics_output.template_id 输入 data.ibm_schematics_workspace.vpc.runtime_data.0.id 以引用工作空间的 Terraform 模板。
    output.output_vars.value 使用 Terraform 插值语法通过使用 ibm_schematics_output 数据源的 output_values 输出参数来访问您在 vpc.tf 文件中定义的所有输出值。 output_values 输出参数以列表形式返回所有输出值。
    output.sshcomand.valueoutput.vpc_id.value 您可以通过将输出值的标识添加到 ibm_schematics_output 数据源来访问 output_values 列表中的特定值。 例如,要访问 vpc_id,只需使用 data.ibm_schematics_output.vpc.output_values.vpc_id
  4. 创建工作空间,指向 GitHub 或 GitLab 存储库中的 remotestate.tf 文件。 如果要改为从本地机器上载磁带归档文件 (.tar),请使用 ibmcloud schematics workspace upload 命令。

  5. 在 Schematics 中运行 Terraform 代码。 查看日志时,可以在 输出 部分中查看 VPC 工作空间的输出值。

    示例输出

    ...
    2020/02/21 19:49:30 Terraform show | Outputs:
    2020/02/21 19:49:30 Terraform show |
    2020/02/21 19:49:30 Terraform show | Output_vars = {
    2020/02/21 19:49:30 Terraform show |   sshcommand = ssh root@169.61.225.111
    2020/02/21 19:49:30 Terraform show |   vpc_id = a1a11aa1-a111-a11a-a111-aa1aa11a1a1a
    2020/02/21 19:49:30 Terraform show | }
    2020/02/21 19:49:30 Terraform show | sshcommand = ssh root@169.61.225.111
    2020/02/21 19:49:30 Terraform show | vpc_id = a1a11aa1-a111-a11a-a111-aa1aa11a1a1a