From 986d8f7a82fe3a9c12cb1a84bb46dc1d12c346f9 Mon Sep 17 00:00:00 2001 From: Dave Dietrick Date: Thu, 10 Nov 2022 09:55:22 -0500 Subject: [PATCH] Checking in changes for terraform and ts structure --- docs/.vitepress/config.js | 2 + docs/devops.md | 3 ++ docs/frameworks.md | 2 +- docs/terraform/basics/provisioner.md | 39 ++++++++++++++++ docs/terraform/basics/resources.md | 29 ++++++++++++ docs/terraform/basics/variables.md | 68 ++++++++++++++++++++++++++++ docs/terraform/index.md | 8 ++++ docs/terraform/sidebar.json | 11 +++++ docs/ts/basics/types.md | 4 ++ docs/ts/index.md | 1 + docs/ts/sidebar.json | 9 ++++ 11 files changed, 175 insertions(+), 1 deletion(-) create mode 100644 docs/terraform/basics/provisioner.md create mode 100644 docs/terraform/basics/resources.md create mode 100644 docs/terraform/basics/variables.md create mode 100644 docs/terraform/index.md create mode 100644 docs/terraform/sidebar.json create mode 100644 docs/ts/basics/types.md create mode 100644 docs/ts/index.md create mode 100644 docs/ts/sidebar.json diff --git a/docs/.vitepress/config.js b/docs/.vitepress/config.js index ebff526..6cee0a3 100644 --- a/docs/.vitepress/config.js +++ b/docs/.vitepress/config.js @@ -9,6 +9,8 @@ export default { '/python/': require('../python/sidebar.json'), '/rust/': require('../rust/sidebar.json'), '/nuxt/': require('../nuxt/sidebar.json'), + '/ts/': require('../ts/sidebar.json'), + '/terraform': require('../terraform/sidebar.json'), '/': [ { text: 'Home', diff --git a/docs/devops.md b/docs/devops.md index e69de29..8e289fb 100644 --- a/docs/devops.md +++ b/docs/devops.md @@ -0,0 +1,3 @@ +# Devops + +[Terraform](/terraform/) \ No newline at end of file diff --git a/docs/frameworks.md b/docs/frameworks.md index 7e9536e..5f8bc08 100644 --- a/docs/frameworks.md +++ b/docs/frameworks.md @@ -1,3 +1,3 @@ # Frameworks -[Nuxtjs](/nuxt/) \ No newline at end of file +[Nuxtjs](/nuxt/) diff --git a/docs/terraform/basics/provisioner.md b/docs/terraform/basics/provisioner.md new file mode 100644 index 0000000..d9e03fe --- /dev/null +++ b/docs/terraform/basics/provisioner.md @@ -0,0 +1,39 @@ +# Provisioning + +After we define our providers and resources to establish our environment, we use provisioners to deploy and execute code in that environment. You can deploy things like scripts and then use `remote-exec` to execute them. This is accomplished via SSH, and you can override the connection details as well. + +```hcl +resource "aws_key_pair" "mykey" { + key_name = "mykey" + public_key = file(var.PATH_TO_PUBLIC_KEY) +} + +resource "aws_instance" "example1" { + ami = ${lookup(var.AMIS, var.AWS_REGION)} + instance_type = "t2.micro" + key_name = aws_key_pair.mykey.key_name + + provisioner "file" { + source = "deploy.sh" + destination = "/etc/deploy.sh" + } + provisioner "remote-exec" { + inline = [ + "chmod +x /tmp/script.sh", + "sudo sed -i -e 's/\r$//' /tmp/script.sh", # Remove the spurious CR characters. + "sudo /tmp/script.sh", + ] + } + connection { + user = var.instance_user + password = var.instance_password + } + # or use keys + connection { + host = coalesce(self.public_ip, self.private_ip) + type = "ssh" + user = var.instance_user + private_key = file(var.PATH_TO_PRIVATE_KEY) + } +} +``` \ No newline at end of file diff --git a/docs/terraform/basics/resources.md b/docs/terraform/basics/resources.md new file mode 100644 index 0000000..5c875ce --- /dev/null +++ b/docs/terraform/basics/resources.md @@ -0,0 +1,29 @@ +# Resources + +Resources should be defined in `instance.tf`. Before creating a resource you must first create a provider in `provider.tf`. A provider is an entity such as AWS, GCP, DigitalOcean, etc. Once you specify a provider, run `terraform init` to download that provider's module. Within these providers are services which we can use via resources. + +```hcl +# provider.tf +provider "aws" { + # version = xxx +} + +# vars.tf +variable "AWS_REGION" { + type = "string" +} + +variable "AMIS" { + type = map + default = { + us-central-1: "my ami" + } +} + +# instance.tf +resource "aws_instance" "example1" { + ami = ${lookup(var.AMIS, var.AWS_REGION)} + instance_type = "t2.micro" +} + +``` \ No newline at end of file diff --git a/docs/terraform/basics/variables.md b/docs/terraform/basics/variables.md new file mode 100644 index 0000000..d162644 --- /dev/null +++ b/docs/terraform/basics/variables.md @@ -0,0 +1,68 @@ +# Variables + +Variables should be defined in `vars.tf`. + +```hcl +variable "myvar" { + type = "string" + default ="hello terraform" +} + +variable "mymap" { + type = map(string) + default = { + mykey = "myvalue" + mykey2 = "myvalue2" + } +} + +variable "mylist" { + type = list + default = [1,2,3] +} +``` +```shell +$ var.myvar +hello terraform +$ ${var.myvar} +hello terraform +$ var.mymap["mykey"] +myvalue +$ var.mylist[0] +1 +$ slice(var.mylist, 0, 2) +[ + 1, + 2 +] +``` + +You can also define variables in `terraform.tfvars` files. Generally you do not want to check this in to version control. + +```hcl +# In template.tfvars +AWS_REGION="us-central-1" + +# In vars.tf +variable "AWS_REGION" { + type = "string" +} +``` + +## Outputs + +```hcl +resource "aws_instance" "example" { + ami = lookup(var.AMIS, var.AWS_REGION) + instance_type = "t2.micro" + + # can also be used in scripts + provisioner "local-exec" { + command = "echo ${aws_instance.example.private_ip} >> private_ips.txt" + } +} + +output "ip" { + value = aws_instance.example.public_ip +} +``` \ No newline at end of file diff --git a/docs/terraform/index.md b/docs/terraform/index.md new file mode 100644 index 0000000..201ea55 --- /dev/null +++ b/docs/terraform/index.md @@ -0,0 +1,8 @@ +# Terraform + +Terraform is a software that allows you to define your infrastructure as code. You can automate your deployment, keep track of the state of your environments, and have an audit of all versions that have been deployed to an environment. + +## Installation + +Installation can be done from the [terraform website](terraform.io), where you can download the binary and add it to your path. If on mac, this can be done with brew. + diff --git a/docs/terraform/sidebar.json b/docs/terraform/sidebar.json new file mode 100644 index 0000000..81bdc1c --- /dev/null +++ b/docs/terraform/sidebar.json @@ -0,0 +1,11 @@ +[ + { + "text": "Terraform Basics", + "items": [ + {"text": "Introduction", "link": "/terraform/"}, + {"text": "Variables", "link": "/terraform/basics/variables"}, + {"text": "Resources", "link": "/terraform/basics/resources"}, + {"text": "Provisioning", "link": "/terraform/basics/provisioner"} + ] + } +] \ No newline at end of file diff --git a/docs/ts/basics/types.md b/docs/ts/basics/types.md new file mode 100644 index 0000000..4b761ba --- /dev/null +++ b/docs/ts/basics/types.md @@ -0,0 +1,4 @@ +# Types + +## Basic Types + diff --git a/docs/ts/index.md b/docs/ts/index.md new file mode 100644 index 0000000..721c965 --- /dev/null +++ b/docs/ts/index.md @@ -0,0 +1 @@ +# Typescript \ No newline at end of file diff --git a/docs/ts/sidebar.json b/docs/ts/sidebar.json new file mode 100644 index 0000000..af3eee1 --- /dev/null +++ b/docs/ts/sidebar.json @@ -0,0 +1,9 @@ +[ + { + "text": "Typescript Basics", + "items": [ + {"text": "Introduction", "link": "/ts/"}, + {"text": "Types", "link": "/ts/basics/types"} + ] + } +] \ No newline at end of file