in pkg/cmd/bind.go [113:177]
func (o *bindCmdOptions) validate(cmd *cobra.Command, args []string) error {
if len(args) > 2 {
return errors.New("too many arguments: expected source and sink")
} else if len(args) < 2 {
return errors.New("source or sink arguments are missing")
}
if o.OperatorID == "" {
return fmt.Errorf("cannot use empty operator id")
}
for _, annotation := range o.Annotations {
parts := strings.SplitN(annotation, "=", 2)
if len(parts) != 2 {
return fmt.Errorf(`invalid annotation specification %s. Expected "<annotationkey>=<annotationvalue>"`, annotation)
}
}
for _, p := range o.Properties {
if _, _, _, err := o.parseProperty(p); err != nil {
return err
}
}
if !o.SkipChecks {
source, err := o.decode(args[0], sourceKey)
if err != nil {
return err
}
if err := o.checkCompliance(cmd, source); err != nil {
return err
}
sink, err := o.decode(args[1], sinkKey)
if err != nil {
return err
}
if err := o.checkCompliance(cmd, sink); err != nil {
return err
}
for idx, stepDesc := range o.Steps {
stepKey := fmt.Sprintf("%s%d", stepKeyPrefix, idx)
step, err := o.decode(stepDesc, stepKey)
if err != nil {
return err
}
if err := o.checkCompliance(cmd, step); err != nil {
return err
}
}
}
var client cclient.Client
var err error
if !isOfflineCommand(cmd) {
client, err = o.GetCmdClient()
if err != nil {
return err
}
}
catalog := trait.NewCatalog(client)
return trait.ValidateTraits(catalog, extractTraitNames(o.Traits))
}