Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

External graph library and company #20532

Merged
merged 9 commits into from
Aug 21, 2018
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