add fieldSelector for kubectl get

This commit is contained in:
Di Xu
2017-08-04 17:56:44 +08:00
parent 057b7bf767
commit 4a3131ddaa
5 changed files with 53 additions and 21 deletions

View File

@@ -54,6 +54,7 @@ type Builder struct {
dir bool
labelSelector *string
fieldSelector *string
selectAll bool
includeUninitialized bool
limitChunks int64
@@ -296,6 +297,22 @@ func (b *Builder) LabelSelector(selector string) *Builder {
return b
}
// FieldSelectorParam defines a selector that should be applied to the object types to load.
// This will not affect files loaded from disk or URL. If the parameter is empty it is
// a no-op - to select all resources.
func (b *Builder) FieldSelectorParam(s string) *Builder {
s = strings.TrimSpace(s)
if len(s) == 0 {
return b
}
if b.selectAll {
b.errs = append(b.errs, fmt.Errorf("found non-empty field selector %q with previously set 'all' parameter. ", s))
return b
}
b.fieldSelector = &s
return b
}
// ExportParam accepts the export boolean for these resources
func (b *Builder) ExportParam(export bool) *Builder {
b.export = export
@@ -350,7 +367,7 @@ func (b *Builder) RequestChunksOf(chunkSize int64) *Builder {
// SelectEverythingParam
func (b *Builder) SelectAllParam(selectAll bool) *Builder {
if selectAll && b.labelSelector != nil {
if selectAll && (b.labelSelector != nil || b.fieldSelector != nil) {
b.errs = append(b.errs, fmt.Errorf("setting 'all' parameter but found a non empty selector. "))
return b
}
@@ -595,7 +612,7 @@ func (b *Builder) visitorResult() *Result {
}
// visit selectors
if b.labelSelector != nil {
if b.labelSelector != nil || b.fieldSelector != nil {
return b.visitBySelector()
}
@@ -635,6 +652,14 @@ func (b *Builder) visitBySelector() *Result {
return result
}
var labelSelector, fieldSelector string
if b.labelSelector != nil {
labelSelector = *b.labelSelector
}
if b.fieldSelector != nil {
fieldSelector = *b.fieldSelector
}
visitors := []Visitor{}
for _, mapping := range mappings {
client, err := b.mapper.ClientForMapping(mapping)
@@ -646,7 +671,7 @@ func (b *Builder) visitBySelector() *Result {
if mapping.Scope.Name() != meta.RESTScopeNameNamespace {
selectorNamespace = ""
}
visitors = append(visitors, NewSelector(client, mapping, selectorNamespace, *b.labelSelector, b.export, b.includeUninitialized, b.limitChunks))
visitors = append(visitors, NewSelector(client, mapping, selectorNamespace, labelSelector, fieldSelector, b.export, b.includeUninitialized, b.limitChunks))
}
if b.continueOnError {
result.visitor = EagerVisitorList(visitors)