terraform-provider-google/.github/CONTRIBUTING.md
Riley Karson cab802db6b
Add docs about local provider to CONTRIBUTING (#2085)
* Add docs about local provider to CONTRIBUTING

Add docs about using a local provider with Terraform to CONTRIBUTING.md.

I couldn't find any prescriptive docs for this, so let's make them. Let me know if a different method is preferred (such as `.terraformrc`), this seemed like the best way from my brief search.

Upstreamed https://github.com/hashicorp/terraform-website/pull/474 as well to help improve the central Terraform docs on this subject.

* Update CONTRIBUTING.md (#2086)
2018-09-20 12:40:10 -07:00

3.9 KiB

Contributing to Terraform - Google Provider

For a set of general guidelines, see the CONTRIBUTING.md page in the main Terraform repository.

The following are certain Google Provider-specific things to be aware of when contributing.

Go

We aim to make the Google Provider a good steward of Go practices. See https://github.com/golang/go/wiki/CodeReviewComments for common Go mistakes that you should attempt to avoid.

Vendoring Libraries

When adding support for just-released GCP features, you'll often need to vendor a new version of the Google API client and occasionally some of the downstream dependencies of that client. The Google Provider uses govendor in order to manage dependencies. To vendor a new package or update an existing package, run:

govendor fetch {{path}}

For example:

govendor fetch google.golang.org/api/compute/v1

When updating a vendored library, try to submit the vendoring as a separate pull request and include the commands you ran in the pull request description.

Tests

Running Tests

The following environment variables must be set in order to run tests:

GOOGLE_PROJECT
GOOGLE_CREDENTIALS or GOOGLE_USE_DEFAULT_CREDENTIALS

For certain tests, the following variables may also need to be set:

GOOGLE_REGION
GOOGLE_ORG
GOOGLE_BILLING_ACCOUNT

To run a specific test, use a command such as:

make testacc TEST=./google TESTARGS='-run=TestAccContainerNodePool_basic'

The TESTARGS variable is regexp-like, so multiple tests can be run in parallel by specifying a common substring of those tests (for example, TestAccContainerNodePool to run all node pool tests).

Writing Tests

Tests should confirm that a resource can be created, and that the resulting Terraform state has the correct values, as well as the created GCP resource.

Tests should confirm that the resource works in a variety of scenarios, and not just that it can be created in a basic fashion.

Resources that support update should have tests for update.

Resources that are importable should have a test that confirms that every field is importable. This should be part of an existing test (in the regular resource_test.go file) as an extra TestStep with the following format:

resource.TestStep{
	ResourceName:      "google_compute_backend_service.foobar",
	ImportState:       true,
	ImportStateVerify: true,
},

Running a local copy of the provider

If you are building Terraform from source with a Google provider built from source, Terraform will automatically use the local terraform-provider-google plugin in $GOPATH/bin.

In order to use a release copy of Terrafom with a local provider, you can use the provider discovery directory at ~/.terraform.d/plugins. When a copy of the Google provider is present in the discovery directory, terraform init will use that copy instead of downloading a release version.

To use a single locally built version, such as one built by a CI or build server, you can copy a terraform-provider-google binary into the discovery directory. If you're testing a local provider in active development and want the new binary each time you run make build, you can symlink the built binary into the directory:

ln -s $GOPATH/bin/terraform-provider-google ~/.terraform.d/plugins/terraform-provider-google

Autogenerated Resources

Some resources in the Google provider are autogenerated using the Magic Modules framework, and have a large disclaimer as a comment at the top of their files to say so. For feature requests or bugs regarding those resources, please continue to file issues here. PRs changing those resources will not be accepted.