diff --git a/examples/search-create/README.md b/examples/search-create/README.md new file mode 100644 index 000000000000..268034a17682 --- /dev/null +++ b/examples/search-create/README.md @@ -0,0 +1,28 @@ +# Azure Search service + +This Terraform template was based on [this](https://github.com/Azure/azure-quickstart-templates/tree/bf842409eeeeb7c4523add3922b204793eb4d85f/101-azure-search-create) Azure Quickstart Template. Changes to the ARM template that may have occurred since the creation of this example may not be reflected in this Terraform template. + +This template creates a new Azure Search Service. + +If you are unclear as to what parameters are allowed you can check the [Azure Search Management REST API docs on MSDN](https://msdn.microsoft.com/en-us/library/azure/dn832687.aspx). + +## 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 +You may leave the provider block in the `main.tf`, as it is in this template, or you can create a file called `provider.tf` and add it to your `.gitignore` file. + +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. + +If you are committing this template to source control, please insure that you add this file to your `.gitignore` file. + +## variables.tf +The `variables.tf` file contains all of the input parameters that the user can specify when deploying this Terraform template. + +![graph](/examples/azure-search-create/graph.png) \ No newline at end of file diff --git a/examples/search-create/deploy.ci.sh b/examples/search-create/deploy.ci.sh new file mode 100755 index 000000000000..cbd6773bf95d --- /dev/null +++ b/examples/search-create/deploy.ci.sh @@ -0,0 +1,36 @@ +#!/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 search_name=$KEY -var resource_group=$KEY; \ + /bin/terraform apply out.tfplan; \ + /bin/terraform show;" + +# 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 > /dev/null; \ + az resource list --name $KEY" + +# 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 search_name=$KEY -var resource_group=$KEY;" \ No newline at end of file diff --git a/examples/search-create/deploy.mac.sh b/examples/search-create/deploy.mac.sh new file mode 100755 index 000000000000..dfc34c2be2fc --- /dev/null +++ b/examples/search-create/deploy.mac.sh @@ -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 \ No newline at end of file diff --git a/examples/search-create/graph.png b/examples/search-create/graph.png new file mode 100644 index 000000000000..5a1961e28271 Binary files /dev/null and b/examples/search-create/graph.png differ diff --git a/examples/search-create/main.tf b/examples/search-create/main.tf new file mode 100644 index 000000000000..d19fdace9667 --- /dev/null +++ b/examples/search-create/main.tf @@ -0,0 +1,20 @@ +# 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" +# } + +resource "azurerm_resource_group" "rg" { + name = "${var.resource_group}" + location = "${var.location}" +} + +resource "azurerm_search_service" "search" { + name = "${var.search_name}" + resource_group_name = "${azurerm_resource_group.rg.name}" + location = "${var.location}" + sku = "${var.sku}" + replica_count = "${var.replica_count}" + partition_count = "${var.partition_count}" +} diff --git a/examples/search-create/outputs.tf b/examples/search-create/outputs.tf new file mode 100644 index 000000000000..fb2c03b1e943 --- /dev/null +++ b/examples/search-create/outputs.tf @@ -0,0 +1,3 @@ +output "Azure Search Service" { + value = "${azurerm_search_service.search.name}" +} diff --git a/examples/search-create/variables.tf b/examples/search-create/variables.tf new file mode 100644 index 000000000000..72b3a8e1c4bb --- /dev/null +++ b/examples/search-create/variables.tf @@ -0,0 +1,32 @@ +variable "resource_group" { + description = "The name of the resource group in which to create search service" +} + +variable "location" { + description = "The location/region where the search service is created. Changing this forces a new resource to be created." + default = "southcentralus" +} + +variable "search_name" { + description = "Service name must only contain lowercase letters, digits or dashes, cannot use dash as the first two or last one characters, cannot contain consecutive dashes, and is limited between 2 and 60 characters in length." +} + +variable "sku" { + description = "Valid values are 'free', 'standard', 'standard2', and 'standard3' (2 & 3 must be enabled on the backend by Microsoft support). 'free' provisions the service in shared clusters. 'standard' provisions the service in dedicated clusters." + default = "standard" +} + +variable "replica_count" { + description = "Replicas distribute search workloads across the service. You need 2 or more to support high availability (applies to Basic and Standard only)." + default = 1 +} + +variable "partition_count" { + description = "Partitions allow for scaling of document count as well as faster indexing by sharding your index over multiple Azure Search units. Allowed values: 1, 2, 3, 4, 6, 12" + default = 1 +} + +variable "hosting_mode" { + description = "Applicable only for SKU set to standard3. You can set this property to enable a single, high density partition that allows up to 1000 indexes, which is much higher than the maximum indexes allowed for any other SKU. Allowed values: default, highDensity" + default = "default" +}