in pkg/resource/builder.go [1029:1084]
func (b *Builder) visitByName() *Result {
result := &Result{
singleItemImplied: len(b.names) == 1,
targetsSingleItems: true,
}
if len(b.paths) != 0 {
return result.withError(fmt.Errorf("when paths, URLs, or stdin is provided as input, you may not specify a resource by arguments as well"))
}
if len(b.resources) == 0 {
return result.withError(fmt.Errorf("you must provide a resource and a resource name together"))
}
if len(b.resources) > 1 {
return result.withError(fmt.Errorf("you must specify only one resource"))
}
mappings, err := b.resourceMappings()
if err != nil {
result.err = err
return result
}
mapping := mappings[0]
client, err := b.getClient(mapping.GroupVersionKind.GroupVersion())
if err != nil {
result.err = err
return result
}
selectorNamespace := b.namespace
if mapping.Scope.Name() != meta.RESTScopeNameNamespace {
selectorNamespace = ""
} else {
if len(b.namespace) == 0 {
errMsg := "namespace may not be empty when retrieving a resource by name"
if b.allNamespace {
errMsg = "a resource cannot be retrieved by name across all namespaces"
}
return result.withError(fmt.Errorf(errMsg))
}
}
visitors := []Visitor{}
for _, name := range b.names {
info := &Info{
Client: client,
Mapping: mapping,
Namespace: selectorNamespace,
Name: name,
}
visitors = append(visitors, info)
}
result.visitor = VisitorList(visitors)
result.sources = visitors
return result
}