|
1 | 1 | package clientcmd
|
2 | 2 |
|
3 | 3 | import (
|
4 |
| - "encoding/json" |
5 | 4 | "fmt"
|
6 | 5 |
|
7 |
| - "github.com/blang/semver" |
8 |
| - |
9 | 6 | "github.com/openshift/origin/pkg/client"
|
10 |
| - "github.com/openshift/origin/pkg/version" |
11 | 7 | )
|
12 | 8 |
|
13 |
| -// Gate returns an error if the server is below minServerVersion or above/equal maxServerVersion. |
14 |
| -// To test only for min or only max version, set the other string to the empty value. |
15 |
| -func Gate(ocClient *client.Client, minServerVersion, maxServerVersion string) error { |
16 |
| - if len(minServerVersion) == 0 && len(maxServerVersion) == 0 { |
17 |
| - return fmt.Errorf("No version info passed to gate command") |
| 9 | +// Return err if the server does not support any of the legacy policy objects (< 3.7) |
| 10 | +func LegacyPolicyResourceGate(ocClient *client.Client) error { |
| 11 | + return ResourceGate(ocClient, "authorization.openshift.io/v1", []string{ |
| 12 | + "clusterpolicies", |
| 13 | + "clusterpolicybindings", |
| 14 | + "policies", |
| 15 | + "policybindings", |
| 16 | + }) |
| 17 | +} |
| 18 | + |
| 19 | +// Do a discovery for server resources of the provided groupVersion, returning nil if any one of resourceNames is supported |
| 20 | +// by the server. |
| 21 | +func ResourceGate(ocClient *client.Client, groupVersion string, resourceNames []string) error { |
| 22 | + if len(resourceNames) == 0 { |
| 23 | + return fmt.Errorf("No resources provided for resource gate check") |
18 | 24 | }
|
19 | 25 |
|
20 |
| - ocVersionBody, err := ocClient.Get().AbsPath("/version/openshift").Do().Raw() |
| 26 | + serverVersion, err := ocClient.Discovery().ServerVersion() |
21 | 27 | if err != nil {
|
22 |
| - return err |
23 |
| - } |
24 |
| - ocServerInfo := &version.Info{} |
25 |
| - if err := json.Unmarshal(ocVersionBody, ocServerInfo); err != nil { |
26 |
| - return err |
| 28 | + return fmt.Errorf("Could not discover server version") |
27 | 29 | }
|
28 |
| - ocVersion := ocServerInfo.String() |
29 |
| - // skip first chracter as Openshift returns a 'v' preceding the actual |
30 |
| - // version string which semver does not grok |
31 |
| - semVersion, err := semver.Parse(ocVersion[1:]) |
| 30 | + |
| 31 | + serverResources, err := ocClient.Discovery().ServerResourcesForGroupVersion(groupVersion) |
32 | 32 | if err != nil {
|
33 |
| - return fmt.Errorf("Failed to parse server version %s: %v", ocVersion, err) |
| 33 | + return err |
34 | 34 | }
|
35 |
| - // ignore pre-release version info |
36 |
| - semVersion.Pre = nil |
37 | 35 |
|
38 |
| - if len(minServerVersion) > 0 { |
39 |
| - min, err := semver.Parse(minServerVersion) |
40 |
| - if err != nil { |
41 |
| - return fmt.Errorf("Failed to parse min gate version %s: %v", minServerVersion, err) |
42 |
| - } |
43 |
| - // ignore pre-release version info |
44 |
| - min.Pre = nil |
45 |
| - if semVersion.LT(min) { |
46 |
| - return fmt.Errorf("This command works only with server versions > %s, found %s", minServerVersion, ocVersion) |
47 |
| - } |
| 36 | + if len(serverResources.APIResources) == 0 { |
| 37 | + return fmt.Errorf("Could not discover server resources") |
48 | 38 | }
|
49 | 39 |
|
50 |
| - if len(maxServerVersion) > 0 { |
51 |
| - max, err := semver.Parse(maxServerVersion) |
52 |
| - if err != nil { |
53 |
| - return fmt.Errorf("Failed to parse max gate version %s: %v", maxServerVersion, err) |
54 |
| - } |
55 |
| - // ignore pre-release version info |
56 |
| - max.Pre = nil |
57 |
| - if semVersion.GTE(max) { |
58 |
| - return fmt.Errorf("This command works only with server versions < %s, found %s", maxServerVersion, ocVersion) |
| 40 | + for _, resource := range serverResources.APIResources { |
| 41 | + for i := range resourceNames { |
| 42 | + if resourceNames[i] == resource.Name { |
| 43 | + return nil |
| 44 | + } |
59 | 45 | }
|
60 | 46 | }
|
61 | 47 |
|
62 |
| - // OK this is within min/max all good! |
63 |
| - return nil |
| 48 | + return fmt.Errorf("This command is not supported by server version %s", serverVersion.String()) |
64 | 49 | }
|
0 commit comments