# Terraform Openstack

### This will create:

- dmznet and dmzsubnet

- borderrouter that connects dmznet to bright-external-flat-externalnet

- a floating ip address, and an instance coming off of dmznet

- clusternet off of dmznet instance

- clustersubnet
will connect instance to ood through ohpc and download software

### Make a new directory for Terraform:

- `$mkdir terraform-first-instance`

### Install Terraform:

Install terraform from your systems package manager or [directly from HashiCorp](https://learn.hashicorp.com/terraform/getting-started/install.html).
Terraform is a single binary so it's easy to maintain the latest release version
from the distributed zip files.

On a Mac (using brew package manager):

- `$brew install terraform`

On a linux box (using the upstream package installed to personal
 ~/bin already in the $PATH):
```
wget https://releases.hashicorp.com/terraform/0.12.3/terraform_0.12.3_linux_amd64.zip
unzip terraform_0.12.3_linux_amd64.zip -d ~/bin
```

### Unzip the file and make a path to your new directory using:

- `$export TERRAFORM_DIR="$(pwd)/terraform-first-instance`

- `$cp $HOME/Downloads/terraform_0.6.16_linux_amd64/terraform $TERRAFORM_DIR`

### Create a new application credintial in Openstack:

- In Openstack, go to **Identity** -> **Application Credentials**

- Click "**Create Application Credential**"

- Name the credential, add a description, and check the box making it unrestricted (Leave the rest blank. It is important not to add an expiration date.)

- Download the credentials as an RC file.

- Save credentials RC file in your terraform-first-instance directory.


### Clone this repo into your terraform-first-instance directory using:

- `$git clone --recursive https://gitlab.rc.uab.edu/rrand11/terraform-openstack.git`

### Source the RC file and initialize terraform:

- `$source CREDENTIALRCFILENAME`

- `$cd terraform-openstack`

- `$terraform init`

### Write Terraform Plan to your terraform-first-instance directory and run that plan:

- `$terraform plan -out $HOME/terraform-first-instance/terraform-plan.tf`

**_(Note)_** `$terraform plan -out` writes the plan to a file and then `terraform apply` runs that plan.

- `$terraform apply "$HOME/terraform-first-instance/terraform-plan.tf"`


### There's a target parameter that will let you specify just one module as defined in the root main file. Run it via plan like so:

- `$terraform plan -out $HOME/terraform-first-instance/name-of-plan.tf -target=module.name-of-module-to-run`

**_(Note)_** You can also target multiple modules.

- `$terraform plan -out $HOME/terraform-first-instance/name-of-plan.tf -target=module.name-of-module -target=module.name-of-other-module`


### Destroy Terraform Instance:

- `$terraform destroy`