Skip to content

Commit 3162dfb

Browse files
committed
begin externalizing newapp, newbuild
1 parent 55b4802 commit 3162dfb

23 files changed

+668
-349
lines changed

pkg/oc/cli/admin/ipfailover/keepalived/generator.go

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66

77
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
88
kapi "k8s.io/kubernetes/pkg/apis/core"
9+
kapiv1 "k8s.io/kubernetes/pkg/apis/core/v1"
910

1011
dapi "github.com/openshift/origin/pkg/apps/apis/apps"
1112
"github.com/openshift/origin/pkg/oc/cli/admin/ipfailover/ipfailover"
@@ -76,6 +77,18 @@ func generateFailoverMonitorContainerConfig(name string, options *ipfailover.IPF
7677
},
7778
}
7879

80+
// TODO: remove this once this command is switched over to external versions
81+
internalEnvVar := []kapi.EnvVar{}
82+
for _, e := range env.List() {
83+
internal := &kapi.EnvVar{}
84+
err := kapiv1.Convert_v1_EnvVar_To_core_EnvVar(&e, internal, nil)
85+
if err != nil {
86+
continue
87+
}
88+
89+
internalEnvVar = append(internalEnvVar, *internal)
90+
}
91+
7992
privileged := true
8093
return &kapi.Container{
8194
Name: containerName,
@@ -86,7 +99,7 @@ func generateFailoverMonitorContainerConfig(name string, options *ipfailover.IPF
8699
},
87100
ImagePullPolicy: kapi.PullIfNotPresent,
88101
VolumeMounts: mounts,
89-
Env: env.List(),
102+
Env: internalEnvVar,
90103
LivenessProbe: livenessProbe,
91104
}
92105
}

pkg/oc/cli/admin/registry/registry.go

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"k8s.io/client-go/dynamic"
2121
"k8s.io/kubernetes/pkg/api/legacyscheme"
2222
kapi "k8s.io/kubernetes/pkg/apis/core"
23+
kapiv1 "k8s.io/kubernetes/pkg/apis/core/v1"
2324
"k8s.io/kubernetes/pkg/apis/extensions"
2425
kcoreclient "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/internalversion"
2526
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
@@ -378,6 +379,18 @@ func (opts *RegistryOptions) RunCmdRegistry() error {
378379
livenessProbe := generateLivenessProbeConfig(healthzPort, tls)
379380
readinessProbe := generateReadinessProbeConfig(healthzPort, tls)
380381

382+
// TODO: remove this once this command is switched over to external versions
383+
internalEnvVar := []kapi.EnvVar{}
384+
for _, e := range env.List() {
385+
internal := &kapi.EnvVar{}
386+
err := kapiv1.Convert_v1_EnvVar_To_core_EnvVar(&e, internal, nil)
387+
if err != nil {
388+
continue
389+
}
390+
391+
internalEnvVar = append(internalEnvVar, *internal)
392+
}
393+
381394
mountHost := len(opts.Config.HostMount) > 0
382395
podTemplate := &kapi.PodTemplateSpec{
383396
ObjectMeta: metav1.ObjectMeta{Labels: opts.label},
@@ -388,7 +401,7 @@ func (opts *RegistryOptions) RunCmdRegistry() error {
388401
Name: "registry",
389402
Image: opts.image,
390403
Ports: opts.ports,
391-
Env: env.List(),
404+
Env: internalEnvVar,
392405
VolumeMounts: append(mounts, kapi.VolumeMount{
393406
Name: "registry-storage",
394407
MountPath: opts.Config.Volume,

pkg/oc/cli/admin/router/router.go

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
"k8s.io/client-go/dynamic"
2424
"k8s.io/kubernetes/pkg/api/legacyscheme"
2525
kapi "k8s.io/kubernetes/pkg/apis/core"
26+
kapiv1 "k8s.io/kubernetes/pkg/apis/core/v1"
2627
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
2728
kcmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
2829
"k8s.io/kubernetes/pkg/kubectl/genericclioptions"
@@ -884,6 +885,18 @@ func RunCmdRouter(f kcmdutil.Factory, cmd *cobra.Command, out, errout io.Writer,
884885
livenessProbe := generateLivenessProbeConfig(cfg, ports)
885886
readinessProbe := generateReadinessProbeConfig(cfg, ports)
886887

888+
// TODO: remove this once this command is switched over to external versions
889+
internalEnvVar := []kapi.EnvVar{}
890+
for _, e := range env.List() {
891+
internal := &kapi.EnvVar{}
892+
err := kapiv1.Convert_v1_EnvVar_To_core_EnvVar(&e, internal, nil)
893+
if err != nil {
894+
continue
895+
}
896+
897+
internalEnvVar = append(internalEnvVar, *internal)
898+
}
899+
887900
exposedPorts := make([]kapi.ContainerPort, len(ports))
888901
copy(exposedPorts, ports)
889902
if !cfg.HostPorts {
@@ -896,7 +909,7 @@ func RunCmdRouter(f kcmdutil.Factory, cmd *cobra.Command, out, errout io.Writer,
896909
Name: "router",
897910
Image: image,
898911
Ports: exposedPorts,
899-
Env: env.List(),
912+
Env: internalEnvVar,
900913
LivenessProbe: livenessProbe,
901914
ReadinessProbe: readinessProbe,
902915
ImagePullPolicy: kapi.PullIfNotPresent,

pkg/oc/cli/debug/debug.go

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ import (
2525
corev1client "k8s.io/client-go/kubernetes/typed/core/v1"
2626
"k8s.io/kubernetes/pkg/api/legacyscheme"
2727
kapi "k8s.io/kubernetes/pkg/apis/core"
28-
kapiv1 "k8s.io/kubernetes/pkg/apis/core/v1"
2928
"k8s.io/kubernetes/pkg/kubectl"
3029
kcmd "k8s.io/kubernetes/pkg/kubectl/cmd"
3130
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
@@ -45,7 +44,7 @@ import (
4544
appsutil "github.com/openshift/origin/pkg/apps/util"
4645
imageapi "github.com/openshift/origin/pkg/image/apis/image"
4746
imageutil "github.com/openshift/origin/pkg/image/util"
48-
conditions "github.com/openshift/origin/pkg/oc/lib/conditions"
47+
"github.com/openshift/origin/pkg/oc/lib/conditions"
4948
generateapp "github.com/openshift/origin/pkg/oc/lib/newapp/app"
5049
utilenv "github.com/openshift/origin/pkg/oc/util/env"
5150
)
@@ -255,23 +254,11 @@ func (o *DebugOptions) Complete(cmd *cobra.Command, f kcmdutil.Factory, args []s
255254

256255
o.Builder = f.NewBuilder
257256

258-
internalAddEnv, removeEnv, err := utilenv.ParseEnv(envArgs, nil)
257+
o.AddEnv, o.RemoveEnv, err = utilenv.ParseEnv(envArgs, nil)
259258
if err != nil {
260259
return err
261260
}
262261

263-
// convert EnvVars that we should add, from internal to external
264-
for _, internal := range internalAddEnv {
265-
external := corev1.EnvVar{}
266-
if err := kapiv1.Convert_core_EnvVar_To_v1_EnvVar(&internal, &external, nil); err != nil {
267-
return err
268-
}
269-
270-
o.AddEnv = append(o.AddEnv, external)
271-
}
272-
273-
o.RemoveEnv = removeEnv
274-
275262
cmdParent := cmd.Parent()
276263
if cmdParent != nil && len(cmdParent.CommandPath()) > 0 && kcmdutil.IsSiblingCommandExists(cmd, "describe") {
277264
o.FullCmdName = cmdParent.CommandPath()

pkg/oc/cli/set/deploymenthook.go

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,10 @@ import (
66
"github.com/golang/glog"
77
"github.com/spf13/cobra"
88

9-
corev1 "k8s.io/api/core/v1"
109
"k8s.io/apimachinery/pkg/api/meta"
1110
"k8s.io/apimachinery/pkg/types"
1211
utilerrors "k8s.io/apimachinery/pkg/util/errors"
1312
"k8s.io/client-go/dynamic"
14-
"k8s.io/kubernetes/pkg/api/legacyscheme"
1513
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
1614
kcmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
1715
"k8s.io/kubernetes/pkg/kubectl/genericclioptions"
@@ -415,11 +413,7 @@ func (o *DeploymentHookOptions) lifecycleHook(dc *appsv1.DeploymentConfig) (*app
415413
return nil, err
416414
}
417415
for i := range env {
418-
var versionedEnv corev1.EnvVar
419-
if err := legacyscheme.Scheme.Convert(&env[i], &versionedEnv, nil); err != nil {
420-
return nil, err
421-
}
422-
hook.ExecNewPod.Env = append(hook.ExecNewPod.Env, versionedEnv)
416+
hook.ExecNewPod.Env = append(hook.ExecNewPod.Env, env[i])
423417
}
424418
}
425419
if len(o.Volumes) > 0 {

pkg/oc/cli/set/env.go

Lines changed: 28 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,7 @@ import (
1717
utilerrors "k8s.io/apimachinery/pkg/util/errors"
1818
"k8s.io/apimachinery/pkg/util/strategicpatch"
1919
"k8s.io/client-go/dynamic"
20-
"k8s.io/kubernetes/pkg/api/legacyscheme"
21-
kapi "k8s.io/kubernetes/pkg/apis/core"
22-
kinternalclientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
20+
"k8s.io/client-go/kubernetes"
2321
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
2422
kcmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
2523
"k8s.io/kubernetes/pkg/kubectl/genericclioptions"
@@ -30,9 +28,8 @@ import (
3028

3129
buildv1 "github.com/openshift/api/build/v1"
3230
cmdutil "github.com/openshift/origin/pkg/cmd/util"
33-
"github.com/openshift/origin/pkg/oc/util/clientcmd"
31+
envresolve "github.com/openshift/origin/pkg/oc/lib/env"
3432
utilenv "github.com/openshift/origin/pkg/oc/util/env"
35-
envresolve "github.com/openshift/origin/pkg/pod/envresolve"
3633
)
3734

3835
var (
@@ -108,7 +105,7 @@ type EnvOptions struct {
108105
Encoder runtime.Encoder
109106
Mapper meta.RESTMapper
110107
Client dynamic.Interface
111-
KubeClient kinternalclientset.Interface
108+
KClientSet kubernetes.Interface
112109
Printer printers.ResourcePrinter
113110
Namespace string
114111
ExplicitNamespace bool
@@ -160,7 +157,7 @@ func NewCmdEnv(fullName string, f kcmdutil.Factory, streams genericclioptions.IO
160157
return cmd
161158
}
162159

163-
func validateNoOverwrites(existing []kapi.EnvVar, env []kapi.EnvVar) error {
160+
func validateNoOverwrites(existing []corev1.EnvVar, env []corev1.EnvVar) error {
164161
for _, e := range env {
165162
if current, exists := findEnv(existing, e.Name); exists && current.Value != e.Value {
166163
return fmt.Errorf("'%s' already has a value (%s), and --overwrite is false", current.Name, current.Value)
@@ -184,8 +181,12 @@ func (o *EnvOptions) Complete(f kcmdutil.Factory, cmd *cobra.Command, args []str
184181
return kcmdutil.UsageErrorf(cmd, "one or more resources must be specified as <resource> <name> or <resource>/<name>")
185182
}
186183

187-
var err error
188-
o.KubeClient, err = f.ClientSet()
184+
config, err := f.ToRESTConfig()
185+
if err != nil {
186+
return err
187+
}
188+
189+
o.KClientSet, err = kubernetes.NewForConfig(config)
189190
if err != nil {
190191
return err
191192
}
@@ -260,11 +261,11 @@ func (o *EnvOptions) RunEnv() error {
260261
switch from := info.Object.(type) {
261262
case *corev1.Secret:
262263
for key := range from.Data {
263-
envVar := kapi.EnvVar{
264+
envVar := corev1.EnvVar{
264265
Name: keyToEnvName(key),
265-
ValueFrom: &kapi.EnvVarSource{
266-
SecretKeyRef: &kapi.SecretKeySelector{
267-
LocalObjectReference: kapi.LocalObjectReference{
266+
ValueFrom: &corev1.EnvVarSource{
267+
SecretKeyRef: &corev1.SecretKeySelector{
268+
LocalObjectReference: corev1.LocalObjectReference{
268269
Name: from.Name,
269270
},
270271
Key: key,
@@ -275,11 +276,11 @@ func (o *EnvOptions) RunEnv() error {
275276
}
276277
case *corev1.ConfigMap:
277278
for key := range from.Data {
278-
envVar := kapi.EnvVar{
279+
envVar := corev1.EnvVar{
279280
Name: keyToEnvName(key),
280-
ValueFrom: &kapi.EnvVarSource{
281-
ConfigMapKeyRef: &kapi.ConfigMapKeySelector{
282-
LocalObjectReference: kapi.LocalObjectReference{
281+
ValueFrom: &corev1.EnvVarSource{
282+
ConfigMapKeyRef: &corev1.ConfigMapKeySelector{
283+
LocalObjectReference: corev1.LocalObjectReference{
283284
Name: from.Name,
284285
},
285286
Key: key,
@@ -342,9 +343,9 @@ func (o *EnvOptions) RunEnv() error {
342343
errored := []*resource.Info{}
343344
for _, info := range infos {
344345
name := getObjectName(info)
345-
ok, err := o.UpdatePodSpecForObject(info.Object, clientcmd.ConvertInteralPodSpecToExternal(func(spec *kapi.PodSpec) error {
346+
ok, err := o.UpdatePodSpecForObject(info.Object, func(spec *corev1.PodSpec) error {
346347
resolutionErrorsEncountered := false
347-
containers, _ := selectContainers(spec.Containers, o.ContainerSelector)
348+
containers, _ := selectContainersV1(spec.Containers, o.ContainerSelector)
348349
if len(containers) == 0 {
349350
fmt.Fprintf(o.ErrOut, "warning: %s does not have any containers matching %q\n", name, o.ContainerSelector)
350351
return nil
@@ -377,7 +378,7 @@ func (o *EnvOptions) RunEnv() error {
377378
continue
378379
}
379380

380-
value, err := envresolve.GetEnvVarRefValue(o.KubeClient, o.Namespace, store, env.ValueFrom, info.Object, c)
381+
value, err := envresolve.GetEnvVarRefValue(o.KClientSet, o.Namespace, store, env.ValueFrom, info.Object, c)
381382
// Print the resolved value
382383
if err == nil {
383384
fmt.Fprintf(o.Out, "%s=%s\n", env.Name, value)
@@ -408,10 +409,10 @@ func (o *EnvOptions) RunEnv() error {
408409
return errors.New("failed to retrieve valueFrom references")
409410
}
410411
return nil
411-
}))
412+
})
412413
if !ok {
413414
// This is a fallback function for objects that don't have pod spec.
414-
ok, err = updateObjectEnvironment(info.Object, func(vars *[]kapi.EnvVar) error {
415+
ok, err = updateObjectEnvironment(info.Object, func(vars *[]corev1.EnvVar) error {
415416
if vars == nil {
416417
return fmt.Errorf("no environment variables provided")
417418
}
@@ -499,40 +500,21 @@ updates:
499500
}
500501

501502
// UpdateObjectEnvironment update the environment variables in object specification.
502-
func updateObjectEnvironment(obj runtime.Object, fn func(*[]kapi.EnvVar) error) (bool, error) {
503+
func updateObjectEnvironment(obj runtime.Object, fn func(*[]corev1.EnvVar) error) (bool, error) {
503504
switch t := obj.(type) {
504505
case *buildv1.BuildConfig:
505506
if t.Spec.Strategy.CustomStrategy != nil {
506-
return true, convertInternalEnvVarToExternal(fn)(&t.Spec.Strategy.CustomStrategy.Env)
507+
return true, fn(&t.Spec.Strategy.CustomStrategy.Env)
507508
}
508509
if t.Spec.Strategy.SourceStrategy != nil {
509-
return true, convertInternalEnvVarToExternal(fn)(&t.Spec.Strategy.SourceStrategy.Env)
510+
return true, fn(&t.Spec.Strategy.SourceStrategy.Env)
510511
}
511512
if t.Spec.Strategy.DockerStrategy != nil {
512-
return true, convertInternalEnvVarToExternal(fn)(&t.Spec.Strategy.DockerStrategy.Env)
513+
return true, fn(&t.Spec.Strategy.DockerStrategy.Env)
513514
}
514515
if t.Spec.Strategy.JenkinsPipelineStrategy != nil {
515-
return true, convertInternalEnvVarToExternal(fn)(&t.Spec.Strategy.JenkinsPipelineStrategy.Env)
516+
return true, fn(&t.Spec.Strategy.JenkinsPipelineStrategy.Env)
516517
}
517518
}
518519
return false, fmt.Errorf("object does not contain any environment variables %T", obj)
519520
}
520-
521-
// TODO: this needs to die when switching to external versions
522-
func convertInternalEnvVarToExternal(inFn func(*[]kapi.EnvVar) error) func(*[]corev1.EnvVar) error {
523-
return func(specToMutate *[]corev1.EnvVar) error {
524-
externalEnvVar := &[]kapi.EnvVar{}
525-
if err := legacyscheme.Scheme.Convert(specToMutate, externalEnvVar, nil); err != nil {
526-
return err
527-
}
528-
if err := inFn(externalEnvVar); err != nil {
529-
return err
530-
}
531-
internalEnvVar := &[]corev1.EnvVar{}
532-
if err := legacyscheme.Scheme.Convert(externalEnvVar, internalEnvVar, nil); err != nil {
533-
return err
534-
}
535-
*specToMutate = *internalEnvVar
536-
return nil
537-
}
538-
}

pkg/oc/cli/set/helper.go

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"fmt"
55
"strings"
66

7+
corev1 "k8s.io/api/core/v1"
78
"k8s.io/apimachinery/pkg/runtime"
89
"k8s.io/apimachinery/pkg/util/sets"
910
"k8s.io/apimachinery/pkg/util/strategicpatch"
@@ -26,6 +27,20 @@ func selectContainers(containers []kapi.Container, spec string) ([]*kapi.Contain
2627
return out, skipped
2728
}
2829

30+
// TODO(juanvallejo): remove internal helper once all callers are switched to externals
31+
func selectContainersV1(containers []corev1.Container, spec string) ([]*corev1.Container, []*corev1.Container) {
32+
out := []*corev1.Container{}
33+
skipped := []*corev1.Container{}
34+
for i, c := range containers {
35+
if selectString(c.Name, spec) {
36+
out = append(out, &containers[i])
37+
} else {
38+
skipped = append(skipped, &containers[i])
39+
}
40+
}
41+
return out, skipped
42+
}
43+
2944
// selectString returns true if the provided string matches spec, where spec is a string with
3045
// a non-greedy '*' wildcard operator.
3146
// TODO: turn into a regex and handle greedy matches and backtracking.
@@ -63,8 +78,8 @@ func selectString(s, spec string) bool {
6378
return match
6479
}
6580

66-
func updateEnv(existing []kapi.EnvVar, env []kapi.EnvVar, remove []string) []kapi.EnvVar {
67-
out := []kapi.EnvVar{}
81+
func updateEnv(existing []corev1.EnvVar, env []corev1.EnvVar, remove []string) []corev1.EnvVar {
82+
out := []corev1.EnvVar{}
6883
covered := sets.NewString(remove...)
6984
for _, e := range existing {
7085
if covered.Has(e.Name) {
@@ -88,13 +103,13 @@ func updateEnv(existing []kapi.EnvVar, env []kapi.EnvVar, remove []string) []kap
88103
return out
89104
}
90105

91-
func findEnv(env []kapi.EnvVar, name string) (kapi.EnvVar, bool) {
106+
func findEnv(env []corev1.EnvVar, name string) (corev1.EnvVar, bool) {
92107
for _, e := range env {
93108
if e.Name == name {
94109
return e, true
95110
}
96111
}
97-
return kapi.EnvVar{}, false
112+
return corev1.EnvVar{}, false
98113
}
99114

100115
// Patch represents the result of a mutation to an object.

0 commit comments

Comments
 (0)