Skip to content

Commit bfe70a3

Browse files
Mark oc export deprecated and simplify what it does
Instead of calling the apiserver code, clear status. Mark deprecated in favor of oc get --export (which itself is now of questionable value). A future release should provide better logic for stripping out unnecessary fields.
1 parent 81635a2 commit bfe70a3

File tree

4 files changed

+16
-49
lines changed

4 files changed

+16
-49
lines changed

hack/import-restrictions.json

+4-14
Original file line numberDiff line numberDiff line change
@@ -386,6 +386,9 @@
386386
"checkedPackageRoots": [
387387
"github.com/openshift/origin/pkg/oc"
388388
],
389+
"ignoredSubTrees": [
390+
"github.com/openshift/origin/pkg/oc/admin/groups/examples"
391+
],
389392
"allowedImportPackageRoots": [
390393
"vendor/github.com/aws/aws-sdk-go",
391394
"vendor/github.com/containers/image",
@@ -452,7 +455,6 @@
452455
"github.com/openshift/origin/pkg/apps/apis/apps/test",
453456
"github.com/openshift/origin/pkg/apps/client/internalversion",
454457
"github.com/openshift/origin/pkg/apps/client/v1",
455-
"github.com/openshift/origin/pkg/apps/registry/deployconfig",
456458
"github.com/openshift/origin/pkg/apps/util",
457459
"github.com/openshift/origin/pkg/authorization/apis/authorization",
458460
"github.com/openshift/origin/pkg/authorization/reaper",
@@ -462,8 +464,6 @@
462464
"github.com/openshift/origin/pkg/build/apis/build/install",
463465
"github.com/openshift/origin/pkg/build/client",
464466
"github.com/openshift/origin/pkg/build/client/internalversion",
465-
"github.com/openshift/origin/pkg/build/registry/build",
466-
"github.com/openshift/origin/pkg/build/registry/buildconfig",
467467
"github.com/openshift/origin/pkg/build/util",
468468
"github.com/openshift/origin/pkg/bulk",
469469
"github.com/openshift/origin/pkg/client/config",
@@ -472,7 +472,7 @@
472472
"github.com/openshift/origin/pkg/cmd/server/apis/config",
473473
"github.com/openshift/origin/pkg/cmd/server/apis/config/install",
474474
"github.com/openshift/origin/pkg/cmd/server/apis/config/latest",
475-
"github.com/openshift/origin/pkg/cmd/server/apis/config/validation",
475+
"github.com/openshift/origin/pkg/cmd/server/apis/config/validation/ldap",
476476
"github.com/openshift/origin/pkg/cmd/server/bootstrappolicy",
477477
"github.com/openshift/origin/pkg/cmd/server/etcd",
478478
"github.com/openshift/origin/pkg/cmd/templates",
@@ -550,16 +550,6 @@
550550
"vendor/k8s.io/kubernetes/pkg/serviceaccount",
551551
"vendor/k8s.io/kubernetes/pkg/version",
552552

553-
"vendor/k8s.io/kubernetes/pkg/registry/core/endpoint",
554-
"vendor/k8s.io/kubernetes/pkg/registry/core/namespace",
555-
"vendor/k8s.io/kubernetes/pkg/registry/core/node",
556-
"vendor/k8s.io/kubernetes/pkg/registry/core/persistentvolume",
557-
"vendor/k8s.io/kubernetes/pkg/registry/core/persistentvolumeclaim",
558-
"vendor/k8s.io/kubernetes/pkg/registry/core/pod",
559-
"vendor/k8s.io/kubernetes/pkg/registry/core/replicationcontroller",
560-
"vendor/k8s.io/kubernetes/pkg/registry/core/resourcequota",
561-
"vendor/k8s.io/kubernetes/pkg/registry/core/secret",
562-
"vendor/k8s.io/kubernetes/pkg/registry/core/serviceaccount",
563553
"vendor/k8s.io/kubernetes/pkg/registry/rbac/reconciliation",
564554
"vendor/k8s.io/kubernetes/pkg/registry/rbac/validation"
565555
]

pkg/oc/cli/cmd/export.go

+2
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,8 @@ func NewCmdExport(fullName string, f *clientcmd.Factory, in io.Reader, out io.Wr
6666
kcmdutil.CheckErr(err)
6767
},
6868
}
69+
cmd.Deprecated = "Use the `get --export` command instead."
70+
6971
cmd.Flags().String("as-template", "", "Output a Template object with specified name instead of a List or single object.")
7072
cmd.Flags().Bool("exact", false, "If true, preserve fields that may be cluster specific, such as service clusterIPs or generated names")
7173
cmd.Flags().Bool("raw", false, "If true, do not alter the resources in any way after they are loaded.")

pkg/oc/cli/cmd/exporter.go

+7-33
Original file line numberDiff line numberDiff line change
@@ -11,24 +11,10 @@ import (
1111
"k8s.io/apimachinery/pkg/api/meta"
1212
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1313
"k8s.io/apimachinery/pkg/runtime"
14-
apirequest "k8s.io/apiserver/pkg/endpoints/request"
1514
kapi "k8s.io/kubernetes/pkg/apis/core"
16-
"k8s.io/kubernetes/pkg/registry/core/endpoint"
17-
"k8s.io/kubernetes/pkg/registry/core/namespace"
18-
"k8s.io/kubernetes/pkg/registry/core/node"
19-
"k8s.io/kubernetes/pkg/registry/core/persistentvolume"
20-
"k8s.io/kubernetes/pkg/registry/core/persistentvolumeclaim"
21-
"k8s.io/kubernetes/pkg/registry/core/pod"
22-
"k8s.io/kubernetes/pkg/registry/core/replicationcontroller"
23-
"k8s.io/kubernetes/pkg/registry/core/resourcequota"
24-
"k8s.io/kubernetes/pkg/registry/core/secret"
25-
"k8s.io/kubernetes/pkg/registry/core/serviceaccount"
2615

2716
appsapi "github.com/openshift/origin/pkg/apps/apis/apps"
28-
deployrest "github.com/openshift/origin/pkg/apps/registry/deployconfig"
2917
buildapi "github.com/openshift/origin/pkg/build/apis/build"
30-
buildrest "github.com/openshift/origin/pkg/build/registry/build"
31-
buildconfigrest "github.com/openshift/origin/pkg/build/registry/buildconfig"
3218
imageapi "github.com/openshift/origin/pkg/image/apis/image"
3319
routeapi "github.com/openshift/origin/pkg/route/apis/route"
3420
osautil "github.com/openshift/origin/pkg/serviceaccounts/util"
@@ -66,34 +52,29 @@ func (e *DefaultExporter) Export(obj runtime.Object, exact bool) error {
6652
} else {
6753
glog.V(4).Infof("Object of type %v does not have ObjectMeta: %v", reflect.TypeOf(obj), err)
6854
}
69-
ctx := apirequest.NewContext()
7055

7156
switch t := obj.(type) {
7257
case *kapi.Endpoints:
73-
endpoint.Strategy.PrepareForCreate(ctx, obj)
7458
case *kapi.ResourceQuota:
75-
resourcequota.Strategy.PrepareForCreate(ctx, obj)
59+
t.Status = kapi.ResourceQuotaStatus{}
7660
case *kapi.LimitRange:
7761
// TODO: this needs to be fixed
7862
// limitrange.Strategy.PrepareForCreate(obj)
7963
case *kapi.Node:
80-
node.Strategy.PrepareForCreate(ctx, obj)
8164
if exact {
8265
return nil
8366
}
8467
// Nodes are the only resources that allow direct status edits, therefore
8568
// we clear that without exact so that the node value can be reused.
8669
t.Status = kapi.NodeStatus{}
8770
case *kapi.Namespace:
88-
namespace.Strategy.PrepareForCreate(ctx, obj)
8971
case *kapi.PersistentVolumeClaim:
90-
persistentvolumeclaim.Strategy.PrepareForCreate(ctx, obj)
72+
t.Status = kapi.PersistentVolumeClaimStatus{}
9173
case *kapi.PersistentVolume:
92-
persistentvolume.Strategy.PrepareForCreate(ctx, obj)
9374
case *kapi.ReplicationController:
94-
replicationcontroller.Strategy.PrepareForCreate(ctx, obj)
75+
t.Status = kapi.ReplicationControllerStatus{}
9576
case *kapi.Pod:
96-
pod.Strategy.PrepareForCreate(ctx, obj)
77+
t.Status = kapi.PodStatus{}
9778
case *kapi.PodTemplate:
9879
case *kapi.Service:
9980
// TODO: service does not yet have a strategy
@@ -110,7 +91,6 @@ func (e *DefaultExporter) Export(obj runtime.Object, exact bool) error {
11091
}
11192
}
11293
case *kapi.Secret:
113-
secret.Strategy.PrepareForCreate(ctx, obj)
11494
if exact {
11595
return nil
11696
}
@@ -119,7 +99,6 @@ func (e *DefaultExporter) Export(obj runtime.Object, exact bool) error {
11999
return ErrExportOmit
120100
}
121101
case *kapi.ServiceAccount:
122-
serviceaccount.Strategy.PrepareForCreate(ctx, obj)
123102
if exact {
124103
return nil
125104
}
@@ -146,22 +125,17 @@ func (e *DefaultExporter) Export(obj runtime.Object, exact bool) error {
146125
t.Secrets = newMountableSecrets
147126

148127
case *appsapi.DeploymentConfig:
149-
return deployrest.CommonStrategy.Export(ctx, obj, exact)
128+
t.Status = appsapi.DeploymentConfigStatus{}
150129

151130
case *buildapi.BuildConfig:
152-
// Use the legacy strategy to avoid setting prune defaults if
153-
// the object wasn't created with them in the first place.
154-
// TODO: use the exportstrategy pattern instead.
155-
buildconfigrest.LegacyStrategy.PrepareForCreate(ctx, obj)
156-
// TODO: should be handled by prepare for create
157-
t.Status.LastVersion = 0
131+
t.Status = buildapi.BuildConfigStatus{}
132+
158133
for i := range t.Spec.Triggers {
159134
if p := t.Spec.Triggers[i].ImageChange; p != nil {
160135
p.LastTriggeredImageID = ""
161136
}
162137
}
163138
case *buildapi.Build:
164-
buildrest.Strategy.PrepareForCreate(ctx, obj)
165139
// TODO: should be handled by prepare for create
166140
t.Status.Duration = 0
167141
t.Status.Phase = buildapi.BuildPhaseNew

pkg/oc/cli/cmd/exporter_test.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66

77
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
88
"k8s.io/apimachinery/pkg/runtime"
9+
"k8s.io/apimachinery/pkg/util/diff"
910
kapi "k8s.io/kubernetes/pkg/apis/core"
1011

1112
appsapi "github.com/openshift/origin/pkg/apps/apis/apps"
@@ -33,7 +34,7 @@ func TestExport(t *testing.T) {
3334
expectedObj: &appsapi.DeploymentConfig{
3435
ObjectMeta: metav1.ObjectMeta{
3536
Name: "config",
36-
Generation: 1,
37+
Generation: 0,
3738
},
3839
Spec: appstest.OkDeploymentConfigSpec(),
3940
Status: appsapi.DeploymentConfigStatus{},
@@ -157,7 +158,7 @@ func TestExport(t *testing.T) {
157158
}
158159

159160
if !reflect.DeepEqual(test.object, test.expectedObj) {
160-
t.Errorf("%s: object mismatch: expected \n%#v\ngot \n%#v\n", test.name, test.expectedObj, test.object)
161+
t.Errorf("%s: object mismatch: %s", test.name, diff.ObjectReflectDiff(test.expectedObj, test.object))
161162
}
162163
}
163164
}

0 commit comments

Comments
 (0)