Skip to content

Commit d00a6ef

Browse files
committed
make oc project work with kube
1 parent 69e6a5d commit d00a6ef

File tree

4 files changed

+45
-30
lines changed

4 files changed

+45
-30
lines changed

api/protobuf-spec/github_com_openshift_origin_pkg_deploy_api_v1.proto

Lines changed: 0 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

api/swagger-spec/openshift-openapi-spec.json

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -50511,11 +50511,6 @@
5051150511
"type": "integer",
5051250512
"format": "int64"
5051350513
},
50514-
"updatePercent": {
50515-
"description": "UpdatePercent is the percentage of replicas to scale up or down each interval. If nil, one replica will be scaled up and down each interval. If negative, the scale order will be down/up instead of up/down. DEPRECATED: Use MaxUnavailable/MaxSurge instead.",
50516-
"type": "integer",
50517-
"format": "int32"
50518-
},
5051950514
"updatePeriodSeconds": {
5052050515
"description": "UpdatePeriodSeconds is the time to wait between individual pod updates. If the value is nil, a default will be used.",
5052150516
"type": "integer",

pkg/cmd/cli/cmd/project.go

Lines changed: 40 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
kapi "k8s.io/kubernetes/pkg/api"
1010
kapierrors "k8s.io/kubernetes/pkg/api/errors"
1111
"k8s.io/kubernetes/pkg/client/restclient"
12+
kclient "k8s.io/kubernetes/pkg/client/unversioned"
1213
kclientcmd "k8s.io/kubernetes/pkg/client/unversioned/clientcmd"
1314
clientcmdapi "k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api"
1415
kcmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
@@ -17,14 +18,15 @@ import (
1718
cliconfig "github.com/openshift/origin/pkg/cmd/cli/config"
1819
"github.com/openshift/origin/pkg/cmd/util/clientcmd"
1920
"github.com/openshift/origin/pkg/project/api"
21+
projectutil "github.com/openshift/origin/pkg/project/util"
2022

2123
"github.com/spf13/cobra"
2224
)
2325

2426
type ProjectOptions struct {
2527
Config clientcmdapi.Config
2628
ClientConfig *restclient.Config
27-
ClientFn func() (*client.Client, error)
29+
ClientFn func() (*client.Client, kclient.Interface, error)
2830
Out io.Writer
2931
PathOptions *kclientcmd.PathOptions
3032

@@ -103,9 +105,8 @@ func (o *ProjectOptions) Complete(f *clientcmd.Factory, args []string, out io.Wr
103105
return err
104106
}
105107

106-
o.ClientFn = func() (*client.Client, error) {
107-
client, _, err := f.Clients()
108-
return client, err
108+
o.ClientFn = func() (*client.Client, kclient.Interface, error) {
109+
return f.Clients()
109110
}
110111

111112
o.Out = out
@@ -136,18 +137,17 @@ func (o ProjectOptions) RunProject() error {
136137
return nil
137138
}
138139

139-
client, err := o.ClientFn()
140+
client, kubeclient, err := o.ClientFn()
140141
if err != nil {
141142
return err
142143
}
143144

144-
if _, err := client.Projects().Get(currentProject); err != nil {
145-
if kapierrors.IsNotFound(err) {
146-
return fmt.Errorf("the project %q specified in your config does not exist.", currentProject)
147-
}
148-
if clientcmd.IsForbidden(err) {
149-
return fmt.Errorf("you do not have rights to view project %q.", currentProject)
150-
}
145+
switch err := confirmProjectAccess(currentProject, client, kubeclient); {
146+
case clientcmd.IsForbidden(err):
147+
return fmt.Errorf("you do not have rights to view project %q.", currentProject)
148+
case kapierrors.IsNotFound(err):
149+
return fmt.Errorf("the project %q specified in your config does not exist.", currentProject)
150+
case err != nil:
151151
return err
152152
}
153153

@@ -187,12 +187,12 @@ func (o ProjectOptions) RunProject() error {
187187

188188
} else {
189189
if !o.SkipAccessValidation {
190-
client, err := o.ClientFn()
190+
client, kubeclient, err := o.ClientFn()
191191
if err != nil {
192192
return err
193193
}
194194

195-
if _, err := client.Projects().Get(argument); err != nil {
195+
if err := confirmProjectAccess(argument, client, kubeclient); err != nil {
196196
if isNotFound, isForbidden := kapierrors.IsNotFound(err), clientcmd.IsForbidden(err); isNotFound || isForbidden {
197197
var msg string
198198
if isForbidden {
@@ -201,7 +201,7 @@ func (o ProjectOptions) RunProject() error {
201201
msg = fmt.Sprintf("A project named %q does not exist on %q.", argument, clientCfg.Host)
202202
}
203203

204-
projects, err := getProjects(client)
204+
projects, err := getProjects(client, kubeclient)
205205
if err == nil {
206206
switch len(projects) {
207207
case 0:
@@ -277,11 +277,35 @@ func (o ProjectOptions) RunProject() error {
277277
return nil
278278
}
279279

280-
func getProjects(oClient *client.Client) ([]api.Project, error) {
280+
func confirmProjectAccess(currentProject string, oClient *client.Client, kClient kclient.Interface) error {
281+
_, projectErr := oClient.Projects().Get(currentProject)
282+
if !kapierrors.IsNotFound(projectErr) {
283+
return projectErr
284+
}
285+
286+
// at this point we know the error is a not found, but we'll test namespaces just in case we're running on kube
287+
if _, err := kClient.Namespaces().Get(currentProject); err == nil {
288+
return nil
289+
}
290+
291+
// otherwise return the openshift error default
292+
return projectErr
293+
}
294+
295+
func getProjects(oClient *client.Client, kClient kclient.Interface) ([]api.Project, error) {
281296
projects, err := oClient.Projects().List(kapi.ListOptions{})
297+
if err == nil {
298+
return projects.Items, nil
299+
}
300+
if err != nil && !kapierrors.IsNotFound(err) {
301+
return nil, err
302+
}
303+
304+
namespaces, err := kClient.Namespaces().List(kapi.ListOptions{})
282305
if err != nil {
283306
return nil, err
284307
}
308+
projects = projectutil.ConvertNamespaceList(namespaces)
285309
return projects.Items, nil
286310
}
287311

pkg/cmd/cli/cmd/projects.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"sort"
77

88
"k8s.io/kubernetes/pkg/client/restclient"
9+
kclient "k8s.io/kubernetes/pkg/client/unversioned"
910
kclientcmd "k8s.io/kubernetes/pkg/client/unversioned/clientcmd"
1011
clientcmdapi "k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api"
1112
kcmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
@@ -22,6 +23,7 @@ type ProjectsOptions struct {
2223
Config clientcmdapi.Config
2324
ClientConfig *restclient.Config
2425
Client *client.Client
26+
KubeClient kclient.Interface
2527
Out io.Writer
2628
PathOptions *kclientcmd.PathOptions
2729

@@ -95,7 +97,7 @@ func (o *ProjectsOptions) Complete(f *clientcmd.Factory, args []string, commandN
9597
return err
9698
}
9799

98-
o.Client, _, err = f.Clients()
100+
o.Client, o.KubeClient, err = f.Clients()
99101
if err != nil {
100102
return err
101103
}
@@ -123,7 +125,7 @@ func (o ProjectsOptions) RunProjects() error {
123125
client := o.Client
124126

125127
if len(currentProject) > 0 {
126-
if _, currentProjectErr := client.Projects().Get(currentProject); currentProjectErr == nil {
128+
if currentProjectErr := confirmProjectAccess(currentProject, o.Client, o.KubeClient); currentProjectErr == nil {
127129
currentProjectExists = true
128130
}
129131
}
@@ -134,7 +136,7 @@ func (o ProjectsOptions) RunProjects() error {
134136
}
135137

136138
var msg string
137-
projects, err := getProjects(client)
139+
projects, err := getProjects(client, o.KubeClient)
138140
if err == nil {
139141
switch len(projects) {
140142
case 0:

0 commit comments

Comments
 (0)