Skip to content

Commit 73c3201

Browse files
committed
Make admission plugin config a pointer
1 parent 516aea9 commit 73c3201

28 files changed

+104
-70
lines changed

pkg/build/admission/config.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import (
1111
)
1212

1313
// ReadPluginConfig will read a plugin configuration object from a reader stream
14-
func ReadPluginConfig(pluginConfig map[string]configapi.AdmissionPluginConfig, name string, config runtime.Object) error {
14+
func ReadPluginConfig(pluginConfig map[string]*configapi.AdmissionPluginConfig, name string, config runtime.Object) error {
1515

1616
configFilePath, err := pluginconfig.GetPluginConfigFile(pluginConfig, name, "")
1717
if err != nil || len(configFilePath) == 0 {

pkg/build/admission/config_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ func TestReadPluginConfig(t *testing.T) {
2323
Item1: "hello",
2424
Item2: []string{"foo", "bar"},
2525
}
26-
pluginCfg := map[string]configapi.AdmissionPluginConfig{"testconfig": {Location: "", Configuration: expected}}
26+
pluginCfg := map[string]*configapi.AdmissionPluginConfig{"testconfig": {Location: "", Configuration: expected}}
2727
// The config should match the expected config object
2828
err := ReadPluginConfig(pluginCfg, "testconfig", config)
2929
if err != nil {
@@ -34,15 +34,15 @@ func TestReadPluginConfig(t *testing.T) {
3434
}
3535

3636
// Passing a nil cfg, should not get an error
37-
pluginCfg = map[string]configapi.AdmissionPluginConfig{}
37+
pluginCfg = map[string]*configapi.AdmissionPluginConfig{}
3838
err = ReadPluginConfig(pluginCfg, "testconfig", &testtypes.TestConfig{})
3939
if err != nil {
4040
t.Fatalf("unexpected: %v", err)
4141
}
4242

4343
// Passing the wrong type of destination object should result in an error
4444
config2 := &testtypes.OtherTestConfig2{}
45-
pluginCfg = map[string]configapi.AdmissionPluginConfig{"testconfig": {Location: "", Configuration: expected}}
45+
pluginCfg = map[string]*configapi.AdmissionPluginConfig{"testconfig": {Location: "", Configuration: expected}}
4646
err = ReadPluginConfig(pluginCfg, "testconfig", config2)
4747
if err == nil {
4848
t.Fatalf("expected error")

pkg/build/controller/build/defaults/defaults.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ type BuildDefaults struct {
1919
}
2020

2121
// NewBuildDefaults creates a new BuildDefaults that will apply the defaults specified in the plugin config
22-
func NewBuildDefaults(pluginConfig map[string]configapi.AdmissionPluginConfig) (BuildDefaults, error) {
22+
func NewBuildDefaults(pluginConfig map[string]*configapi.AdmissionPluginConfig) (BuildDefaults, error) {
2323
config := &defaultsapi.BuildDefaultsConfig{}
2424
err := buildadmission.ReadPluginConfig(pluginConfig, defaultsapi.BuildDefaultsPlugin, config)
2525
if err != nil {

pkg/build/controller/build/overrides/overrides.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ type BuildOverrides struct {
2121
}
2222

2323
// NewBuildOverrides creates a new BuildOverrides that will apply the overrides specified in the plugin config
24-
func NewBuildOverrides(pluginConfig map[string]configapi.AdmissionPluginConfig) (BuildOverrides, error) {
24+
func NewBuildOverrides(pluginConfig map[string]*configapi.AdmissionPluginConfig) (BuildOverrides, error) {
2525
config := &overridesapi.BuildOverridesConfig{}
2626
err := buildadmission.ReadPluginConfig(pluginConfig, overridesapi.BuildOverridesPlugin, config)
2727
if err != nil {

pkg/cmd/server/api/serialization_test.go

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ func fuzzInternalObject(t *testing.T, forVersion schema.GroupVersion, item runti
169169

170170
// test an admission plugin nested for round tripping
171171
if c.RandBool() {
172-
obj.AdmissionConfig.PluginConfig = map[string]configapi.AdmissionPluginConfig{
172+
obj.AdmissionConfig.PluginConfig = map[string]*configapi.AdmissionPluginConfig{
173173
"abc": {
174174
Location: "test",
175175
Configuration: &configapi.LDAPSyncConfig{
@@ -178,9 +178,24 @@ func fuzzInternalObject(t *testing.T, forVersion schema.GroupVersion, item runti
178178
},
179179
}
180180
}
181+
182+
// ensure there are no nil plugin config objects
183+
for pluginName := range obj.AdmissionConfig.PluginConfig {
184+
if obj.AdmissionConfig.PluginConfig[pluginName] == nil {
185+
obj.AdmissionConfig.PluginConfig[pluginName] = &configapi.AdmissionPluginConfig{}
186+
}
187+
}
188+
if obj.KubernetesMasterConfig != nil {
189+
for pluginName := range obj.KubernetesMasterConfig.AdmissionConfig.PluginConfig {
190+
if obj.KubernetesMasterConfig.AdmissionConfig.PluginConfig[pluginName] == nil {
191+
obj.KubernetesMasterConfig.AdmissionConfig.PluginConfig[pluginName] = &configapi.AdmissionPluginConfig{}
192+
}
193+
}
194+
}
195+
181196
// test a Kubernetes admission plugin nested for round tripping
182197
if obj.KubernetesMasterConfig != nil && c.RandBool() {
183-
obj.KubernetesMasterConfig.AdmissionConfig.PluginConfig = map[string]configapi.AdmissionPluginConfig{
198+
obj.KubernetesMasterConfig.AdmissionConfig.PluginConfig = map[string]*configapi.AdmissionPluginConfig{
184199
"abc": {
185200
Location: "test",
186201
Configuration: &configapi.LDAPSyncConfig{
@@ -502,7 +517,7 @@ func TestSpecificRoundTrips(t *testing.T) {
502517
{
503518
in: &configapi.MasterConfig{
504519
AdmissionConfig: configapi.AdmissionConfig{
505-
PluginConfig: map[string]configapi.AdmissionPluginConfig{
520+
PluginConfig: map[string]*configapi.AdmissionPluginConfig{
506521
"test1": {Configuration: &configapi.LDAPSyncConfig{BindDN: "first"}},
507522
"test2": {Configuration: &runtime.Unknown{Raw: []byte(`{"kind":"LDAPSyncConfig","apiVersion":"v1","bindDN":"second"}`)}},
508523
"test3": {Configuration: &runtime.Unknown{Raw: []byte(`{"kind":"Unknown","apiVersion":"some/version"}`)}},
@@ -514,7 +529,7 @@ func TestSpecificRoundTrips(t *testing.T) {
514529
out: &configapiv1.MasterConfig{
515530
TypeMeta: metav1.TypeMeta{Kind: "MasterConfig", APIVersion: "v1"},
516531
AdmissionConfig: configapiv1.AdmissionConfig{
517-
PluginConfig: map[string]configapiv1.AdmissionPluginConfig{
532+
PluginConfig: map[string]*configapiv1.AdmissionPluginConfig{
518533
"test1": {Configuration: runtime.RawExtension{
519534
Object: &configapiv1.LDAPSyncConfig{BindDN: "first"},
520535
Raw: []byte(`{"kind":"LDAPSyncConfig","apiVersion":"v1","url":"","bindDN":"first","bindPassword":"","insecure":false,"ca":"","groupUIDNameMapping":null}`),

pkg/cmd/server/api/types.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1523,7 +1523,7 @@ type AdmissionPluginConfig struct {
15231523

15241524
type AdmissionConfig struct {
15251525
// PluginConfig allows specifying a configuration file per admission control plugin
1526-
PluginConfig map[string]AdmissionPluginConfig
1526+
PluginConfig map[string]*AdmissionPluginConfig
15271527

15281528
// PluginOrderOverride is a list of admission control plugin names that will be installed
15291529
// on the master. Order is significant. If empty, a default list of plugins is used.

pkg/cmd/server/api/v1/conversions.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,13 @@ func SetDefaults_MasterConfig(obj *MasterConfig) {
129129
// The final value of OAuthConfig.MasterCA should never be nil
130130
obj.OAuthConfig.MasterCA = &s
131131
}
132+
133+
// Ensure no nil plugin config stanzas
134+
for pluginName := range obj.AdmissionConfig.PluginConfig {
135+
if obj.AdmissionConfig.PluginConfig[pluginName] == nil {
136+
obj.AdmissionConfig.PluginConfig[pluginName] = &AdmissionPluginConfig{}
137+
}
138+
}
132139
}
133140

134141
func SetDefaults_KubernetesMasterConfig(obj *KubernetesMasterConfig) {
@@ -147,6 +154,12 @@ func SetDefaults_KubernetesMasterConfig(obj *KubernetesMasterConfig) {
147154
if len(obj.PodEvictionTimeout) == 0 {
148155
obj.PodEvictionTimeout = "5m"
149156
}
157+
// Ensure no nil plugin config stanzas
158+
for pluginName := range obj.AdmissionConfig.PluginConfig {
159+
if obj.AdmissionConfig.PluginConfig[pluginName] == nil {
160+
obj.AdmissionConfig.PluginConfig[pluginName] = &AdmissionPluginConfig{}
161+
}
162+
}
150163
}
151164
func SetDefaults_NodeConfig(obj *NodeConfig) {
152165
if obj.MasterClientConnectionOverrides == nil {

pkg/cmd/server/api/v1/types.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1443,7 +1443,7 @@ type AdmissionPluginConfig struct {
14431443
// AdmissionConfig holds the necessary configuration options for admission
14441444
type AdmissionConfig struct {
14451445
// PluginConfig allows specifying a configuration file per admission control plugin
1446-
PluginConfig map[string]AdmissionPluginConfig `json:"pluginConfig"`
1446+
PluginConfig map[string]*AdmissionPluginConfig `json:"pluginConfig"`
14471447

14481448
// PluginOrderOverride is a list of admission control plugin names that will be installed
14491449
// on the master. Order is significant. If empty, a default list of plugins is used.

pkg/cmd/server/api/v1/types_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ func TestMasterConfig(t *testing.T) {
193193
},
194194
KubernetesMasterConfig: &internal.KubernetesMasterConfig{
195195
AdmissionConfig: internal.AdmissionConfig{
196-
PluginConfig: map[string]internal.AdmissionPluginConfig{ // test config as an embedded object
196+
PluginConfig: map[string]*internal.AdmissionPluginConfig{ // test config as an embedded object
197197
"plugin": {
198198
Configuration: &testtypes.AdmissionPluginTestConfig{},
199199
},
@@ -229,7 +229,7 @@ func TestMasterConfig(t *testing.T) {
229229
},
230230
DNSConfig: &internal.DNSConfig{},
231231
AdmissionConfig: internal.AdmissionConfig{
232-
PluginConfig: map[string]internal.AdmissionPluginConfig{ // test config as an embedded object
232+
PluginConfig: map[string]*internal.AdmissionPluginConfig{ // test config as an embedded object
233233
"plugin": {
234234
Configuration: &testtypes.AdmissionPluginTestConfig{},
235235
},

pkg/cmd/server/api/v1/zz_generated.deepcopy.go

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,14 @@ func (in *AdmissionConfig) DeepCopyInto(out *AdmissionConfig) {
4242
*out = *in
4343
if in.PluginConfig != nil {
4444
in, out := &in.PluginConfig, &out.PluginConfig
45-
*out = make(map[string]AdmissionPluginConfig, len(*in))
45+
*out = make(map[string]*AdmissionPluginConfig, len(*in))
4646
for key, val := range *in {
47-
newVal := new(AdmissionPluginConfig)
48-
val.DeepCopyInto(newVal)
49-
(*out)[key] = *newVal
47+
if val == nil {
48+
(*out)[key] = nil
49+
} else {
50+
(*out)[key] = new(AdmissionPluginConfig)
51+
val.DeepCopyInto((*out)[key])
52+
}
5053
}
5154
}
5255
if in.PluginOrderOverride != nil {

0 commit comments

Comments
 (0)