This repository has been archived by the owner on Jun 18, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
/
namespace.go
107 lines (84 loc) · 2.57 KB
/
namespace.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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
package client
import (
"errors"
"os"
"github.com/alecthomas/kong"
"github.com/postfinance/discovery"
"github.com/postfinance/discovery/internal/server/convert"
discoveryv1 "github.com/postfinance/discovery/pkg/discoverypb/postfinance/discovery/v1"
"github.com/zbindenren/sfmt"
"go.uber.org/zap"
)
type namespaceCmd struct {
List namespaceList `cmd:"" help:"List registered namespaces."`
Register namespaceRegister `cmd:"" help:"Register a namespace."`
UnRegister namespaceUnRegister `cmd:"" name:"unregister" help:"Unregister a namespace."`
}
type namespaceList struct {
Output string `short:"o" default:"table" help:"Output formats. Valid formats: json, yaml, csv, table."`
Headers bool `short:"H" help:"Show headers."`
}
//nolint:dupl // it does not the same as serverList command
func (n namespaceList) Run(g *Globals, l *zap.SugaredLogger, c *kong.Context) error {
cli, err := g.namespaceClient()
if err != nil {
return err
}
ctx, cancel := g.ctx()
defer cancel()
r, err := cli.ListNamespace(ctx, &discoveryv1.ListNamespaceRequest{})
if err != nil {
return err
}
namespaces := convert.NamespacesFromPB(r.GetNamespaces())
sw := sfmt.SliceWriter{
Writer: os.Stdout,
NoHeaders: !n.Headers,
}
f := sfmt.ParseFormat(n.Output)
sw.Write(f, namespaces)
return nil
}
type namespaceRegister struct {
Name string `arg:"true" help:"Namespace name name." required:"true"`
ExportConfig string `short:"e" help:"Configures how services get exported. Possible values: blackbox,standard and disabled." enum:"blackbox,standard,disabled" default:"standard"`
}
func (n namespaceRegister) Run(g *Globals, l *zap.SugaredLogger, c *kong.Context) error {
cli, err := g.namespaceClient()
if err != nil {
return err
}
ctx, cancel := g.ctx()
defer cancel()
var e discovery.ExportConfig
switch n.ExportConfig {
case "standard":
e = discovery.Standard
case "blackbox":
e = discovery.Blackbox
case "disabled":
e = discovery.Disabled
default:
return errors.New("unsupported export configuration")
}
_, err = cli.RegisterNamespace(ctx, &discoveryv1.RegisterNamespaceRequest{
Name: n.Name,
Export: int32(e),
})
return err
}
type namespaceUnRegister struct {
Name string `arg:"true" help:"Server name." required:"true"`
}
func (n namespaceUnRegister) Run(g *Globals, l *zap.SugaredLogger, c *kong.Context) error {
cli, err := g.namespaceClient()
if err != nil {
return err
}
ctx, cancel := g.ctx()
defer cancel()
_, err = cli.UnregisterNamespace(ctx, &discoveryv1.UnregisterNamespaceRequest{
Name: n.Name,
})
return err
}