github.com/vtorhonen/terraform@v0.9.0-beta2.0.20170307220345-5d894e4ffda7/builtin/providers/icinga2/resource_icinga2_hostgroup.go (about)

     1  package icinga2
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/hashicorp/terraform/helper/schema"
     7  	"github.com/lrsmith/go-icinga2-api/iapi"
     8  )
     9  
    10  func resourceIcinga2Hostgroup() *schema.Resource {
    11  
    12  	return &schema.Resource{
    13  		Create: resourceIcinga2HostgroupCreate,
    14  		Read:   resourceIcinga2HostgroupRead,
    15  		Delete: resourceIcinga2HostgroupDelete,
    16  		Schema: map[string]*schema.Schema{
    17  			"name": &schema.Schema{
    18  				Type:        schema.TypeString,
    19  				Required:    true,
    20  				Description: "name",
    21  				ForceNew:    true,
    22  			},
    23  			"display_name": &schema.Schema{
    24  				Type:        schema.TypeString,
    25  				Required:    true,
    26  				Description: "Display name of Host Group",
    27  				ForceNew:    true,
    28  			},
    29  		},
    30  	}
    31  }
    32  
    33  func resourceIcinga2HostgroupCreate(d *schema.ResourceData, meta interface{}) error {
    34  
    35  	client := meta.(*iapi.Server)
    36  
    37  	name := d.Get("name").(string)
    38  	displayName := d.Get("display_name").(string)
    39  
    40  	hostgroups, err := client.CreateHostgroup(name, displayName)
    41  	if err != nil {
    42  		return err
    43  	}
    44  
    45  	found := false
    46  	for _, hostgroup := range hostgroups {
    47  		if hostgroup.Name == name {
    48  			d.SetId(name)
    49  			found = true
    50  		}
    51  	}
    52  
    53  	if !found {
    54  		return fmt.Errorf("Failed to Create Hostgroup %s : %s", name, err)
    55  	}
    56  
    57  	return nil
    58  }
    59  
    60  func resourceIcinga2HostgroupRead(d *schema.ResourceData, meta interface{}) error {
    61  
    62  	client := meta.(*iapi.Server)
    63  	name := d.Get("name").(string)
    64  
    65  	hostgroups, err := client.GetHostgroup(name)
    66  	if err != nil {
    67  		return err
    68  	}
    69  
    70  	found := false
    71  	for _, hostgroup := range hostgroups {
    72  		if hostgroup.Name == name {
    73  			d.SetId(name)
    74  			d.Set("display_name", hostgroup.Attrs.DisplayName)
    75  			found = true
    76  		}
    77  	}
    78  
    79  	if !found {
    80  		return fmt.Errorf("Failed to Read Hostgroup %s : %s", name, err)
    81  	}
    82  
    83  	return nil
    84  }
    85  
    86  func resourceIcinga2HostgroupDelete(d *schema.ResourceData, meta interface{}) error {
    87  
    88  	client := meta.(*iapi.Server)
    89  	name := d.Get("name").(string)
    90  
    91  	err := client.DeleteHostgroup(name)
    92  	if err != nil {
    93  		return fmt.Errorf("Failed to Delete Hostgroup %s : %s", name, err)
    94  	}
    95  
    96  	return nil
    97  
    98  }