You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
boundary/internal/cmd/commands/hostcatalogscmd/plugin_funcs.go

96 lines
2.5 KiB

// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: BUSL-1.1
package hostcatalogscmd
import (
"fmt"
"github.com/hashicorp/boundary/api/hostcatalogs"
"github.com/hashicorp/boundary/internal/cmd/base"
"github.com/hashicorp/go-bexpr"
)
func init() {
extraPluginFlagsFunc = extraPluginFlagsFuncImpl
extraPluginActionsFlagsMapFunc = extraPluginActionsFlagsMapFuncImpl
extraPluginFlagsHandlingFunc = extraPluginFlagHandlingFuncImpl
}
const (
workerFilterFlagName = "worker-filter"
)
type extraPluginCmdVars struct {
flagWorkerFilter string
}
func extraPluginActionsFlagsMapFuncImpl() map[string][]string {
flags := map[string][]string{
"create": {
workerFilterFlagName,
},
}
flags["update"] = flags["create"]
return flags
}
func extraPluginFlagsFuncImpl(c *PluginCommand, set *base.FlagSets, _ *base.FlagSet) {
f := set.NewFlagSet("Plugin Host Catalog Options")
for _, name := range flagsPluginMap[c.Func] {
switch name {
case workerFilterFlagName:
f.StringVar(&base.StringVar{
Name: workerFilterFlagName,
Target: &c.flagWorkerFilter,
Usage: `A boolean expression to filter which workers can handle dynamic host catalog commands for this host catalog.`,
})
}
}
}
func extraPluginFlagHandlingFuncImpl(c *PluginCommand, f *base.FlagSets, opts *[]hostcatalogs.Option) bool {
switch c.flagWorkerFilter {
case "":
case "null":
*opts = append(*opts, hostcatalogs.DefaultWorkerFilter())
default:
if _, err := bexpr.CreateEvaluator(c.flagWorkerFilter); err != nil {
c.UI.Error(fmt.Sprintf("Unable to successfully parse filter expression: %s", err))
return false
}
*opts = append(*opts, hostcatalogs.WithWorkerFilter(c.flagWorkerFilter))
}
return true
}
func (c *PluginCommand) extraPluginHelpFunc(helpMap map[string]func() string) string {
var helpStr string
switch c.Func {
case "create":
helpStr = base.WrapForHelpText([]string{
"Usage: boundary host-catalogs create plugin [options] [args]",
"",
" Create a plugin-type host catalog. Example:",
"",
` $ boundary host-catalogs create plugin -scope-id p_1234567890 -name prodops -description "Plugin host-catalog for ProdOps"`,
"",
"",
})
case "update":
helpStr = base.WrapForHelpText([]string{
"Usage: boundary host-catalogs update plugin [options] [args]",
"",
" Update a plugin-type host catalog given its ID. Example:",
"",
` $ boundary host-catalogs update plugin -id hc_1234567890 -name "devops" -description "Plugin host-catalog for DevOps"`,
"",
"",
})
}
return helpStr + c.Flags().Help()
}