97 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
			
		
		
	
	
			97 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
---
 | 
						|
title: Extend Terraform Addon
 | 
						|
---
 | 
						|
 | 
						|
[Terraform Controller](https://github.com/oam-dev/terraform-controller) is the core controller to provision and manage
 | 
						|
cloud resources for KubeVela. It has supported [some cloud providers](https://github.com/oam-dev/terraform-controller#supported-cloud-providers), including AWS, Azure, GCP, Alibaba Cloud,
 | 
						|
Tencent Cloud, etc. But only [a few](https://kubevela.io/docs/tutorials/consume-cloud-services#enabling-cloud-vendor-addons) has been supported as Terraform Addons in KubeVela.
 | 
						|
 | 
						|
This guide will show you how to extend a Terraform Addon to support your cloud provider.
 | 
						|
 | 
						|
## Choose a Cloud Provider
 | 
						|
 | 
						|
If the cloud provider you want to support is none of supported cloud providers in Terraform Controller, you have to support it first.
 | 
						|
If it has been supported by Terraform Controller, you can continue to extend the addon.
 | 
						|
 | 
						|
## Prepare metadata for the Cloud Provider
 | 
						|
 | 
						|
- Clone oam-dev/catalog
 | 
						|
 | 
						|
```bash
 | 
						|
$ git clone https://github.com/oam-dev/catalog.git
 | 
						|
```
 | 
						|
  
 | 
						|
- Prepare a metadata file
 | 
						|
 | 
						|
Edit the metadata file `hack/addons/terraform/terraform-provider-scaffold/metadata.yaml` for your cloud provider.
 | 
						|
 | 
						|
```yaml
 | 
						|
...
 | 
						|
 | 
						|
# -------------------------------------Configuration Metadata for a Terraform Addon-------------------------------------
 | 
						|
# provider short name
 | 
						|
shortCloudName: tencent
 | 
						|
 | 
						|
# The Cloud name of the provider
 | 
						|
completeCloudName: Tencent Cloud
 | 
						|
 | 
						|
# When enabling a Terraform provider, these properties need to set for authentication. For Tencent Cloud,
 | 
						|
# name: Environment variable name when authenticating Terraform, like https://github.com/oam-dev/terraform-controller/blob/master/controllers/provider/credentials.go#L59
 | 
						|
# secretKey: Secret key when storing authentication information in a Kubernetes, like https://github.com/oam-dev/terraform-controller/blob/master/controllers/provider/credentials.go#L109.
 | 
						|
cloudProperties:
 | 
						|
  - name: TENCENTCLOUD_SECRET_ID
 | 
						|
    secretKey: secretID
 | 
						|
    description: Get TENCENTCLOUD_SECRET_ID per this guide https://cloud.tencent.com/document/product/1213/67093
 | 
						|
  - name: TENCENTCLOUD_SECRET_KEY
 | 
						|
    secretKey: secretKey
 | 
						|
    description: Get TENCENTCLOUD_SECRET_KEY per this guide https://cloud.tencent.com/document/product/1213/67093
 | 
						|
    # If one property is region, please set `isRegion` to true
 | 
						|
  - name: TENCENTCLOUD_REGION
 | 
						|
    description: Get TENCENTCLOUD_REGION by picking one RegionId from Tencent Cloud region list https://cloud.tencent.com/document/api/1140/40509#.E5.9C.B0.E5.9F.9F.E5.88.97.E8.A1.A8
 | 
						|
    isRegion: true
 | 
						|
```
 | 
						|
 | 
						|
## Generate a Terraform Addon
 | 
						|
 | 
						|
Generate a Terraform Addon for your cloud provider. The generated addon code will be stored in `addons/terraform-tencent`.
 | 
						|
 | 
						|
```shell
 | 
						|
$ make terraform-addon-gen
 | 
						|
go run hack/addons/terraform/gen.go hack/addons/terraform/provider-sample.yaml
 | 
						|
Generating addon for provider tencent in addons/terraform-tencent
 | 
						|
Rendering hack/addons/terraform/terraform-provider-skaffold/metadata.yaml
 | 
						|
Rendering hack/addons/terraform/terraform-provider-skaffold/readme.md
 | 
						|
Rendering hack/addons/terraform/terraform-provider-skaffold/resources/account-creds.cue
 | 
						|
Rendering hack/addons/terraform/terraform-provider-skaffold/resources/parameter.cue
 | 
						|
Rendering hack/addons/terraform/terraform-provider-skaffold/resources/provider.cue
 | 
						|
Rendering hack/addons/terraform/terraform-provider-skaffold/template.yaml
 | 
						|
 | 
						|
$ ls addons/terraform-tencent
 | 
						|
definitions   metadata.yaml readme.md     resources     template.yaml
 | 
						|
```
 | 
						|
 | 
						|
## Verify the Terraform Addon
 | 
						|
 | 
						|
Enable the addon Check whether a `Provider` is created whose name is the same as your cloud provider.
 | 
						|
 | 
						|
```shell
 | 
						|
$ vela addon enable ./addons/terraform-tencent TENCENTCLOUD_SECRET_ID=xxx TENCENTCLOUD_SECRET_KEY=yyy TENCENTCLOUD_REGION=ap-chengdu
 | 
						|
I0207 10:15:14.005269   32481 apply.go:106] "patching object" name="addon-terraform-tencent" resource="core.oam.dev/v1beta1, Kind=Application"
 | 
						|
I0207 10:15:14.138645   32481 apply.go:106] "patching object" name="addon-secret-terraform-tencent" resource="/v1, Kind=Secret"
 | 
						|
Addon: terraform-tencent enabled Successfully.
 | 
						|
 | 
						|
$ kubectl get provider
 | 
						|
NAME      STATE   AGE
 | 
						|
tencent   ready   1d
 | 
						|
```
 | 
						|
 | 
						|
You are encouraged to further verify the provider by [provision a cloud resource of your cloud provider](../../tutorials/consume-cloud-services).
 | 
						|
 | 
						|
## Submit the Terraform Addon
 | 
						|
 | 
						|
Push the code generated in `./addons` and make a pull request.
 | 
						|
 | 
						|
## Contribute documentation
 | 
						|
 | 
						|
Write [Terraform Addon enable doc](../../reference/addons/terraform) for your cloud provider and add it to [all supported cloud providers](../../tutorials/consume-cloud-services#enabling-cloud-vendor-addons).
 |