Adding new data sources to cloudstack-terraform-proivder (#38)

* create ssh keypair data-source

* create a method stub for instance data-source

* extending instance data-source to use its id as an input

* use SetId() to define the ID of the instance resource

* implement filters to allow filtering off of any exported attributes

* add ip-address to schema and allow filtering off of it

* create a method stub to acceptance test the instance data-source

* basic acceptance test for instance data-source passing

* adding comments to improve the readability of code

* add basic acceptance test for ssh keypair data-source

* create network offering resource

* complete network offering resource type

* create network offering data source

* add basic acceptance test for network offering data source

* create disk offering resource

* implement create method for disk offering resource

* create cloudstack volume resource type

* create cloudstack zone resource type

* create zone data source

* add acceptance test for zone datasource

* create service offering resource

* create service offering data source

* add service offering data source

* fix typos in comments for network offering resource

* add volume data source

* add acceptance test for volume data source

* create account resource

* implement delete method in account resource

* fix a typo in network offering

* create user resource

* create domain resource

* add vpc data-source

* add ip address data-source

* add user data-source

* add vpn connection data-source

* add acceptance test for vpc data-source

* add acceptance test for ipaddress data-source

* add acceptance test for user data-source

* fix a typo in applyNetworkOfferingFilters method of network offering data-source
28 files changed
tree: eeed8ebe0bd1a2e5d86d66ce8c71edd98eb09683
  1. .github/
  2. cloudstack/
  3. scripts/
  4. website/
  5. .asf.yaml
  6. .gitignore
  7. .goreleaser.yml
  8. CHANGELOG.md
  9. GNUmakefile
  10. go.mod
  11. go.sum
  12. LICENSE
  13. main.go
  14. performrelease.sh
  15. README.md
README.md

CloudStack Terraform Provider

Requirements

Using the Provider from Terrafrom registry

To install the CloudStack provider, copy and paste the below code into your Terraform configuration. Then, run terraform init.

terraform {
  required_providers {
    cloudstack = {
      source = "cloudstack/cloudstack"
      version = "0.4.0"
    }
  }
}

provider "cloudstack" {
  # Configuration options
}

For more details on how to install and use the provider, visit https://registry.terraform.io/providers/cloudstack/cloudstack/latest/docs

Developing the Provider

If you wish to work on the provider, you‘ll first need Go installed on your machine (version 1.16+ is required). You’ll also need to correctly setup a GOPATH, as well as adding $GOPATH/bin to your $PATH.

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

$ mkdir -p $GOPATH/src/github.com/apache; cd $GOPATH/src/github.com/apache
$ git clone git@github.com:apache/cloudstack-terraform-provider

To compile the provider, run make build. This will build the provider and put the provider binary in the $GOPATH/bin directory.

Enter the provider directory and build the provider

$ cd $GOPATH/src/github.com/apache/cloudstack-terraform-provider
$ make build
$ ls $GOPATH/bin/terraform-provider-cloudstack

Once the build is ready, you have to copy the binary into Terraform locally (version appended). On Linux this path is at ~/.terraform.d/plugins, and on Windows at %APPDATA%\terraform.d\plugins.

$ ls ~/.terraform.d/plugins/registry.terraform.io/cloudstack/cloudstack/0.4.0/linux_amd64/terraform-provider-cloudstack_v0.4.0

Testing the Provider

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

$ make test

In order to run the full suite of Acceptance tests you will need to run the CloudStack Simulator. Please follow these steps to prepare an environment for running the Acceptance tests:

$ docker pull cloudstack/simulator
$ docker run --name simulator -p 8080:5050 -d cloudstack/simulator

When Docker started the container you can go to http://localhost:8080/client and login to the CloudStack UI as user admin with password password. It can take a few minutes for the container is fully ready, so you probably need to wait and refresh the page for a few minutes before the login page is shown.

Once the login page is shown and you can login, you need to provision a simulated data-center:

$ docker exec -ti cloudstack python /root/tools/marvin/marvin/deployDataCenter.py -i /root/setup/dev/advanced.cfg

If you refresh the client or login again, you will now get passed the initial welcome screen and be able to go to your account details and retrieve the API key and secret. Export those together with the URL:

$ export CLOUDSTACK_API_URL=http://localhost:8080/client/api
$ export CLOUDSTACK_API_KEY=r_gszj7e0ttr_C6CP5QU_1IV82EIOtK4o_K9i_AltVztfO68wpXihKs2Tms6tCMDY4HDmbqHc-DtTamG5x112w
$ export CLOUDSTACK_SECRET_KEY=tsfMDShFe94f4JkJfEh6_tZZ--w5jqEW7vGL2tkZGQgcdbnxNoq9fRmwAtU5MEGGXOrDlNA6tfvGK14fk_MB6w

In order for all the tests to pass, you will need to create a new (empty) project in the UI called terraform. When the project is created you can run the Acceptance tests against the CloudStack Simulator by simply runnning:

$ make testacc

Sample Terraform configuration

Below is an example configuration to initialize provider and create a Virtual Machine instance

$ cat provider.tf
terraform {
  required_providers {
    cloudstack = {
      source = "cloudstack/cloudstack"
      version = "0.4.0"
    }
  }
}

provider "cloudstack" {
  # Configuration options
  api_url    = "${var.cloudstack_api_url}"
  api_key    = "${var.cloudstack_api_key}"
  secret_key = "${var.cloudstack_secret_key}"
}

resource "cloudstack_instance" "web" {
  name             = "server-1"
  service_offering = "Small Instance"
  network_id       = "df5fc279-86d5-4f5d-b7e9-b27f003ca3fc"
  template         = "616fe117-0c1c-11ec-aec4-1e00610002a9"
  zone             = "2b61ed5d-e8bd-431d-bf52-d127655dffab"
}

History

This codebase relicensed under APLv2 and donated to the Apache CloudStack project under an IP clearance process and imported on 26th July 2021.

License

Licensed under the Apache License, Version 2.0 (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0