kubectl delete resource : remove all resources

This commit is contained in:
Salvatore Dario Minonne
2015-02-12 15:59:58 +01:00
parent c2140228fc
commit fda17c1b7a
7 changed files with 55 additions and 49 deletions

View File

@@ -42,7 +42,8 @@ type Builder struct {
stream bool
dir bool
selector labels.Selector
selector labels.Selector
selectAll bool
resources []string
@@ -171,6 +172,10 @@ func (b *Builder) SelectorParam(s string) *Builder {
if selector.Empty() {
return b
}
if b.selectAll {
b.errs = append(b.errs, fmt.Errorf("found non empty selector %q with previously set 'all' parameter. ", s))
return b
}
return b.Selector(selector)
}
@@ -202,19 +207,29 @@ func (b *Builder) RequireNamespace() *Builder {
return b
}
// SelectEverythingParam
func (b *Builder) SelectAllParam(selectAll bool) *Builder {
if selectAll && b.selector != nil {
b.errs = append(b.errs, fmt.Errorf("setting 'all' parameter but found a non empty selector. "))
return b
}
b.selectAll = selectAll
return b
}
// ResourceTypeOrNameArgs indicates that the builder should accept one or two arguments
// of the form `(<type1>[,<type2>,...]|<type> <name>)`. When one argument is received, the types
// provided will be retrieved from the server (and be comma delimited). When two arguments are
// received, they must be a single type and name. If more than two arguments are provided an
// error is set.
func (b *Builder) ResourceTypeOrNameArgs(args ...string) *Builder {
// error is set. The allowEmptySelector permits to select all the resources (via Everything func).
func (b *Builder) ResourceTypeOrNameArgs(allowEmptySelector bool, args ...string) *Builder {
switch len(args) {
case 2:
b.name = args[1]
b.ResourceTypes(SplitResourceArgument(args[0])...)
case 1:
b.ResourceTypes(SplitResourceArgument(args[0])...)
if b.selector == nil {
if b.selector == nil && allowEmptySelector {
b.selector = labels.Everything()
}
case 0:
@@ -291,6 +306,10 @@ func (b *Builder) visitorResult() *Result {
return &Result{err: errors.NewAggregate(b.errs)}
}
if b.selectAll {
b.selector = labels.Everything()
}
// visit selectors
if b.selector != nil {
if len(b.name) != 0 {

View File

@@ -315,7 +315,7 @@ func TestResourceByName(t *testing.T) {
t.Errorf("unexpected non-error")
}
b.ResourceTypeOrNameArgs("pods", "foo")
b.ResourceTypeOrNameArgs(true, "pods", "foo")
err := b.Do().IntoSingular(&singular).Visit(test.Handle)
if err != nil || !singular || len(test.Infos) != 1 {
@@ -341,7 +341,7 @@ func TestResourceByNameAndEmptySelector(t *testing.T) {
})).
NamespaceParam("test").
SelectorParam("").
ResourceTypeOrNameArgs("pods", "foo")
ResourceTypeOrNameArgs(true, "pods", "foo")
singular := false
infos, err := b.Do().IntoSingular(&singular).Infos()
@@ -378,7 +378,7 @@ func TestSelector(t *testing.T) {
t.Errorf("unexpected non-error")
}
b.ResourceTypeOrNameArgs("pods,service")
b.ResourceTypeOrNameArgs(true, "pods,service")
err := b.Do().IntoSingular(&singular).Visit(test.Handle)
if err != nil || singular || len(test.Infos) != 3 {
@@ -408,7 +408,7 @@ func TestSingleResourceType(t *testing.T) {
b := NewBuilder(latest.RESTMapper, api.Scheme, fakeClient()).
SelectorParam("a=b").
SingleResourceType().
ResourceTypeOrNameArgs("pods,services")
ResourceTypeOrNameArgs(true, "pods,services")
if b.Do().Err() == nil {
t.Errorf("unexpected non-error")
@@ -498,7 +498,7 @@ func TestListObject(t *testing.T) {
})).
SelectorParam("a=b").
NamespaceParam("test").
ResourceTypeOrNameArgs("pods").
ResourceTypeOrNameArgs(true, "pods").
Flatten()
obj, err := b.Do().Object()
@@ -531,7 +531,7 @@ func TestListObjectWithDifferentVersions(t *testing.T) {
})).
SelectorParam("a=b").
NamespaceParam("test").
ResourceTypeOrNameArgs("pods,services").
ResourceTypeOrNameArgs(true, "pods,services").
Flatten().
Do().Object()