-
Notifications
You must be signed in to change notification settings - Fork 6
/
object_clear.go
46 lines (42 loc) · 1.13 KB
/
object_clear.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package omcmd
import (
"context"
"errors"
"fmt"
"net/http"
"github.com/opensvc/om3/core/client"
"github.com/opensvc/om3/core/objectselector"
)
type (
CmdObjectClear struct {
OptsGlobal
}
)
func (t *CmdObjectClear) Run(selector, kind string) error {
c, err := client.New(client.WithURL(t.Server))
if err != nil {
return err
}
mergedSelector := mergeSelector(selector, t.ObjectSelector, kind, "")
sel := objectselector.New(mergedSelector, objectselector.WithClient(c))
paths, err := sel.Expand()
if err != nil {
return err
}
var errs error
for _, p := range paths {
nodes, err := nodesFromPaths(c, p.String())
if err != nil {
errors.Join(errs, fmt.Errorf("%s: %w", p, err))
continue
}
for _, node := range nodes {
if resp, err := c.PostInstanceClear(context.Background(), node, p.Namespace, p.Kind, p.Name); err != nil {
errs = errors.Join(errs, fmt.Errorf("unexpected post object clear %s@%s error %s", p, node, err))
} else if resp.StatusCode != http.StatusOK {
errs = errors.Join(errs, fmt.Errorf("unexpected post object clear %s@%s status code %s", p, node, resp.Status))
}
}
}
return errs
}