Skip to content

Latest commit

 

History

History
187 lines (131 loc) · 5.13 KB

DEVELOPING.md

File metadata and controls

187 lines (131 loc) · 5.13 KB

Developing the Provider

Requirements

Get the provider source code:

git clone [email protected]:UpCloudLtd/terraform-provider-upcloud.git
cd terraform-provider-upcloud

To compile the provider, run go build. This will build the provider and put the provider binary in the current directory.

go build

In the majority of cases the make command will be executed to build the binary in the correct directory.

make

The UpCloud provider will be built and placed in the following location under the ~/.terraform.d/plugins directory. The version number will match the value specified in the makefile and in this case the version is 2.0.0.

~/.terraform.d/plugins
└── registry.upcloud.com
    └── upcloud
        └── upcloud
            └── 2.0.0
                └── darwin_amd64
                    └── terraform-provider-upcloud_v2.0.0

After the provider has been built you can then use standard terraform commands.

Use this provider config with the local version:

terraform {
  required_providers {
    upcloud = {
      source = "registry.upcloud.com/upcloud/upcloud"
      version = "~> 2.1"
    }
  }
}

Update database properties

Prerequisites:

  • Set your credentials to UPCLOUD_USERNAME and UPCLOUD_PASSWORD environment variables.
  • Ensure you have jq and upctl installed.

Run make generate to update database properties schemas.

make generate

Testing

To lint the providers source-code, run golangci-lint run. See golangci-lint docs for installation instructions.

golangci-lint run

In order to test the provider, you can simply run make test.

make test

In order to run the full suite of Acceptance tests, run make testacc.

Note: Acceptance tests create real resources, and often cost money to run.

make testacc

In order to run an individual acceptance test, the '-run' flag can be used together with a regular expression. The following example uses a regular expression matching single test called 'TestUpcloudServer_basic'.

make testacc TESTARGS='-run=TestUpcloudServer_basic'

The following example uses a regular expression to execute a grouping of basic acceptance tests.

make testacc TESTARGS='-run=TestUpcloudServer_*'

In order to view the documentation change rendering visite the terraform documentation preview.

Debugging

To print UpCloud API requests and responses, set Terraform log level to debug or lower. For example, when running an apply:

TF_LOG=debug terraform apply

Generating documentation

The documentation in docs directory is generated with tfplugindocs. This is done automatically when changes are merged to the main branch. If there are documentation changes, actions will create a new pull request for documentation changes. Review and merge this pull-request.

To generate the docs locally, run make docs. This installs the tool and builds the docs.

make docs

Go version upgrades

Upgrading Go version for the project requires the following changes:

After updating those files, make sure that you can still build the project (make build) and that docker image builds without any errors (docker image build ./release).

Once that is done it should be safe to release a new version of the provider.

Developing in Docker

You can also develop/build/test in Docker. After you've cloned the repository:

Create a docker container with golang as base:

docker run -it -v `pwd`:/work -w /work golang bash

Install Terraform:

cd /tmp
git clone https://github.com/hashicorp/terraform.git
cd terraform
go install

Build the UpCloud provider:

cd /work
make build

Run Terraform files, e.g. the examples:

cd /tmp
cp /work/examples/server.tf .
# change the provider source in server.tf to "registry.upcloud.com/upcloud/upcloud"
export UPCLOUD_USERNAME="upcloud-api-access-enabled-user"
export UPCLOUD_PASSWORD="verysecretpassword"
terraform init
terraform apply

After exiting the container, you can connect back to the container:

docker start -ai <container ID here>

Debugging

UpCloud provider can be run in debug mode using a debugger such as Delve.
For more information, see Terraform docs

Environment variables UPCLOUD_DEBUG_API_BASE_URL and UPCLOUD_DEBUG_SKIP_CERTIFICATE_VERIFY can be used for HTTP client debugging purposes. More information can be found in the client's README file.