config/source/cli: fix default flag value loading (#1178)
Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
This commit is contained in:
parent
99807a680c
commit
0bf6c9fc08
@ -21,7 +21,9 @@ type cliSource struct {
|
|||||||
func (c *cliSource) Read() (*source.ChangeSet, error) {
|
func (c *cliSource) Read() (*source.ChangeSet, error) {
|
||||||
var changes map[string]interface{}
|
var changes map[string]interface{}
|
||||||
|
|
||||||
for _, name := range c.ctx.FlagNames() {
|
// directly using app cli flags, to access default values of not specified options
|
||||||
|
for _, f := range c.ctx.App.Flags {
|
||||||
|
name := f.Names()[0]
|
||||||
tmp := toEntry(name, c.ctx.Generic(name))
|
tmp := toEntry(name, c.ctx.Generic(name))
|
||||||
mergo.Map(&changes, tmp) // need to sort error handling
|
mergo.Map(&changes, tmp) // need to sort error handling
|
||||||
}
|
}
|
||||||
@ -100,13 +102,10 @@ func NewSource(opts ...source.Option) source.Source {
|
|||||||
|
|
||||||
var ctx *cli.Context
|
var ctx *cli.Context
|
||||||
|
|
||||||
c, ok := options.Context.Value(contextKey{}).(*cli.Context)
|
if c, ok := options.Context.Value(contextKey{}).(*cli.Context); ok {
|
||||||
if ok {
|
|
||||||
ctx = c
|
ctx = c
|
||||||
}
|
} else {
|
||||||
|
// no context
|
||||||
// no context
|
|
||||||
if ctx == nil {
|
|
||||||
// get the default app/flags
|
// get the default app/flags
|
||||||
app := cmd.App()
|
app := cmd.App()
|
||||||
flags := app.Flags
|
flags := app.Flags
|
||||||
|
@ -6,10 +6,52 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/micro/cli/v2"
|
"github.com/micro/cli/v2"
|
||||||
|
"github.com/micro/go-micro/v2"
|
||||||
|
"github.com/micro/go-micro/v2/config"
|
||||||
"github.com/micro/go-micro/v2/config/cmd"
|
"github.com/micro/go-micro/v2/config/cmd"
|
||||||
"github.com/micro/go-micro/v2/config/source"
|
"github.com/micro/go-micro/v2/config/source"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func TestCliSourceDefault(t *testing.T) {
|
||||||
|
const expVal string = "flagvalue"
|
||||||
|
|
||||||
|
service := micro.NewService(
|
||||||
|
micro.Flags(
|
||||||
|
// to be able to run insude go test
|
||||||
|
&cli.StringFlag{
|
||||||
|
Name: "test.timeout",
|
||||||
|
},
|
||||||
|
&cli.BoolFlag{
|
||||||
|
Name: "test.v",
|
||||||
|
},
|
||||||
|
&cli.StringFlag{
|
||||||
|
Name: "test.run",
|
||||||
|
},
|
||||||
|
&cli.StringFlag{
|
||||||
|
Name: "flag",
|
||||||
|
Usage: "It changes something",
|
||||||
|
EnvVars: []string{"flag"},
|
||||||
|
Value: expVal,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
)
|
||||||
|
var cliSrc source.Source
|
||||||
|
service.Init(
|
||||||
|
// Loads CLI configuration
|
||||||
|
micro.Action(func(c *cli.Context) error {
|
||||||
|
cliSrc = NewSource(
|
||||||
|
Context(c),
|
||||||
|
)
|
||||||
|
return nil
|
||||||
|
}),
|
||||||
|
)
|
||||||
|
|
||||||
|
config.Load(cliSrc)
|
||||||
|
if fval := config.Get("flag").String("default"); fval != expVal {
|
||||||
|
t.Fatalf("default flag value not loaded %v != %v", fval, expVal)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func test(t *testing.T, withContext bool) {
|
func test(t *testing.T, withContext bool) {
|
||||||
var src source.Source
|
var src source.Source
|
||||||
|
|
||||||
@ -17,7 +59,11 @@ func test(t *testing.T, withContext bool) {
|
|||||||
app := cmd.App()
|
app := cmd.App()
|
||||||
app.Name = "testapp"
|
app.Name = "testapp"
|
||||||
app.Flags = []cli.Flag{
|
app.Flags = []cli.Flag{
|
||||||
&cli.StringFlag{Name: "db-host"},
|
&cli.StringFlag{
|
||||||
|
Name: "db-host",
|
||||||
|
EnvVars: []string{"db-host"},
|
||||||
|
Value: "myval",
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
// with context
|
// with context
|
||||||
|
Loading…
Reference in New Issue
Block a user