Update Terraform contribution doc (#462)

Added flag `--local` to accept local file of Terraform resource or
module. Added examples in contribution doc

Signed-off-by: Zheng Xi Zhou <zzxwill@gmail.com>
This commit is contained in:
Zheng Xi Zhou 2022-01-20 15:51:08 +08:00 committed by GitHub
parent c128d09ae5
commit 88efd55fbd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 370 additions and 117 deletions

View File

@ -24,8 +24,10 @@ vela def init DEF_NAME [flags]
> vela def init my-def -i --output ./my-def.cue
# Command below initiate a ComponentDefinition named my-webservice with the template parsed from ./template.yaml.
> vela def init my-webservice -i --template-yaml ./template.yaml
# Command below initiate a typed ComponentDefinition named vswitch from Alibaba Cloud.
# Initiate a Terraform ComponentDefinition named vswitch from Github for Alibaba Cloud.
> vela def init vswitch --type component --provider alibaba --desc xxx --git https://github.com/kubevela-contrib/terraform-modules.git --path alibaba/vswitch
# Initiate a Terraform ComponentDefinition named redis from local file for AWS.
> vela def init redis --type component --provider aws --desc "Terraform configuration for AWS Redis" --local redis.tf
```
### Options
@ -35,11 +37,12 @@ vela def init DEF_NAME [flags]
--git string Specify which git repository the configuration(HCL) is stored in. Valid when --provider/-p is set.
-h, --help help for init
-i, --interactive Specify whether use interactive process to help generate definitions.
--local string Specify the local path of the configuration(HCL) file. Valid when --provider/-p is set.
-o, --output string Specify the output path of the generated definition. If empty, the definition will be printed in the console.
--path string Specify which path the configuration(HCL) is stored in the Git repository. Valid when --git is set.
-p, --provider alibaba Specify which provider the cloud resource definition belongs to. Only alibaba, `aws`, `azure` are supported.
-y, --template-yaml string Specify the template yaml file that definition will use to build the schema. If empty, a default template for the given definition type will be used.
-t, --type string Specify the type of the new definition. Valid types: scope, workflow-step, component, trait, policy, workload
-t, --type string Specify the type of the new definition. Valid types: component, trait, policy, workload, scope, workflow-step
```
### SEE ALSO
@ -49,4 +52,4 @@ vela def init DEF_NAME [flags]
#### Go Back to [CLI Commands](vela) Homepage.
###### Auto generated by spf13/cobra on 12-Jan-2022, refer to [script in KubeVela](https://github.com/oam-dev/kubevela/tree/master/hack/docgen).
###### Auto generated by spf13/cobra on 20-Jan-2022, refer to [script in KubeVela](https://github.com/oam-dev/kubevela/tree/master/hack/docgen).

View File

@ -8,18 +8,104 @@ platform engineers need to prepare ComponentDefinitions for cloud resources if e
Here is the guide to create Terraform typed ComponentDefinitions of cloud resources for cloud providers Alibaba Cloud, AWS and Azure.
# Alibaba Cloud
# Prerequisites
Take [Elastic IP](https://www.alibabacloud.com/help/doc-detail/36016.htm) as an example.
- [`vela` binary](../../install.mdx)
## Develop a Terraform resource or module
Create a Terraform resource or module for Alibaba Cloud EIP resource and store it in a GitHub repo like https://github.com/oam-dev/terraform-alibaba-eip.git.
Create a Terraform resource or module for a cloud resource.
For example, we created a Terraform resource for AWS S3 bucket, and stored it in a local file named `aws_s3_bucket.tf`.
```terraform
resource "aws_s3_bucket" "bucket-acl" {
bucket = var.bucket
acl = var.acl
}
output "BUCKET_NAME" {
value = aws_s3_bucket.bucket-acl.bucket_domain_name
}
variable "bucket" {
description = "S3 bucket name"
default = "vela-website"
type = string
}
variable "acl" {
description = "S3 bucket ACL"
default = "private"
type = string
}
```
We also created a Terraform module for Alibaba Cloud EIP, and stored it in GitHub repository https://github.com/oam-dev/terraform-alibaba-eip.git.
## Generate ComponentDefinition
By running `vela def init` command, we can generate a ComponentDefinition for a cloud resource based on Terraform resource or module
either from a local file, or from a remote GitHub repository.
```shell
$vela def init -h
--git string Specify which git repository the configuration(HCL) is stored in. Valid when --provider/-p is set.
--local string Specify the local path of the configuration(HCL) file. Valid when --provider/-p is set.
```
We use `--local` to accept Terraform resource or module from a local file to generate a ComponentDefinition.
```shell
$vela def init s3 --type component --provider aws --desc "Terraform configuration for AWS S3" --local aws_s3_bucket.tf
apiVersion: core.oam.dev/v1beta1
kind: ComponentDefinition
metadata:
annotations:
definition.oam.dev/description: Terraform configuration for AWS S3
creationTimestamp: null
labels:
type: terraform
name: aws-s3
namespace: vela-system
spec:
schematic:
terraform:
configuration: |
resource "aws_s3_bucket" "bucket-acl" {
bucket = var.bucket
acl = var.acl
}
output "BUCKET_NAME" {
value = aws_s3_bucket.bucket-acl.bucket_domain_name
}
variable "bucket" {
description = "S3 bucket name"
default = "vela-website"
type = string
}
variable "acl" {
description = "S3 bucket ACL"
default = "private"
type = string
}
workload:
definition:
apiVersion: terraform.core.oam.dev/v1beta1
kind: Configuration
status: {}
```
We use `--git` to accept Terraform module or resource from a remote GitHub repository to generate a ComponentDefinition.
```shell
$ vela def init eip --type component --provider alibaba --desc "Terraform configuration for Alibaba Cloud Elastic IP" --git https://github.com/oam-dev/terraform-alibaba-eip.git
apiVersion: core.oam.dev/v1beta1
kind: ComponentDefinition
metadata:
@ -43,8 +129,7 @@ spec:
status: {}
```
The ComponentDefinition for Alibaba Cloud EIP is generated. You are warmly welcome to contribute this extended cloud
resource ComponentDefinition to [oam-dev/catalog](https://github.com/oam-dev/catalog/tree/master/addons/terraform-alibaba/definitions).
You are warmly welcome to contribute this extended cloud resource ComponentDefinition to [oam-dev/catalog](https://github.com/oam-dev/catalog/tree/master/addons/).
## Verify
@ -83,27 +168,4 @@ $ vela def doc-gen alibaba-eip -n vela-system
Generated docs for alibaba-eip in ./kubevela.io/docs/end-user/components/cloud-services/terraform/alibaba-eip.md
```
Move the file generated to oam-dev/catalog repo. Follow the [contribution guide](https://github.com/oam-dev/kubevela.io#contributing-to-kubevela-en-docs) to submit the doc.
# AWS, Azure and other cloud providers
This only difference from Alibaba Cloud lies in the section of [Generate ComponentDefinition](#generate-componentdefinition).
Please set `--provider` as `aws` or `azure` to generate the ComponentDefinition for an AWS or Azure cloud resource.
```shell
$ vela def init -h
Usage:
vela def init DEF_NAME [flags]
Examples:
# Command below initiate a typed ComponentDefinition named vswitch from Alibaba Cloud.
> vela def init vswitch --type component --provider alibaba --desc xxx --git https://github.com/kubevela-contrib/terraform-modules.git --path alibaba/vswitch
Flags:
-d, --desc string Specify the description of the new definition.
--git string Specify which git repository the configuration(HCL) is stored in. Valid when --provider/-p is set.
-h, --help help for init
--path string Specify which path the configuration(HCL) is stored in the Git repository. Valid when --git is set.
-p, --provider alibaba Specify which provider the cloud resource definition belongs to. Only `alibaba`, `aws`, `azure` are supported.
```
Move the file generated to [oam-dev/kubevela.io](https://github.com/oam-dev/kubevela.io) repo. Follow the [contribution guide](https://github.com/oam-dev/kubevela.io#contributing-to-kubevela-en-docs) to submit the doc.

View File

@ -11,18 +11,104 @@ Terraform 使用任意的云资源。
以下是为云供应商阿里云、AWS 和 Azure 创建 Terraform 类型的云资源 ComponentDefinitions 的指南。
# 阿里云
# 依赖
以 [弹性 IP](https://help.aliyun.com/document_detail/120192.html)为例。
- [`vela` 命令行](../../install.mdx)
## 开发 Terraform 资源或模块
为阿里云 EIP 资源创建一个 Terraform 资源或模块,并将其存储在 GitHub 库,如 https://github.com/oam-dev/terraform-alibaba-eip.git。
为云资源开发创建 Terraform 资源或模块。
比如我们为 AWS S3 bucket 开发了 Terraform 资源,并写入本地文件 `aws_s3_bucket.tf` 里,内容如下:
```terraform
resource "aws_s3_bucket" "bucket-acl" {
bucket = var.bucket
acl = var.acl
}
output "BUCKET_NAME" {
value = aws_s3_bucket.bucket-acl.bucket_domain_name
}
variable "bucket" {
description = "S3 bucket name"
default = "vela-website"
type = string
}
variable "acl" {
description = "S3 bucket ACL"
default = "private"
type = string
}
```
我们也给阿里云 EIP 开发了 Terraform 模板,并存储在 GitHub 库 https://github.com/oam-dev/terraform-alibaba-eip.git。
## 生成 ComponentDefinition
通过运行 `vela def init` 命令,我们可以基于 Terraform 资源或模块的云资源生成一个 ComponentDefinitionTerraform 资源或模板可以来自本地文件,
也可以来自远程 GitHub 仓库。
```shell
$vela def init -h
--git string Specify which git repository the configuration(HCL) is stored in. Valid when --provider/-p is set.
--local string Specify the local path of the configuration(HCL) file. Valid when --provider/-p is set.
```
我们使用 `--local` 来接受来自本地文件的 Terraform 资源或模块来生成 ComponentDefinition。
```shell
$vela def init s3 --type component --provider aws --desc "Terraform configuration for AWS S3" --local aws_s3_bucket.tf
apiVersion: core.oam.dev/v1beta1
kind: ComponentDefinition
metadata:
annotations:
definition.oam.dev/description: Terraform configuration for AWS S3
creationTimestamp: null
labels:
type: terraform
name: aws-s3
namespace: vela-system
spec:
schematic:
terraform:
configuration: |
resource "aws_s3_bucket" "bucket-acl" {
bucket = var.bucket
acl = var.acl
}
output "BUCKET_NAME" {
value = aws_s3_bucket.bucket-acl.bucket_domain_name
}
variable "bucket" {
description = "S3 bucket name"
default = "vela-website"
type = string
}
variable "acl" {
description = "S3 bucket ACL"
default = "private"
type = string
}
workload:
definition:
apiVersion: terraform.core.oam.dev/v1beta1
kind: Configuration
status: {}
```
我们使用 `--git` 来接受来自远程 GitHub 仓库的 Terraform 模块或资源来生成 ComponentDefinition。
```shell
$ vela def init eip --type component --provider alibaba --desc "Terraform configuration for Alibaba Cloud Elastic IP" --git https://github.com/oam-dev/terraform-alibaba-eip.git
apiVersion: core.oam.dev/v1beta1
kind: ComponentDefinition
metadata:
@ -46,7 +132,7 @@ spec:
status: {}
```
阿里云 EIP 的 ComponentDefinition 已生成,我们热烈欢迎你将扩展的云资源的 ComponentDefinition 贡献到 [oam-dev/catalog](https://github.com/oam-dev/catalog/tree/master/addons/terraform-alibaba/definitions)。
我们热烈欢迎你将扩展的云资源的 ComponentDefinition 贡献到 [oam-dev/catalog](https://github.com/oam-dev/catalog/tree/master/addons/)。
## 验证
@ -84,27 +170,4 @@ $ vela def doc-gen alibaba-eip -n vela-system
Generated docs for alibaba-eip in ./kubevela.io/docs/end-user/components/cloud-services/terraform/alibaba-eip.md
```
将生成的文件移到 oam-dev/catalog 库。参考 [贡献指南](https://github.com/oam-dev/kubevela.io#contributing-to-kubevela-en-docs) 来提交文档。
# AWS、Azure 和其他云供应商
这与阿里云唯一的区别在于[Generate ComponentDefinition](#生成-ComponentDefinition)部分。
请将 `--provider` 设置为 `aws``azure`,以便为 AWS 或 Azure 云资源生成 ComponentDefinition。
```shell
$ vela def init -h
Usage:
vela def init DEF_NAME [flags]
Examples:
# Command below initiate a typed ComponentDefinition named vswitch from Alibaba Cloud.
> vela def init vswitch --type component --provider alibaba --desc xxx --git https://github.com/kubevela-contrib/terraform-modules.git --path alibaba/vswitch
Flags:
-d, --desc string Specify the description of the new definition.
--git string Specify which git repository the configuration(HCL) is stored in. Valid when --provider/-p is set.
-h, --help help for init
--path string Specify which path the configuration(HCL) is stored in the Git repository. Valid when --git is set.
-p, --provider alibaba Specify which provider the cloud resource definition belongs to. Only `alibaba`, `aws`, `azure` are supported.
```
将生成的文件移到 [oam-dev/kubevela.io](https://github.com/oam-dev/kubevela.io) 库。参考 [贡献指南](https://github.com/oam-dev/kubevela.io#contributing-to-kubevela-en-docs) 来提交文档。

View File

@ -11,18 +11,104 @@ Terraform 使用任意的云资源。
以下是为云供应商阿里云、AWS 和 Azure 创建 Terraform 类型的云资源 ComponentDefinitions 的指南。
# 阿里云
# 依赖
以 [弹性 IP](https://help.aliyun.com/document_detail/120192.html)为例。
- [`vela` 命令行](../../install.mdx)
## 开发 Terraform 资源或模块
为阿里云 EIP 资源创建一个 Terraform 资源或模块,并将其存储在 GitHub 库,如 https://github.com/oam-dev/terraform-alibaba-eip.git。
为云资源开发创建 Terraform 资源或模块。
比如我们为 AWS S3 bucket 开发了 Terraform 资源,并写入本地文件 `aws_s3_bucket.tf` 里,内容如下:
```terraform
resource "aws_s3_bucket" "bucket-acl" {
bucket = var.bucket
acl = var.acl
}
output "BUCKET_NAME" {
value = aws_s3_bucket.bucket-acl.bucket_domain_name
}
variable "bucket" {
description = "S3 bucket name"
default = "vela-website"
type = string
}
variable "acl" {
description = "S3 bucket ACL"
default = "private"
type = string
}
```
我们也给阿里云 EIP 开发了 Terraform 模板,并存储在 GitHub 库 https://github.com/oam-dev/terraform-alibaba-eip.git。
## 生成 ComponentDefinition
通过运行 `vela def init` 命令,我们可以基于 Terraform 资源或模块的云资源生成一个 ComponentDefinitionTerraform 资源或模板可以来自本地文件,
也可以来自远程 GitHub 仓库。
```shell
$vela def init -h
--git string Specify which git repository the configuration(HCL) is stored in. Valid when --provider/-p is set.
--local string Specify the local path of the configuration(HCL) file. Valid when --provider/-p is set.
```
我们使用 `--local` 来接受来自本地文件的 Terraform 资源或模块来生成 ComponentDefinition。
```shell
$vela def init s3 --type component --provider aws --desc "Terraform configuration for AWS S3" --local aws_s3_bucket.tf
apiVersion: core.oam.dev/v1beta1
kind: ComponentDefinition
metadata:
annotations:
definition.oam.dev/description: Terraform configuration for AWS S3
creationTimestamp: null
labels:
type: terraform
name: aws-s3
namespace: vela-system
spec:
schematic:
terraform:
configuration: |
resource "aws_s3_bucket" "bucket-acl" {
bucket = var.bucket
acl = var.acl
}
output "BUCKET_NAME" {
value = aws_s3_bucket.bucket-acl.bucket_domain_name
}
variable "bucket" {
description = "S3 bucket name"
default = "vela-website"
type = string
}
variable "acl" {
description = "S3 bucket ACL"
default = "private"
type = string
}
workload:
definition:
apiVersion: terraform.core.oam.dev/v1beta1
kind: Configuration
status: {}
```
我们使用 `--git` 来接受来自远程 GitHub 仓库的 Terraform 模块或资源来生成 ComponentDefinition。
```shell
$ vela def init eip --type component --provider alibaba --desc "Terraform configuration for Alibaba Cloud Elastic IP" --git https://github.com/oam-dev/terraform-alibaba-eip.git
apiVersion: core.oam.dev/v1beta1
kind: ComponentDefinition
metadata:
@ -46,7 +132,7 @@ spec:
status: {}
```
阿里云 EIP 的 ComponentDefinition 已生成,我们热烈欢迎你将扩展的云资源的 ComponentDefinition 贡献到 [oam-dev/catalog](https://github.com/oam-dev/catalog/tree/master/addons/terraform-alibaba/definitions)。
我们热烈欢迎你将扩展的云资源的 ComponentDefinition 贡献到 [oam-dev/catalog](https://github.com/oam-dev/catalog/tree/master/addons/)。
## 验证
@ -84,27 +170,4 @@ $ vela def doc-gen alibaba-eip -n vela-system
Generated docs for alibaba-eip in ./kubevela.io/docs/end-user/components/cloud-services/terraform/alibaba-eip.md
```
将生成的文件移到 oam-dev/catalog 库。参考 [贡献指南](https://github.com/oam-dev/kubevela.io#contributing-to-kubevela-en-docs) 来提交文档。
# AWS、Azure 和其他云供应商
这与阿里云唯一的区别在于[Generate ComponentDefinition](#生成-ComponentDefinition)部分。
请将 `--provider` 设置为 `aws``azure`,以便为 AWS 或 Azure 云资源生成 ComponentDefinition。
```shell
$ vela def init -h
Usage:
vela def init DEF_NAME [flags]
Examples:
# Command below initiate a typed ComponentDefinition named vswitch from Alibaba Cloud.
> vela def init vswitch --type component --provider alibaba --desc xxx --git https://github.com/kubevela-contrib/terraform-modules.git --path alibaba/vswitch
Flags:
-d, --desc string Specify the description of the new definition.
--git string Specify which git repository the configuration(HCL) is stored in. Valid when --provider/-p is set.
-h, --help help for init
--path string Specify which path the configuration(HCL) is stored in the Git repository. Valid when --git is set.
-p, --provider alibaba Specify which provider the cloud resource definition belongs to. Only `alibaba`, `aws`, `azure` are supported.
```
将生成的文件移到 [oam-dev/kubevela.io](https://github.com/oam-dev/kubevela.io) 库。参考 [贡献指南](https://github.com/oam-dev/kubevela.io#contributing-to-kubevela-en-docs) 来提交文档。

View File

@ -8,18 +8,104 @@ platform engineers need to prepare ComponentDefinitions for cloud resources if e
Here is the guide to create Terraform typed ComponentDefinitions of cloud resources for cloud providers Alibaba Cloud, AWS and Azure.
# Alibaba Cloud
# Prerequisites
Take [Elastic IP](https://www.alibabacloud.com/help/doc-detail/36016.htm) as an example.
- [`vela` binary](../../install.mdx)
## Develop a Terraform resource or module
Create a Terraform resource or module for Alibaba Cloud EIP resource and store it in a GitHub repo like https://github.com/oam-dev/terraform-alibaba-eip.git.
Create a Terraform resource or module for a cloud resource.
For example, we created a Terraform resource for AWS S3 bucket, and stored it in a local file named `aws_s3_bucket.tf`.
```terraform
resource "aws_s3_bucket" "bucket-acl" {
bucket = var.bucket
acl = var.acl
}
output "BUCKET_NAME" {
value = aws_s3_bucket.bucket-acl.bucket_domain_name
}
variable "bucket" {
description = "S3 bucket name"
default = "vela-website"
type = string
}
variable "acl" {
description = "S3 bucket ACL"
default = "private"
type = string
}
```
We also created a Terraform module for Alibaba Cloud EIP, and stored it in GitHub repository https://github.com/oam-dev/terraform-alibaba-eip.git.
## Generate ComponentDefinition
By running `vela def init` command, we can generate a ComponentDefinition for a cloud resource based on Terraform resource or module
either from a local file, or from a remote GitHub repository.
```shell
$vela def init -h
--git string Specify which git repository the configuration(HCL) is stored in. Valid when --provider/-p is set.
--local string Specify the local path of the configuration(HCL) file. Valid when --provider/-p is set.
```
We use `--local` to accept Terraform resource or module from a local file to generate a ComponentDefinition.
```shell
$vela def init s3 --type component --provider aws --desc "Terraform configuration for AWS S3" --local aws_s3_bucket.tf
apiVersion: core.oam.dev/v1beta1
kind: ComponentDefinition
metadata:
annotations:
definition.oam.dev/description: Terraform configuration for AWS S3
creationTimestamp: null
labels:
type: terraform
name: aws-s3
namespace: vela-system
spec:
schematic:
terraform:
configuration: |
resource "aws_s3_bucket" "bucket-acl" {
bucket = var.bucket
acl = var.acl
}
output "BUCKET_NAME" {
value = aws_s3_bucket.bucket-acl.bucket_domain_name
}
variable "bucket" {
description = "S3 bucket name"
default = "vela-website"
type = string
}
variable "acl" {
description = "S3 bucket ACL"
default = "private"
type = string
}
workload:
definition:
apiVersion: terraform.core.oam.dev/v1beta1
kind: Configuration
status: {}
```
We use `--git` to accept Terraform module or resource from a remote GitHub repository to generate a ComponentDefinition.
```shell
$ vela def init eip --type component --provider alibaba --desc "Terraform configuration for Alibaba Cloud Elastic IP" --git https://github.com/oam-dev/terraform-alibaba-eip.git
apiVersion: core.oam.dev/v1beta1
kind: ComponentDefinition
metadata:
@ -43,8 +129,7 @@ spec:
status: {}
```
The ComponentDefinition for Alibaba Cloud EIP is generated. You are warmly welcome to contribute this extended cloud
resource ComponentDefinition to [oam-dev/catalog](https://github.com/oam-dev/catalog/tree/master/addons/terraform-alibaba/definitions).
You are warmly welcome to contribute this extended cloud resource ComponentDefinition to [oam-dev/catalog](https://github.com/oam-dev/catalog/tree/master/addons/).
## Verify
@ -83,27 +168,4 @@ $ vela def doc-gen alibaba-eip -n vela-system
Generated docs for alibaba-eip in ./kubevela.io/docs/end-user/components/cloud-services/terraform/alibaba-eip.md
```
Move the file generated to oam-dev/catalog repo. Follow the [contribution guide](https://github.com/oam-dev/kubevela.io#contributing-to-kubevela-en-docs) to submit the doc.
# AWS, Azure and other cloud providers
This only difference from Alibaba Cloud lies in the section of [Generate ComponentDefinition](#generate-componentdefinition).
Please set `--provider` as `aws` or `azure` to generate the ComponentDefinition for an AWS or Azure cloud resource.
```shell
$ vela def init -h
Usage:
vela def init DEF_NAME [flags]
Examples:
# Command below initiate a typed ComponentDefinition named vswitch from Alibaba Cloud.
> vela def init vswitch --type component --provider alibaba --desc xxx --git https://github.com/kubevela-contrib/terraform-modules.git --path alibaba/vswitch
Flags:
-d, --desc string Specify the description of the new definition.
--git string Specify which git repository the configuration(HCL) is stored in. Valid when --provider/-p is set.
-h, --help help for init
--path string Specify which path the configuration(HCL) is stored in the Git repository. Valid when --git is set.
-p, --provider alibaba Specify which provider the cloud resource definition belongs to. Only `alibaba`, `aws`, `azure` are supported.
```
Move the file generated to [oam-dev/kubevela.io](https://github.com/oam-dev/kubevela.io) repo. Follow the [contribution guide](https://github.com/oam-dev/kubevela.io#contributing-to-kubevela-en-docs) to submit the doc.