- 列出特定 Module 的可用版本
- 特定 Module 的最新版本
- 获取特定 Module 的特定版本
- 获取下载最新 Module 版本的 URL
- 获取下载特定 Module 版本的 URL
- 下载 Module
- 上传模块
Terraform Module Registry API
本文是 Terraform Module Registry的 API 文档。
有关如何从极狐GitLab Terraform Module Registry 上传和安装 Terraform Module 的说明,请参阅 Terraform Module Registry 文档。
列出特定 Module 的可用版本
获取特定 Module 的可用版本。
GET packages/terraform/modules/v1/:module_namespace/:module_name/:module_system/versions
参数 | 类型 | 是否必需 | 描述 |
---|---|---|---|
module_namespace |
string | yes | Terraform Module 项目或子群组所属的顶级群组(命名空间) |
module_name |
string | yes | Module 名称 |
module_system |
string | yes | Module 系统或提供者的名称 |
curl --header "Authorization: Bearer <personal_access_token>" "https://gitlab.example.com/api/v4/packages/terraform/modules/v1/group/hello-world/local/versions"
响应示例:
{
"modules": [
{
"versions": [
{
"version": "1.0.0",
"submodules": [],
"root": {
"dependencies": [],
"providers": [
{
"name": "local",
"version":""
}
]
}
},
{
"version": "0.9.3",
"submodules": [],
"root": {
"dependencies": [],
"providers": [
{
"name": "local",
"version":""
}
]
}
}
],
"source": "https://gitlab.example.com/group/hello-world"
}
]
}
特定 Module 的最新版本
获取特定 Module 的最新版本信息。
GET packages/terraform/modules/v1/:module_namespace/:module_name/:module_system
参数 | 类型 | 是否必需 | 描述 |
---|---|---|---|
module_namespace |
string | yes | Terraform Module 项目所属的群组 |
module_name |
string | yes | Module 名称 |
module_system |
string | yes | Module 系统或提供者的名称 |
curl --header "Authorization: Bearer <personal_access_token>" "https://gitlab.example.com/api/v4/packages/terraform/modules/v1/group/hello-world/local"
响应示例:
{
"name": "hello-world/local",
"provider": "local",
"providers": [
"local"
],
"root": {
"dependencies": []
},
"source": "https://gitlab.example.com/group/hello-world",
"submodules": [],
"version": "1.0.0",
"versions": [
"1.0.0"
]
}
获取特定 Module 的特定版本
获取特定 Module 的特定版本信息。
GET packages/terraform/modules/v1/:module_namespace/:module_name/:module_system/1.0.0
参数 | 类型 | 是否必需 | 描述 |
---|---|---|---|
module_namespace |
string | yes | Terraform Module 项目所属的群组 |
module_name |
string | yes | Module 名称 |
module_system |
string | yes | Module 系统或提供者的名称 |
curl --header "Authorization: Bearer <personal_access_token>" "https://gitlab.example.com/api/v4/packages/terraform/modules/v1/group/hello-world/local/1.0.0"
响应示例:
{
"name": "hello-world/local",
"provider": "local",
"providers": [
"local"
],
"root": {
"dependencies": []
},
"source": "https://gitlab.example.com/group/hello-world",
"submodules": [],
"version": "1.0.0",
"versions": [
"1.0.0"
]
}
获取下载最新 Module 版本的 URL
在 X-Terraform-Get
Header 中获取最新 Module 版本的下载 URL。
GET packages/terraform/modules/v1/:module_namespace/:module_name/:module_system/download
参数 | 类型 | 是否必需 | 描述 |
---|---|---|---|
module_namespace |
string | yes | Terraform Module 项目所属的群组 |
module_name |
string | yes | Module 名称 |
module_system |
string | yes | Module 系统或提供者的名称 |
curl --header "Authorization: Bearer <personal_access_token>" "https://gitlab.example.com/api/v4/packages/terraform/modules/v1/group/hello-world/local/download"
响应示例:
HTTP/1.1 204 No Content
Content-Length: 0
X-Terraform-Get: /api/v4/packages/terraform/modules/v1/group/hello-world/local/1.0.0/file?token=&archive=tgz
在底层,此 API 端点跳转到 packages/terraform/modules/v1/:module_namespace/:module_name/:module_system/:module_version/download
。
获取下载特定 Module 版本的 URL
在 X-Terraform-Get
Header 中获取下载特定 Module 版本的 URL。
GET packages/terraform/modules/v1/:module_namespace/:module_name/:module_system/:module_version/download
参数 | 类型 | 是否必需 | 描述 |
---|---|---|---|
module_namespace |
string | yes | Terraform Module 项目所属的群组 |
module_name |
string | yes | Module 名称 |
module_system |
string | yes | Module 系统或提供者的名称 |
module_version |
string | yes | 要下载的特定 Module 版本 |
curl --header "Authorization: Bearer <personal_access_token>" "https://gitlab.example.com/api/v4/packages/terraform/modules/v1/group/hello-world/local/1.0.0/download"
响应示例:
HTTP/1.1 204 No Content
Content-Length: 0
X-Terraform-Get: /api/v4/packages/terraform/modules/v1/group/hello-world/local/1.0.0/file?token=&archive=tgz
下载 Module
从命名空间
GET packages/terraform/modules/v1/:module_namespace/:module_name/:module_system/:module_version/file
参数 | 类型 | 是否必需 | 描述 |
---|---|---|---|
module_namespace |
string | yes | Terraform Module 项目所属的群组 |
module_name |
string | yes | Module 名称 |
module_system |
string | yes | Module 系统或提供者的名称 |
module_version |
string | yes | 要下载的特定 Module 版本 |
curl --header "Authorization: Bearer <personal_access_token>" "https://gitlab.example.com/api/v4/packages/terraform/modules/v1/group/hello-world/local/1.0.0/file"
将输出写入文件:
curl --header "Authorization: Bearer <personal_access_token>" "https://gitlab.example.com/api/v4/packages/terraform/modules/v1/group/hello-world/local/1.0.0/file" --output hello-world-local.tgz
从项目
GET /projects/:id/packages/terraform/modules/:module_name/:module_system/:module_version
属性 | 类型 | 是否必需 | 描述 |
---|---|---|---|
id |
integer/string | yes | ID 或 URL 编码的项目路径。 |
module_name |
string | yes | 模块名称。 |
module_system |
string | yes | 模块系统或提供商的名称。 |
module_version |
string | no | 下载的特定模块版本。如果忽略,则下载最新版本。 |
curl --user "<username>:<personal_access_token>" "https://gitlab.example.com/api/v4/projects/1/packages/terraform/modules/hello-world/local/1.0.0"
将输入写入文件:
curl --user "<username>:<personal_access_token>" "https://gitlab.example.com/api/v4/projects/1/packages/terraform/modules/hello-world/local/1.0.0" --output hello-world-local.tgz
上传模块
PUT /projects/:id/packages/terraform/modules/:module-name/:module-system/:module-version/file
属性 | 类型 | 是否必需 | 描述 |
---|---|---|---|
id |
integer or string | yes | ID 或 URL 编码的项目路径。 |
module-name |
string | yes | 模块名称。 |
module-system |
string | yes | 模块系统或提供商的名称。 |
module-version |
string | yes | 上传的特定模块版本。 |
curl --fail-with-body \
--header "PRIVATE-TOKEN: <your_access_token>" \
--upload-file path/to/file.tgz \
--url "https://gitlab.example.com/api/v4/projects/<your_project_id>/packages/terraform/modules/my-module/my-system/0.0.1/file"
令牌可以被用来进行认证:
标头 | 值 |
---|---|
PRIVATE-TOKEN |
具有 api 范围的个人访问令牌。 |
DEPLOY-TOKEN |
具有 write_package_registry 范围的部署令牌。 |
JOB-TOKEN |
作业令牌。 |
示例响应:
{
"message": "201 Created"
}