// ResourceFromArgs expects two arguments with a given type, and extracts the fields necessary // to uniquely locate a resource. Displays a usageError if that contract is not satisfied, or // a generic error if any other problems occur. func ResourceOrTypeFromArgs(cmd *cobra.Command, args []string, mapper meta.RESTMapper) (mapping *meta.RESTMapping, namespace, name string) { if len(args) == 0 || len(args) > 2 { usageError(cmd, "Must provide resource or a resource and name as command line params") } resource := kubectl.ExpandResourceShortcut(args[0]) if len(resource) == 0 { usageError(cmd, "Must provide resource or a resource and name as command line params") } namespace = getKubeNamespace(cmd) if len(args) == 2 { name = args[1] if len(name) == 0 { usageError(cmd, "Must provide resource or a resource and name as command line params") } } version, kind, err := mapper.VersionAndKindForResource(resource) checkErr(err) mapping, err = mapper.RESTMapping(version, kind) checkErr(err) return }
// ResourceFromArgsOrFile expects two arguments or a valid file with a given type, and extracts // the fields necessary to uniquely locate a resource. Displays a usageError if that contract is // not satisfied, or a generic error if any other problems occur. func ResourceFromArgsOrFile(cmd *cobra.Command, args []string, filename string, typer runtime.ObjectTyper, mapper meta.RESTMapper) (mapping *meta.RESTMapping, namespace, name string) { // If command line args are passed in, use those preferentially. if len(args) > 0 && len(args) != 2 { usageError(cmd, "If passing in command line parameters, must be resource and name") } if len(args) == 2 { resource := kubectl.ExpandResourceShortcut(args[0]) namespace = getKubeNamespace(cmd) name = args[1] if len(name) == 0 || len(resource) == 0 { usageError(cmd, "Must specify filename or command line params") } version, kind, err := mapper.VersionAndKindForResource(resource) checkErr(err) mapping, err = mapper.RESTMapping(version, kind) checkErr(err) return } if len(filename) == 0 { usageError(cmd, "Must specify filename or command line params") } mapping, namespace, name, _ = ResourceFromFile(filename, typer, mapper) if len(name) == 0 { checkErr(fmt.Errorf("The resource in the provided file has no name (or ID) defined")) } return }