Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

azure-vm-simple-linux #8

Closed
Closed
Show file tree
Hide file tree
Changes from 73 commits
Commits
Show all changes
76 commits
Select commit Hold shift + click to select a range
2c1c999
initial commit - deploys successfully
anniehedgpeth Apr 17, 2017
84ebc67
gitignore added
anniehedgpeth Apr 17, 2017
5da82e6
added .travis.yml and deploy.sh
Apr 18, 2017
4febc17
updated travis.yml for builds on terraform examples
Apr 18, 2017
b7f8ae5
added directory to build matrix
Apr 18, 2017
8d9e3e1
added deploy script, updated travis.yml to build topic- branches
Apr 19, 2017
601735b
updated .travis.yml to read branches prefixed with topic-
Apr 19, 2017
90d948b
cleanup and simplify deploy script
Apr 19, 2017
bbdb2ce
removed branch restrictions on deploy
Apr 19, 2017
ca65fe3
disabling travis deployment on master short-term
Apr 19, 2017
d8131c2
cleanup; permitted topic branch
Apr 19, 2017
3ce7a24
add execute permissions to deploy.sh file
Apr 19, 2017
832ab98
generate random string for hostname
Apr 19, 2017
62dc732
updated syntax for arguments to terraform
Apr 19, 2017
c4ac9c3
fixed syntax for terraform variables
Apr 19, 2017
048ab5a
renamed folder; updated deployment script; prompt for additional vari…
Apr 19, 2017
d0973b7
moved outputs to outputs.tf; added sshCommand
Apr 19, 2017
3dce8c2
was working on the wrong deploy.sh........ :(
Apr 19, 2017
44d416c
fixed quotes
Apr 19, 2017
42b4ddc
plan now produces output plan, apply now consumes outputted plan
Apr 19, 2017
f52b7a9
fixed -out syntax
Apr 19, 2017
1d7d3f1
added missing \ to plan command
Apr 19, 2017
acaea87
nixed the numbers from string generation
Apr 20, 2017
4fb55b0
made string generation more robust
Apr 20, 2017
e0208f4
added after_deploy step to travis.yml; updated string generation yet …
Apr 20, 2017
af3de7b
azure is awfully particular for certain strings
Apr 20, 2017
1653d5d
incorrect variable reference
Apr 20, 2017
bf5d977
fixed after_deploy syntax for .travis.yml
Apr 20, 2017
36e4b74
added -force to after_deploy
Apr 20, 2017
87b049b
adding cd to after_deploy to ensure we're in the correct directory
Apr 20, 2017
f117f1d
trying terraform 0.9.2 for destroy bug; fixed interpolation issue wit…
Apr 20, 2017
602559f
updated travis file to use docker for pre_deploy/deploy/after_deploy
Apr 20, 2017
3f9d6a2
no need to pull images
Apr 20, 2017
017b469
mount pwd to container for terraform
Apr 20, 2017
8ed7e81
invalid path for travis
Apr 20, 2017
60b2081
service docker required, despite docker already running
Apr 20, 2017
3a1adfc
simplified travis.yml and deploy.sh
Apr 20, 2017
372605c
added env variables to terraform:light
Apr 20, 2017
f047180
env vars need quotes
Apr 20, 2017
d89e652
forgot \ at eol
Apr 20, 2017
4edbc8b
fixed plan args
Apr 20, 2017
10f48d5
cleaned up argument passing;removed quotes from container args
Apr 20, 2017
86f68f4
better passing of env vars
Apr 20, 2017
20d8a07
azure cli after_deploy step working properly; cleanup
Apr 20, 2017
6c3c85d
simplified deploy.sh, fixed after_deploy delete via cli
Apr 21, 2017
34d0c45
updated to best practices/conventions
anniehedgpeth Apr 22, 2017
2776838
cleanup
Apr 24, 2017
9a7e424
cleanup; sane defaults
Apr 24, 2017
3e49819
fixed broken syntax for travis
Apr 24, 2017
02952ca
cleanup/reorg
Apr 24, 2017
ccfdc3c
branch restrictions
Apr 24, 2017
9232165
rename; and execute perms
Apr 24, 2017
986b068
travis syntax changes
Apr 24, 2017
d0e8c28
fixed travis cfg
Apr 24, 2017
d4ea91a
removal of extra cd
Apr 24, 2017
fcffe2d
easier to export in before_deploy block
Apr 24, 2017
679aa2e
run script in wrong dir
Apr 24, 2017
441b86a
explicit build dirs
Apr 24, 2017
938402e
bad syntax
Apr 24, 2017
942c23a
Merge branch 'master' into topic-101-vm-simple-linux
scottzilla Apr 24, 2017
5850bc8
azuredeploy.tf to main.tf in README
anniehedgpeth Apr 24, 2017
e4b1cf7
Merge branch 'topic-101-vm-simple-linux' of https://github.com/10thma…
anniehedgpeth Apr 24, 2017
afb164b
Topic 101 vm simple linux (#1)
scottzilla Apr 24, 2017
2362bd7
merge upstream
Apr 24, 2017
f2ba2a3
Merge branch 'master' of github.com:harijayms/terraform
Apr 24, 2017
5d4e049
Merge branch 'master' of github.com:harijayms/terraform
Apr 24, 2017
3a77aaf
merge upstream
Apr 25, 2017
1ce99f6
added deployment script for mac; ensured managed disks are being used
Apr 26, 2017
f635bbd
updated build dir
Apr 27, 2017
56f6aa1
renamed scripts to be more intuitive; added check for docker
Apr 27, 2017
64b52ee
merge upstream
Apr 27, 2017
7777546
consolidated deploy and after_deploy into a single script; simplified…
Apr 27, 2017
7a34501
removed container resource; added terraform show
Apr 27, 2017
7140760
updated incorrect descriptions
Apr 27, 2017
5f577c7
added az vm show between apply & destroy
Apr 27, 2017
001acd6
merge upstream
Apr 27, 2017
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 4 additions & 7 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,9 @@ services:

language: generic

# establish environment variables
env:
- TEST_DIR=examples/azure-vm-simple-linux
- TEST_DIR=examples/azure-vm-simple-linux-managed-disk

branches:
only:
Expand All @@ -21,15 +22,11 @@ before_deploy:
- export KEY=$(cat /dev/urandom | tr -cd 'a-z' | head -c 12)
- export PASSWORD=$KEY$(cat /dev/urandom | tr -cd 'A-Z' | head -c 2)$(cat /dev/urandom | tr -cd '0-9' | head -c 2)

# terraform deploy script
# terraform deploy + script
deploy:
- provider: script
skip_cleanup: true
script: cd $TRAVIS_BUILD_DIR/$TEST_DIR && ./deploy.sh
script: cd $TRAVIS_BUILD_DIR/$TEST_DIR && ./deploy.ci.sh
on:
repo: harijayms/terraform
branch: master
condition: false

# destroy resources with Azure CLI
after_deploy: cd $TRAVIS_BUILD_DIR/$TEST_DIR && ./after_deploy.sh
24 changes: 24 additions & 0 deletions examples/azure-vm-simple-linux-managed-disk/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Very simple deployment of a Linux VM

<a href="http://armviz.io/#/?load=https%3A%2F%2Fraw.githubusercontent.com%2FAzure%2Fazure-quickstart-templates%2Fmaster%2F101-vm-simple-linux%2Fazuredeploy.json" target="_blank">
<img src="http://armviz.io/visualizebutton.png"/>
</a>

This template allows you to deploy a simple Linux VM using a few different options for the Ubuntu version, using the latest patched version. This will deploy a A1 size VM in the resource group location and return the FQDN of the VM.

This template takes a minimum amount of parameters and deploys a Linux VM, using the latest patched version.

## main.tf
The `main.tf` file contains the actual resources that will be deployed. It also contains the Azure Resource Group definition and any defined variables.

## outputs.tf
This data is outputted when `terraform apply` is called, and can be queried using the `terraform output` command.

## provider.tf
Azure requires that an application is added to Azure Active Directory to generate the `client_id`, `client_secret`, and `tenant_id` needed by Terraform (`subscription_id` can be recovered from your Azure account details). Please go [here](https://www.terraform.io/docs/providers/azurerm/) for full instructions on how to create this to populate your `provider.tf` file.

## terraform.tfvars
If a `terraform.tfvars` file is present in the current directory, Terraform automatically loads it to populate variables. We don't recommend saving usernames and password to version control, but you can create a local secret variables file and use `-var-file` to load it.

## variables.tf
The `variables.tf` file contains all of the input parameters that the user can specify when deploying this Terraform template.
38 changes: 38 additions & 0 deletions examples/azure-vm-simple-linux-managed-disk/deploy.ci.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
#!/bin/bash

set -o errexit -o nounset

docker run --rm -it \
-e ARM_CLIENT_ID \
-e ARM_CLIENT_SECRET \
-e ARM_SUBSCRIPTION_ID \
-e ARM_TENANT_ID \
-v $(pwd):/data \
--workdir=/data \
--entrypoint "/bin/sh" \
hashicorp/terraform:light \
-c "/bin/terraform get; \
/bin/terraform validate; \
/bin/terraform plan -out=out.tfplan -var dns_name=$KEY -var hostname=$KEY -var resource_group=$KEY -var admin_password=$PASSWORD; \
/bin/terraform apply out.tfplan; \
/bin/terraform show;"

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add terraform show here, it will be good to record it in the logs


# cleanup deployed azure resources via terraform
docker run --rm -it \
-e ARM_CLIENT_ID \
-e ARM_CLIENT_SECRET \
-e ARM_SUBSCRIPTION_ID \
-e ARM_TENANT_ID \
-v $(pwd):/data \
--workdir=/data \
--entrypoint "/bin/sh" \
hashicorp/terraform:light \
-c "/bin/terraform destroy -force -var dns_name=$KEY -var hostname=$KEY -var resource_group=$KEY -var admin_password=$PASSWORD;"


# cleanup deployed azure resources via azure-cli
# docker run --rm -it \
# azuresdk/azure-cli-python \
# sh -c "az login --service-principal -u $ARM_CLIENT_ID -p $ARM_CLIENT_SECRET --tenant $ARM_TENANT_ID; \
# az group delete -y -n $KEY"
15 changes: 15 additions & 0 deletions examples/azure-vm-simple-linux-managed-disk/deploy.mac.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#!/bin/bash

set -o errexit -o nounset

if docker -v; then

# generate a unique string for CI deployment
export KEY=$(cat /dev/urandom | env LC_CTYPE=C tr -cd 'a-z' | head -c 12)
export PASSWORD=$KEY$(cat /dev/urandom | env LC_CTYPE=C tr -cd 'A-Z' | head -c 2)$(cat /dev/urandom | env LC_CTYPE=C tr -cd '0-9' | head -c 2)

/bin/sh ./deploy.ci.sh

else
echo "Docker is used to run terraform commands, please install before run: https://docs.docker.com/docker-for-mac/install/"
fi
101 changes: 101 additions & 0 deletions examples/azure-vm-simple-linux-managed-disk/main.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
resource "azurerm_resource_group" "rg" {
name = "${var.resource_group}"
location = "${var.location}"
}

resource "azurerm_virtual_network" "vnet" {
name = "${var.virtual_network_name}"
location = "${var.location}"
address_space = ["${var.address_space}"]
resource_group_name = "${azurerm_resource_group.rg.name}"
}

resource "azurerm_subnet" "subnet" {
name = "${var.rg_prefix}subnet"
virtual_network_name = "${azurerm_virtual_network.vnet.name}"
resource_group_name = "${azurerm_resource_group.rg.name}"
address_prefix = "${var.subnet_prefix}"
}

resource "azurerm_network_interface" "nic" {
name = "${var.rg_prefix}nic"
location = "${var.location}"
resource_group_name = "${azurerm_resource_group.rg.name}"

ip_configuration {
name = "${var.rg_prefix}ipconfig"
subnet_id = "${azurerm_subnet.subnet.id}"
private_ip_address_allocation = "Dynamic"
public_ip_address_id = "${azurerm_public_ip.pip.id}"
}
}

resource "azurerm_public_ip" "pip" {
name = "${var.rg_prefix}-ip"
location = "${var.location}"
resource_group_name = "${azurerm_resource_group.rg.name}"
public_ip_address_allocation = "dynamic"
domain_name_label = "${var.dns_name}"
}

resource "azurerm_storage_account" "stor" {
name = "${var.dns_name}stor"
location = "${var.location}"
resource_group_name = "${azurerm_resource_group.rg.name}"
account_type = "${var.storage_account_type}"
}

resource "azurerm_managed_disk" "datadisk" {
name = "${var.hostname}-datadisk"
location = "${var.location}"
resource_group_name = "${azurerm_resource_group.rg.name}"
storage_account_type = "Standard_LRS"
create_option = "Empty"
disk_size_gb = "1023"
}

resource "azurerm_virtual_machine" "vm" {
name = "${var.rg_prefix}vm"
location = "${var.location}"
resource_group_name = "${azurerm_resource_group.rg.name}"
vm_size = "${var.vm_size}"
network_interface_ids = ["${azurerm_network_interface.nic.id}"]

storage_image_reference {
publisher = "${var.image_publisher}"
offer = "${var.image_offer}"
sku = "${var.image_sku}"
version = "${var.image_version}"
}

storage_os_disk {
name = "${var.hostname}-osdisk"
managed_disk_type = "Standard_LRS"
caching = "ReadWrite"
create_option = "FromImage"
}

storage_data_disk {
name = "${var.hostname}-datadisk"
managed_disk_id = "${azurerm_managed_disk.datadisk.id}"
managed_disk_type = "Standard_LRS"
disk_size_gb = "1023"
create_option = "Attach"
lun = 0
}

os_profile {
computer_name = "${var.hostname}"
admin_username = "${var.admin_username}"
admin_password = "${var.admin_password}"
}

os_profile_linux_config {
disable_password_authentication = false
}

boot_diagnostics {
enabled = "true"
storage_uri = "${azurerm_storage_account.stor.primary_blob_endpoint}"
}
}
11 changes: 11 additions & 0 deletions examples/azure-vm-simple-linux-managed-disk/outputs.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
output "hostname" {
value = "${var.hostname}"
}

output "vm_fqdn" {
value = "${azurerm_public_ip.pip.fqdn}"
}

output "sshCommand" {
value = "ssh ${var.admin_username}@${azurerm_public_ip.pip.fqdn}"
}
7 changes: 7 additions & 0 deletions examples/azure-vm-simple-linux-managed-disk/provider.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# provider "azurerm" {
# subscription_id = "REPLACE-WITH-YOUR-SUBSCRIPTION-ID"
# client_id = "REPLACE-WITH-YOUR-CLIENT-ID"
# client_secret = "REPLACE-WITH-YOUR-CLIENT-SECRET"
# tenant_id = "REPLACE-WITH-YOUR-TENANT-ID"
# }

8 changes: 8 additions & 0 deletions examples/azure-vm-simple-linux-managed-disk/terraform.tfvars
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# Replace with relevant values

# resource_group = "myresourcegroup"
# rg_prefix = "rg"
# hostname = "myvm"
# dns_name = "mydnsname"
# location = "southcentralus"
# admin_password = "T3rr@f0rmP@ssword"
75 changes: 75 additions & 0 deletions examples/azure-vm-simple-linux-managed-disk/variables.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
variable "resource_group" {
description = "The name of the resource group in which to create the virtual network."
}

variable "rg_prefix" {
description = "The shortened abbreviation to represent your resource group that will go on the front of some resources."
default = "rg"
}

variable "hostname" {
description = "VM name referenced also in storage-related names."
}

variable "dns_name" {
description = " Label for the Domain Name. Will be used to make up the FQDN. If a domain name label is specified, an A DNS record is created for the public IP in the Microsoft Azure DNS system."
}

variable "location" {
description = "The location/region where the virtual network is created. Changing this forces a new resource to be created."
default = "southcentralus"
}

variable "virtual_network_name" {
description = "The name for the virtual network."
default = "vnet"
}

variable "address_space" {
description = "The address space that is used by the virtual network. You can supply more than one address space. Changing this forces a new resource to be created."
default = "10.0.0.0/16"
}

variable "subnet_prefix" {
description = "The address prefix to use for the subnet."
default = "10.0.10.0/24"
}

variable "storage_account_type" {
description = "Specifies the name of the storage account. Changing this forces a new resource to be created. This must be unique across the entire Azure service, not just within the resource group."
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Description is wrong

default = "Standard_LRS"
}

variable "vm_size" {
description = "Specifies the name of the virtual machine resource. Changing this forces a new resource to be created."
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wrong description

default = "Standard_A0"
}

variable "image_publisher" {
description = "name of the publisher of the image (az vm image list)"
default = "Canonical"
}

variable "image_offer" {
description = "the name of the offer (az vm image list)"
default = "UbuntuServer"
}

variable "image_sku" {
description = "image sku to apply (az vm image list)"
default = "16.04-LTS"
}

variable "image_version" {
description = "version of the image to apply (az vm image list)"
default = "latest"
}

variable "admin_username" {
description = "administrator user name"
default = "vmadmin"
}

variable "admin_password" {
description = "administrator password (recommended to disable password auth)"
}