github.com/danp/terraform@v0.9.5-0.20170426144147-39d740081351/builtin/providers/azure/resource_azure_affinity_group.go (about) 1 package azure 2 3 import ( 4 "fmt" 5 "log" 6 7 "github.com/Azure/azure-sdk-for-go/management" 8 "github.com/Azure/azure-sdk-for-go/management/affinitygroup" 9 "github.com/hashicorp/terraform/helper/schema" 10 ) 11 12 // resourceAzureAffinityGroup returns the *schema.Resource associated to a 13 // resource affinity group on Azure. 14 func resourceAzureAffinityGroup() *schema.Resource { 15 return &schema.Resource{ 16 Create: resourceAzureAffinityGroupCreate, 17 Read: resourceAzureAffinityGroupRead, 18 Update: resourceAzureAffinityGroupUpdate, 19 Exists: resourceAzureAffinityGroupExists, 20 Delete: resourceAzureAffinityGroupDelete, 21 22 Schema: map[string]*schema.Schema{ 23 "name": &schema.Schema{ 24 Type: schema.TypeString, 25 Required: true, 26 ForceNew: true, 27 }, 28 "location": &schema.Schema{ 29 Type: schema.TypeString, 30 Required: true, 31 ForceNew: true, 32 }, 33 "label": &schema.Schema{ 34 Type: schema.TypeString, 35 Required: true, 36 }, 37 "description": &schema.Schema{ 38 Type: schema.TypeString, 39 Optional: true, 40 }, 41 }, 42 } 43 } 44 45 // resourceAzureAffinityGroupCreate does all the necessary API calls to 46 // create an affinity group on Azure. 47 func resourceAzureAffinityGroupCreate(d *schema.ResourceData, meta interface{}) error { 48 affinityGroupClient := meta.(*Client).affinityGroupClient 49 50 log.Println("[INFO] Begun creating Azure Affinity Group creation request.") 51 name := d.Get("name").(string) 52 params := affinitygroup.CreateAffinityGroupParams{ 53 Name: name, 54 Label: d.Get("label").(string), 55 Location: d.Get("location").(string), 56 } 57 58 if desc, ok := d.GetOk("description"); ok { 59 params.Description = desc.(string) 60 } 61 62 log.Println("[INFO] Sending Affinity Group creation request to Azure.") 63 err := affinityGroupClient.CreateAffinityGroup(params) 64 if err != nil { 65 return fmt.Errorf("Error issuing Azure Affinity Group creation: %s", err) 66 } 67 68 d.SetId(name) 69 return nil 70 } 71 72 // resourceAzureAffinityGroupRead does all the necessary API calls to 73 // read the state of the affinity group off Azure. 74 func resourceAzureAffinityGroupRead(d *schema.ResourceData, meta interface{}) error { 75 affinityGroupClient := meta.(*Client).affinityGroupClient 76 77 log.Println("[INFO] Issuing Azure Affinity Group list request.") 78 affinityGroups, err := affinityGroupClient.ListAffinityGroups() 79 if err != nil { 80 return fmt.Errorf("Error obtaining Affinity Group list off Azure: %s", err) 81 } 82 83 var found bool 84 name := d.Get("name").(string) 85 for _, group := range affinityGroups.AffinityGroups { 86 if group.Name == name { 87 found = true 88 d.Set("location", group.Location) 89 d.Set("label", group.Label) 90 d.Set("description", group.Description) 91 break 92 } 93 } 94 95 if !found { 96 // it means the affinity group has been deleted in the meantime, so we 97 // must stop tracking it: 98 d.SetId("") 99 } 100 101 return nil 102 } 103 104 // resourceAzureAffinityGroupUpdate does all the necessary API calls to 105 // update the state of the affinity group on Azure. 106 func resourceAzureAffinityGroupUpdate(d *schema.ResourceData, meta interface{}) error { 107 affinityGroupClient := meta.(*Client).affinityGroupClient 108 109 name := d.Get("name").(string) 110 clabel := d.HasChange("label") 111 cdesc := d.HasChange("description") 112 if clabel || cdesc { 113 log.Println("[INFO] Beginning Affinity Group update process.") 114 params := affinitygroup.UpdateAffinityGroupParams{} 115 116 if clabel { 117 params.Label = d.Get("label").(string) 118 } 119 if cdesc { 120 params.Description = d.Get("description").(string) 121 } 122 123 log.Println("[INFO] Sending Affinity Group update request to Azure.") 124 err := affinityGroupClient.UpdateAffinityGroup(name, params) 125 if err != nil { 126 return fmt.Errorf("Error updating Azure Affinity Group parameters: %s", err) 127 } 128 } 129 130 return nil 131 } 132 133 // resourceAzureAffinityGroupExists does all the necessary API calls to 134 // check for the existence of the affinity group on Azure. 135 func resourceAzureAffinityGroupExists(d *schema.ResourceData, meta interface{}) (bool, error) { 136 affinityGroupClient := meta.(*Client).affinityGroupClient 137 138 log.Println("[INFO] Issuing Azure Affinity Group get request.") 139 name := d.Get("name").(string) 140 _, err := affinityGroupClient.GetAffinityGroup(name) 141 if err != nil { 142 if management.IsResourceNotFoundError(err) { 143 // it means that the affinity group has been deleted in the 144 // meantime, so we must untrack it from the schema: 145 d.SetId("") 146 return false, nil 147 } else { 148 return false, fmt.Errorf("Error getting Affinity Group off Azure: %s", err) 149 } 150 } 151 152 return true, nil 153 } 154 155 // resourceAzureAffinityGroupDelete does all the necessary API calls to 156 // delete the affinity group off Azure. 157 func resourceAzureAffinityGroupDelete(d *schema.ResourceData, meta interface{}) error { 158 affinityGroupClient := meta.(*Client).affinityGroupClient 159 160 log.Println("[INFO] Sending Affinity Group deletion request to Azure.") 161 name := d.Get("name").(string) 162 err := affinityGroupClient.DeleteAffinityGroup(name) 163 if err != nil { 164 return fmt.Errorf("Error deleting Azure Affinity Group: %s", err) 165 } 166 167 return nil 168 }