Skip to content

outscale/terraform-provider-outscale

Repository files navigation

3DS OUTSCALE Terraform Provider

Project Graduated

Terraform

Requirements

  • Terraform 1.x.x

  • Go 1.22.0 (to build the provider plugin)

Migration to v1

Warning

Before you begin using the v1 binary on your Terraform code, make sure to back up your state file!

If you are using a local state file, make copy of your terraform.tfstate file in your project directory.

If you are using a remote backend such as an S3 bucket, make sure that you follow the backup procedures and that you exercise the restore procedure at least once.

Additionally, make sure you backup or version your code as migration will require some code changes (on Flexible_gpu resource).

Step 1: Upgrade provider version

terraform {
  required_providers {
    outscale = {
      source = "outscale/outscale"
      version = "1.0.0-rc.2"
    }
  }
}

provider "outscale" {
  # Configuration options
}
terraform init -upgrade

Step 2: Edit terraform state and configuration files

Some block types changed in terraform state, the following script will delete those blocks.

Then terraform refresh or terraform apply will set the right block type.

On Linux

terraform fmt
sed -i '/"block_device_mappings_created": \[/, /\],/d' terraform.tfstate
sed -i 's/outscale_volumes_link/outscale_volume_link/g' terraform.tfstate
sed -i '/"link_public_ip": {/, /},/d' terraform.tfstate
sed -i '/"link_nic": {/, /},/d' terraform.tfstate
sed -i '/"flexible_gpu_id": "/, /",/d' terraform.tfstate
sed -i '/"accepter_net": {/, /},/d' terraform.tfstate
sed -i '/"source_net": {/, /},/d' terraform.tfstate
sed -i '/"state": {/, /},/d' terraform.tfstate 
sed -i 's/outscale_volumes_link/outscale_volume_link/g' *.tf
sed -i 's/flexible_gpu_id /flexible_gpu_ids /g' *.tf
sed -i '/flexible_gpu_ids /s/= /= \[/' *.tf
sed -i '/outscale_flexible_gpu\./s/$/ \]/' *.tf
terraform fmt

On MacOS

terraform fmt
sed -i='' '/"block_device_mappings_created": \[/, /\],/d' terraform.tfstate
sed -i='' 's/outscale_volumes_link/outscale_volume_link/g' terraform.tfstate
sed -i='' '/"link_public_ip": {/, /},/d' terraform.tfstate
sed -i='' '/"link_nic": {/, /},/d' terraform.tfstate
sed -i='' '/"flexible_gpu_id": "/, /",/d' terraform.tfstate
sed -i='' '/"accepter_net": {/, /},/d' terraform.tfstate
sed -i='' '/"source_net": {/, /},/d' terraform.tfstate
sed -i='' '/"state": {/, /},/d' terraform.tfstate 
sed -i='' 's/outscale_volumes_link/outscale_volume_link/g' *.tf
sed -i='' 's/flexible_gpu_id /flexible_gpu_ids /g' *.tf
sed -i='' '/flexible_gpu_ids /s/= /= \[/' *.tf
sed -i='' '/outscale_flexible_gpu\./s/$/\]/' *.tf
terraform fmt

Step 3: Refresh configuration to update terraform state

terraform refresh

Breaking change

Warning

We have a broken change on our api when creating access_key without expiration date for all version less then v0.9.0. (GH-issues)

We recommend to upgrade on the latest (v1.0.0-rc.2)

Using the Provider with Terraform

Warning

Our provider terraform has been moved from outscale-dev to outscale organisation on terraform registry

The next releases will be only publish under outscale organization on terraform registry

Add the following lines in the Terraform configuration to permit to get the provider from the Terrafom registry:

terraform {
  required_providers {
    outscale = {
      source = "outscale/outscale"
      version = "1.0.0-rc.2"
    }
  }
}

provider "outscale" {
  # Configuration options
}
  1. Execute terraform init

  2. Execute terraform plan

Using the Provider with OpenTofu

terraform {
  required_providers {
    outscale = {
      source = "outscale/outscale"
      version = "1.0.0-rc.2"
    }
  }
}

provider "outscale" {
  # Configuration options
}
  1. Execute tofu init

  2. Execute tofu plan

Migrating to OpenTofu from Terraform

Follow migration link

Configuring the proxy, if any

on Linux/macOS

export HTTPS_PROXY=http://192.168.1.24:3128

on Windows

set HTTPS_PROXY=http://192.168.1.24:3128

x509 client authentication, if any

Add the following lines in the Terraform configuration to define certificate location:

terraform {
  required_providers {
    outscale = {
      source = "outscale/outscale"
      version = "1.0.0-rc.2"
    }
  }
}

provider "outscale" {
  access_key_id = var.access_key_id
  secret_key_id = var.secret_key_id
  region = var.region
  x509_cert_path = "/myrepository/certificate/client_ca.crt"
  x509_key_path = "/myrepository/certificate/client_ca.key"
}

or set the following environment variables:

export OUTSCALE_X509CERT=/myrepository/certificate/client_ca.crt
export OUTSCALE_X509KEY=/myrepository/certificate/client_ca.key

Building The Provider

Clone repository to: $GOPATH/src/github.com/outscale/terraform-provider-outscale

mkdir -p $GOPATH/src/github.com/terraform-providers
cd  $GOPATH/src/github.com/terraform-providers
git clone --branch v1.0.0-rc.2 https://github.com/outscale/terraform-provider-outscale

Enter the provider directory and build the provider

cd  $GOPATH/src/github.com/terraform-providers/terraform-provider-outscale
go build -o terraform-provider-outscale_v1.0.0-rc.2

Using the provider built

For Terraform

On Linux

  1. Download and install Terraform

  2. Move the plugin to the repository ~/.terraform.d/plugins/registry.terraform.io/outscale/outscale/1.0.0-rc.2/linux_amd64/.

mkdir -p ~/.terraform.d/plugins/registry.terraform.io/outscale/outscale/1.0.0-rc.2/linux_amd64
mv terraform-provider-outscale_v1.0.0-rc.2 ~/.terraform.d/plugins/registry.terraform.io/outscale/outscale/1.0.0-rc.2/linux_amd64
  1. Execute terraform init

  2. Execute terraform plan

On macOS

  1. Download and install Terraform

  2. Move the plugin to the repository ~/.terraform.d/plugins/registry.terraform.io/outscale/outscale/1.0.0-rc.2/darwin_arm64

mkdir -p ~/.terraform.d/plugins/registry.terraform.io/outscale/outscale/1.0.0-rc.2/darwin_arm64
mv terraform-provider-outscale_v1.0.0-rc.2 ~/.terraform.d/plugins/registry.terraform.io/outscale/outscale/1.0.0-rc.2/darwin_arm64
  1. Execute terraform init

  2. Execute terraform plan

For OpenTofu

On Linux

  1. Download and install OpenTofu

  2. Move the plugin to the repository ~/.terraform.d/plugins/registry.opentofu.org/outscale/outscale/1.0.0-rc.2/linux_amd64/.

mkdir -p ~/.terraform.d/plugins/registry.opentofu.org/outscale/outscale/1.0.0-rc.2/linux_amd64
mv terraform-provider-outscale_v1.0.0-rc.2 ~/.terraform.d/plugins/registry.opentofu.org/outscale/outscale/1.0.0-rc.2/linux_amd64
  1. Execute tofu init

  2. Execute tofu plan

On macOS

  1. Download and install OpenTofu

  2. Move the plugin to the repository ~/.terraform.d/plugins/registry.opentofu.org/outscale/outscale/1.0.0-rc.2/darwin_arm64

mkdir -p ~/.terraform.d/plugins/registry.opentofu.org/outscale/outscale/1.0.0-rc.2/darwin_arm64
mv terraform-provider-outscale_v1.0.0-rc.2 ~/.terraform.d/plugins/registry.opentofu.org/outscale/outscale/1.0.0-rc.2/darwin_arm64
  1. Execute tofu init

  2. Execute tofu plan

Issues and contributions

Check CONTRIBUTING.md for more details.

Building the documentation

Requirements:

  • make
  • python3
  • python-venv
make doc