github.com/bendemaree/terraform@v0.5.4-0.20150613200311-f50d97d6eee6/builtin/providers/azure/resource_azure_hosted_service.go (about) 1 package azure 2 3 import ( 4 "encoding/base64" 5 "fmt" 6 "log" 7 8 "github.com/Azure/azure-sdk-for-go/management" 9 "github.com/Azure/azure-sdk-for-go/management/hostedservice" 10 "github.com/hashicorp/terraform/helper/schema" 11 ) 12 13 // resourceAzureHostedService returns the schema.Resource associated to an 14 // Azure hosted service. 15 func resourceAzureHostedService() *schema.Resource { 16 return &schema.Resource{ 17 Create: resourceAzureHostedServiceCreate, 18 Read: resourceAzureHostedServiceRead, 19 Update: resourceAzureHostedServiceUpdate, 20 Delete: resourceAzureHostedServiceDelete, 21 22 Schema: map[string]*schema.Schema{ 23 "name": &schema.Schema{ 24 Type: schema.TypeString, 25 Required: true, 26 ForceNew: true, 27 Description: parameterDescriptions["name"], 28 }, 29 "location": &schema.Schema{ 30 Type: schema.TypeString, 31 Required: true, 32 ForceNew: true, 33 Description: parameterDescriptions["location"], 34 }, 35 "ephemeral_contents": &schema.Schema{ 36 Type: schema.TypeBool, 37 Required: true, 38 Description: parameterDescriptions["ephemeral_contents"], 39 }, 40 "url": &schema.Schema{ 41 Type: schema.TypeString, 42 Computed: true, 43 }, 44 "status": &schema.Schema{ 45 Type: schema.TypeString, 46 Computed: true, 47 }, 48 "reverse_dns_fqdn": &schema.Schema{ 49 Type: schema.TypeString, 50 Optional: true, 51 Description: parameterDescriptions["reverse_dns_fqdn"], 52 }, 53 "label": &schema.Schema{ 54 Type: schema.TypeString, 55 ForceNew: true, 56 Optional: true, 57 Default: "Made by Terraform.", 58 Description: parameterDescriptions["label"], 59 }, 60 "description": &schema.Schema{ 61 Type: schema.TypeString, 62 ForceNew: true, 63 Optional: true, 64 Description: parameterDescriptions["description"], 65 }, 66 "default_certificate_thumbprint": &schema.Schema{ 67 Type: schema.TypeString, 68 Computed: true, 69 Optional: true, 70 Description: parameterDescriptions["default_certificate_thumbprint"], 71 }, 72 }, 73 } 74 } 75 76 // resourceAzureHostedServiceCreate does all the necessary API calls 77 // to create a hosted service on Azure. 78 func resourceAzureHostedServiceCreate(d *schema.ResourceData, meta interface{}) error { 79 azureClient := meta.(*Client) 80 mgmtClient := azureClient.mgmtClient 81 hostedServiceClient := hostedservice.NewClient(mgmtClient) 82 83 serviceName := d.Get("name").(string) 84 location := d.Get("location").(string) 85 reverseDNS := d.Get("reverse_dns_fqdn").(string) 86 description := d.Get("description").(string) 87 label := base64.StdEncoding.EncodeToString([]byte(d.Get("label").(string))) 88 89 err := hostedServiceClient.CreateHostedService( 90 hostedservice.CreateHostedServiceParameters{ 91 ServiceName: serviceName, 92 Location: location, 93 Label: label, 94 Description: description, 95 ReverseDNSFqdn: reverseDNS, 96 }, 97 ) 98 if err != nil { 99 return fmt.Errorf("Failed defining new Azure hosted service: %s", err) 100 } 101 102 d.SetId(serviceName) 103 return nil 104 } 105 106 // resourceAzureHostedServiceRead does all the necessary API calls 107 // to read the state of a hosted service from Azure. 108 func resourceAzureHostedServiceRead(d *schema.ResourceData, meta interface{}) error { 109 azureClient := meta.(*Client) 110 hostedServiceClient := hostedservice.NewClient(azureClient.mgmtClient) 111 112 log.Println("[INFO] Querying for hosted service info.") 113 serviceName := d.Get("name").(string) 114 hostedService, err := hostedServiceClient.GetHostedService(serviceName) 115 if err != nil { 116 if management.IsResourceNotFoundError(err) { 117 // it means the hosted service was deleted in the meantime, 118 // so we must remove it here: 119 d.SetId("") 120 return nil 121 } else { 122 return fmt.Errorf("Failed to get hosted service: %s", err) 123 } 124 } 125 126 log.Println("[DEBUG] Reading hosted service query result data.") 127 d.Set("name", hostedService.ServiceName) 128 d.Set("url", hostedService.URL) 129 d.Set("location", hostedService.Location) 130 d.Set("description", hostedService.Description) 131 d.Set("label", hostedService.Label) 132 d.Set("status", hostedService.Status) 133 d.Set("reverse_dns_fqdn", hostedService.ReverseDNSFqdn) 134 d.Set("default_certificate_thumbprint", hostedService.DefaultWinRmCertificateThumbprint) 135 136 return nil 137 } 138 139 // resourceAzureHostedServiceUpdate does all the necessary API calls to 140 // update some settings of a hosted service on Azure. 141 func resourceAzureHostedServiceUpdate(d *schema.ResourceData, meta interface{}) error { 142 // NOTE: although no-op; this is still required in order for updates to 143 // ephemeral_contents to be possible. 144 145 // check if the service still exists: 146 return resourceAzureHostedServiceRead(d, meta) 147 } 148 149 // resourceAzureHostedServiceDelete does all the necessary API calls to 150 // delete a hosted service from Azure. 151 func resourceAzureHostedServiceDelete(d *schema.ResourceData, meta interface{}) error { 152 azureClient := meta.(*Client) 153 mgmtClient := azureClient.mgmtClient 154 hostedServiceClient := hostedservice.NewClient(mgmtClient) 155 156 log.Println("[INFO] Issuing hosted service deletion.") 157 serviceName := d.Get("name").(string) 158 ephemeral := d.Get("ephemeral_contents").(bool) 159 reqID, err := hostedServiceClient.DeleteHostedService(serviceName, ephemeral) 160 if err != nil { 161 return fmt.Errorf("Failed issuing hosted service deletion request: %s", err) 162 } 163 164 log.Println("[DEBUG] Awaiting confirmation on hosted service deletion.") 165 err = mgmtClient.WaitForOperation(reqID, nil) 166 if err != nil { 167 return fmt.Errorf("Error on hosted service deletion: %s", err) 168 } 169 170 return nil 171 }