... | ... |
@@ -199,7 +199,7 @@ func (o *DebugOptions) Complete(cmd *cobra.Command, f *clientcmd.Factory, args [ |
199 | 199 |
ResourceTypeOrNameArgs(true, resources...). |
200 | 200 |
Flatten() |
201 | 201 |
if len(o.Filename) > 0 { |
202 |
- b.FilenameParam(explicit, o.Filename) |
|
202 |
+ b.FilenameParam(explicit, false, o.Filename) |
|
203 | 203 |
} |
204 | 204 |
|
205 | 205 |
o.AddEnv, o.RemoveEnv, err = cmdutil.ParseEnv(envArgs, nil) |
... | ... |
@@ -106,7 +106,7 @@ func RunExport(f *clientcmd.Factory, exporter Exporter, in io.Reader, out io.Wri |
106 | 106 |
mapper, typer := f.Object(false) |
107 | 107 |
b := resource.NewBuilder(mapper, typer, resource.ClientMapperFunc(f.ClientForMapping), kapi.Codecs.UniversalDecoder()). |
108 | 108 |
NamespaceParam(cmdNamespace).DefaultNamespace().AllNamespaces(allNamespaces). |
109 |
- FilenameParam(explicit, filenames...). |
|
109 |
+ FilenameParam(explicit, false, filenames...). |
|
110 | 110 |
SelectorParam(selector). |
111 | 111 |
ResourceTypeOrNameArgs(true, args...). |
112 | 112 |
Flatten() |
... | ... |
@@ -82,7 +82,7 @@ func validate(cmd *cobra.Command, f *clientcmd.Factory, args []string) error { |
82 | 82 |
r := resource.NewBuilder(mapper, typer, resource.ClientMapperFunc(f.ClientForMapping), kapi.Codecs.UniversalDecoder()). |
83 | 83 |
ContinueOnError(). |
84 | 84 |
NamespaceParam(namespace).DefaultNamespace(). |
85 |
- FilenameParam(enforceNamespace, kcmdutil.GetFlagStringSlice(cmd, "filename")...). |
|
85 |
+ FilenameParam(enforceNamespace, false, kcmdutil.GetFlagStringSlice(cmd, "filename")...). |
|
86 | 86 |
ResourceTypeOrNameArgs(false, args...). |
87 | 87 |
Flatten(). |
88 | 88 |
Do() |
... | ... |
@@ -161,7 +161,7 @@ func RunProcess(f *clientcmd.Factory, out io.Writer, cmd *cobra.Command, args [] |
161 | 161 |
} else { |
162 | 162 |
infos, err = resource.NewBuilder(mapper, typer, resource.ClientMapperFunc(f.ClientForMapping), kapi.Codecs.UniversalDecoder()). |
163 | 163 |
NamespaceParam(namespace).RequireNamespace(). |
164 |
- FilenameParam(explicit, filename). |
|
164 |
+ FilenameParam(explicit, false, filename). |
|
165 | 165 |
Do(). |
166 | 166 |
Infos() |
167 | 167 |
if err != nil { |
... | ... |
@@ -143,7 +143,7 @@ func RunEnv(f *clientcmd.Factory, in io.Reader, out io.Writer, cmd *cobra.Comman |
143 | 143 |
b := resource.NewBuilder(mapper, typer, resource.ClientMapperFunc(f.ClientForMapping), kapi.Codecs.UniversalDecoder()). |
144 | 144 |
ContinueOnError(). |
145 | 145 |
NamespaceParam(cmdNamespace).DefaultNamespace(). |
146 |
- FilenameParam(explicit, filenames...). |
|
146 |
+ FilenameParam(explicit, false, filenames...). |
|
147 | 147 |
SelectorParam(selector). |
148 | 148 |
ResourceTypeOrNameArgs(all, resources...). |
149 | 149 |
Flatten() |
... | ... |
@@ -174,7 +174,7 @@ func (o *ProbeOptions) Complete(f *clientcmd.Factory, cmd *cobra.Command, args [ |
174 | 174 |
o.Builder = resource.NewBuilder(mapper, typer, resource.ClientMapperFunc(f.ClientForMapping), kapi.Codecs.UniversalDecoder()). |
175 | 175 |
ContinueOnError(). |
176 | 176 |
NamespaceParam(cmdNamespace).DefaultNamespace(). |
177 |
- FilenameParam(explicit, o.Filenames...). |
|
177 |
+ FilenameParam(explicit, false, o.Filenames...). |
|
178 | 178 |
SelectorParam(o.Selector). |
179 | 179 |
ResourceTypeOrNameArgs(o.All, resources...). |
180 | 180 |
Flatten() |
... | ... |
@@ -185,7 +185,7 @@ func (o *TriggersOptions) Complete(f *clientcmd.Factory, cmd *cobra.Command, arg |
185 | 185 |
o.Builder = resource.NewBuilder(mapper, typer, resource.ClientMapperFunc(f.ClientForMapping), kapi.Codecs.UniversalDecoder()). |
186 | 186 |
ContinueOnError(). |
187 | 187 |
NamespaceParam(cmdNamespace).DefaultNamespace(). |
188 |
- FilenameParam(explicit, o.Filenames...). |
|
188 |
+ FilenameParam(explicit, false, o.Filenames...). |
|
189 | 189 |
SelectorParam(o.Selector). |
190 | 190 |
ResourceTypeOrNameArgs(o.All, args...). |
191 | 191 |
Flatten() |
... | ... |
@@ -360,7 +360,7 @@ func (v *VolumeOptions) RunVolume(args []string) error { |
360 | 360 |
b := resource.NewBuilder(v.Mapper, v.Typer, mapper, kapi.Codecs.UniversalDecoder()). |
361 | 361 |
ContinueOnError(). |
362 | 362 |
NamespaceParam(v.DefaultNamespace).DefaultNamespace(). |
363 |
- FilenameParam(v.ExplicitNamespace, v.Filenames...). |
|
363 |
+ FilenameParam(v.ExplicitNamespace, false, v.Filenames...). |
|
364 | 364 |
SelectorParam(v.Selector). |
365 | 365 |
ResourceTypeOrNameArgs(v.All, args...). |
366 | 366 |
Flatten() |
... | ... |
@@ -135,7 +135,7 @@ func OverwriteBootstrapPolicy(storage storage.Interface, policyFile, createBoots |
135 | 135 |
}) |
136 | 136 |
|
137 | 137 |
r := resource.NewBuilder(mapper, typer, clientMapper, kapi.Codecs.UniversalDecoder()). |
138 |
- FilenameParam(false, policyFile). |
|
138 |
+ FilenameParam(false, false, policyFile). |
|
139 | 139 |
Flatten(). |
140 | 140 |
Do() |
141 | 141 |
|
... | ... |
@@ -268,9 +268,9 @@ func BuildKubernetesMasterConfig(options configapi.MasterConfig, requestContextM |
268 | 268 |
|
269 | 269 |
RequestContextMapper: requestContextMapper, |
270 | 270 |
|
271 |
- APIGroupVersionOverrides: getAPIGroupVersionOverrides(options), |
|
272 |
- APIPrefix: server.APIPrefix, |
|
273 |
- APIGroupPrefix: server.APIGroupPrefix, |
|
271 |
+ APIResourceConfigSource: getAPIResourceConfig(options), |
|
272 |
+ APIPrefix: server.APIPrefix, |
|
273 |
+ APIGroupPrefix: server.APIGroupPrefix, |
|
274 | 274 |
|
275 | 275 |
MasterCount: server.MasterCount, |
276 | 276 |
|
... | ... |
@@ -337,21 +337,25 @@ func BuildKubernetesMasterConfig(options configapi.MasterConfig, requestContextM |
337 | 337 |
return kmaster, nil |
338 | 338 |
} |
339 | 339 |
|
340 |
-// getAPIGroupVersionOverrides builds the overrides in the format expected by master.Config.APIGroupVersionOverrides |
|
341 |
-func getAPIGroupVersionOverrides(options configapi.MasterConfig) map[string]genericapiserver.APIGroupVersionOverride { |
|
342 |
- apiGroupVersionOverrides := map[string]genericapiserver.APIGroupVersionOverride{} |
|
340 |
+// getAPIResourceConfig builds the config for enabling resources |
|
341 |
+func getAPIResourceConfig(options configapi.MasterConfig) genericapiserver.APIResourceConfigSource { |
|
342 |
+ resourceConfig := genericapiserver.NewResourceConfig() |
|
343 |
+ |
|
344 |
+ for group := range configapi.KnownKubeAPIGroups { |
|
345 |
+ for _, version := range configapi.GetEnabledAPIVersionsForGroup(*options.KubernetesMasterConfig, group) { |
|
346 |
+ gv := unversioned.GroupVersion{Group: group, Version: version} |
|
347 |
+ resourceConfig.EnableVersions(gv) |
|
348 |
+ } |
|
349 |
+ } |
|
350 |
+ |
|
343 | 351 |
for group := range options.KubernetesMasterConfig.DisabledAPIGroupVersions { |
344 | 352 |
for _, version := range configapi.GetDisabledAPIVersionsForGroup(*options.KubernetesMasterConfig, group) { |
345 | 353 |
gv := unversioned.GroupVersion{Group: group, Version: version} |
346 |
- if group == "" { |
|
347 |
- // TODO: when rebasing, check the parseRuntimeConfig impl to make sure we're still building the right magic container |
|
348 |
- // Create "disabled" key for v1 identically to k8s.io/kubernetes/cmd/kube-apiserver/app/server.go#parseRuntimeConfig |
|
349 |
- gv.Group = "api" |
|
350 |
- } |
|
351 |
- apiGroupVersionOverrides[gv.String()] = genericapiserver.APIGroupVersionOverride{Disable: true} |
|
354 |
+ resourceConfig.DisableVersions(gv) |
|
352 | 355 |
} |
353 | 356 |
} |
354 |
- return apiGroupVersionOverrides |
|
357 |
+ |
|
358 |
+ return resourceConfig |
|
355 | 359 |
} |
356 | 360 |
|
357 | 361 |
// NewEtcdStorage returns a storage interface for the provided storage version. |
... | ... |
@@ -134,36 +134,51 @@ func TestCMServerDefaults(t *testing.T) { |
134 | 134 |
|
135 | 135 |
func TestGetAPIGroupVersionOverrides(t *testing.T) { |
136 | 136 |
testcases := map[string]struct { |
137 |
- DisabledVersions map[string][]string |
|
138 |
- ExpectedOverrides map[string]genericapiserver.APIGroupVersionOverride |
|
137 |
+ DisabledVersions map[string][]string |
|
138 |
+ ExpectedDisabledVersions []unversioned.GroupVersion |
|
139 |
+ ExpectedEnabledVersions []unversioned.GroupVersion |
|
139 | 140 |
}{ |
140 | 141 |
"empty": { |
141 |
- DisabledVersions: nil, |
|
142 |
- ExpectedOverrides: map[string]genericapiserver.APIGroupVersionOverride{}, |
|
142 |
+ DisabledVersions: nil, |
|
143 |
+ ExpectedDisabledVersions: []unversioned.GroupVersion{}, |
|
144 |
+ ExpectedEnabledVersions: []unversioned.GroupVersion{apiv1.SchemeGroupVersion, extensionsapiv1beta1.SchemeGroupVersion}, |
|
143 | 145 |
}, |
144 | 146 |
"* -> v1": { |
145 |
- DisabledVersions: map[string][]string{"": {"*"}}, |
|
146 |
- ExpectedOverrides: map[string]genericapiserver.APIGroupVersionOverride{"api/v1": {Disable: true}}, |
|
147 |
+ DisabledVersions: map[string][]string{"": {"*"}}, |
|
148 |
+ ExpectedDisabledVersions: []unversioned.GroupVersion{apiv1.SchemeGroupVersion}, |
|
149 |
+ ExpectedEnabledVersions: []unversioned.GroupVersion{extensionsapiv1beta1.SchemeGroupVersion}, |
|
147 | 150 |
}, |
148 | 151 |
"v1": { |
149 |
- DisabledVersions: map[string][]string{"": {"v1"}}, |
|
150 |
- ExpectedOverrides: map[string]genericapiserver.APIGroupVersionOverride{"api/v1": {Disable: true}}, |
|
152 |
+ DisabledVersions: map[string][]string{"": {"v1"}}, |
|
153 |
+ ExpectedDisabledVersions: []unversioned.GroupVersion{apiv1.SchemeGroupVersion}, |
|
154 |
+ ExpectedEnabledVersions: []unversioned.GroupVersion{extensionsapiv1beta1.SchemeGroupVersion}, |
|
151 | 155 |
}, |
152 | 156 |
"* -> v1beta1": { |
153 |
- DisabledVersions: map[string][]string{"extensions": {"*"}}, |
|
154 |
- ExpectedOverrides: map[string]genericapiserver.APIGroupVersionOverride{"extensions/v1beta1": {Disable: true}}, |
|
157 |
+ DisabledVersions: map[string][]string{"extensions": {"*"}}, |
|
158 |
+ ExpectedDisabledVersions: []unversioned.GroupVersion{extensionsapiv1beta1.SchemeGroupVersion}, |
|
159 |
+ ExpectedEnabledVersions: []unversioned.GroupVersion{apiv1.SchemeGroupVersion}, |
|
155 | 160 |
}, |
156 | 161 |
"extensions/v1beta1": { |
157 |
- DisabledVersions: map[string][]string{"extensions": {"v1beta1"}}, |
|
158 |
- ExpectedOverrides: map[string]genericapiserver.APIGroupVersionOverride{"extensions/v1beta1": {Disable: true}}, |
|
162 |
+ DisabledVersions: map[string][]string{"extensions": {"v1beta1"}}, |
|
163 |
+ ExpectedDisabledVersions: []unversioned.GroupVersion{extensionsapiv1beta1.SchemeGroupVersion}, |
|
164 |
+ ExpectedEnabledVersions: []unversioned.GroupVersion{apiv1.SchemeGroupVersion}, |
|
159 | 165 |
}, |
160 | 166 |
} |
161 | 167 |
|
162 | 168 |
for k, tc := range testcases { |
163 | 169 |
config := configapi.MasterConfig{KubernetesMasterConfig: &configapi.KubernetesMasterConfig{DisabledAPIGroupVersions: tc.DisabledVersions}} |
164 |
- overrides := getAPIGroupVersionOverrides(config) |
|
165 |
- if !reflect.DeepEqual(overrides, tc.ExpectedOverrides) { |
|
166 |
- t.Errorf("%s: Expected\n%#v\ngot\n%#v", k, tc.ExpectedOverrides, overrides) |
|
170 |
+ overrides := getAPIResourceConfig(config) |
|
171 |
+ |
|
172 |
+ for _, expected := range tc.ExpectedDisabledVersions { |
|
173 |
+ if overrides.AnyResourcesForVersionEnabled(expected) { |
|
174 |
+ t.Errorf("%s: Expected %v", k, expected) |
|
175 |
+ } |
|
176 |
+ } |
|
177 |
+ |
|
178 |
+ for _, expected := range tc.ExpectedEnabledVersions { |
|
179 |
+ if !overrides.AllResourcesForVersionEnabled(expected) { |
|
180 |
+ t.Errorf("%s: Expected %v", k, expected) |
|
181 |
+ } |
|
167 | 182 |
} |
168 | 183 |
} |
169 | 184 |
} |
... | ... |
@@ -108,7 +108,7 @@ func (r *TemplateFileSearcher) Search(precise bool, terms ...string) (ComponentM |
108 | 108 |
var isSingular bool |
109 | 109 |
obj, err := resource.NewBuilder(r.Mapper, r.Typer, r.ClientMapper, kapi.Codecs.UniversalDecoder()). |
110 | 110 |
NamespaceParam(r.Namespace).RequireNamespace(). |
111 |
- FilenameParam(false, term). |
|
111 |
+ FilenameParam(false, false, term). |
|
112 | 112 |
Do(). |
113 | 113 |
IntoSingular(&isSingular). |
114 | 114 |
Object() |