4
4
package commands
5
5
6
6
import (
7
- "reflect"
8
-
9
- "github.com/bcsaller/jsonschema"
10
7
"github.com/juju/cmd"
11
- "github.com/juju/errors"
12
8
"github.com/juju/gnuflag"
13
9
14
- "github.com/juju/juju/apiserver"
15
- "github.com/juju/juju/apiserver/facade"
16
10
jujucmd "github.com/juju/juju/cmd"
17
11
"github.com/juju/juju/cmd/modelcmd"
18
- "github.com/juju/juju/cmd/output"
19
- "github.com/juju/juju/rpc/rpcreflect"
20
12
)
21
13
14
+ //go:generate go run ../../../generate/schemagen/schemagen.go allFacadesSchema commands describeapi_schemagen.go
15
+
22
16
// newDescribeAPICommand returns a full description of the api-servers
23
17
// AllFacades information as a JSON schema.
24
18
func newDescribeAPICommon () cmd.Command {
25
- return modelcmd .Wrap (& describeAPICommand {})
26
- }
27
-
28
- //go:generate mockgen -package commands -destination describeapi_mock.go github.com/juju/juju/cmd/juju/commands APIServer,Registry
29
- type APIServer interface {
30
- AllFacades () Registry
31
- Close () error
32
- }
33
-
34
- type Registry interface {
35
- List () []facade.Description
36
- GetType (name string , version int ) (reflect.Type , error )
19
+ return & describeAPICommand {}
37
20
}
38
21
39
22
type describeAPICommand struct {
40
- modelcmd.ModelCommandBase
41
- out cmd.Output
42
- apiServer APIServer
23
+ modelcmd.CommandBase
24
+ out cmd.Output
43
25
}
44
26
45
27
const describeAPIHelpDoc = `
@@ -62,8 +44,7 @@ func (c *describeAPICommand) Info() *cmd.Info {
62
44
63
45
// SetFlags implements Command.
64
46
func (c * describeAPICommand ) SetFlags (f * gnuflag.FlagSet ) {
65
- c .ModelCommandBase .SetFlags (f )
66
- c .out .AddFlags (f , "json" , output .DefaultFormatters )
47
+ c .CommandBase .SetFlags (f )
67
48
}
68
49
69
50
// Init implements Command.
@@ -73,51 +54,6 @@ func (c *describeAPICommand) Init(args []string) error {
73
54
74
55
// Run implements Command.
75
56
func (c * describeAPICommand ) Run (ctx * cmd.Context ) error {
76
- client , err := c .getAPI ()
77
- if err != nil {
78
- return errors .Trace (err )
79
- }
80
- defer client .Close ()
81
-
82
- registry := client .AllFacades ()
83
- facades := registry .List ()
84
- result := make ([]FacadeSchema , len (facades ))
85
- for i , facade := range facades {
86
- // select the latest version from the facade list
87
- version := facade .Versions [len (facade .Versions )- 1 ]
88
-
89
- result [i ].Name = facade .Name
90
- result [i ].Version = version
91
-
92
- kind , err := registry .GetType (facade .Name , version )
93
- if err != nil {
94
- return errors .Annotatef (err , "getting type for facade %s at version %d" , facade .Name , version )
95
- }
96
- objType := rpcreflect .ObjTypeOf (kind )
97
- result [i ].Schema = jsonschema .ReflectFromObjType (objType )
98
- }
99
- return c .out .Write (ctx , result )
100
- }
101
-
102
- func (c * describeAPICommand ) getAPI () (APIServer , error ) {
103
- if c .apiServer != nil {
104
- return c .apiServer , nil
105
- }
106
- return apiServerShim {}, nil
107
- }
108
-
109
- type FacadeSchema struct {
110
- Name string
111
- Version int
112
- Schema * jsonschema.Schema
113
- }
114
-
115
- type apiServerShim struct {}
116
-
117
- func (apiServerShim ) AllFacades () Registry {
118
- return apiserver .AllFacades ()
119
- }
120
-
121
- func (apiServerShim ) Close () error {
122
- return nil
57
+ _ , err := ctx .Stdout .Write ([]byte (allFacadesSchema ))
58
+ return err
123
59
}
0 commit comments