@@ -10,9 +10,11 @@ import (
10
10
11
11
"k8s.io/kubernetes/pkg/admission"
12
12
"k8s.io/kubernetes/pkg/api"
13
+ "k8s.io/kubernetes/pkg/api/errors"
13
14
clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
14
15
coreclient "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/internalversion"
15
16
"k8s.io/kubernetes/pkg/client/restclient"
17
+ "k8s.io/kubernetes/pkg/util/validation/field"
16
18
17
19
authclient "github.com/openshift/origin/pkg/auth/client"
18
20
buildapi "github.com/openshift/origin/pkg/build/api"
@@ -23,7 +25,7 @@ import (
23
25
func init () {
24
26
admission .RegisterPlugin ("openshift.io/BuildConfigSecretInjector" , func (c clientset.Interface , config io.Reader ) (admission.Interface , error ) {
25
27
return & secretInjector {
26
- Handler : admission .NewHandler (admission .Create ),
28
+ Handler : admission .NewHandler (admission .Create , admission . Update ),
27
29
}, nil
28
30
})
29
31
}
@@ -36,11 +38,20 @@ type secretInjector struct {
36
38
var _ = oadmission .WantsRESTClientConfig (& secretInjector {})
37
39
38
40
func (si * secretInjector ) Admit (attr admission.Attributes ) (err error ) {
39
- bc , ok := attr .GetObject ().(* buildapi.BuildConfig )
40
- if ! ok {
41
- return nil
41
+ obj := attr .GetObject ()
42
+
43
+ if bc , ok := obj .(* buildapi.BuildConfig ); ok && attr .GetOperation () == admission .Create {
44
+ return si .admitNewBuildConfig (attr , bc )
42
45
}
43
46
47
+ if secret , ok := obj .(* api.Secret ); ok {
48
+ return si .admitSecret (attr , secret )
49
+ }
50
+
51
+ return nil
52
+ }
53
+
54
+ func (si * secretInjector ) admitNewBuildConfig (attr admission.Attributes , bc * buildapi.BuildConfig ) (err error ) {
44
55
if bc .Spec .Source .SourceSecret != nil || bc .Spec .Source .Git == nil {
45
56
return nil
46
57
}
@@ -105,6 +116,30 @@ func (si *secretInjector) Admit(attr admission.Attributes) (err error) {
105
116
return nil
106
117
}
107
118
119
+ func (si * secretInjector ) admitSecret (attr admission.Attributes , secret * api.Secret ) (err error ) {
120
+ errs := field.ErrorList {}
121
+
122
+ for k , v := range secret .GetAnnotations () {
123
+ if strings .HasPrefix (k , buildapi .BuildSourceSecretMatchURIAnnotationPrefix ) {
124
+ v = strings .TrimSpace (v )
125
+ if v == "" {
126
+ continue
127
+ }
128
+
129
+ _ , err := urlpattern .NewURLPattern (v )
130
+ if err != nil {
131
+ errs = append (errs , field .Invalid (field .NewPath ("metadata.annotations" , k ), v , err .Error ()))
132
+ }
133
+ }
134
+ }
135
+
136
+ if len (errs ) > 0 {
137
+ return errors .NewInvalid (api .Kind ("secret" ), secret .Name , errs )
138
+ }
139
+
140
+ return nil
141
+ }
142
+
108
143
func (si * secretInjector ) SetRESTClientConfig (restClientConfig restclient.Config ) {
109
144
si .restClientConfig = restClientConfig
110
145
}
0 commit comments