将 Terraform Provider 发布到 Terraform Registry

本文是“Terraform Advent Calendar 2020”活动的最后一天的文章。

简而言之

因为今天是圣诞节,所以我们将在终端设备上进行圣诞树的配置。
为了更好地利用这个机会,我们将实施提供商,并在Terraform Registry上发布它,然后利用它来进行配置。

解释事项

    • Terraform Providerの実装の始め方

 

    • Terraform Providerのドキュメントを楽に作成する方法

 

    Terraform RegistryにProviderをPublishする方法

不做解释。

    • Terraform Providerの詳細な実装方法

Setup and Implement Read | Terraform – HashiCorp Learnから読み始めると良いと思います。

实施Provider

这次的成果是 cappyzawa/terraform-provider-christmas-tree。

逻辑的实现

使用hashicorp/terraform-provider-scaffolding可以快速创建一个Terraform提供程序的起始仓库,从而轻松开始项目的实施。

通过对上述模板中的internal/provider目录进行适当修改,可以实现Provider的实现。

撰写文件

请根据需要适当修改示例目录。

通过执行以下命令进行修正后,将更新docs目录中的内容。

go generate ./...

hashicorp/terraform-plugin-docs:生成和验证Terraform插件/供应商文档。由于它在terraform-provider-scaffolding/main.go at main · hashicorp/terraform-provider-scaffolding中使用。

将Provider发布到Terraform Registry上。

我们可以直接使用hashicorp/terraform-provider-scaffolding作为项目的模板,该模板是用于创建Terraform提供程序的快速入门存储库,其中包含了用于测试和发布的GitHub Actions。

发布时使用的文件如下:
terraform-provider-scaffolding/release.yml at main · hashicorp/terraform-provider-scaffolding

需要在指定的Repository中注册两个密钥,即GPG_PRIVATE_KEY和PASSPHRASE。(在接下来的步骤中将解释如何进行注册。)

Terraform Provider的发布流程在以下方面进行详细说明:
Terraform Registry – 发布提供商 – 由HashiCorp提供的Terraform。

如果没有GPG密钥

gpg --full-generate-key

获取GPG私钥

gpg --armor --export-secret-keys [key ID or email]

将输出结果注册为目标存储库的密钥:GPG_PRIVATE_KEY。如果设置了密码,请也注册密钥:PASSPHRASE。

在GitHub上创建一个发布版本

根据规则打上标签,并将代码推送到GitHub,会自动创建一个发布版本。
(在GitHub Actions中,将执行GoReleaser – GoReleaser)

在Terraform Registry上注册Signing Key

gpg --armor --export "{Key ID or email address}"

将此输出结果从“用户设置>签名密钥”中注册。

发表

从Terraform Registry中按照导航选择相应GitHub存储库,即可进行Terraform Provider的发布。

使用已实施的提供商

上述的步骤已经完成的提供者如下所示:cappyzawa/christmas-tree | Terraform Registry。

使用这个来对设备进行圣诞树的配置。

terraform {
  required_providers {
    christmas-tree = {
      source = "cappyzawa/christmas-tree"
    }
  }
  required_version = ">= 0.13"
}
resource "christmas-tree" "example" {
  path        = "/tmp/christmas-tree"
  ball_color  = "red"
  light_color = "white"
  star_color  = "yellow"
}

output "example" {
  value = fileexists(christmas-tree.example.path) ? file(christmas-tree.example.path) : ""
}

圣诞节快乐!

terraform init
terraform apply
スクリーンショット 2020-12-14 0.43.12.png

请参考下面的翻译稿:

    • hashicorp/terraform-provider-scaffolding: Quick start repository for creating a Terraform provider

 

    • Terraform Registry – Publishing Providers – Terraform by HashiCorp

 

    • hashicorp/terraform-plugin-docs: Generate and validate Terraform plugin/provider documentation.

 

    fileexists – Functions – Configuration Language – Terraform by HashiCorp
广告
将在 10 秒后关闭
bannerAds