Browse code

important: resource enablement

deads2k authored on 2016/04/13 00:28:00
Showing 12 changed files
... ...
@@ -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()