Skip to content

Commit

Permalink
Merge pull request #16149 from mfojtik/deploy-clientset-cmd
Browse files Browse the repository at this point in the history
Automatic merge from submit-queue

apps: replace legacy client with generated in pkg/deploy/cmd

Ignore first 3 commits, they are part of #16100

@deads2k last bits in apps group
  • Loading branch information
openshift-merge-robot authored Sep 6, 2017
2 parents 0428e54 + 9ff8c20 commit bb340c5
Show file tree
Hide file tree
Showing 17 changed files with 168 additions and 77 deletions.
21 changes: 0 additions & 21 deletions pkg/client/deploymentconfigs.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import (
"k8s.io/apimachinery/pkg/watch"
kapi "k8s.io/kubernetes/pkg/api"
extensionsv1beta1 "k8s.io/kubernetes/pkg/apis/extensions/v1beta1"
"k8s.io/kubernetes/pkg/client/retry"

deployapi "github.com/openshift/origin/pkg/deploy/apis/apps"
)
Expand Down Expand Up @@ -169,23 +168,3 @@ func (c *deploymentConfigs) Instantiate(request *deployapi.DeploymentRequest) (*
err := resp.Into(result)
return result, err
}

type updateConfigFunc func(d *deployapi.DeploymentConfig)

// UpdateConfigWithRetries will try to update a deployment config and ignore any update conflicts.
func UpdateConfigWithRetries(dn DeploymentConfigsNamespacer, namespace, name string, applyUpdate updateConfigFunc) (*deployapi.DeploymentConfig, error) {
var config *deployapi.DeploymentConfig

resultErr := retry.RetryOnConflict(retry.DefaultBackoff, func() error {
var err error
config, err = dn.DeploymentConfigs(namespace).Get(name, metav1.GetOptions{})
if err != nil {
return err
}
// Apply the update, then attempt to push it to the apiserver.
applyUpdate(config)
config, err = dn.DeploymentConfigs(namespace).Update(config)
return err
})
return config, resultErr
}
30 changes: 19 additions & 11 deletions pkg/cmd/util/clientcmd/factory_object_mapping.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ import (
"github.com/openshift/origin/pkg/client"
deployapi "github.com/openshift/origin/pkg/deploy/apis/apps"
deploycmd "github.com/openshift/origin/pkg/deploy/cmd"
appsclient "github.com/openshift/origin/pkg/deploy/generated/internalclientset"
"github.com/openshift/origin/pkg/oc/cli/describe"
"github.com/openshift/origin/pkg/security/legacyclient"
userapi "github.com/openshift/origin/pkg/user/apis/user"
Expand Down Expand Up @@ -221,11 +222,15 @@ func (f *ring1Factory) LogsForObject(object, options runtime.Object, timeout tim

func (f *ring1Factory) Scaler(mapping *meta.RESTMapping) (kubectl.Scaler, error) {
if deployapi.IsKindOrLegacy("DeploymentConfig", mapping.GroupVersionKind.GroupKind()) {
oc, kc, err := f.clientAccessFactory.Clients()
_, kc, err := f.clientAccessFactory.Clients()
if err != nil {
return nil, err
}
config, err := f.clientAccessFactory.OpenShiftClientConfig().ClientConfig()
if err != nil {
return nil, err
}
return deploycmd.NewDeploymentConfigScaler(oc, kc), nil
return deploycmd.NewDeploymentConfigScaler(appsclient.NewForConfigOrDie(config), kc), nil
}
return f.kubeObjectMappingFactory.Scaler(mapping)
}
Expand All @@ -234,11 +239,15 @@ func (f *ring1Factory) Reaper(mapping *meta.RESTMapping) (kubectl.Reaper, error)
gk := mapping.GroupVersionKind.GroupKind()
switch {
case deployapi.IsKindOrLegacy("DeploymentConfig", gk):
oc, kc, err := f.clientAccessFactory.Clients()
_, kc, err := f.clientAccessFactory.Clients()
if err != nil {
return nil, err
}
return deploycmd.NewDeploymentConfigReaper(oc, kc), nil
config, err := f.clientAccessFactory.OpenShiftClientConfig().ClientConfig()
if err != nil {
return nil, err
}
return deploycmd.NewDeploymentConfigReaper(appsclient.NewForConfigOrDie(config), kc), nil
case authorizationapi.IsKindOrLegacy("Role", gk):
oc, _, err := f.clientAccessFactory.Clients()
if err != nil {
Expand Down Expand Up @@ -287,34 +296,33 @@ func (f *ring1Factory) Reaper(mapping *meta.RESTMapping) (kubectl.Reaper, error)

func (f *ring1Factory) HistoryViewer(mapping *meta.RESTMapping) (kubectl.HistoryViewer, error) {
if deployapi.IsKindOrLegacy("DeploymentConfig", mapping.GroupVersionKind.GroupKind()) {
oc, kc, err := f.clientAccessFactory.Clients()
_, kc, err := f.clientAccessFactory.Clients()
if err != nil {
return nil, err
}
return deploycmd.NewDeploymentConfigHistoryViewer(oc, kc), nil
return deploycmd.NewDeploymentConfigHistoryViewer(kc), nil
}
return f.kubeObjectMappingFactory.HistoryViewer(mapping)
}

func (f *ring1Factory) Rollbacker(mapping *meta.RESTMapping) (kubectl.Rollbacker, error) {
if deployapi.IsKindOrLegacy("DeploymentConfig", mapping.GroupVersionKind.GroupKind()) {
oc, _, err := f.clientAccessFactory.Clients()
config, err := f.clientAccessFactory.OpenShiftClientConfig().ClientConfig()
if err != nil {
return nil, err
}
return deploycmd.NewDeploymentConfigRollbacker(oc), nil
return deploycmd.NewDeploymentConfigRollbacker(appsclient.NewForConfigOrDie(config)), nil
}
return f.kubeObjectMappingFactory.Rollbacker(mapping)
}

func (f *ring1Factory) StatusViewer(mapping *meta.RESTMapping) (kubectl.StatusViewer, error) {
oc, _, err := f.clientAccessFactory.Clients()
config, err := f.clientAccessFactory.OpenShiftClientConfig().ClientConfig()
if err != nil {
return nil, err
}

if deployapi.IsKindOrLegacy("DeploymentConfig", mapping.GroupVersionKind.GroupKind()) {
return deploycmd.NewDeploymentConfigStatusViewer(oc), nil
return deploycmd.NewDeploymentConfigStatusViewer(appsclient.NewForConfigOrDie(config)), nil
}
return f.kubeObjectMappingFactory.StatusViewer(mapping)
}
Expand Down
1 change: 1 addition & 0 deletions pkg/deploy/apis/apps/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,7 @@ const (

// +genclient
// +genclient:method=Instantiate,verb=create,subresource=instantiate,input=DeploymentRequest
// +genclient:method=Rollback,verb=create,subresource=rollback,input=DeploymentConfigRollback
// +genclient:method=GetScale,verb=get,subresource=scale,result=k8s.io/kubernetes/pkg/apis/extensions/v1beta1.Scale
// +genclient:method=UpdateScale,verb=update,subresource=scale,input=k8s.io/kubernetes/pkg/apis/extensions/v1beta1.Scale,result=k8s.io/kubernetes/pkg/apis/extensions/v1beta1.Scale

Expand Down
1 change: 1 addition & 0 deletions pkg/deploy/apis/apps/v1/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import (

// +genclient
// +genclient:method=Instantiate,verb=create,subresource=instantiate,input=DeploymentRequest
// +genclient:method=Rollback,verb=create,subresource=rollback,input=DeploymentConfigRollback
// +genclient:method=GetScale,verb=get,subresource=scale,result=k8s.io/kubernetes/pkg/apis/extensions/v1beta1.Scale
// +genclient:method=UpdateScale,verb=update,subresource=scale,input=k8s.io/kubernetes/pkg/apis/extensions/v1beta1.Scale,result=k8s.io/kubernetes/pkg/apis/extensions/v1beta1.Scale

Expand Down
38 changes: 30 additions & 8 deletions pkg/deploy/cmd/delete.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,30 +9,52 @@ import (
"k8s.io/apimachinery/pkg/util/wait"
kapi "k8s.io/kubernetes/pkg/api"
kclientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
"k8s.io/kubernetes/pkg/client/retry"
"k8s.io/kubernetes/pkg/kubectl"
kutil "k8s.io/kubernetes/pkg/util"

"github.com/openshift/origin/pkg/client"
deployapi "github.com/openshift/origin/pkg/deploy/apis/apps"
appsclient "github.com/openshift/origin/pkg/deploy/generated/internalclientset"
appsinternal "github.com/openshift/origin/pkg/deploy/generated/internalclientset/typed/apps/internalversion"
"github.com/openshift/origin/pkg/deploy/util"
)

// NewDeploymentConfigReaper returns a new reaper for deploymentConfigs
func NewDeploymentConfigReaper(oc client.Interface, kc kclientset.Interface) kubectl.Reaper {
return &DeploymentConfigReaper{oc: oc, kc: kc, pollInterval: kubectl.Interval, timeout: kubectl.Timeout}
func NewDeploymentConfigReaper(appsClient appsclient.Interface, kc kclientset.Interface) kubectl.Reaper {
return &DeploymentConfigReaper{appsClient: appsClient, kc: kc, pollInterval: kubectl.Interval, timeout: kubectl.Timeout}
}

// DeploymentConfigReaper implements the Reaper interface for deploymentConfigs
type DeploymentConfigReaper struct {
oc client.Interface
appsClient appsclient.Interface
kc kclientset.Interface
pollInterval, timeout time.Duration
}

type updateConfigFunc func(d *deployapi.DeploymentConfig)

// updateConfigWithRetries will try to update a deployment config and ignore any update conflicts.
func updateConfigWithRetries(dn appsinternal.DeploymentConfigsGetter, namespace, name string, applyUpdate updateConfigFunc) (*deployapi.DeploymentConfig, error) {
var config *deployapi.DeploymentConfig

resultErr := retry.RetryOnConflict(retry.DefaultBackoff, func() error {
var err error
config, err = dn.DeploymentConfigs(namespace).Get(name, metav1.GetOptions{})
if err != nil {
return err
}
// Apply the update, then attempt to push it to the apiserver.
applyUpdate(config)
config, err = dn.DeploymentConfigs(namespace).Update(config)
return err
})
return config, resultErr
}

// pause marks the deployment configuration as paused to avoid triggering new
// deployments.
func (reaper *DeploymentConfigReaper) pause(namespace, name string) (*deployapi.DeploymentConfig, error) {
return client.UpdateConfigWithRetries(reaper.oc, namespace, name, func(d *deployapi.DeploymentConfig) {
return updateConfigWithRetries(reaper.appsClient.Apps(), namespace, name, func(d *deployapi.DeploymentConfig) {
d.Spec.RevisionHistoryLimit = kutil.Int32Ptr(0)
d.Spec.Replicas = 0
d.Spec.Paused = true
Expand All @@ -58,7 +80,7 @@ func (reaper *DeploymentConfigReaper) Stop(namespace, name string, timeout time.
// Determine if the deployment config controller noticed the pause.
if !configNotFound {
if err := wait.Poll(1*time.Second, 1*time.Minute, func() (bool, error) {
dc, err := reaper.oc.DeploymentConfigs(namespace).Get(name, metav1.GetOptions{})
dc, err := reaper.appsClient.Apps().DeploymentConfigs(namespace).Get(name, metav1.GetOptions{})
if err != nil {
return false, err
}
Expand All @@ -72,7 +94,7 @@ func (reaper *DeploymentConfigReaper) Stop(namespace, name string, timeout time.
// old API that does not support pausing. In that case, we delete the
// deployment config to stay backward compatible.
if !isPaused {
if err := reaper.oc.DeploymentConfigs(namespace).Delete(name); err != nil {
if err := reaper.appsClient.Apps().DeploymentConfigs(namespace).Delete(name, &metav1.DeleteOptions{}); err != nil {
return err
}
// Setting this to true avoid deleting the config at the end.
Expand Down Expand Up @@ -133,5 +155,5 @@ func (reaper *DeploymentConfigReaper) Stop(namespace, name string, timeout time.
return nil
}

return reaper.oc.DeploymentConfigs(namespace).Delete(name)
return reaper.appsClient.Apps().DeploymentConfigs(namespace).Delete(name, &metav1.DeleteOptions{})
}
24 changes: 12 additions & 12 deletions pkg/deploy/cmd/delete_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,10 @@ import (
kapi "k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/fake"

"github.com/openshift/origin/pkg/client/testclient"
deployapi "github.com/openshift/origin/pkg/deploy/apis/apps"
_ "github.com/openshift/origin/pkg/deploy/apis/apps/install"
deploytest "github.com/openshift/origin/pkg/deploy/apis/apps/test"
appsfake "github.com/openshift/origin/pkg/deploy/generated/internalclientset/fake"
deployutil "github.com/openshift/origin/pkg/deploy/util"
)

Expand All @@ -35,7 +35,7 @@ func mkdeploymentlist(versions ...int64) *kapi.ReplicationControllerList {

func TestStop(t *testing.T) {
var (
deploymentConfigsResource = schema.GroupVersionResource{Resource: "deploymentconfigs"}
deploymentConfigsResource = schema.GroupVersionResource{Group: "apps.openshift.io", Resource: "deploymentconfigs"}
replicationControllersResource = schema.GroupVersionResource{Resource: "replicationcontrollers"}
replicationControllerKind = schema.GroupVersionKind{Kind: "ReplicationController"}
)
Expand All @@ -58,7 +58,7 @@ func TestStop(t *testing.T) {
testName string
namespace string
name string
oc *testclient.Fake
oc *appsfake.Clientset
kc *fake.Clientset
expected []clientgotesting.Action
kexpected []clientgotesting.Action
Expand All @@ -68,7 +68,7 @@ func TestStop(t *testing.T) {
testName: "simple stop",
namespace: "default",
name: "config",
oc: testclient.NewSimpleFake(fakeDC["simple-stop"]),
oc: appsfake.NewSimpleClientset(fakeDC["simple-stop"]),
kc: fake.NewSimpleClientset(mkdeploymentlist(1)),
expected: []clientgotesting.Action{
clientgotesting.NewGetAction(deploymentConfigsResource, "default", "config"),
Expand All @@ -91,7 +91,7 @@ func TestStop(t *testing.T) {
testName: "legacy simple stop",
namespace: "default",
name: "config",
oc: testclient.NewSimpleFake(fakeDC["legacy-simple-stop"]),
oc: appsfake.NewSimpleClientset(fakeDC["legacy-simple-stop"]),
kc: fake.NewSimpleClientset(mkdeploymentlist(1)),
expected: []clientgotesting.Action{
clientgotesting.NewGetAction(deploymentConfigsResource, "default", "config"),
Expand All @@ -114,7 +114,7 @@ func TestStop(t *testing.T) {
testName: "stop multiple controllers",
namespace: "default",
name: "config",
oc: testclient.NewSimpleFake(fakeDC["multi-stop"]),
oc: appsfake.NewSimpleClientset(fakeDC["multi-stop"]),
kc: fake.NewSimpleClientset(mkdeploymentlist(1, 2, 3, 4, 5)),
expected: []clientgotesting.Action{
clientgotesting.NewGetAction(deploymentConfigsResource, "default", "config"),
Expand Down Expand Up @@ -161,7 +161,7 @@ func TestStop(t *testing.T) {
testName: "legacy stop multiple controllers",
namespace: "default",
name: "config",
oc: testclient.NewSimpleFake(fakeDC["legacy-multi-stop"]),
oc: appsfake.NewSimpleClientset(fakeDC["legacy-multi-stop"]),
kc: fake.NewSimpleClientset(mkdeploymentlist(1, 2, 3, 4, 5)),
expected: []clientgotesting.Action{
clientgotesting.NewGetAction(deploymentConfigsResource, "default", "config"),
Expand Down Expand Up @@ -208,7 +208,7 @@ func TestStop(t *testing.T) {
testName: "no config, some deployments",
namespace: "default",
name: "config",
oc: testclient.NewSimpleFake(),
oc: appsfake.NewSimpleClientset(),
kc: fake.NewSimpleClientset(mkdeploymentlist(1)),
expected: []clientgotesting.Action{
clientgotesting.NewGetAction(deploymentConfigsResource, "default", "config"),
Expand All @@ -228,7 +228,7 @@ func TestStop(t *testing.T) {
testName: "no config, no deployments",
namespace: "default",
name: "config",
oc: testclient.NewSimpleFake(),
oc: appsfake.NewSimpleClientset(),
kc: fake.NewSimpleClientset(&kapi.ReplicationControllerList{}),
expected: []clientgotesting.Action{
clientgotesting.NewGetAction(deploymentConfigsResource, "default", "config"),
Expand All @@ -242,7 +242,7 @@ func TestStop(t *testing.T) {
testName: "config, no deployments",
namespace: "default",
name: "config",
oc: testclient.NewSimpleFake(fakeDC["no-deployments"]),
oc: appsfake.NewSimpleClientset(fakeDC["no-deployments"]),
kc: fake.NewSimpleClientset(&kapi.ReplicationControllerList{}),
expected: []clientgotesting.Action{
clientgotesting.NewGetAction(deploymentConfigsResource, "default", "config"),
Expand All @@ -259,7 +259,7 @@ func TestStop(t *testing.T) {
testName: "legacy config, no deployments",
namespace: "default",
name: "config",
oc: testclient.NewSimpleFake(fakeDC["legacy-no-deployments"]),
oc: appsfake.NewSimpleClientset(fakeDC["legacy-no-deployments"]),
kc: fake.NewSimpleClientset(&kapi.ReplicationControllerList{}),
expected: []clientgotesting.Action{
clientgotesting.NewGetAction(deploymentConfigsResource, "default", "config"),
Expand All @@ -275,7 +275,7 @@ func TestStop(t *testing.T) {
}

for _, test := range tests {
reaper := &DeploymentConfigReaper{oc: test.oc, kc: test.kc, pollInterval: time.Millisecond, timeout: time.Millisecond}
reaper := &DeploymentConfigReaper{appsClient: test.oc, kc: test.kc, pollInterval: time.Millisecond, timeout: time.Millisecond}
err := reaper.Stop(test.namespace, test.name, 1*time.Second, nil)

if !test.err && err != nil {
Expand Down
6 changes: 2 additions & 4 deletions pkg/deploy/cmd/history.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,20 +13,18 @@ import (
"k8s.io/kubernetes/pkg/kubectl"
kinternalprinters "k8s.io/kubernetes/pkg/printers/internalversion"

"github.com/openshift/origin/pkg/client"
deployapi "github.com/openshift/origin/pkg/deploy/apis/apps"
deployutil "github.com/openshift/origin/pkg/deploy/util"
)

func NewDeploymentConfigHistoryViewer(oc client.Interface, kc kclientset.Interface) kubectl.HistoryViewer {
return &DeploymentConfigHistoryViewer{dn: oc, rn: kc.Core()}
func NewDeploymentConfigHistoryViewer(kc kclientset.Interface) kubectl.HistoryViewer {
return &DeploymentConfigHistoryViewer{rn: kc.Core()}
}

// DeploymentConfigHistoryViewer is an implementation of the kubectl HistoryViewer interface
// for deployment configs.
type DeploymentConfigHistoryViewer struct {
rn kcoreclient.ReplicationControllersGetter
dn client.DeploymentConfigsNamespacer
}

var _ kubectl.HistoryViewer = &DeploymentConfigHistoryViewer{}
Expand Down
11 changes: 6 additions & 5 deletions pkg/deploy/cmd/rollback.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,18 +8,19 @@ import (
"k8s.io/kubernetes/pkg/kubectl"
kinternalprinters "k8s.io/kubernetes/pkg/printers/internalversion"

"github.com/openshift/origin/pkg/client"
deployapi "github.com/openshift/origin/pkg/deploy/apis/apps"
appsclient "github.com/openshift/origin/pkg/deploy/generated/internalclientset"
appsinternal "github.com/openshift/origin/pkg/deploy/generated/internalclientset/typed/apps/internalversion"
)

func NewDeploymentConfigRollbacker(oc client.Interface) kubectl.Rollbacker {
return &DeploymentConfigRollbacker{dn: oc}
func NewDeploymentConfigRollbacker(appsClient appsclient.Interface) kubectl.Rollbacker {
return &DeploymentConfigRollbacker{dn: appsClient.Apps()}
}

// DeploymentConfigRollbacker is an implementation of the kubectl Rollbacker interface
// for deployment configs.
type DeploymentConfigRollbacker struct {
dn client.DeploymentConfigsNamespacer
dn appsinternal.DeploymentConfigsGetter
}

var _ kubectl.Rollbacker = &DeploymentConfigRollbacker{}
Expand All @@ -44,7 +45,7 @@ func (r *DeploymentConfigRollbacker) Rollback(obj runtime.Object, updatedAnnotat
},
}

rolledback, err := r.dn.DeploymentConfigs(config.Namespace).Rollback(rollback)
rolledback, err := r.dn.DeploymentConfigs(config.Namespace).Rollback(config.Name, rollback)
if err != nil {
return "", err
}
Expand Down
Loading

0 comments on commit bb340c5

Please sign in to comment.