Skip to content

Commit b217ed6

Browse files
committed
Add support to deployments history in osc describe and deploy
1 parent da036e0 commit b217ed6

File tree

4 files changed

+208
-108
lines changed

4 files changed

+208
-108
lines changed

pkg/cmd/cli/cmd/deploy.go

Lines changed: 100 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,36 @@
11
package cmd
22

33
import (
4+
"errors"
45
"fmt"
56
"io"
67

78
"github.com/spf13/cobra"
89

910
kapi "github.com/GoogleCloudPlatform/kubernetes/pkg/api"
1011
kerrors "github.com/GoogleCloudPlatform/kubernetes/pkg/api/errors"
12+
kclient "github.com/GoogleCloudPlatform/kubernetes/pkg/client"
1113
cmdutil "github.com/GoogleCloudPlatform/kubernetes/pkg/kubectl/cmd/util"
1214

15+
"github.com/openshift/origin/pkg/client"
1316
"github.com/openshift/origin/pkg/cmd/cli/describe"
1417
"github.com/openshift/origin/pkg/cmd/util/clientcmd"
1518
deployapi "github.com/openshift/origin/pkg/deploy/api"
1619
deployutil "github.com/openshift/origin/pkg/deploy/util"
1720
)
1821

22+
type DeployOptions struct {
23+
out io.Writer
24+
osClient *client.Client
25+
kubeClient *kclient.Client
26+
namespace string
27+
baseCommandName string
28+
29+
deploymentConfigName string
30+
deployLatest bool
31+
retryDeploy bool
32+
}
33+
1934
const (
2035
deploy_long = `View, start and restart deployments.
2136
@@ -26,74 +41,114 @@ NOTE: This command is still under active development and is subject to change.`
2641
deploy_example = ` // Display the latest deployment for the 'database' deployment config
2742
$ %[1]s deploy database
2843
29-
// Start a new deployment based on the 'frontend' deployment config
30-
$ %[1]s deploy frontend --latest`
44+
// Start a new deployment based on the 'database' deployment config
45+
$ %[1]s deploy frontend --latest
46+
47+
// Retry the latest failed deployment based on the 'frontend' deployment config
48+
$ %[1]s deploy frontend --retry`
3149
)
3250

3351
// NewCmdDeploy creates a new `deploy` command.
3452
func NewCmdDeploy(fullName string, f *clientcmd.Factory, out io.Writer) *cobra.Command {
35-
var deployLatest bool
36-
var retryDeploy bool
53+
options := &DeployOptions{
54+
baseCommandName: fullName,
55+
}
3756

3857
cmd := &cobra.Command{
3958
Use: "deploy DEPLOYMENTCONFIG",
4059
Short: "View, start and restart deployments.",
4160
Long: deploy_long,
4261
Example: fmt.Sprintf(deploy_example, fullName),
4362
Run: func(cmd *cobra.Command, args []string) {
44-
if len(args) == 0 || len(args[0]) == 0 {
45-
fmt.Println(cmdutil.UsageError(cmd, "A deploymentConfig name is required."))
46-
return
63+
if err := options.Complete(f, args, out); err != nil {
64+
cmdutil.CheckErr(err)
4765
}
48-
if deployLatest && retryDeploy {
49-
fmt.Println(cmdutil.UsageError(cmd, "Only one of --latest or --retry is allowed."))
50-
return
66+
67+
if err := options.Validate(args); err != nil {
68+
cmdutil.CheckErr(cmdutil.UsageError(cmd, err.Error()))
5169
}
5270

53-
configName := args[0]
71+
if err := options.RunDeploy(); err != nil {
72+
cmdutil.CheckErr(err)
73+
}
74+
},
75+
}
5476

55-
osClient, kubeClient, err := f.Clients()
56-
cmdutil.CheckErr(err)
77+
cmd.Flags().BoolVar(&options.deployLatest, "latest", false, "Start a new deployment now.")
78+
cmd.Flags().BoolVar(&options.retryDeploy, "retry", false, "Retry the latest failed deployment.")
5779

58-
namespace, err := f.DefaultNamespace()
59-
cmdutil.CheckErr(err)
80+
return cmd
81+
}
6082

61-
config, err := osClient.DeploymentConfigs(namespace).Get(configName)
62-
cmdutil.CheckErr(err)
83+
func (o *DeployOptions) Complete(f *clientcmd.Factory, args []string, out io.Writer) error {
84+
var err error
6385

64-
commandClient := &deployCommandClientImpl{
65-
GetDeploymentFn: func(namespace, name string) (*kapi.ReplicationController, error) {
66-
return kubeClient.ReplicationControllers(namespace).Get(name)
67-
},
68-
UpdateDeploymentConfigFn: func(config *deployapi.DeploymentConfig) (*deployapi.DeploymentConfig, error) {
69-
return osClient.DeploymentConfigs(config.Namespace).Update(config)
70-
},
71-
UpdateDeploymentFn: func(deployment *kapi.ReplicationController) (*kapi.ReplicationController, error) {
72-
return kubeClient.ReplicationControllers(deployment.Namespace).Update(deployment)
73-
},
74-
}
86+
o.osClient, o.kubeClient, err = f.Clients()
87+
if err != nil {
88+
return err
89+
}
90+
o.namespace, err = f.DefaultNamespace()
91+
if err != nil {
92+
return err
93+
}
7594

76-
switch {
77-
case deployLatest:
78-
c := &deployLatestCommand{client: commandClient}
79-
err = c.deploy(config, out)
80-
case retryDeploy:
81-
c := &retryDeploymentCommand{client: commandClient}
82-
err = c.retry(config, out)
83-
default:
84-
describer := describe.NewLatestDeploymentDescriber(osClient, kubeClient)
85-
desc, err := describer.Describe(config.Namespace, config.Name)
86-
cmdutil.CheckErr(err)
87-
fmt.Fprintln(out, desc)
88-
}
89-
cmdutil.CheckErr(err)
95+
o.out = out
96+
97+
if len(args) > 0 {
98+
o.deploymentConfigName = args[0]
99+
}
100+
101+
return nil
102+
}
103+
104+
func (o DeployOptions) Validate(args []string) error {
105+
if len(args) == 0 || len(args[0]) == 0 {
106+
return errors.New("A deploymentConfig name is required.")
107+
}
108+
if len(args) > 1 {
109+
return errors.New("Only one deploymentConfig name is supported as argument.")
110+
}
111+
if o.deployLatest && o.retryDeploy {
112+
return errors.New("Only one of --latest or --retry is allowed.")
113+
}
114+
return nil
115+
}
116+
117+
func (o DeployOptions) RunDeploy() error {
118+
config, err := o.osClient.DeploymentConfigs(o.namespace).Get(o.deploymentConfigName)
119+
if err != nil {
120+
return err
121+
}
122+
123+
commandClient := &deployCommandClientImpl{
124+
GetDeploymentFn: func(namespace, name string) (*kapi.ReplicationController, error) {
125+
return o.kubeClient.ReplicationControllers(namespace).Get(name)
126+
},
127+
UpdateDeploymentConfigFn: func(config *deployapi.DeploymentConfig) (*deployapi.DeploymentConfig, error) {
128+
return o.osClient.DeploymentConfigs(config.Namespace).Update(config)
129+
},
130+
UpdateDeploymentFn: func(deployment *kapi.ReplicationController) (*kapi.ReplicationController, error) {
131+
return o.kubeClient.ReplicationControllers(deployment.Namespace).Update(deployment)
90132
},
91133
}
92134

93-
cmd.Flags().BoolVar(&deployLatest, "latest", false, "Start a new deployment now.")
94-
cmd.Flags().BoolVar(&retryDeploy, "retry", false, "Retry the latest failed deployment.")
135+
switch {
136+
case o.deployLatest:
137+
c := &deployLatestCommand{client: commandClient}
138+
err = c.deploy(config, o.out)
139+
case o.retryDeploy:
140+
c := &retryDeploymentCommand{client: commandClient}
141+
err = c.retry(config, o.out)
142+
default:
143+
describer := describe.NewLatestDeploymentsDescriber(o.osClient, o.kubeClient, -1)
144+
desc, err := describer.Describe(config.Namespace, config.Name)
145+
if err != nil {
146+
return err
147+
}
148+
fmt.Fprintln(o.out, desc)
149+
}
95150

96-
return cmd
151+
return err
97152
}
98153

99154
// deployCommandClient abstracts access to the API server.

0 commit comments

Comments
 (0)