Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 4 additions & 6 deletions hack/import-restrictions.json
Original file line number Diff line number Diff line change
Expand Up @@ -524,16 +524,15 @@
"vendor/github.com/davecgh/go-spew/spew",

"github.com/openshift/origin/pkg/authorization/generated",
"github.com/openshift/origin/pkg/build/apis/build/v1",
"github.com/openshift/origin/pkg/build/generated",
"github.com/openshift/origin/pkg/build/apis/build/internal_helpers",
"github.com/openshift/origin/pkg/image/apis/image/v1",
"github.com/openshift/origin/pkg/image/apis/image/v1",
"github.com/openshift/origin/pkg/image/generated",
"github.com/openshift/origin/pkg/image/util",
"github.com/openshift/origin/pkg/image/util",
"github.com/openshift/origin/pkg/network/generated",
"github.com/openshift/origin/pkg/oauth/generated",
"github.com/openshift/origin/pkg/project/generated",
"github.com/openshift/origin/pkg/quota/generated",
"github.com/openshift/origin/pkg/route/apis/route/v1",
"github.com/openshift/origin/pkg/route/generated",
"github.com/openshift/origin/pkg/template/apis/template/v1",
"github.com/openshift/origin/pkg/template/client/v1",
Expand Down Expand Up @@ -561,6 +560,7 @@
"github.com/openshift/origin/pkg/build/apis/build",
"github.com/openshift/origin/pkg/build/apis/build/install",
"github.com/openshift/origin/pkg/build/buildapihelpers",
"github.com/openshift/origin/pkg/build/apis/build/internal_helpers",
"github.com/openshift/origin/pkg/build/client",
"github.com/openshift/origin/pkg/build/client/v1",
"github.com/openshift/origin/pkg/build/util",
Expand All @@ -587,7 +587,6 @@
"github.com/openshift/origin/pkg/cmd/util/variable",
"github.com/openshift/origin/pkg/git",
"github.com/openshift/origin/pkg/image/apis/image",
"github.com/openshift/origin/pkg/image/apis/image/install",
"github.com/openshift/origin/pkg/image/apis/image/v1/trigger",
"github.com/openshift/origin/pkg/image/apis/image/docker10",
"github.com/openshift/origin/pkg/image/apis/image/reference",
Expand Down Expand Up @@ -645,7 +644,6 @@
"vendor/github.com/miekg/dns",

"vendor/k8s.io/kubernetes/pkg/api/legacyscheme",
"vendor/k8s.io/kubernetes/pkg/api/ref",
"vendor/k8s.io/kubernetes/pkg/controller",
"vendor/k8s.io/kubernetes/pkg/controller/deployment/util",
"vendor/k8s.io/kubernetes/pkg/credentialprovider",
Expand Down
149 changes: 109 additions & 40 deletions pkg/api/imagereferencemutators/pods.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,13 @@ package imagereferencemutators
import (
"fmt"

appsv1beta1 "k8s.io/api/apps/v1beta1"
kappsv1 "k8s.io/api/apps/v1"
kappsv1beta1 "k8s.io/api/apps/v1beta1"
kappsv1beta2 "k8s.io/api/apps/v1beta2"
batchv1 "k8s.io/api/batch/v1"
batchv1beta1 "k8s.io/api/batch/v1beta1"
batchv2alpha1 "k8s.io/api/batch/v2alpha1"
corev1 "k8s.io/api/core/v1"
kapiv1 "k8s.io/api/core/v1"
extensionsv1beta1 "k8s.io/api/extensions/v1beta1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
Expand Down Expand Up @@ -93,38 +95,72 @@ func GetPodSpec(obj runtime.Object) (*kapi.PodSpec, *field.Path, error) {
// GetPodSpecV1 returns a mutable pod spec out of the provided object, including a field path
// to the field in the object, or an error if the object does not contain a pod spec.
// This only returns pod specs for v1 compatible objects.
func GetPodSpecV1(obj runtime.Object) (*kapiv1.PodSpec, *field.Path, error) {
func GetPodSpecV1(obj runtime.Object) (*corev1.PodSpec, *field.Path, error) {
switch r := obj.(type) {
case *kapiv1.Pod:

case *corev1.Pod:
return &r.Spec, field.NewPath("spec"), nil
case *kapiv1.PodTemplate:

case *corev1.PodTemplate:
return &r.Template.Spec, field.NewPath("template", "spec"), nil
case *kapiv1.ReplicationController:

case *corev1.ReplicationController:
if r.Spec.Template != nil {
return &r.Spec.Template.Spec, field.NewPath("spec", "template", "spec"), nil
}

case *extensionsv1beta1.DaemonSet:
return &r.Spec.Template.Spec, field.NewPath("spec", "template", "spec"), nil
case *kappsv1.DaemonSet:
return &r.Spec.Template.Spec, field.NewPath("spec", "template", "spec"), nil
case *kappsv1beta2.DaemonSet:
return &r.Spec.Template.Spec, field.NewPath("spec", "template", "spec"), nil

case *extensionsv1beta1.Deployment:
return &r.Spec.Template.Spec, field.NewPath("spec", "template", "spec"), nil
case *kappsv1.Deployment:
return &r.Spec.Template.Spec, field.NewPath("spec", "template", "spec"), nil
case *kappsv1beta1.Deployment:
return &r.Spec.Template.Spec, field.NewPath("spec", "template", "spec"), nil
case *kappsv1beta2.Deployment:
return &r.Spec.Template.Spec, field.NewPath("spec", "template", "spec"), nil

case *extensionsv1beta1.ReplicaSet:
return &r.Spec.Template.Spec, field.NewPath("spec", "template", "spec"), nil
case *kappsv1.ReplicaSet:
return &r.Spec.Template.Spec, field.NewPath("spec", "template", "spec"), nil
case *kappsv1beta2.ReplicaSet:
return &r.Spec.Template.Spec, field.NewPath("spec", "template", "spec"), nil

case *batchv1.Job:
return &r.Spec.Template.Spec, field.NewPath("spec", "template", "spec"), nil

case *batchv2alpha1.CronJob:
return &r.Spec.JobTemplate.Spec.Template.Spec, field.NewPath("spec", "jobTemplate", "spec", "template", "spec"), nil
case *batchv1beta1.CronJob:
return &r.Spec.JobTemplate.Spec.Template.Spec, field.NewPath("spec", "jobTemplate", "spec", "template", "spec"), nil

case *batchv2alpha1.JobTemplate:
return &r.Template.Spec.Template.Spec, field.NewPath("template", "spec", "template", "spec"), nil
case *appsv1beta1.StatefulSet:
case *batchv1beta1.JobTemplate:
return &r.Template.Spec.Template.Spec, field.NewPath("template", "spec", "template", "spec"), nil

case *kappsv1.StatefulSet:
return &r.Spec.Template.Spec, field.NewPath("spec", "template", "spec"), nil
case *kappsv1beta1.StatefulSet:
return &r.Spec.Template.Spec, field.NewPath("spec", "template", "spec"), nil
case *appsv1beta1.Deployment:
case *kappsv1beta2.StatefulSet:
return &r.Spec.Template.Spec, field.NewPath("spec", "template", "spec"), nil

case *securityv1.PodSecurityPolicySubjectReview:
return &r.Spec.Template.Spec, field.NewPath("spec", "template", "spec"), nil

case *securityv1.PodSecurityPolicySelfSubjectReview:
return &r.Spec.Template.Spec, field.NewPath("spec", "template", "spec"), nil

case *securityv1.PodSecurityPolicyReview:
return &r.Spec.Template.Spec, field.NewPath("spec", "template", "spec"), nil

case *appsv1.DeploymentConfig:
if r.Spec.Template != nil {
return &r.Spec.Template.Spec, field.NewPath("spec", "template", "spec"), nil
Expand All @@ -137,68 +173,101 @@ func GetPodSpecV1(obj runtime.Object) (*kapiv1.PodSpec, *field.Path, error) {
// the object contains, or false if no such object is available.
func GetTemplateMetaObject(obj runtime.Object) (metav1.Object, bool) {
switch r := obj.(type) {
case *kapiv1.PodTemplate:

case *kapi.PodTemplate:
return &r.Template.ObjectMeta, true
case *corev1.PodTemplate:
return &r.Template.ObjectMeta, true
case *kapiv1.ReplicationController:

case *kapi.ReplicationController:
if r.Spec.Template != nil {
return &r.Spec.Template.ObjectMeta, true
}
case *corev1.ReplicationController:
if r.Spec.Template != nil {
return &r.Spec.Template.ObjectMeta, true
}

case *extensions.DaemonSet:
return &r.Spec.Template.ObjectMeta, true
case *extensionsv1beta1.DaemonSet:
return &r.Spec.Template.ObjectMeta, true
case *extensionsv1beta1.Deployment:
case *kappsv1.DaemonSet:
return &r.Spec.Template.ObjectMeta, true
case *extensionsv1beta1.ReplicaSet:
case *kappsv1beta2.DaemonSet:
return &r.Spec.Template.ObjectMeta, true
case *batchv1.Job:

case *extensions.Deployment:
return &r.Spec.Template.ObjectMeta, true
case *batchv2alpha1.CronJob:
return &r.Spec.JobTemplate.Spec.Template.ObjectMeta, true
case *batchv2alpha1.JobTemplate:
return &r.Template.Spec.Template.ObjectMeta, true
case *appsv1beta1.StatefulSet:
case *extensionsv1beta1.Deployment:
return &r.Spec.Template.ObjectMeta, true
case *appsv1beta1.Deployment:
case *kappsv1.Deployment:
return &r.Spec.Template.ObjectMeta, true
case *securityv1.PodSecurityPolicySubjectReview:
case *kappsv1beta1.Deployment:
return &r.Spec.Template.ObjectMeta, true
case *securityv1.PodSecurityPolicySelfSubjectReview:
case *kappsv1beta2.Deployment:
return &r.Spec.Template.ObjectMeta, true
case *securityv1.PodSecurityPolicyReview:

case *extensions.ReplicaSet:
return &r.Spec.Template.ObjectMeta, true
case *appsv1.DeploymentConfig:
if r.Spec.Template != nil {
return &r.Spec.Template.ObjectMeta, true
}
case *kapi.PodTemplate:
return &r.Template.ObjectMeta, true
case *kapi.ReplicationController:
if r.Spec.Template != nil {
return &r.Spec.Template.ObjectMeta, true
}
case *extensions.DaemonSet:
case *extensionsv1beta1.ReplicaSet:
return &r.Spec.Template.ObjectMeta, true
case *extensions.Deployment:
case *kappsv1.ReplicaSet:
return &r.Spec.Template.ObjectMeta, true
case *extensions.ReplicaSet:
case *kappsv1beta2.ReplicaSet:
return &r.Spec.Template.ObjectMeta, true

case *batch.Job:
return &r.Spec.Template.ObjectMeta, true
case *batchv1.Job:
return &r.Spec.Template.ObjectMeta, true

case *batch.CronJob:
return &r.Spec.JobTemplate.Spec.Template.ObjectMeta, true
case *batchv2alpha1.CronJob:
return &r.Spec.JobTemplate.Spec.Template.ObjectMeta, true
case *batchv1beta1.CronJob:
return &r.Spec.JobTemplate.Spec.Template.ObjectMeta, true

case *batch.JobTemplate:
return &r.Template.Spec.Template.ObjectMeta, true
case *batchv2alpha1.JobTemplate:
return &r.Template.Spec.Template.ObjectMeta, true
case *batchv1beta1.JobTemplate:
return &r.Template.Spec.Template.ObjectMeta, true

case *apps.StatefulSet:
return &r.Spec.Template.ObjectMeta, true
case *kappsv1.StatefulSet:
return &r.Spec.Template.ObjectMeta, true
case *kappsv1beta1.StatefulSet:
return &r.Spec.Template.ObjectMeta, true
case *kappsv1beta2.StatefulSet:
return &r.Spec.Template.ObjectMeta, true

case *securityapi.PodSecurityPolicySubjectReview:
return &r.Spec.Template.ObjectMeta, true
case *securityv1.PodSecurityPolicySubjectReview:
return &r.Spec.Template.ObjectMeta, true

case *securityapi.PodSecurityPolicySelfSubjectReview:
return &r.Spec.Template.ObjectMeta, true
case *securityv1.PodSecurityPolicySelfSubjectReview:
return &r.Spec.Template.ObjectMeta, true

case *securityapi.PodSecurityPolicyReview:
return &r.Spec.Template.ObjectMeta, true
case *securityv1.PodSecurityPolicyReview:
return &r.Spec.Template.ObjectMeta, true

case *appsapi.DeploymentConfig:
if r.Spec.Template != nil {
return &r.Spec.Template.ObjectMeta, true
}
case *appsv1.DeploymentConfig:
if r.Spec.Template != nil {
return &r.Spec.Template.ObjectMeta, true
}
}
return nil, false
}
Expand All @@ -212,7 +281,7 @@ func (m containerMutator) GetImage() string { return m.Image }
func (m containerMutator) SetImage(image string) { m.Image = image }

type containerV1Mutator struct {
*kapiv1.Container
*corev1.Container
}

func (m containerV1Mutator) GetName() string { return m.Name }
Expand Down Expand Up @@ -322,16 +391,16 @@ func (m *podSpecMutator) GetContainerByIndex(init bool, i int) (ContainerMutator

// podSpecV1Mutator implements the mutation interface over objects with a pod spec.
type podSpecV1Mutator struct {
spec *kapiv1.PodSpec
oldSpec *kapiv1.PodSpec
spec *corev1.PodSpec
oldSpec *corev1.PodSpec
path *field.Path
}

func (m *podSpecV1Mutator) Path() *field.Path {
return m.path
}

func hasIdenticalPodSpecV1Image(spec *kapiv1.PodSpec, containerName, image string) bool {
func hasIdenticalPodSpecV1Image(spec *corev1.PodSpec, containerName, image string) bool {
if spec == nil {
return false
}
Expand Down Expand Up @@ -405,7 +474,7 @@ func (m *podSpecV1Mutator) GetContainerByName(name string) (ContainerMutator, bo
}

func (m *podSpecV1Mutator) GetContainerByIndex(init bool, i int) (ContainerMutator, bool) {
var container *kapiv1.Container
var container *corev1.Container
spec := m.spec
if init {
if i < 0 || i >= len(spec.InitContainers) {
Expand Down
Loading