| ... | ... |
@@ -92,10 +92,10 @@ func NewCmdEnv(fullName string, f *clientcmd.Factory, in io.Reader, out io.Write |
| 92 | 92 |
return cmd |
| 93 | 93 |
} |
| 94 | 94 |
|
| 95 |
-func validateNoOverwrites(meta *kapi.ObjectMeta, labels map[string]string) error {
|
|
| 96 |
- for key := range labels {
|
|
| 97 |
- if value, found := meta.Labels[key]; found {
|
|
| 98 |
- return fmt.Errorf("'%s' already has a value (%s), and --overwrite is false", key, value)
|
|
| 95 |
+func validateNoOverwrites(existing []kapi.EnvVar, env []kapi.EnvVar) error {
|
|
| 96 |
+ for _, e := range env {
|
|
| 97 |
+ if current, exists := findEnv(existing, e.Name); exists && current.Value != e.Value {
|
|
| 98 |
+ return fmt.Errorf("'%s' already has a value (%s), and --overwrite is false", current.Name, current.Value)
|
|
| 99 | 99 |
} |
| 100 | 100 |
} |
| 101 | 101 |
return nil |
| ... | ... |
@@ -116,7 +116,7 @@ func RunEnv(f *clientcmd.Factory, in io.Reader, out io.Writer, cmd *cobra.Comman |
| 116 | 116 |
list := kcmdutil.GetFlagBool(cmd, "list") |
| 117 | 117 |
selector := kcmdutil.GetFlagString(cmd, "selector") |
| 118 | 118 |
all := kcmdutil.GetFlagBool(cmd, "all") |
| 119 |
- //overwrite := kcmdutil.GetFlagBool(cmd, "overwrite") |
|
| 119 |
+ overwrite := kcmdutil.GetFlagBool(cmd, "overwrite") |
|
| 120 | 120 |
resourceVersion := kcmdutil.GetFlagString(cmd, "resource-version") |
| 121 | 121 |
outputFormat := kcmdutil.GetFlagString(cmd, "output") |
| 122 | 122 |
|
| ... | ... |
@@ -177,6 +177,7 @@ func RunEnv(f *clientcmd.Factory, in io.Reader, out io.Writer, cmd *cobra.Comman |
| 177 | 177 |
} |
| 178 | 178 |
|
| 179 | 179 |
skipped := 0 |
| 180 |
+ errored := 0 |
|
| 180 | 181 |
for _, info := range infos {
|
| 181 | 182 |
ok, err := f.UpdatePodSpecForObject(info.Object, func(spec *kapi.PodSpec) error {
|
| 182 | 183 |
containers, _ := selectContainers(spec.Containers, containerMatch) |
| ... | ... |
@@ -185,6 +186,13 @@ func RunEnv(f *clientcmd.Factory, in io.Reader, out io.Writer, cmd *cobra.Comman |
| 185 | 185 |
return nil |
| 186 | 186 |
} |
| 187 | 187 |
for _, c := range containers {
|
| 188 |
+ if !overwrite {
|
|
| 189 |
+ if err := validateNoOverwrites(c.Env, env); err != nil {
|
|
| 190 |
+ errored++ |
|
| 191 |
+ return err |
|
| 192 |
+ } |
|
| 193 |
+ } |
|
| 194 |
+ |
|
| 188 | 195 |
c.Env = updateEnv(c.Env, env, remove) |
| 189 | 196 |
|
| 190 | 197 |
if list {
|
| ... | ... |
@@ -207,6 +215,12 @@ func RunEnv(f *clientcmd.Factory, in io.Reader, out io.Writer, cmd *cobra.Comman |
| 207 | 207 |
if vars == nil {
|
| 208 | 208 |
return fmt.Errorf("no environment variables provided")
|
| 209 | 209 |
} |
| 210 |
+ if !overwrite {
|
|
| 211 |
+ if err := validateNoOverwrites(*vars, env); err != nil {
|
|
| 212 |
+ errored++ |
|
| 213 |
+ return err |
|
| 214 |
+ } |
|
| 215 |
+ } |
|
| 210 | 216 |
*vars = updateEnv(*vars, env, remove) |
| 211 | 217 |
if list {
|
| 212 | 218 |
fmt.Fprintf(out, "# %s %s\n", info.Mapping.Resource, info.Name) |
| ... | ... |
@@ -229,6 +243,9 @@ func RunEnv(f *clientcmd.Factory, in io.Reader, out io.Writer, cmd *cobra.Comman |
| 229 | 229 |
if one && skipped == len(infos) {
|
| 230 | 230 |
return fmt.Errorf("%s/%s is not a pod or does not have a pod template", infos[0].Mapping.Resource, infos[0].Name)
|
| 231 | 231 |
} |
| 232 |
+ if errored == len(infos) {
|
|
| 233 |
+ return fmt.Errorf("no environment variable has been set")
|
|
| 234 |
+ } |
|
| 232 | 235 |
|
| 233 | 236 |
if list {
|
| 234 | 237 |
return nil |
| ... | ... |
@@ -214,7 +214,10 @@ os::test::junit::declare_suite_end |
| 214 | 214 |
os::test::junit::declare_suite_start "cmd/basicresources/setenv" |
| 215 | 215 |
os::cmd::expect_success "oc create -f test/integration/testdata/test-deployment-config.yaml" |
| 216 | 216 |
os::cmd::expect_success "oc create -f test/integration/testdata/test-buildcli.json" |
| 217 |
-os::cmd::expect_success_and_text "oc set env dc/test-deployment-config FOO=bar" "updated" |
|
| 217 |
+os::cmd::expect_success_and_text "oc set env dc/test-deployment-config FOO=1st" "updated" |
|
| 218 |
+os::cmd::expect_success_and_text "oc set env dc/test-deployment-config FOO=2nd" "updated" |
|
| 219 |
+os::cmd::expect_success_and_text "oc set env dc/test-deployment-config FOO=bar --overwrite" "updated" |
|
| 220 |
+os::cmd::expect_failure_and_text "oc set env dc/test-deployment-config FOO=zee --overwrite=false" "already has a value" |
|
| 218 | 221 |
os::cmd::expect_success_and_text "oc set env dc/test-deployment-config --list" "FOO=bar" |
| 219 | 222 |
os::cmd::expect_success_and_text "oc set env bc --all FOO=bar" "updated" |
| 220 | 223 |
os::cmd::expect_success_and_text "oc set env bc --all --list" "FOO=bar" |