From 94e04a1d870324528018bc175e77439096b2cbe8 Mon Sep 17 00:00:00 2001 From: Jeffrey Cline Date: Tue, 27 Feb 2018 14:19:21 -0800 Subject: [PATCH] Sets USE_MSI env var, get latest version of terraform, reflect changes in readme. --- .../vm-linux-terraform/README.md | 4 ++-- .../vm-linux-terraform/Template.zip | Bin 0 -> 6198 bytes .../vm-linux-terraform/scripts/infra.sh | 21 ++++++++++++------ .../vm-linux-terraform/scripts/install.sh | 15 ++++++++----- 4 files changed, 25 insertions(+), 15 deletions(-) create mode 100644 solution_template/vm-linux-terraform/Template.zip diff --git a/solution_template/vm-linux-terraform/README.md b/solution_template/vm-linux-terraform/README.md index 44ad8b1f..d1100d55 100644 --- a/solution_template/vm-linux-terraform/README.md +++ b/solution_template/vm-linux-terraform/README.md @@ -1,7 +1,7 @@ Azure Marketplace Terraform Solution Template === -This template provisions a `Linux` Virtual Machine(VM) to `Azure` pre-configured with the `Terraform` v0.11.1 core runtime and the `Azure CLI` v2.0. +This template provisions a `Linux` Virtual Machine(VM) to `Azure` pre-configured with the latest `Terraform` core runtime and the `Azure CLI` v2.0. Template Deployment Steps: --- @@ -11,7 +11,7 @@ Template Deployment Steps: * Creates a `Terraform` template folder (tfTemplate) * Pre-configures `Terraform` remote state with the `Azure` backend -Once all required resources have been provisioned to `Azure` the template will then execute a shell script on the VM using the custom script extension. The shell script will install `Terraform` v0.11.1 core runtime and the `Azure CLI` v2.0. It then creates a `Terraform` template folder that is pre-configured to use `Terraform Remote State` with the `Azure` backend. The `Azure CLI` will also create the storage container required by remote state. +Once all required resources have been provisioned to `Azure` the template will then execute a shell script on the VM using the custom script extension. The shell script will install latest `Terraform` core runtime and the `Azure CLI` v2.0. It then creates a `Terraform` template folder that is pre-configured to use `Terraform Remote State` with the `Azure` backend. The `Azure CLI` will also create the storage container required by remote state. Post Deployment Configuration Steps === diff --git a/solution_template/vm-linux-terraform/Template.zip b/solution_template/vm-linux-terraform/Template.zip new file mode 100644 index 0000000000000000000000000000000000000000..984600e0cffed485575719d70af9df35c282a158 GIT binary patch literal 6198 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 literal 0 HcmV?d00001 diff --git a/solution_template/vm-linux-terraform/scripts/infra.sh b/solution_template/vm-linux-terraform/scripts/infra.sh index 61ee2a68..c91d68bb 100644 --- a/solution_template/vm-linux-terraform/scripts/infra.sh +++ b/solution_template/vm-linux-terraform/scripts/infra.sh @@ -2,17 +2,24 @@ apt-get update -retry=0 -while true;do -wget -O terraform.zip https://releases.hashicorp.com/terraform/0.11.1/terraform_0.11.1_linux_amd64.zip?_ga=2.228206621.1801000149.1512425211-1345627201.1504718143 && break || ((retry++)) -((retry >= 10)) && break -done +apt-get install jq apt-get install unzip -unzip terraform.zip +apt-get update -mv terraform /usr/local/bin +TF_VERSION=$(curl -s https://checkpoint-api.hashicorp.com/v1/check/terraform | jq -r -M ".current_version") \ +&& wget -O terraform.zip https://releases.hashicorp.com/terraform/${TF_VERSION}/terraform_${TF_VERSION}_linux_amd64.zip \ +&& wget -O terraform.sha256 https://releases.hashicorp.com/terraform/${TF_VERSION}/terraform_${TF_VERSION}_SHA256SUMS \ +&& wget -O terraform.sha256.sig https://releases.hashicorp.com/terraform/${TF_VERSION}/terraform_${TF_VERSION}_SHA256SUMS.sig \ +&& curl -s https://keybase.io/hashicorp/pgp_keys.asc | gpg --import \ +&& gpg --verify terraform.sha256.sig terraform.sha256 \ +&& echo $(grep -Po "[[:xdigit:]]{64}(?=\s+terraform_${TF_VERSION}_linux_amd64.zip)" terraform.sha256) terraform.zip | sha256sum -c \ +&& unzip terraform.zip \ +&& mkdir /usr/local/terraform \ +&& mv terraform /usr/local/bin \ +&& rm -f terraform terraform.zip terraform.sha256 terraform.sha256.sig \ +&& unset TF_VERSION echo "deb [arch=amd64] https://packages.microsoft.com/repos/azure-cli/ wheezy main" | sudo tee /etc/apt/sources.list.d/azure-cli.list diff --git a/solution_template/vm-linux-terraform/scripts/install.sh b/solution_template/vm-linux-terraform/scripts/install.sh index aa06141b..845c39f6 100644 --- a/solution_template/vm-linux-terraform/scripts/install.sh +++ b/solution_template/vm-linux-terraform/scripts/install.sh @@ -89,6 +89,7 @@ TEMPLATEFOLDER="/home/$USERNAME/tfTemplate" REMOTESTATEFILE="$TEMPLATEFOLDER/remoteState.tf" TFENVFILE="/home/$USERNAME/tfEnv.sh" CREDSFILE="$TEMPLATEFOLDER/azureProviderAndCreds.tf" +PROFILEFILE="/home/$USERNAME/.profile" mkdir $TEMPLATEFOLDER @@ -111,6 +112,14 @@ chown -R $USERNAME:$USERNAME /home/$USERNAME/tfTemplate touch $TFENVFILE echo "export ARM_SUBSCRIPTION_ID=\"$SUBSCRIPTION_ID\"" >> $TFENVFILE echo "export ARM_CLIENT_ID=\"$MSI_PRINCIPAL_ID\"" >> $TFENVFILE +echo "export USE_MSI=true" >> $TFENVFILE + +# Set these variables in the profile +echo "echo export ARM_SUBSCRIPTION_ID=\"$SUBSCRIPTION_ID\" >>$PROFILEFILE" >> $TFENVFILE +echo "echo export ARM_CLIENT_ID=\"$MSI_PRINCIPAL_ID\" >>$PROFILEFILE" >> $TFENVFILE +echo "echo export USE_MSI=true >>$PROFILEFILE" >> $TFENVFILE + +# Add contributor permissions to the MSI for entire subscription echo "az login" >> $TFENVFILE echo "az role assignment create --assignee \"$MSI_PRINCIPAL_ID\" --role 'b24988ac-6180-42a0-ab88-20f7382dd24c' --scope /subscriptions/\"$SUBSCRIPTION_ID\"" >> $TFENVFILE chmod 755 $TFENVFILE @@ -121,9 +130,3 @@ logger -t devvm "Creating the container for remote state" az login --msi az storage container create -n terraform-state --account-name $STORAGE_ACCOUNT_NAME --account-key $STORAGE_ACCOUNT_KEY logger -t devvm "Container for remote state created: $?" - -if [[ -v DESKTOPINSTALL ]]; then - echo "Installing Mate Desktop" - bash ./desktop.sh - echo "Desktop installed" -fi