将 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
请参考下面的翻译稿:
-
- 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