| ... | ... |
@@ -1003,10 +1003,6 @@ func autoConvert_api_BuildConfig_To_v1_BuildConfig(in *buildapi.BuildConfig, out |
| 1003 | 1003 |
return nil |
| 1004 | 1004 |
} |
| 1005 | 1005 |
|
| 1006 |
-func Convert_api_BuildConfig_To_v1_BuildConfig(in *buildapi.BuildConfig, out *v1.BuildConfig, s conversion.Scope) error {
|
|
| 1007 |
- return autoConvert_api_BuildConfig_To_v1_BuildConfig(in, out, s) |
|
| 1008 |
-} |
|
| 1009 |
- |
|
| 1010 | 1006 |
func autoConvert_api_BuildConfigList_To_v1_BuildConfigList(in *buildapi.BuildConfigList, out *v1.BuildConfigList, s conversion.Scope) error {
|
| 1011 | 1007 |
if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found {
|
| 1012 | 1008 |
defaulting.(func(*buildapi.BuildConfigList))(in) |
| ... | ... |
@@ -1017,7 +1013,7 @@ func autoConvert_api_BuildConfigList_To_v1_BuildConfigList(in *buildapi.BuildCon |
| 1017 | 1017 |
if in.Items != nil {
|
| 1018 | 1018 |
out.Items = make([]v1.BuildConfig, len(in.Items)) |
| 1019 | 1019 |
for i := range in.Items {
|
| 1020 |
- if err := Convert_api_BuildConfig_To_v1_BuildConfig(&in.Items[i], &out.Items[i], s); err != nil {
|
|
| 1020 |
+ if err := s.Convert(&in.Items[i], &out.Items[i], 0); err != nil {
|
|
| 1021 | 1021 |
return err |
| 1022 | 1022 |
} |
| 1023 | 1023 |
} |
| ... | ... |
@@ -1813,10 +1809,6 @@ func autoConvert_v1_BuildConfig_To_api_BuildConfig(in *v1.BuildConfig, out *buil |
| 1813 | 1813 |
return nil |
| 1814 | 1814 |
} |
| 1815 | 1815 |
|
| 1816 |
-func Convert_v1_BuildConfig_To_api_BuildConfig(in *v1.BuildConfig, out *buildapi.BuildConfig, s conversion.Scope) error {
|
|
| 1817 |
- return autoConvert_v1_BuildConfig_To_api_BuildConfig(in, out, s) |
|
| 1818 |
-} |
|
| 1819 |
- |
|
| 1820 | 1816 |
func autoConvert_v1_BuildConfigList_To_api_BuildConfigList(in *v1.BuildConfigList, out *buildapi.BuildConfigList, s conversion.Scope) error {
|
| 1821 | 1817 |
if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found {
|
| 1822 | 1818 |
defaulting.(func(*v1.BuildConfigList))(in) |
| ... | ... |
@@ -1827,7 +1819,7 @@ func autoConvert_v1_BuildConfigList_To_api_BuildConfigList(in *v1.BuildConfigLis |
| 1827 | 1827 |
if in.Items != nil {
|
| 1828 | 1828 |
out.Items = make([]buildapi.BuildConfig, len(in.Items)) |
| 1829 | 1829 |
for i := range in.Items {
|
| 1830 |
- if err := Convert_v1_BuildConfig_To_api_BuildConfig(&in.Items[i], &out.Items[i], s); err != nil {
|
|
| 1830 |
+ if err := s.Convert(&in.Items[i], &out.Items[i], 0); err != nil {
|
|
| 1831 | 1831 |
return err |
| 1832 | 1832 |
} |
| 1833 | 1833 |
} |
| ... | ... |
@@ -1011,10 +1011,6 @@ func autoConvert_api_BuildConfig_To_v1beta3_BuildConfig(in *buildapi.BuildConfig |
| 1011 | 1011 |
return nil |
| 1012 | 1012 |
} |
| 1013 | 1013 |
|
| 1014 |
-func Convert_api_BuildConfig_To_v1beta3_BuildConfig(in *buildapi.BuildConfig, out *v1beta3.BuildConfig, s conversion.Scope) error {
|
|
| 1015 |
- return autoConvert_api_BuildConfig_To_v1beta3_BuildConfig(in, out, s) |
|
| 1016 |
-} |
|
| 1017 |
- |
|
| 1018 | 1014 |
func autoConvert_api_BuildConfigList_To_v1beta3_BuildConfigList(in *buildapi.BuildConfigList, out *v1beta3.BuildConfigList, s conversion.Scope) error {
|
| 1019 | 1015 |
if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found {
|
| 1020 | 1016 |
defaulting.(func(*buildapi.BuildConfigList))(in) |
| ... | ... |
@@ -1025,7 +1021,7 @@ func autoConvert_api_BuildConfigList_To_v1beta3_BuildConfigList(in *buildapi.Bui |
| 1025 | 1025 |
if in.Items != nil {
|
| 1026 | 1026 |
out.Items = make([]v1beta3.BuildConfig, len(in.Items)) |
| 1027 | 1027 |
for i := range in.Items {
|
| 1028 |
- if err := Convert_api_BuildConfig_To_v1beta3_BuildConfig(&in.Items[i], &out.Items[i], s); err != nil {
|
|
| 1028 |
+ if err := s.Convert(&in.Items[i], &out.Items[i], 0); err != nil {
|
|
| 1029 | 1029 |
return err |
| 1030 | 1030 |
} |
| 1031 | 1031 |
} |
| ... | ... |
@@ -1756,10 +1752,6 @@ func autoConvert_v1beta3_BuildConfig_To_api_BuildConfig(in *v1beta3.BuildConfig, |
| 1756 | 1756 |
return nil |
| 1757 | 1757 |
} |
| 1758 | 1758 |
|
| 1759 |
-func Convert_v1beta3_BuildConfig_To_api_BuildConfig(in *v1beta3.BuildConfig, out *buildapi.BuildConfig, s conversion.Scope) error {
|
|
| 1760 |
- return autoConvert_v1beta3_BuildConfig_To_api_BuildConfig(in, out, s) |
|
| 1761 |
-} |
|
| 1762 |
- |
|
| 1763 | 1759 |
func autoConvert_v1beta3_BuildConfigList_To_api_BuildConfigList(in *v1beta3.BuildConfigList, out *buildapi.BuildConfigList, s conversion.Scope) error {
|
| 1764 | 1760 |
if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found {
|
| 1765 | 1761 |
defaulting.(func(*v1beta3.BuildConfigList))(in) |
| ... | ... |
@@ -1770,7 +1762,7 @@ func autoConvert_v1beta3_BuildConfigList_To_api_BuildConfigList(in *v1beta3.Buil |
| 1770 | 1770 |
if in.Items != nil {
|
| 1771 | 1771 |
out.Items = make([]buildapi.BuildConfig, len(in.Items)) |
| 1772 | 1772 |
for i := range in.Items {
|
| 1773 |
- if err := Convert_v1beta3_BuildConfig_To_api_BuildConfig(&in.Items[i], &out.Items[i], s); err != nil {
|
|
| 1773 |
+ if err := s.Convert(&in.Items[i], &out.Items[i], 0); err != nil {
|
|
| 1774 | 1774 |
return err |
| 1775 | 1775 |
} |
| 1776 | 1776 |
} |
| ... | ... |
@@ -6,9 +6,43 @@ import ( |
| 6 | 6 |
|
| 7 | 7 |
oapi "github.com/openshift/origin/pkg/api" |
| 8 | 8 |
newer "github.com/openshift/origin/pkg/build/api" |
| 9 |
+ buildutil "github.com/openshift/origin/pkg/build/util" |
|
| 9 | 10 |
imageapi "github.com/openshift/origin/pkg/image/api" |
| 10 | 11 |
) |
| 11 | 12 |
|
| 13 |
+func convert_v1_BuildConfig_To_api_BuildConfig(in *BuildConfig, out *newer.BuildConfig, s conversion.Scope) error {
|
|
| 14 |
+ if err := s.DefaultConvert(in, out, conversion.IgnoreMissingFields); err != nil {
|
|
| 15 |
+ return err |
|
| 16 |
+ } |
|
| 17 |
+ |
|
| 18 |
+ newTriggers := []newer.BuildTriggerPolicy{}
|
|
| 19 |
+ // strip off any default imagechange triggers where the buildconfig's |
|
| 20 |
+ // "from" is not an ImageStreamTag, because those triggers |
|
| 21 |
+ // will never be invoked. |
|
| 22 |
+ imageRef := buildutil.GetImageStreamForStrategy(out.Spec.Strategy) |
|
| 23 |
+ hasIST := imageRef != nil && imageRef.Kind == "ImageStreamTag" |
|
| 24 |
+ for _, trigger := range out.Spec.Triggers {
|
|
| 25 |
+ if trigger.Type != newer.ImageChangeBuildTriggerType {
|
|
| 26 |
+ newTriggers = append(newTriggers, trigger) |
|
| 27 |
+ continue |
|
| 28 |
+ } |
|
| 29 |
+ if (trigger.ImageChange == nil || trigger.ImageChange.From == nil) && !hasIST {
|
|
| 30 |
+ continue |
|
| 31 |
+ } |
|
| 32 |
+ newTriggers = append(newTriggers, trigger) |
|
| 33 |
+ } |
|
| 34 |
+ out.Spec.Triggers = newTriggers |
|
| 35 |
+ return nil |
|
| 36 |
+} |
|
| 37 |
+ |
|
| 38 |
+// empty conversion needed because the conversion generator can't handle unidirectional custom conversions |
|
| 39 |
+func convert_api_BuildConfig_To_v1_BuildConfig(in *newer.BuildConfig, out *BuildConfig, s conversion.Scope) error {
|
|
| 40 |
+ if err := s.DefaultConvert(in, out, conversion.IgnoreMissingFields); err != nil {
|
|
| 41 |
+ return err |
|
| 42 |
+ } |
|
| 43 |
+ return nil |
|
| 44 |
+} |
|
| 45 |
+ |
|
| 12 | 46 |
func convert_v1_SourceBuildStrategy_To_api_SourceBuildStrategy(in *SourceBuildStrategy, out *newer.SourceBuildStrategy, s conversion.Scope) error {
|
| 13 | 47 |
if err := s.DefaultConvert(in, out, conversion.IgnoreMissingFields); err != nil {
|
| 14 | 48 |
return err |
| ... | ... |
@@ -212,6 +246,8 @@ func addConversionFuncs(scheme *runtime.Scheme) {
|
| 212 | 212 |
} |
| 213 | 213 |
|
| 214 | 214 |
scheme.AddConversionFuncs( |
| 215 |
+ convert_v1_BuildConfig_To_api_BuildConfig, |
|
| 216 |
+ convert_api_BuildConfig_To_v1_BuildConfig, |
|
| 215 | 217 |
convert_v1_SourceBuildStrategy_To_api_SourceBuildStrategy, |
| 216 | 218 |
convert_api_SourceBuildStrategy_To_v1_SourceBuildStrategy, |
| 217 | 219 |
convert_v1_DockerBuildStrategy_To_api_DockerBuildStrategy, |
| ... | ... |
@@ -223,3 +223,48 @@ func TestBuildConfigConversion(t *testing.T) {
|
| 223 | 223 |
} |
| 224 | 224 |
} |
| 225 | 225 |
} |
| 226 |
+ |
|
| 227 |
+func TestInvalidImageChangeTriggerRemoval(t *testing.T) {
|
|
| 228 |
+ buildConfig := older.BuildConfig{
|
|
| 229 |
+ ObjectMeta: kolder.ObjectMeta{Name: "config-id", Namespace: "namespace"},
|
|
| 230 |
+ Spec: older.BuildConfigSpec{
|
|
| 231 |
+ BuildSpec: older.BuildSpec{
|
|
| 232 |
+ Strategy: older.BuildStrategy{
|
|
| 233 |
+ Type: older.DockerBuildStrategyType, |
|
| 234 |
+ DockerStrategy: &older.DockerBuildStrategy{
|
|
| 235 |
+ From: &kolder.ObjectReference{
|
|
| 236 |
+ Kind: "DockerImage", |
|
| 237 |
+ Name: "fromimage", |
|
| 238 |
+ }, |
|
| 239 |
+ }, |
|
| 240 |
+ }, |
|
| 241 |
+ }, |
|
| 242 |
+ Triggers: []older.BuildTriggerPolicy{
|
|
| 243 |
+ {
|
|
| 244 |
+ Type: older.ImageChangeBuildTriggerType, |
|
| 245 |
+ ImageChange: &older.ImageChangeTrigger{},
|
|
| 246 |
+ }, |
|
| 247 |
+ {
|
|
| 248 |
+ Type: older.ImageChangeBuildTriggerType, |
|
| 249 |
+ ImageChange: &older.ImageChangeTrigger{
|
|
| 250 |
+ From: &kolder.ObjectReference{
|
|
| 251 |
+ Kind: "ImageStreamTag", |
|
| 252 |
+ Name: "imagestream", |
|
| 253 |
+ }, |
|
| 254 |
+ }, |
|
| 255 |
+ }, |
|
| 256 |
+ }, |
|
| 257 |
+ }, |
|
| 258 |
+ } |
|
| 259 |
+ |
|
| 260 |
+ var internalBC newer.BuildConfig |
|
| 261 |
+ |
|
| 262 |
+ Convert(&buildConfig, &internalBC) |
|
| 263 |
+ if len(internalBC.Spec.Triggers) != 1 {
|
|
| 264 |
+ t.Errorf("Expected 1 trigger, got %d", len(internalBC.Spec.Triggers))
|
|
| 265 |
+ } |
|
| 266 |
+ if internalBC.Spec.Triggers[0].ImageChange.From == nil {
|
|
| 267 |
+ t.Errorf("Expected remaining trigger to have a From value")
|
|
| 268 |
+ } |
|
| 269 |
+ |
|
| 270 |
+} |
| ... | ... |
@@ -7,9 +7,43 @@ import ( |
| 7 | 7 |
"k8s.io/kubernetes/pkg/runtime" |
| 8 | 8 |
|
| 9 | 9 |
newer "github.com/openshift/origin/pkg/build/api" |
| 10 |
+ buildutil "github.com/openshift/origin/pkg/build/util" |
|
| 10 | 11 |
imageapi "github.com/openshift/origin/pkg/image/api" |
| 11 | 12 |
) |
| 12 | 13 |
|
| 14 |
+func convert_v1beta3_BuildConfig_To_api_BuildConfig(in *BuildConfig, out *newer.BuildConfig, s conversion.Scope) error {
|
|
| 15 |
+ if err := s.DefaultConvert(in, out, conversion.IgnoreMissingFields); err != nil {
|
|
| 16 |
+ return err |
|
| 17 |
+ } |
|
| 18 |
+ |
|
| 19 |
+ newTriggers := []newer.BuildTriggerPolicy{}
|
|
| 20 |
+ // strip off any default imagechange triggers where the buildconfig's |
|
| 21 |
+ // "from" is not an ImageStreamTag, because those triggers |
|
| 22 |
+ // will never be invoked. |
|
| 23 |
+ imageRef := buildutil.GetImageStreamForStrategy(out.Spec.Strategy) |
|
| 24 |
+ hasIST := imageRef != nil && imageRef.Kind == "ImageStreamTag" |
|
| 25 |
+ for _, trigger := range out.Spec.Triggers {
|
|
| 26 |
+ if trigger.Type != newer.ImageChangeBuildTriggerType {
|
|
| 27 |
+ newTriggers = append(newTriggers, trigger) |
|
| 28 |
+ continue |
|
| 29 |
+ } |
|
| 30 |
+ if (trigger.ImageChange == nil || trigger.ImageChange.From == nil) && !hasIST {
|
|
| 31 |
+ continue |
|
| 32 |
+ } |
|
| 33 |
+ newTriggers = append(newTriggers, trigger) |
|
| 34 |
+ } |
|
| 35 |
+ out.Spec.Triggers = newTriggers |
|
| 36 |
+ return nil |
|
| 37 |
+} |
|
| 38 |
+ |
|
| 39 |
+// empty conversion needed because the conversion generator can't handle unidirectional custom conversions |
|
| 40 |
+func convert_api_BuildConfig_To_v1beta3_BuildConfig(in *newer.BuildConfig, out *BuildConfig, s conversion.Scope) error {
|
|
| 41 |
+ if err := s.DefaultConvert(in, out, conversion.IgnoreMissingFields); err != nil {
|
|
| 42 |
+ return err |
|
| 43 |
+ } |
|
| 44 |
+ return nil |
|
| 45 |
+} |
|
| 46 |
+ |
|
| 13 | 47 |
func convert_v1beta3_SourceBuildStrategy_To_api_SourceBuildStrategy(in *SourceBuildStrategy, out *newer.SourceBuildStrategy, s conversion.Scope) error {
|
| 14 | 48 |
if err := s.DefaultConvert(in, out, conversion.IgnoreMissingFields); err != nil {
|
| 15 | 49 |
return err |
| ... | ... |
@@ -220,6 +254,8 @@ func addConversionFuncs(scheme *runtime.Scheme) {
|
| 220 | 220 |
} |
| 221 | 221 |
|
| 222 | 222 |
scheme.AddConversionFuncs( |
| 223 |
+ convert_v1beta3_BuildConfig_To_api_BuildConfig, |
|
| 224 |
+ convert_api_BuildConfig_To_v1beta3_BuildConfig, |
|
| 223 | 225 |
convert_v1beta3_SourceBuildStrategy_To_api_SourceBuildStrategy, |
| 224 | 226 |
convert_api_SourceBuildStrategy_To_v1beta3_SourceBuildStrategy, |
| 225 | 227 |
convert_v1beta3_DockerBuildStrategy_To_api_DockerBuildStrategy, |
| ... | ... |
@@ -44,7 +44,8 @@ func TestBuildConfigConversion(t *testing.T) {
|
| 44 | 44 |
}, |
| 45 | 45 |
Triggers: []older.BuildTriggerPolicy{
|
| 46 | 46 |
{
|
| 47 |
- Type: older.ImageChangeBuildTriggerType, |
|
| 47 |
+ Type: older.ImageChangeBuildTriggerType, |
|
| 48 |
+ ImageChange: &older.ImageChangeTrigger{},
|
|
| 48 | 49 |
}, |
| 49 | 50 |
{
|
| 50 | 51 |
Type: older.GitHubWebHookBuildTriggerType, |
| ... | ... |
@@ -84,7 +85,8 @@ func TestBuildConfigConversion(t *testing.T) {
|
| 84 | 84 |
}, |
| 85 | 85 |
Triggers: []older.BuildTriggerPolicy{
|
| 86 | 86 |
{
|
| 87 |
- Type: older.ImageChangeBuildTriggerType, |
|
| 87 |
+ Type: older.ImageChangeBuildTriggerType, |
|
| 88 |
+ ImageChange: &older.ImageChangeTrigger{},
|
|
| 88 | 89 |
}, |
| 89 | 90 |
{
|
| 90 | 91 |
Type: older.GitHubWebHookBuildTriggerType, |
| ... | ... |
@@ -124,7 +126,8 @@ func TestBuildConfigConversion(t *testing.T) {
|
| 124 | 124 |
}, |
| 125 | 125 |
Triggers: []older.BuildTriggerPolicy{
|
| 126 | 126 |
{
|
| 127 |
- Type: older.ImageChangeBuildTriggerType, |
|
| 127 |
+ Type: older.ImageChangeBuildTriggerType, |
|
| 128 |
+ ImageChange: &older.ImageChangeTrigger{},
|
|
| 128 | 129 |
}, |
| 129 | 130 |
{
|
| 130 | 131 |
Type: older.GitHubWebHookBuildTriggerType, |
| ... | ... |
@@ -261,3 +264,48 @@ func TestBuildTriggerPolicyNewToOldConversion(t *testing.T) {
|
| 261 | 261 |
} |
| 262 | 262 |
} |
| 263 | 263 |
} |
| 264 |
+ |
|
| 265 |
+func TestInvalidImageChangeTriggerRemoval(t *testing.T) {
|
|
| 266 |
+ buildConfig := older.BuildConfig{
|
|
| 267 |
+ ObjectMeta: kolder.ObjectMeta{Name: "config-id", Namespace: "namespace"},
|
|
| 268 |
+ Spec: older.BuildConfigSpec{
|
|
| 269 |
+ BuildSpec: older.BuildSpec{
|
|
| 270 |
+ Strategy: older.BuildStrategy{
|
|
| 271 |
+ Type: older.DockerBuildStrategyType, |
|
| 272 |
+ DockerStrategy: &older.DockerBuildStrategy{
|
|
| 273 |
+ From: &kolder.ObjectReference{
|
|
| 274 |
+ Kind: "DockerImage", |
|
| 275 |
+ Name: "fromimage", |
|
| 276 |
+ }, |
|
| 277 |
+ }, |
|
| 278 |
+ }, |
|
| 279 |
+ }, |
|
| 280 |
+ Triggers: []older.BuildTriggerPolicy{
|
|
| 281 |
+ {
|
|
| 282 |
+ Type: older.ImageChangeBuildTriggerType, |
|
| 283 |
+ ImageChange: &older.ImageChangeTrigger{},
|
|
| 284 |
+ }, |
|
| 285 |
+ {
|
|
| 286 |
+ Type: older.ImageChangeBuildTriggerType, |
|
| 287 |
+ ImageChange: &older.ImageChangeTrigger{
|
|
| 288 |
+ From: &kolder.ObjectReference{
|
|
| 289 |
+ Kind: "ImageStreamTag", |
|
| 290 |
+ Name: "imagestream", |
|
| 291 |
+ }, |
|
| 292 |
+ }, |
|
| 293 |
+ }, |
|
| 294 |
+ }, |
|
| 295 |
+ }, |
|
| 296 |
+ } |
|
| 297 |
+ |
|
| 298 |
+ var internalBC newer.BuildConfig |
|
| 299 |
+ |
|
| 300 |
+ Convert(&buildConfig, &internalBC) |
|
| 301 |
+ if len(internalBC.Spec.Triggers) != 1 {
|
|
| 302 |
+ t.Errorf("Expected 1 trigger, got %d", len(internalBC.Spec.Triggers))
|
|
| 303 |
+ } |
|
| 304 |
+ if internalBC.Spec.Triggers[0].ImageChange.From == nil {
|
|
| 305 |
+ t.Errorf("Expected remaining trigger to have a From value")
|
|
| 306 |
+ } |
|
| 307 |
+ |
|
| 308 |
+} |
| ... | ... |
@@ -64,14 +64,15 @@ func ValidateBuildConfig(config *buildapi.BuildConfig) field.ErrorList {
|
| 64 | 64 |
fromRefs := map[string]struct{}{}
|
| 65 | 65 |
specPath := field.NewPath("spec")
|
| 66 | 66 |
triggersPath := specPath.Child("triggers")
|
| 67 |
+ buildFrom := buildutil.GetImageStreamForStrategy(config.Spec.Strategy) |
|
| 67 | 68 |
for i, trg := range config.Spec.Triggers {
|
| 68 |
- allErrs = append(allErrs, validateTrigger(&trg, triggersPath.Index(i))...) |
|
| 69 |
+ allErrs = append(allErrs, validateTrigger(&trg, buildFrom, triggersPath.Index(i))...) |
|
| 69 | 70 |
if trg.Type != buildapi.ImageChangeBuildTriggerType || trg.ImageChange == nil {
|
| 70 | 71 |
continue |
| 71 | 72 |
} |
| 72 | 73 |
from := trg.ImageChange.From |
| 73 | 74 |
if from == nil {
|
| 74 |
- from = buildutil.GetImageStreamForStrategy(config.Spec.Strategy) |
|
| 75 |
+ from = buildFrom |
|
| 75 | 76 |
} |
| 76 | 77 |
fromKey := refKey(config.Namespace, from) |
| 77 | 78 |
_, exists := fromRefs[fromKey] |
| ... | ... |
@@ -83,16 +84,6 @@ func ValidateBuildConfig(config *buildapi.BuildConfig) field.ErrorList {
|
| 83 | 83 |
|
| 84 | 84 |
allErrs = append(allErrs, validateBuildSpec(&config.Spec.BuildSpec, specPath)...) |
| 85 | 85 |
|
| 86 |
- // validate ImageChangeTriggers of DockerStrategy builds |
|
| 87 |
- strategy := config.Spec.BuildSpec.Strategy |
|
| 88 |
- if strategy.DockerStrategy != nil && strategy.DockerStrategy.From == nil {
|
|
| 89 |
- for i, trigger := range config.Spec.Triggers {
|
|
| 90 |
- if trigger.Type == buildapi.ImageChangeBuildTriggerType && (trigger.ImageChange == nil || trigger.ImageChange.From == nil) {
|
|
| 91 |
- allErrs = append(allErrs, field.Required(triggersPath.Index(i).Child("imageChange", "from"), ""))
|
|
| 92 |
- } |
|
| 93 |
- } |
|
| 94 |
- } |
|
| 95 |
- |
|
| 96 | 86 |
return allErrs |
| 97 | 87 |
} |
| 98 | 88 |
|
| ... | ... |
@@ -453,7 +444,7 @@ func validateCustomStrategy(strategy *buildapi.CustomBuildStrategy, fldPath *fie |
| 453 | 453 |
return allErrs |
| 454 | 454 |
} |
| 455 | 455 |
|
| 456 |
-func validateTrigger(trigger *buildapi.BuildTriggerPolicy, fldPath *field.Path) field.ErrorList {
|
|
| 456 |
+func validateTrigger(trigger *buildapi.BuildTriggerPolicy, buildFrom *kapi.ObjectReference, fldPath *field.Path) field.ErrorList {
|
|
| 457 | 457 |
allErrs := field.ErrorList{}
|
| 458 | 458 |
if len(trigger.Type) == 0 {
|
| 459 | 459 |
allErrs = append(allErrs, field.Required(fldPath.Child("type"), ""))
|
| ... | ... |
@@ -480,6 +471,15 @@ func validateTrigger(trigger *buildapi.BuildTriggerPolicy, fldPath *field.Path) |
| 480 | 480 |
break |
| 481 | 481 |
} |
| 482 | 482 |
if trigger.ImageChange.From == nil {
|
| 483 |
+ if buildFrom == nil || buildFrom.Kind != "ImageStreamTag" {
|
|
| 484 |
+ invalidKindErr := field.Invalid( |
|
| 485 |
+ fldPath.Child("imageChange"),
|
|
| 486 |
+ fmt.Sprintf("build from: %v", buildFrom),
|
|
| 487 |
+ "a default ImageChange trigger can only be used when the build strategy includes an ImageStreamTag reference.") |
|
| 488 |
+ allErrs = append(allErrs, invalidKindErr) |
|
| 489 |
+ break |
|
| 490 |
+ } |
|
| 491 |
+ |
|
| 483 | 492 |
break |
| 484 | 493 |
} |
| 485 | 494 |
if kind := trigger.ImageChange.From.Kind; kind != "ImageStreamTag" {
|
| ... | ... |
@@ -282,8 +282,8 @@ func TestBuildConfigDockerStrategyImageChangeTrigger(t *testing.T) {
|
| 282 | 282 |
t.Errorf("Expected validation error, got nothing")
|
| 283 | 283 |
case 1: |
| 284 | 284 |
err := errors[0] |
| 285 |
- if err.Type != field.ErrorTypeRequired {
|
|
| 286 |
- t.Errorf("Expected error to be '%v', got '%v'", field.ErrorTypeRequired, err.Type)
|
|
| 285 |
+ if err.Type != field.ErrorTypeInvalid {
|
|
| 286 |
+ t.Errorf("Expected error to be '%v', got '%v'", field.ErrorTypeInvalid, err.Type)
|
|
| 287 | 287 |
} |
| 288 | 288 |
default: |
| 289 | 289 |
t.Errorf("Expected a single validation error, got %v", errors)
|
| ... | ... |
@@ -330,20 +330,46 @@ func TestBuildConfigImageChangeTriggers(t *testing.T) {
|
| 330 | 330 |
tests := []struct {
|
| 331 | 331 |
name string |
| 332 | 332 |
triggers []buildapi.BuildTriggerPolicy |
| 333 |
+ fromKind string |
|
| 333 | 334 |
expectError bool |
| 334 | 335 |
errorType field.ErrorType |
| 335 | 336 |
}{
|
| 336 | 337 |
{
|
| 337 |
- name: "valid default trigger", |
|
| 338 |
+ name: "valid default trigger with imagestreamtag", |
|
| 338 | 339 |
triggers: []buildapi.BuildTriggerPolicy{
|
| 339 | 340 |
{
|
| 340 | 341 |
Type: buildapi.ImageChangeBuildTriggerType, |
| 341 | 342 |
ImageChange: &buildapi.ImageChangeTrigger{},
|
| 342 | 343 |
}, |
| 343 | 344 |
}, |
| 345 |
+ fromKind: "ImageStreamTag", |
|
| 344 | 346 |
expectError: false, |
| 345 | 347 |
}, |
| 346 | 348 |
{
|
| 349 |
+ name: "invalid default trigger (imagestreamimage)", |
|
| 350 |
+ triggers: []buildapi.BuildTriggerPolicy{
|
|
| 351 |
+ {
|
|
| 352 |
+ Type: buildapi.ImageChangeBuildTriggerType, |
|
| 353 |
+ ImageChange: &buildapi.ImageChangeTrigger{},
|
|
| 354 |
+ }, |
|
| 355 |
+ }, |
|
| 356 |
+ fromKind: "ImageStreamImage", |
|
| 357 |
+ expectError: true, |
|
| 358 |
+ errorType: field.ErrorTypeInvalid, |
|
| 359 |
+ }, |
|
| 360 |
+ {
|
|
| 361 |
+ name: "invalid default trigger (dockerimage)", |
|
| 362 |
+ triggers: []buildapi.BuildTriggerPolicy{
|
|
| 363 |
+ {
|
|
| 364 |
+ Type: buildapi.ImageChangeBuildTriggerType, |
|
| 365 |
+ ImageChange: &buildapi.ImageChangeTrigger{},
|
|
| 366 |
+ }, |
|
| 367 |
+ }, |
|
| 368 |
+ fromKind: "DockerImage", |
|
| 369 |
+ expectError: true, |
|
| 370 |
+ errorType: field.ErrorTypeInvalid, |
|
| 371 |
+ }, |
|
| 372 |
+ {
|
|
| 347 | 373 |
name: "more than one default trigger", |
| 348 | 374 |
triggers: []buildapi.BuildTriggerPolicy{
|
| 349 | 375 |
{
|
| ... | ... |
@@ -355,6 +381,7 @@ func TestBuildConfigImageChangeTriggers(t *testing.T) {
|
| 355 | 355 |
ImageChange: &buildapi.ImageChangeTrigger{},
|
| 356 | 356 |
}, |
| 357 | 357 |
}, |
| 358 |
+ fromKind: "ImageStreamTag", |
|
| 358 | 359 |
expectError: true, |
| 359 | 360 |
errorType: field.ErrorTypeInvalid, |
| 360 | 361 |
}, |
| ... | ... |
@@ -365,6 +392,7 @@ func TestBuildConfigImageChangeTriggers(t *testing.T) {
|
| 365 | 365 |
Type: buildapi.ImageChangeBuildTriggerType, |
| 366 | 366 |
}, |
| 367 | 367 |
}, |
| 368 |
+ fromKind: "ImageStreamTag", |
|
| 368 | 369 |
expectError: true, |
| 369 | 370 |
errorType: field.ErrorTypeRequired, |
| 370 | 371 |
}, |
| ... | ... |
@@ -385,6 +413,7 @@ func TestBuildConfigImageChangeTriggers(t *testing.T) {
|
| 385 | 385 |
}, |
| 386 | 386 |
}, |
| 387 | 387 |
}, |
| 388 |
+ fromKind: "ImageStreamTag", |
|
| 388 | 389 |
expectError: false, |
| 389 | 390 |
}, |
| 390 | 391 |
{
|
| ... | ... |
@@ -404,6 +433,7 @@ func TestBuildConfigImageChangeTriggers(t *testing.T) {
|
| 404 | 404 |
}, |
| 405 | 405 |
}, |
| 406 | 406 |
}, |
| 407 |
+ fromKind: "ImageStreamTag", |
|
| 407 | 408 |
expectError: true, |
| 408 | 409 |
errorType: field.ErrorTypeInvalid, |
| 409 | 410 |
}, |
| ... | ... |
@@ -423,6 +453,7 @@ func TestBuildConfigImageChangeTriggers(t *testing.T) {
|
| 423 | 423 |
}, |
| 424 | 424 |
}, |
| 425 | 425 |
}, |
| 426 |
+ fromKind: "ImageStreamTag", |
|
| 426 | 427 |
expectError: true, |
| 427 | 428 |
errorType: field.ErrorTypeInvalid, |
| 428 | 429 |
}, |
| ... | ... |
@@ -448,6 +479,7 @@ func TestBuildConfigImageChangeTriggers(t *testing.T) {
|
| 448 | 448 |
}, |
| 449 | 449 |
}, |
| 450 | 450 |
}, |
| 451 |
+ fromKind: "ImageStreamTag", |
|
| 451 | 452 |
expectError: true, |
| 452 | 453 |
errorType: field.ErrorTypeInvalid, |
| 453 | 454 |
}, |
| ... | ... |
@@ -468,6 +500,7 @@ func TestBuildConfigImageChangeTriggers(t *testing.T) {
|
| 468 | 468 |
}, |
| 469 | 469 |
}, |
| 470 | 470 |
}, |
| 471 |
+ fromKind: "ImageStreamTag", |
|
| 471 | 472 |
expectError: true, |
| 472 | 473 |
errorType: field.ErrorTypeInvalid, |
| 473 | 474 |
}, |
| ... | ... |
@@ -495,6 +528,7 @@ func TestBuildConfigImageChangeTriggers(t *testing.T) {
|
| 495 | 495 |
}, |
| 496 | 496 |
}, |
| 497 | 497 |
}, |
| 498 |
+ fromKind: "ImageStreamTag", |
|
| 498 | 499 |
expectError: false, |
| 499 | 500 |
}, |
| 500 | 501 |
{
|
| ... | ... |
@@ -521,6 +555,7 @@ func TestBuildConfigImageChangeTriggers(t *testing.T) {
|
| 521 | 521 |
}, |
| 522 | 522 |
}, |
| 523 | 523 |
}, |
| 524 |
+ fromKind: "ImageStreamTag", |
|
| 524 | 525 |
expectError: true, |
| 525 | 526 |
errorType: field.ErrorTypeInvalid, |
| 526 | 527 |
}, |
| ... | ... |
@@ -540,7 +575,7 @@ func TestBuildConfigImageChangeTriggers(t *testing.T) {
|
| 540 | 540 |
Strategy: buildapi.BuildStrategy{
|
| 541 | 541 |
SourceStrategy: &buildapi.SourceBuildStrategy{
|
| 542 | 542 |
From: kapi.ObjectReference{
|
| 543 |
- Kind: "ImageStreamTag", |
|
| 543 |
+ Kind: tc.fromKind, |
|
| 544 | 544 |
Name: "builderimage:latest", |
| 545 | 545 |
}, |
| 546 | 546 |
}, |
| ... | ... |
@@ -1685,7 +1720,7 @@ func TestValidateTrigger(t *testing.T) {
|
| 1685 | 1685 |
}, |
| 1686 | 1686 |
} |
| 1687 | 1687 |
for desc, test := range tests {
|
| 1688 |
- errors := validateTrigger(&test.trigger, nil) |
|
| 1688 |
+ errors := validateTrigger(&test.trigger, &kapi.ObjectReference{Kind: "ImageStreamTag"}, nil)
|
|
| 1689 | 1689 |
if len(test.expected) == 0 {
|
| 1690 | 1690 |
if len(errors) != 0 {
|
| 1691 | 1691 |
t.Errorf("%s: Got unexpected validation errors: %#v", desc, errors)
|