github.com/danp/terraform@v0.9.5-0.20170426144147-39d740081351/builtin/providers/icinga2/resource_icinga2_service.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 resourceIcinga2Service() *schema.Resource { 11 12 return &schema.Resource{ 13 Create: resourceIcinga2ServiceCreate, 14 Read: resourceIcinga2ServiceRead, 15 Delete: resourceIcinga2ServiceDelete, 16 Schema: map[string]*schema.Schema{ 17 "name": &schema.Schema{ 18 Type: schema.TypeString, 19 Required: true, 20 Description: "ServiceName", 21 ForceNew: true, 22 }, 23 "hostname": &schema.Schema{ 24 Type: schema.TypeString, 25 Required: true, 26 Description: "Hostname", 27 ForceNew: true, 28 }, 29 "check_command": &schema.Schema{ 30 Type: schema.TypeString, 31 Required: true, 32 Description: "CheckCommand", 33 ForceNew: true, 34 }, 35 }, 36 } 37 } 38 39 func resourceIcinga2ServiceCreate(d *schema.ResourceData, meta interface{}) error { 40 41 client := meta.(*iapi.Server) 42 43 hostname := d.Get("hostname").(string) 44 name := d.Get("name").(string) 45 checkcommand := d.Get("check_command").(string) 46 47 services, err := client.CreateService(name, hostname, checkcommand) 48 if err != nil { 49 return err 50 } 51 52 found := false 53 for _, service := range services { 54 if service.Name == hostname+"!"+name { 55 d.SetId(hostname + "!" + name) 56 found = true 57 } 58 } 59 60 if !found { 61 return fmt.Errorf("Failed to Create Service %s!%s : %s", hostname, name, err) 62 } 63 64 return nil 65 66 } 67 68 func resourceIcinga2ServiceRead(d *schema.ResourceData, meta interface{}) error { 69 70 client := meta.(*iapi.Server) 71 72 hostname := d.Get("hostname").(string) 73 name := d.Get("name").(string) 74 75 services, err := client.GetService(name, hostname) 76 if err != nil { 77 return err 78 } 79 80 found := false 81 for _, service := range services { 82 if service.Name == hostname+"!"+name { 83 d.SetId(hostname + "!" + name) 84 d.Set("hostname", hostname) 85 d.Set("check_command", service.Attrs.CheckCommand) 86 found = true 87 } 88 } 89 90 if !found { 91 return fmt.Errorf("Failed to Read Service %s!%s : %s", hostname, name, err) 92 } 93 94 return nil 95 96 } 97 98 func resourceIcinga2ServiceDelete(d *schema.ResourceData, meta interface{}) error { 99 100 client := meta.(*iapi.Server) 101 102 hostname := d.Get("hostname").(string) 103 name := d.Get("name").(string) 104 105 err := client.DeleteService(name, hostname) 106 if err != nil { 107 return fmt.Errorf("Failed to Delete Service %s!%s : %s", hostname, name, err) 108 } 109 110 return nil 111 }