From fe79dcf6c1d4971d28aacb544d2d8f08183dda1c Mon Sep 17 00:00:00 2001 From: stack72 Date: Mon, 21 Mar 2016 15:59:56 +0000 Subject: [PATCH] provider/azurerm: Add the documentation for the AzureRM Template Deployment resource --- .../resource_arm_template_deployment.go | 52 +++++++-- .../resource_arm_template_deployment_test.go | 103 ++++++++++++++++++ .../r/template_deployment.html.markdown | 95 ++++++++++++++++ website/source/layouts/azurerm.erb | 4 + 4 files changed, 244 insertions(+), 10 deletions(-) create mode 100644 website/source/docs/providers/azurerm/r/template_deployment.html.markdown diff --git a/builtin/providers/azurerm/resource_arm_template_deployment.go b/builtin/providers/azurerm/resource_arm_template_deployment.go index 474d722d19..2655702974 100644 --- a/builtin/providers/azurerm/resource_arm_template_deployment.go +++ b/builtin/providers/azurerm/resource_arm_template_deployment.go @@ -5,6 +5,7 @@ import ( "fmt" "log" "net/http" + "strings" "time" "github.com/Azure/azure-sdk-for-go/arm/resources/resources" @@ -44,6 +45,11 @@ func resourceArmTemplateDeployment() *schema.Resource { Optional: true, }, + "outputs": &schema.Schema{ + Type: schema.TypeMap, + Computed: true, + }, + "deployment_mode": &schema.Schema{ Type: schema.TypeString, Required: true, @@ -58,16 +64,26 @@ func resourceArmTemplateDeploymentCreate(d *schema.ResourceData, meta interface{ name := d.Get("name").(string) resGroup := d.Get("resource_group_name").(string) - deployment_mode := d.Get("deployment_mode").(string) + deploymentMode := d.Get("deployment_mode").(string) - log.Printf("[INFO] preparing arguments for Azure ARM Virtual Machine creation.") + log.Printf("[INFO] preparing arguments for Azure ARM Template Deployment creation.") properties := resources.DeploymentProperties{ - Mode: resources.DeploymentMode(deployment_mode), + Mode: resources.DeploymentMode(deploymentMode), } if v, ok := d.GetOk("parameters"); ok { params := v.(map[string]interface{}) - properties.Parameters = ¶ms + + newParams := make(map[string]interface{}, len(params)) + for key, val := range params { + newParams[key] = struct { + Value interface{} + }{ + Value: val, + } + } + + properties.Parameters = &newParams } if v, ok := d.GetOk("template_body"); ok { @@ -89,10 +105,10 @@ func resourceArmTemplateDeploymentCreate(d *schema.ResourceData, meta interface{ d.SetId(*resp.ID) - log.Printf("[DEBUG] Waiting for Template Deploymnet (%s) to become available", name) + log.Printf("[DEBUG] Waiting for Template Deployment (%s) to become available", name) stateConf := &resource.StateChangeConf{ - Pending: []string{"Creating", "Updating", "Accepted", "Running"}, - Target: []string{"Succeeded"}, + Pending: []string{"creating", "updating", "accepted", "running"}, + Target: []string{"succeeded"}, Refresh: templateDeploymentStateRefreshFunc(client, resGroup, name), Timeout: 10 * time.Minute, } @@ -123,8 +139,24 @@ func resourceArmTemplateDeploymentRead(d *schema.ResourceData, meta interface{}) return nil } if err != nil { - return fmt.Errorf("Error making Read request on Azure Template Deployment %s: %s", name, err) + return fmt.Errorf("Error making Read request on Azure RM Template Deployment %s: %s", name, err) + } + var outputs map[string]string + if resp.Properties.Outputs != nil && len(*resp.Properties.Outputs) > 0 { + for key, output := range *resp.Properties.Outputs { + log.Printf("[INFO] Found Key %s", key) + + outputMap := output.(map[string]interface{}) + outputValue, ok := outputMap["value"] + if !ok { + // No value + continue + } + + outputs[key] = outputValue.(string) + } } + d.Set("outputs", outputs) return nil } @@ -151,7 +183,7 @@ func expandTemplateBody(template string) (map[string]interface{}, error) { var templateBody map[string]interface{} err := json.Unmarshal([]byte(template), &templateBody) if err != nil { - return nil, fmt.Errorf("dont be a dumb fuck") + return nil, fmt.Errorf("Error Expanding the template_body for Azure RM Template Deployment") } return templateBody, nil } @@ -176,6 +208,6 @@ func templateDeploymentStateRefreshFunc(client *ArmClient, resourceGroupName str return nil, "", fmt.Errorf("Error issuing read request in templateDeploymentStateRefreshFunc to Azure ARM for Template Deployment '%s' (RG: '%s'): %s", name, resourceGroupName, err) } - return res, *res.Properties.ProvisioningState, nil + return res, strings.ToLower(*res.Properties.ProvisioningState), nil } } diff --git a/builtin/providers/azurerm/resource_arm_template_deployment_test.go b/builtin/providers/azurerm/resource_arm_template_deployment_test.go index 5e4f05247d..188f33da92 100644 --- a/builtin/providers/azurerm/resource_arm_template_deployment_test.go +++ b/builtin/providers/azurerm/resource_arm_template_deployment_test.go @@ -28,6 +28,25 @@ func TestAccAzureRMTemplateDeployment_basic(t *testing.T) { }) } +func TestAccAzureRMTemplateDeployment_withParams(t *testing.T) { + ri := acctest.RandInt() + config := fmt.Sprintf(testAccAzureRMTemplateDeployment_withParams, ri, ri, ri) + resource.Test(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: testCheckAzureRMTemplateDeploymentDestroy, + Steps: []resource.TestStep{ + resource.TestStep{ + Config: config, + Check: resource.ComposeTestCheckFunc( + testCheckAzureRMTemplateDeploymentExists("azurerm_template_deployment.test"), + resource.TestCheckResourceAttr("azurerm_template_deployment.test", "outputs.testOutput", "Output Value"), + ), + }, + }, + }) +} + func testCheckAzureRMTemplateDeploymentExists(name string) resource.TestCheckFunc { return func(s *terraform.State) error { // Ensure we have enough information in state to look up in API @@ -146,3 +165,87 @@ DEPLOY } ` + +var testAccAzureRMTemplateDeployment_withParams = ` + resource "azurerm_resource_group" "test" { + name = "acctestrg-%d" + location = "West US" + } + + output "test" { + value = "${azurerm_template_deployment.test.outputs.testOutput}" + } + + resource "azurerm_template_deployment" "test" { + name = "acctesttemplate-%d" + resource_group_name = "${azurerm_resource_group.test.name}" + template_body = < + > + azurerm_template_deployment + + > Virtual Machine Resources