github.com/minamijoyo/terraform@v0.7.8-0.20161029001309-18b3736ba44b/builtin/providers/azurerm/resource_arm_search_service.go (about) 1 package azurerm 2 3 import ( 4 "fmt" 5 "log" 6 "time" 7 8 "github.com/hashicorp/terraform/helper/resource" 9 "github.com/hashicorp/terraform/helper/schema" 10 "github.com/jen20/riviera/search" 11 ) 12 13 func resourceArmSearchService() *schema.Resource { 14 return &schema.Resource{ 15 Create: resourceArmSearchServiceCreate, 16 Read: resourceArmSearchServiceRead, 17 Update: resourceArmSearchServiceCreate, 18 Delete: resourceArmSearchServiceDelete, 19 20 Schema: map[string]*schema.Schema{ 21 "name": &schema.Schema{ 22 Type: schema.TypeString, 23 Required: true, 24 ForceNew: true, 25 }, 26 27 "location": &schema.Schema{ 28 Type: schema.TypeString, 29 Required: true, 30 ForceNew: true, 31 StateFunc: azureRMNormalizeLocation, 32 }, 33 34 "resource_group_name": &schema.Schema{ 35 Type: schema.TypeString, 36 Required: true, 37 ForceNew: true, 38 }, 39 40 "sku": &schema.Schema{ 41 Type: schema.TypeString, 42 Required: true, 43 }, 44 45 "replica_count": &schema.Schema{ 46 Type: schema.TypeInt, 47 Optional: true, 48 Computed: true, 49 }, 50 51 "partition_count": &schema.Schema{ 52 Type: schema.TypeInt, 53 Optional: true, 54 Computed: true, 55 }, 56 57 "tags": tagsSchema(), 58 }, 59 } 60 } 61 62 func resourceArmSearchServiceCreate(d *schema.ResourceData, meta interface{}) error { 63 client := meta.(*ArmClient) 64 rivieraClient := client.rivieraClient 65 66 tags := d.Get("tags").(map[string]interface{}) 67 expandedTags := expandTags(tags) 68 69 command := &search.CreateOrUpdateSearchService{ 70 Name: d.Get("name").(string), 71 Location: d.Get("location").(string), 72 ResourceGroupName: d.Get("resource_group_name").(string), 73 Tags: *expandedTags, 74 Sku: search.Sku{ 75 Name: d.Get("sku").(string), 76 }, 77 } 78 79 if v, ok := d.GetOk("replica_count"); ok { 80 replica_count := v.(int) 81 command.ReplicaCount = &replica_count 82 } 83 84 if v, ok := d.GetOk("partition_count"); ok { 85 partition_count := v.(int) 86 command.PartitionCount = &partition_count 87 } 88 89 createRequest := rivieraClient.NewRequest() 90 createRequest.Command = command 91 92 createResponse, err := createRequest.Execute() 93 if err != nil { 94 return fmt.Errorf("Error creating Search Service: %s", err) 95 } 96 if !createResponse.IsSuccessful() { 97 return fmt.Errorf("Error creating Search Service: %s", createResponse.Error) 98 } 99 100 getSearchServiceCommand := &search.GetSearchService{ 101 Name: d.Get("name").(string), 102 ResourceGroupName: d.Get("resource_group_name").(string), 103 } 104 105 readRequest := rivieraClient.NewRequest() 106 readRequest.Command = getSearchServiceCommand 107 108 readResponse, err := readRequest.Execute() 109 if err != nil { 110 return fmt.Errorf("Error reading Search Service: %s", err) 111 } 112 if !readResponse.IsSuccessful() { 113 return fmt.Errorf("Error reading Search Service: %s", readResponse.Error) 114 } 115 resp := readResponse.Parsed.(*search.GetSearchServiceResponse) 116 117 log.Printf("[DEBUG] Waiting for Search Service (%s) to become available", d.Get("name")) 118 stateConf := &resource.StateChangeConf{ 119 Pending: []string{"provisioning"}, 120 Target: []string{"succeeded"}, 121 Refresh: azureStateRefreshFunc(*resp.ID, client, getSearchServiceCommand), 122 Timeout: 30 * time.Minute, 123 MinTimeout: 15 * time.Second, 124 } 125 if _, err := stateConf.WaitForState(); err != nil { 126 return fmt.Errorf("Error waiting for Search Service (%s) to become available: %s", d.Get("name"), err) 127 } 128 129 d.SetId(*resp.ID) 130 131 return resourceArmSearchServiceRead(d, meta) 132 } 133 134 func resourceArmSearchServiceRead(d *schema.ResourceData, meta interface{}) error { 135 client := meta.(*ArmClient) 136 rivieraClient := client.rivieraClient 137 138 readRequest := rivieraClient.NewRequestForURI(d.Id()) 139 readRequest.Command = &search.GetSearchService{} 140 141 readResponse, err := readRequest.Execute() 142 if err != nil { 143 return fmt.Errorf("Error reading Search Service: %s", err) 144 } 145 if !readResponse.IsSuccessful() { 146 log.Printf("[INFO] Error reading Search Service %q - removing from state", d.Id()) 147 d.SetId("") 148 return fmt.Errorf("Error reading Search Service: %s", readResponse.Error) 149 } 150 151 resp := readResponse.Parsed.(*search.GetSearchServiceResponse) 152 d.Set("sku", resp.Sku) 153 if resp.PartitionCount != nil { 154 d.Set("partition_count", resp.PartitionCount) 155 } 156 if resp.ReplicaCount != nil { 157 d.Set("replica_count", resp.ReplicaCount) 158 } 159 return nil 160 } 161 162 func resourceArmSearchServiceDelete(d *schema.ResourceData, meta interface{}) error { 163 client := meta.(*ArmClient) 164 rivieraClient := client.rivieraClient 165 166 deleteRequest := rivieraClient.NewRequestForURI(d.Id()) 167 deleteRequest.Command = &search.DeleteSearchService{} 168 169 deleteResponse, err := deleteRequest.Execute() 170 if err != nil { 171 return fmt.Errorf("Error deleting Search Service: %s", err) 172 } 173 if !deleteResponse.IsSuccessful() { 174 return fmt.Errorf("Error deleting Search Service: %s", deleteResponse.Error) 175 } 176 177 return nil 178 }