Skip to content

Commit

Permalink
Apply param replacements in step scripts
Browse files Browse the repository at this point in the history
This adds a unit test and a YAML test to demonstrate that replacements
are applied correctly.
  • Loading branch information
imjasonh committed Nov 13, 2019
1 parent ffadda1 commit 50e3fe6
Show file tree
Hide file tree
Showing 3 changed files with 94 additions and 70 deletions.
17 changes: 17 additions & 0 deletions examples/taskruns/step-script.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,11 @@ metadata:
generateName: step-script-
spec:
taskSpec:
inputs:
params:
- name: PARAM
default: param-value

steps:
- name: bash
image: ubuntu
Expand Down Expand Up @@ -58,3 +63,15 @@ spec:
script: |
#!/usr/bin/perl
print "Hello from Perl!"
# Test that param values are replaced.
- name: params-applied
image: python
script: |
#!/usr/bin/env python3
v = '$(input.params.PARAM)'
if v != 'param-value':
print 'Param values not applied'
print 'Got: ' + v
quit()
5 changes: 3 additions & 2 deletions pkg/apis/pipeline/v1alpha1/step_replacements.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,9 @@ package v1alpha1
func ApplyStepReplacements(step *Step, stringReplacements map[string]string, arrayReplacements map[string][]string) {
step.Name = ApplyReplacements(step.Name, stringReplacements)
step.Image = ApplyReplacements(step.Image, stringReplacements)
step.Script = ApplyReplacements(step.Script, stringReplacements)

//Use ApplyArrayReplacements here, as additional args may be added via an array parameter.
// Use ApplyArrayReplacements here, as additional args may be added via an array parameter.
var newArgs []string
for _, a := range step.Args {
newArgs = append(newArgs, ApplyArrayReplacements(a, stringReplacements, arrayReplacements)...)
Expand Down Expand Up @@ -52,7 +53,7 @@ func ApplyStepReplacements(step *Step, stringReplacements map[string]string, arr
}
step.WorkingDir = ApplyReplacements(step.WorkingDir, stringReplacements)

//Use ApplyArrayReplacements here, as additional commands may be added via an array parameter.
// Use ApplyArrayReplacements here, as additional commands may be added via an array parameter.
var newCommand []string
for _, c := range step.Command {
newCommand = append(newCommand, ApplyArrayReplacements(c, stringReplacements, arrayReplacements)...)
Expand Down
142 changes: 74 additions & 68 deletions pkg/apis/pipeline/v1alpha1/step_replacements_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,91 +33,97 @@ func TestApplyStepReplacements(t *testing.T) {
"array.replace.me": {"val1", "val2"},
}

s := v1alpha1.Step{Container: corev1.Container{
Name: "$(replace.me)",
Image: "$(replace.me)",
Command: []string{"$(array.replace.me)"},
Args: []string{"$(array.replace.me)"},
WorkingDir: "$(replace.me)",
EnvFrom: []corev1.EnvFromSource{{
ConfigMapRef: &corev1.ConfigMapEnvSource{
LocalObjectReference: corev1.LocalObjectReference{
Name: "$(replace.me)",
},
},
SecretRef: &corev1.SecretEnvSource{
LocalObjectReference: corev1.LocalObjectReference{
Name: "$(replace.me)",
},
},
}},
Env: []corev1.EnvVar{{
Name: "not_me",
Value: "$(replace.me)",
ValueFrom: &corev1.EnvVarSource{
ConfigMapKeyRef: &corev1.ConfigMapKeySelector{
s := v1alpha1.Step{
Script: "$(replace.me)",
Container: corev1.Container{
Name: "$(replace.me)",
Image: "$(replace.me)",
Command: []string{"$(array.replace.me)"},
Args: []string{"$(array.replace.me)"},
WorkingDir: "$(replace.me)",
EnvFrom: []corev1.EnvFromSource{{
ConfigMapRef: &corev1.ConfigMapEnvSource{
LocalObjectReference: corev1.LocalObjectReference{
Name: "$(replace.me)",
},
Key: "$(replace.me)",
},
SecretKeyRef: &corev1.SecretKeySelector{
SecretRef: &corev1.SecretEnvSource{
LocalObjectReference: corev1.LocalObjectReference{
Name: "$(replace.me)",
},
Key: "$(replace.me)",
},
},
}},
VolumeMounts: []corev1.VolumeMount{{
Name: "$(replace.me)",
MountPath: "$(replace.me)",
SubPath: "$(replace.me)",
}},
}}

expected := v1alpha1.Step{Container: corev1.Container{
Name: "replaced!",
Image: "replaced!",
Command: []string{"val1", "val2"},
Args: []string{"val1", "val2"},
WorkingDir: "replaced!",
EnvFrom: []corev1.EnvFromSource{{
ConfigMapRef: &corev1.ConfigMapEnvSource{
LocalObjectReference: corev1.LocalObjectReference{
Name: "replaced!",
},
},
SecretRef: &corev1.SecretEnvSource{
LocalObjectReference: corev1.LocalObjectReference{
Name: "replaced!",
}},
Env: []corev1.EnvVar{{
Name: "not_me",
Value: "$(replace.me)",
ValueFrom: &corev1.EnvVarSource{
ConfigMapKeyRef: &corev1.ConfigMapKeySelector{
LocalObjectReference: corev1.LocalObjectReference{
Name: "$(replace.me)",
},
Key: "$(replace.me)",
},
SecretKeyRef: &corev1.SecretKeySelector{
LocalObjectReference: corev1.LocalObjectReference{
Name: "$(replace.me)",
},
Key: "$(replace.me)",
},
},
},
}},
Env: []corev1.EnvVar{{
Name: "not_me",
Value: "replaced!",
ValueFrom: &corev1.EnvVarSource{
ConfigMapKeyRef: &corev1.ConfigMapKeySelector{
}},
VolumeMounts: []corev1.VolumeMount{{
Name: "$(replace.me)",
MountPath: "$(replace.me)",
SubPath: "$(replace.me)",
}},
},
}

expected := v1alpha1.Step{
Script: "replaced!",
Container: corev1.Container{
Name: "replaced!",
Image: "replaced!",
Command: []string{"val1", "val2"},
Args: []string{"val1", "val2"},
WorkingDir: "replaced!",
EnvFrom: []corev1.EnvFromSource{{
ConfigMapRef: &corev1.ConfigMapEnvSource{
LocalObjectReference: corev1.LocalObjectReference{
Name: "replaced!",
},
Key: "replaced!",
},
SecretKeyRef: &corev1.SecretKeySelector{
SecretRef: &corev1.SecretEnvSource{
LocalObjectReference: corev1.LocalObjectReference{
Name: "replaced!",
},
Key: "replaced!",
},
},
}},
VolumeMounts: []corev1.VolumeMount{{
Name: "replaced!",
MountPath: "replaced!",
SubPath: "replaced!",
}},
}}
}},
Env: []corev1.EnvVar{{
Name: "not_me",
Value: "replaced!",
ValueFrom: &corev1.EnvVarSource{
ConfigMapKeyRef: &corev1.ConfigMapKeySelector{
LocalObjectReference: corev1.LocalObjectReference{
Name: "replaced!",
},
Key: "replaced!",
},
SecretKeyRef: &corev1.SecretKeySelector{
LocalObjectReference: corev1.LocalObjectReference{
Name: "replaced!",
},
Key: "replaced!",
},
},
}},
VolumeMounts: []corev1.VolumeMount{{
Name: "replaced!",
MountPath: "replaced!",
SubPath: "replaced!",
}},
},
}
v1alpha1.ApplyStepReplacements(&s, replacements, arrayReplacements)
if d := cmp.Diff(s, expected); d != "" {
t.Errorf("Container replacements failed: %s", d)
Expand Down

0 comments on commit 50e3fe6

Please sign in to comment.