Add focused configuration reports
This commit is contained in:
@@ -17,6 +17,7 @@ type configCommandInput[I, S any] struct {
|
||||
historical commandkit.Supplied[bool]
|
||||
under commandkit.Supplied[string]
|
||||
explicit commandkit.Supplied[bool]
|
||||
sourceID commandkit.Supplied[string]
|
||||
values commandkit.FlagValues[I]
|
||||
againstValues commandkit.FlagValues[I]
|
||||
plan *configOperationPlan[I, S]
|
||||
@@ -38,6 +39,8 @@ type configOperationPlan[I, S any] struct {
|
||||
operation Operation
|
||||
scopeName string
|
||||
path configkit.Path
|
||||
pathSet bool
|
||||
sourceID commandkit.Supplied[string]
|
||||
list bool
|
||||
help bool
|
||||
historical bool
|
||||
@@ -106,6 +109,12 @@ func newConfigOperationCommand[I, S any](prepared *preparedSuite[I, S], operatio
|
||||
commandkit.BoolFlag(commandkit.FlagMeta{Name: "explicit", Usage: "Filter listed current paths by explicitness."}, false, func(input **configCommandInput[I, S], value commandkit.Supplied[bool]) { (*input).explicit = value }),
|
||||
)
|
||||
}
|
||||
if operation == Show {
|
||||
flags = append(flags, commandkit.ValueFlag(commandkit.FlagMeta{Name: "path", Usage: "JSON Pointer to one effective value."}, (*string)(nil), parseConfigString, func(input **configCommandInput[I, S], value commandkit.Supplied[string]) { (*input).path = value }))
|
||||
}
|
||||
if operation == Sources {
|
||||
flags = append(flags, commandkit.ValueFlag(commandkit.FlagMeta{Name: "source-id", Usage: "Select one source ID from this acquisition."}, (*string)(nil), parseConfigString, func(input **configCommandInput[I, S], value commandkit.Supplied[string]) { (*input).sourceID = value }))
|
||||
}
|
||||
flags = append(flags, commandkit.CaptureFlags(prepared.bindingsByOperation[operation], func(input **configCommandInput[I, S]) *commandkit.FlagValues[I] {
|
||||
if input == nil || *input == nil {
|
||||
return nil
|
||||
@@ -187,6 +196,9 @@ func prepareConfigOperation[I, S any](prepared *preparedSuite[I, S], operation O
|
||||
if scopeName == "all" && operation != Validate && operation != Show {
|
||||
return fmt.Errorf("scope all is supported only for validate and show")
|
||||
}
|
||||
if scopeName == "all" && operation == Show && input.path.Set {
|
||||
return fmt.Errorf("path-selected show requires one scope")
|
||||
}
|
||||
|
||||
var selected []*preparedScope[I, S]
|
||||
if scopeName == "all" {
|
||||
@@ -207,10 +219,13 @@ func prepareConfigOperation[I, S any](prepared *preparedSuite[I, S], operation O
|
||||
if operation == Explain && input.list.Value && !scope.scope.Features.PathDiscovery {
|
||||
return fmt.Errorf("configuration scope %q does not support path discovery", scope.scope.Name)
|
||||
}
|
||||
if operation == Show && input.path.Set && !scope.scope.Features.PathShow {
|
||||
return fmt.Errorf("configuration scope %q does not support path-selected show", scope.scope.Name)
|
||||
}
|
||||
}
|
||||
|
||||
var path configkit.Path
|
||||
if operation == Explain && input.path.Set {
|
||||
if (operation == Explain || operation == Show) && input.path.Set {
|
||||
parsed, err := configkit.ParsePath(input.path.Value)
|
||||
if err != nil {
|
||||
return fmt.Errorf("invalid configuration path: %w", err)
|
||||
@@ -231,6 +246,8 @@ func prepareConfigOperation[I, S any](prepared *preparedSuite[I, S], operation O
|
||||
operation: operation,
|
||||
scopeName: scopeName,
|
||||
path: path,
|
||||
pathSet: input.path.Set,
|
||||
sourceID: input.sourceID,
|
||||
list: input.list.Value,
|
||||
historical: input.historical.Value,
|
||||
under: under,
|
||||
|
||||
Reference in New Issue
Block a user