2020-09-18 14:04:32 -07:00

2020-09-16 16:34:26 -04:00
Terraform Provider Boundary
2020-05-14 17:06:23 -07:00
==================
Requirements
------------
- [Terraform ](https://www.terraform.io/downloads.html ) >= 0.12.x
2020-10-06 20:34:16 -04:00
- [Go ](https://golang.org/doc/install ) >= 1.15
2020-05-14 17:06:23 -07:00
Building The Provider
---------------------
1. Clone the repository
1. Enter the repository directory
2020-09-17 16:27:48 -04:00
1. Build the provider using `make dev` . This will place the provider onto your system in a [Terraform 0.13-compliant ](https://www.terraform.io/upgrade-guides/0-13.html#in-house-providers ) manner.
You'll need to ensure that your Terraform file contains the information necessary to find the plugin when running `terraform init` . `make dev` will use a version number of 0.0.1, so the following block will work:
```hcl
terraform {
required_providers {
boundary = {
source = "localhost/providers/boundary"
version = "0.0.1"
}
}
}
2020-05-14 17:06:23 -07:00
```
Adding Dependencies
---------------------
This provider uses [Go modules ](https://github.com/golang/go/wiki/Modules ).
Please see the Go documentation for the most up to date information about using Go modules.
To add a new dependency `github.com/author/dependency` to your Terraform provider:
```
go get github.com/author/dependency
go mod tidy
```
Then commit the changes to `go.mod` and `go.sum` .
2020-10-02 18:16:11 -07:00
Developing the Provider
---------------------------
If you wish to work on the provider, you'll first need [Go ](http://www.golang.org ) installed on your machine (see [Requirements ](#requirements ) above).
To compile the provider, run `go install` . This will build the provider and put the provider binary in the `$GOPATH/bin` directory.
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.
```sh
$ make testacc
```
2020-05-14 17:06:23 -07:00
2020-10-06 20:34:16 -04:00
Generating Docs
----------------------
From the root of the repo run:
```
go run github.com/hashicorp/terraform-plugin-docs/cmd/tfplugindocs
```
2020-05-14 17:06:23 -07:00
Using the provider
----------------------
2020-09-03 15:53:29 -07:00
Please see our detailed docs for individual resource usage. Below is a complex example using the Boundary provider to configure all resource types available:
```hcl
provider "boundary" {
2020-09-16 16:34:26 -04:00
addr = "http://127.0.0.1:9200"
auth_method_id = "ampw_1234567890" # changeme
password_auth_method_login_name = "myuser" # changeme
password_auth_method_password = "passpass" # changeme
2020-09-03 15:53:29 -07:00
}
2020-10-02 18:16:11 -07:00
variable "users" {
2020-09-16 16:34:26 -04:00
type = set ( string )
2020-09-03 15:53:29 -07:00
default = [
2020-10-02 18:16:11 -07:00
"Jim" ,
"Mike" ,
"Todd" ,
"Jeff" ,
"Randy" ,
"Susmitha"
2020-09-03 15:53:29 -07:00
]
}
2020-10-02 18:16:11 -07:00
variable "readonly_users" {
2020-09-16 16:34:26 -04:00
type = set ( string )
2020-09-03 15:53:29 -07:00
default = [
2020-10-02 18:16:11 -07:00
"Jeff" ,
"Pete" ,
"JT"
2020-09-03 15:53:29 -07:00
]
}
variable "backend_server_ips" {
2020-09-16 16:34:26 -04:00
type = set ( string )
2020-09-03 15:53:29 -07:00
default = [
"10.1.0.1" ,
"10.1.0.2" ,
]
}
2020-09-16 16:34:26 -04:00
resource "boundary_scope" "global" {
global_scope = true
scope_id = "global"
}
resource "boundary_scope" "corp" {
scope_id = boundary_scope . global . id
auto_create_role = true
}
2020-09-03 15:53:29 -07:00
2020-10-02 18:16:11 -07:00
resource "boundary_user" "users" {
for_each = var . users
2020-09-03 15:53:29 -07:00
name = each . key
2020-10-02 18:16:11 -07:00
description = "User resource for ${each.key}"
2020-09-16 16:34:26 -04:00
scope_id = boundary_scope . corp . id
2020-09-03 15:53:29 -07:00
}
2020-10-02 18:16:11 -07:00
// organiation level group for readonly users
resource "boundary_group" "readonly" {
name = "readonly"
description = "Organization group for readonly users"
member_ids = [ for user in boundary_user . readonly_users : user . id ]
2020-09-16 16:34:26 -04:00
scope_id = boundary_scope . corp . id
2020-09-03 15:53:29 -07:00
}
// add org - level role for readonly access
resource "boundary_role" "organization_readonly" {
name = "readonly"
description = "Read-only role"
2020-10-02 18:16:11 -07:00
principal_ids = [ boundary_group . readonly_users . id ]
2020-10-01 11:00:30 -04:00
grant_strings = ["id = *;type = *;actions = read " ]
2020-09-16 16:34:26 -04:00
scope_id = boundary_scope . corp . id
2020-09-03 15:53:29 -07:00
}
// add org - level role for administration access
resource "boundary_role" "organization_admin" {
name = "admin"
description = "Administrator role"
2020-09-16 16:34:26 -04:00
principal_ids = concat (
2020-10-02 18:16:11 -07:00
[ for user in boundary_user . user : user . id ]
2020-09-03 15:53:29 -07:00
)
2020-10-01 11:00:30 -04:00
grant_strings = ["id = *;type = *;actions = create , read , update , delete " ]
2020-09-16 16:34:26 -04:00
scope_id = boundary_scope . corp . id
2020-09-03 15:53:29 -07:00
}
// create a project for core infrastructure
2020-09-16 16:34:26 -04:00
resource "boundary_scope" "core_infra" {
description = "Core infrastrcture"
scope_id = boundary_scope . corp . id
auto_create_role = true
2020-09-03 15:53:29 -07:00
}
resource "boundary_host_catalog" "backend_servers" {
name = "backend_servers"
2020-10-02 18:16:11 -07:00
description = "Backend servers host catalog"
2020-09-16 16:34:26 -04:00
type = "static"
scope_id = boundary_scope . core_infra . id
}
2020-10-02 18:16:11 -07:00
resource "boundary_host" "backend_servers" {
for_each = var . backend_server_ips
type = "static"
name = "backend_server_service_${each.value}"
description = "Backend server host"
address = "${each.key}"
2020-09-03 15:53:29 -07:00
host_catalog_id = boundary_host_catalog . backend_servers . id
}
resource "boundary_host_set" "backend_servers_ssh" {
2020-10-02 18:16:11 -07:00
type = "static"
2020-09-03 15:53:29 -07:00
name = "backend_servers_ssh"
2020-10-02 18:16:11 -07:00
description = "Host set for backend servers"
2020-09-03 15:53:29 -07:00
host_catalog_id = boundary_host_catalog . backend_servers . id
2020-10-02 18:16:11 -07:00
host_ids = [ for host in boundary_host . backend_servers : host . id ]
2020-09-03 15:53:29 -07:00
}
2020-10-02 18:16:11 -07:00
// create target for accessing backend servers on port : 8000
2020-09-03 15:53:29 -07:00
resource "boundary_target" "backend_servers_service" {
2020-10-02 18:16:11 -07:00
type = "tcp"
name = "backend_servers_service"
description = "Backend service target"
scope_id = boundary_scope . core_infra . id
default_port = "8080"
2020-09-03 15:53:29 -07:00
host_set_ids = [
2020-10-02 18:16:11 -07:00
boundary_host_set . backend_servers . id
2020-09-03 15:53:29 -07:00
]
}
2020-10-02 18:16:11 -07:00
// create target for accessing backend servers on port : 22
2020-09-03 15:53:29 -07:00
resource "boundary_target" "backend_servers_ssh" {
2020-10-02 18:16:11 -07:00
type = "tcp"
name = "backend_servers_ssh"
description = "Backend SSH target"
scope_id = boundary_scope . core_infra . id
default_port = "22"
2020-09-03 15:53:29 -07:00
host_set_ids = [
2020-09-16 16:34:26 -04:00
boundary_host_set . backend_servers_ssh . id
2020-09-03 15:53:29 -07:00
]
}
2020-05-14 17:06:23 -07:00
```