commit - da19a2fd0fbbf44bc5495e68c7f24103d025b3b6
commit + 02a1a10065dd3be4f89f30756adc670b1a8ab468
blob - 0acd1fe2636f1eb7ea85326e2fdf0fabab991ccb
blob + ef0c13cb27a60a4050375907a86d2a293651657c
--- crud.go
+++ crud.go
return nil
}
-// DeleteHost deletes the Host identified by name.
-// If no Host is found, error wraps ErrNotExist.
-func (c *Client) DeleteHost(name string) error {
- if err := c.deleteObject("/objects/hosts/" + name); err != nil {
+// DeleteHost deletes the Host identified by name. If cascade is true, objects
+// depending on the Host are also deleted. If no Host is found, error wraps
+// ErrNotExist.
+func (c *Client) DeleteHost(name string, cascade bool) error {
+ if err := c.deleteObject("/objects/hosts/"+name, cascade); err != nil {
return fmt.Errorf("delete host %s: %w", name, err)
}
return nil
return nil
}
-// DeleteService deletes the Service identified by name.
-// If no Service is found, error wraps ErrNotExist.
-func (c *Client) DeleteService(name string) error {
- if err := c.deleteObject("/objects/services/" + name); err != nil {
+// DeleteService deletes the Service identified by name. If cascade is true, objects
+// depending on the Service are also deleted. If no Service is found, error wraps
+// ErrNotExist.
+func (c *Client) DeleteService(name string, cascade bool) error {
+ if err := c.deleteObject("/objects/services/"+name, cascade); err != nil {
return fmt.Errorf("delete service %s: %w", name, err)
}
return nil
return nil
}
-// DeleteUser deletes the User identified by name.
-// If no User is found, error wraps ErrNotExist.
-func (c *Client) DeleteUser(name string) error {
- if err := c.deleteObject("/objects/users/" + name); err != nil {
+// DeleteUser deletes the User identified by name. If cascade is true, objects
+// depending on the User are also deleted. If no User is found, error wraps
+// ErrNotExist.
+func (c *Client) DeleteUser(name string, cascade bool) error {
+ if err := c.deleteObject("/objects/users/"+name, cascade); err != nil {
return fmt.Errorf("delete user %s: %w", name, err)
}
return nil
return nil
}
-// DeleteHostGroup deletes the HostGroup identified by name.
-// If no HostGroup is found, error wraps ErrNotExist.
-func (c *Client) DeleteHostGroup(name string) error {
- if err := c.deleteObject("/objects/hostgroups/" + name); err != nil {
+// DeleteHostGroup deletes the HostGroup identified by name. If cascade is true, objects
+// depending on the HostGroup are also deleted. If no HostGroup is found, error wraps
+// ErrNotExist.
+func (c *Client) DeleteHostGroup(name string, cascade bool) error {
+ if err := c.deleteObject("/objects/hostgroups/"+name, cascade); err != nil {
return fmt.Errorf("delete hostgroup %s: %w", name, err)
}
return nil
blob - 422a47b223a6e1bcd865ee64d48cc324a1e12465
blob + ae632700bfed2ae9da2abec5f19be31065e895b8
--- crud.skel
+++ crud.skel
return nil
}
-// DeleteTYPE deletes the TYPE identified by name.
-// If no TYPE is found, error wraps ErrNotExist.
-func (c *Client) DeleteTYPE(name string) error {
- if err := c.deleteObject("/objects/PLURAL/" + name); err != nil {
+// DeleteTYPE deletes the TYPE identified by name. If cascade is true, objects
+// depending on the TYPE are also deleted. If no TYPE is found, error wraps
+// ErrNotExist.
+func (c *Client) DeleteTYPE(name string, cascade bool) error {
+ if err := c.deleteObject("/objects/PLURAL/" + name, cascade); err != nil {
return fmt.Errorf("delete LOWER %s: %w", name, err)
}
return nil
}
-
blob - 9c097b2fca4ad21d3d698825365fcc4e4799791f
blob + 7c35d24aaef3e10d308c0e2cd9547e15b25d392c
--- http.go
+++ http.go
return c.Do(req)
}
-func (c *Client) delete(path string) (*http.Response, error) {
- url := "https://" + c.addr + versionPrefix + path
- req, err := NewRequest(http.MethodDelete, url, c.username, c.password, nil)
+func (c *Client) delete(path string, cascade bool) (*http.Response, error) {
+ u, err := url.Parse("https://" + c.addr + versionPrefix + path)
if err != nil {
return nil, err
}
+ if cascade {
+ v := url.Values{}
+ v.Set("cascade", "1")
+ u.RawQuery = v.Encode()
+ }
+ req, err := NewRequest(http.MethodDelete, u.String(), c.username, c.password, nil)
+ if err != nil {
+ return nil, err
+ }
return c.Do(req)
}
blob - d6de04aa780b601ace52aa53f0fdb4d82850dcdd
blob + 61b38ff5a9a35520693db11b03b0607ab7b557e5
--- icinga_test.go
+++ icinga_test.go
if err != nil {
t.Error(err)
}
- defer client.DeleteHostGroup(hostgroup.Name)
+ defer client.DeleteHostGroup(hostgroup.Name, false)
var want, got []string
for i := 0; i < 5; i++ {
}
defer func() {
for _, name := range want {
- if err := client.DeleteHost(name); err != nil {
+ if err := client.DeleteHost(name, false); err != nil {
t.Log(err)
}
}
t.Fatal(err)
}
defer func() {
- if err := client.DeleteUser(want.Name); err != nil {
+ if err := client.DeleteUser(want.Name, false); err != nil {
t.Error(err)
}
}()
}
t.Logf("%+v\n", s)
}
+
+func TestCreateService(t *testing.T) {
+ client, err := newTestClient()
+ if err != nil {
+ t.Skipf("no local test icinga? got: %v", err)
+ }
+
+ h := icinga.Host{
+ Name: "example.com",
+ Address: "example.com",
+ CheckCommand: "dummy",
+ DisplayName: "RFC 2606 example host",
+ }
+ if err := client.CreateHost(h); err != nil {
+ t.Error(err)
+ }
+ defer client.DeleteHost(h.Name, true)
+ s := icinga.Service{
+ Name: h.Name + "!http",
+ CheckCommand: "http",
+ DisplayName: "RFC 2606 example website",
+ }
+ if err := client.CreateService(s); err != nil {
+ t.Error(err)
+ }
+}
blob - 4dbab0014688cbda7091bfcd4ddcb5868f987c39
blob + fef3e9de2d177ab3cfb246a54ca271d1a65bf22f
--- object.go
+++ object.go
return iresp.Error
}
-func (c *Client) deleteObject(objpath string) error {
- resp, err := c.delete(objpath)
+func (c *Client) deleteObject(objpath string, cascade bool) error {
+ resp, err := c.delete(objpath, cascade)
if err != nil {
return err
}