... | ... |
@@ -123,6 +123,7 @@ type WebConsoleConfig struct { |
123 | 123 |
MasterAddr string |
124 | 124 |
// MasterPrefix is the OpenShift API context root |
125 | 125 |
MasterPrefix string |
126 |
+ // TODO this is probably unneeded since everything goes through the openshift master's proxy |
|
126 | 127 |
// KubernetesAddr is the host:port the UI should call the kubernetes API on. Scheme is derived from the scheme the UI is served on, so they must be the same. |
127 | 128 |
KubernetesAddr string |
128 | 129 |
// KubernetesPrefix is the Kubernetes API context root |
... | ... |
@@ -152,10 +152,6 @@ type AssetConfig struct { |
152 | 152 |
|
153 | 153 |
// MasterPublicURL is how the web console can access the OpenShift api server |
154 | 154 |
MasterPublicURL string |
155 |
- |
|
156 |
- // TODO: we probably don't need this since we have a proxy |
|
157 |
- // KubernetesPublicURL is how the web console can access the Kubernetes api server |
|
158 |
- KubernetesPublicURL string |
|
159 | 155 |
} |
160 | 156 |
|
161 | 157 |
type OAuthConfig struct { |
... | ... |
@@ -151,10 +151,6 @@ type AssetConfig struct { |
151 | 151 |
|
152 | 152 |
// MasterPublicURL is how the web console can access the OpenShift v1beta3 server |
153 | 153 |
MasterPublicURL string `json:"masterPublicURL"` |
154 |
- |
|
155 |
- // TODO: we probably don't need this since we have a proxy |
|
156 |
- // KubernetesPublicURL is how the web console can access the Kubernetes v1beta3 server |
|
157 |
- KubernetesPublicURL string `json:"kubernetesPublicURL"` |
|
158 | 154 |
} |
159 | 155 |
|
160 | 156 |
type OAuthConfig struct { |
... | ... |
@@ -96,11 +96,6 @@ func (c *AssetConfig) buildHandler() (http.Handler, error) { |
96 | 96 |
return nil, err |
97 | 97 |
} |
98 | 98 |
|
99 |
- k8sURL, err := url.Parse(c.Options.KubernetesPublicURL) |
|
100 |
- if err != nil { |
|
101 |
- return nil, err |
|
102 |
- } |
|
103 |
- |
|
104 | 99 |
publicURL, err := url.Parse(c.Options.PublicURL) |
105 | 100 |
if err != nil { |
106 | 101 |
glog.Fatal(err) |
... | ... |
@@ -109,7 +104,7 @@ func (c *AssetConfig) buildHandler() (http.Handler, error) { |
109 | 109 |
config := assets.WebConsoleConfig{ |
110 | 110 |
MasterAddr: masterURL.Host, |
111 | 111 |
MasterPrefix: OpenShiftAPIPrefix, |
112 |
- KubernetesAddr: k8sURL.Host, |
|
112 |
+ KubernetesAddr: masterURL.Host, |
|
113 | 113 |
KubernetesPrefix: KubernetesAPIPrefix, |
114 | 114 |
OAuthAuthorizeURI: OpenShiftOAuthAuthorizeURL(masterURL.String()), |
115 | 115 |
OAuthRedirectBase: c.Options.PublicURL, |
... | ... |
@@ -109,30 +109,6 @@ func TestCommandBindingEtcd(t *testing.T) { |
109 | 109 |
} |
110 | 110 |
} |
111 | 111 |
|
112 |
-func TestCommandBindingKubernetes(t *testing.T) { |
|
113 |
- valueToSet := "http://example.org:9123" |
|
114 |
- actualCfg := executeMasterCommand([]string{"--kubernetes=" + valueToSet}) |
|
115 |
- |
|
116 |
- expectedArgs := NewDefaultMasterArgs() |
|
117 |
- expectedArgs.KubeConnectionArgs.KubernetesAddr.Set(valueToSet) |
|
118 |
- |
|
119 |
- if expectedArgs.KubeConnectionArgs.KubernetesAddr.String() != actualCfg.KubeConnectionArgs.KubernetesAddr.String() { |
|
120 |
- t.Errorf("expected %v, got %v", expectedArgs.KubeConnectionArgs.KubernetesAddr.String(), actualCfg.KubeConnectionArgs.KubernetesAddr.String()) |
|
121 |
- } |
|
122 |
-} |
|
123 |
- |
|
124 |
-func TestCommandBindingKubernetesPublic(t *testing.T) { |
|
125 |
- valueToSet := "http://example.org:9123" |
|
126 |
- actualCfg := executeMasterCommand([]string{"--public-kubernetes=" + valueToSet}) |
|
127 |
- |
|
128 |
- expectedArgs := NewDefaultMasterArgs() |
|
129 |
- expectedArgs.KubernetesPublicAddr.Set(valueToSet) |
|
130 |
- |
|
131 |
- if expectedArgs.KubernetesPublicAddr.String() != actualCfg.KubernetesPublicAddr.String() { |
|
132 |
- t.Errorf("expected %v, got %v", expectedArgs.KubernetesPublicAddr.String(), actualCfg.KubernetesPublicAddr.String()) |
|
133 |
- } |
|
134 |
-} |
|
135 |
- |
|
136 | 112 |
func TestCommandBindingPortalNet(t *testing.T) { |
137 | 113 |
valueToSet := "192.168.0.0/16" |
138 | 114 |
actualCfg := executeMasterCommand([]string{"--portal-net=" + valueToSet}) |
... | ... |
@@ -29,26 +29,6 @@ func TestMasterPublicURLNoPathAllowed(t *testing.T) { |
29 | 29 |
} |
30 | 30 |
} |
31 | 31 |
|
32 |
-func TestKubePublicURLNoPathAllowed(t *testing.T) { |
|
33 |
- masterArgs := NewDefaultMasterArgs() |
|
34 |
- masterArgs.KubernetesPublicAddr.Set("http://example.com:9012/") |
|
35 |
- err := masterArgs.Validate() |
|
36 |
- |
|
37 |
- if err == nil || !strings.Contains(err.Error(), "may not include a path") { |
|
38 |
- t.Errorf("expected %v, got %v", "may not include a path", err) |
|
39 |
- } |
|
40 |
-} |
|
41 |
- |
|
42 |
-func TestKubeURLNoPathAllowed(t *testing.T) { |
|
43 |
- masterArgs := NewDefaultMasterArgs() |
|
44 |
- masterArgs.KubeConnectionArgs.KubernetesAddr.Set("http://example.com:9012/") |
|
45 |
- err := masterArgs.Validate() |
|
46 |
- |
|
47 |
- if err == nil || !strings.Contains(err.Error(), "may not include a path") { |
|
48 |
- t.Errorf("expected %v, got %v", "may not include a path", err) |
|
49 |
- } |
|
50 |
-} |
|
51 |
- |
|
52 | 32 |
func TestMasterPublicAddressDefaulting(t *testing.T) { |
53 | 33 |
expected := "http://example.com:9012" |
54 | 34 |
|
... | ... |
@@ -109,72 +89,6 @@ func TestAssetBindAddressDefaulting(t *testing.T) { |
109 | 109 |
} |
110 | 110 |
} |
111 | 111 |
|
112 |
-func TestKubernetesPublicAddressDefaultToKubernetesAddress(t *testing.T) { |
|
113 |
- expected := "http://example.com:9012" |
|
114 |
- |
|
115 |
- masterArgs := NewDefaultMasterArgs() |
|
116 |
- masterArgs.KubeConnectionArgs.KubernetesAddr.Set(expected) |
|
117 |
- masterArgs.MasterPublicAddr.Set("unexpectedpublicmaster") |
|
118 |
- masterArgs.MasterAddr.Set("unexpectedmaster") |
|
119 |
- |
|
120 |
- actual, err := masterArgs.GetKubernetesPublicAddress() |
|
121 |
- if err != nil { |
|
122 |
- t.Fatalf("unexpected error: %v", err) |
|
123 |
- } |
|
124 |
- if expected != actual.String() { |
|
125 |
- t.Fatalf("expected %v, got %v", expected, actual) |
|
126 |
- } |
|
127 |
-} |
|
128 |
- |
|
129 |
-func TestKubernetesPublicAddressDefaultToPublicMasterAddress(t *testing.T) { |
|
130 |
- expected := "http://example.com:9012" |
|
131 |
- |
|
132 |
- masterArgs := NewDefaultMasterArgs() |
|
133 |
- masterArgs.MasterPublicAddr.Set(expected) |
|
134 |
- masterArgs.MasterAddr.Set("unexpectedmaster") |
|
135 |
- |
|
136 |
- actual, err := masterArgs.GetKubernetesPublicAddress() |
|
137 |
- if err != nil { |
|
138 |
- t.Fatalf("unexpected error: %v", err) |
|
139 |
- } |
|
140 |
- if expected != actual.String() { |
|
141 |
- t.Fatalf("expected %v, got %v", expected, actual) |
|
142 |
- } |
|
143 |
-} |
|
144 |
- |
|
145 |
-func TestKubernetesPublicAddressDefaultToMasterAddress(t *testing.T) { |
|
146 |
- expected := "http://example.com:9012" |
|
147 |
- |
|
148 |
- masterArgs := NewDefaultMasterArgs() |
|
149 |
- masterArgs.MasterAddr.Set(expected) |
|
150 |
- |
|
151 |
- actual, err := masterArgs.GetKubernetesPublicAddress() |
|
152 |
- if err != nil { |
|
153 |
- t.Fatalf("unexpected error: %v", err) |
|
154 |
- } |
|
155 |
- if expected != actual.String() { |
|
156 |
- t.Fatalf("expected %v, got %v", expected, actual) |
|
157 |
- } |
|
158 |
-} |
|
159 |
- |
|
160 |
-func TestKubernetesPublicAddressExplicit(t *testing.T) { |
|
161 |
- expected := "http://external.com:12445" |
|
162 |
- |
|
163 |
- masterArgs := NewDefaultMasterArgs() |
|
164 |
- masterArgs.MasterAddr.Set("http://internal.com:9012") |
|
165 |
- masterArgs.KubeConnectionArgs.KubernetesAddr.Set("http://internal.com:9013") |
|
166 |
- masterArgs.MasterPublicAddr.Set("http://internal.com:9014") |
|
167 |
- masterArgs.KubernetesPublicAddr.Set(expected) |
|
168 |
- |
|
169 |
- actual, err := masterArgs.GetKubernetesPublicAddress() |
|
170 |
- if err != nil { |
|
171 |
- t.Fatalf("unexpected error: %v", err) |
|
172 |
- } |
|
173 |
- if expected != actual.String() { |
|
174 |
- t.Fatalf("expected %v, got %v", expected, actual) |
|
175 |
- } |
|
176 |
-} |
|
177 |
- |
|
178 | 112 |
func TestKubernetesAddressDefaulting(t *testing.T) { |
179 | 113 |
expected := "http://example.com:9012" |
180 | 114 |
|
... | ... |
@@ -191,23 +105,6 @@ func TestKubernetesAddressDefaulting(t *testing.T) { |
191 | 191 |
} |
192 | 192 |
} |
193 | 193 |
|
194 |
-func TestKubernetesAddressExplicit(t *testing.T) { |
|
195 |
- expected := "http://external.com:12445" |
|
196 |
- |
|
197 |
- masterArgs := NewDefaultMasterArgs() |
|
198 |
- masterArgs.MasterAddr.Set("http://internal.com:9012") |
|
199 |
- masterArgs.KubeConnectionArgs.KubernetesAddr.Set(expected) |
|
200 |
- masterAddr, _ := masterArgs.GetMasterAddress() |
|
201 |
- |
|
202 |
- actual, err := masterArgs.KubeConnectionArgs.GetKubernetesAddress(masterAddr) |
|
203 |
- if err != nil { |
|
204 |
- t.Fatalf("unexpected error: %v", err) |
|
205 |
- } |
|
206 |
- if expected != actual.String() { |
|
207 |
- t.Fatalf("expected %v, got %v", expected, actual) |
|
208 |
- } |
|
209 |
-} |
|
210 |
- |
|
211 | 194 |
func TestEtcdAddressDefaulting(t *testing.T) { |
212 | 195 |
expected := "https://example.com:4001" |
213 | 196 |
master := "http://example.com:9012" |
... | ... |
@@ -364,14 +261,6 @@ func TestKubeClientForExternalKubernetesMasterWithConfig(t *testing.T) { |
364 | 364 |
masterArgs := NewDefaultMasterArgs() |
365 | 365 |
masterArgs.KubeConnectionArgs.ClientConfigLoadingRules, masterArgs.KubeConnectionArgs.ClientConfig = makeKubeconfig(expectedServer, expectedUser) |
366 | 366 |
|
367 |
- actualPublic, err := masterArgs.GetKubernetesPublicAddress() |
|
368 |
- if err != nil { |
|
369 |
- t.Fatalf("unexpected error: %v", err) |
|
370 |
- } |
|
371 |
- if expectedServer != actualPublic.String() { |
|
372 |
- t.Fatalf("expected %v, got %v", expectedServer, actualPublic) |
|
373 |
- } |
|
374 |
- |
|
375 | 367 |
masterAddr, _ := masterArgs.GetMasterAddress() |
376 | 368 |
|
377 | 369 |
actual, err := masterArgs.KubeConnectionArgs.GetKubernetesAddress(masterAddr) |
... | ... |
@@ -403,58 +292,14 @@ func TestKubeClientForExternalKubernetesMasterWithErrorKubeconfig(t *testing.T) |
403 | 403 |
masterArgs := NewDefaultMasterArgs() |
404 | 404 |
masterArgs.KubeConnectionArgs.ClientConfigLoadingRules, masterArgs.KubeConnectionArgs.ClientConfig = makeErrorKubeconfig() |
405 | 405 |
|
406 |
- // GetKubernetesPublicAddress hits the invalid kubeconfig in the fallback chain |
|
407 |
- _, err := masterArgs.GetKubernetesPublicAddress() |
|
408 |
- if err == nil { |
|
409 |
- t.Fatalf("expected error, got none") |
|
410 |
- } |
|
411 |
- |
|
412 | 406 |
// GetKubernetesAddress hits the invalid kubeconfig in the fallback chain |
413 | 407 |
masterAddr, _ := masterArgs.GetMasterAddress() |
414 |
- _, err = masterArgs.KubeConnectionArgs.GetKubernetesAddress(masterAddr) |
|
408 |
+ _, err := masterArgs.KubeConnectionArgs.GetKubernetesAddress(masterAddr) |
|
415 | 409 |
if err == nil { |
416 | 410 |
t.Fatalf("expected error, got none") |
417 | 411 |
} |
418 | 412 |
} |
419 | 413 |
|
420 |
-func TestKubeClientForExternalKubernetesMasterWithConflictingKubernetesAddress(t *testing.T) { |
|
421 |
- expectedServer := "https://some-other-server:1234" |
|
422 |
- expectedUser := "myuser" |
|
423 |
- |
|
424 |
- masterArgs := NewDefaultMasterArgs() |
|
425 |
- // Explicitly set --kubernetes must match --kubeconfig or return an error |
|
426 |
- masterArgs.KubeConnectionArgs.KubernetesAddr.Set(expectedServer) |
|
427 |
- masterArgs.KubeConnectionArgs.ClientConfigLoadingRules, masterArgs.KubeConnectionArgs.ClientConfig = makeKubeconfig("https://another-server:2345", expectedUser) |
|
428 |
- |
|
429 |
- // GetKubernetesAddress returns the explicitly set address |
|
430 |
- masterAddr, _ := masterArgs.GetMasterAddress() |
|
431 |
- actual, err := masterArgs.KubeConnectionArgs.GetKubernetesAddress(masterAddr) |
|
432 |
- if err != nil { |
|
433 |
- t.Fatalf("unexpected error: %v", err) |
|
434 |
- } |
|
435 |
- if expectedServer != actual.String() { |
|
436 |
- t.Fatalf("expected %v, got %v", expectedServer, actual) |
|
437 |
- } |
|
438 |
-} |
|
439 |
- |
|
440 |
-func TestKubeClientForNodeWithConflictingKubernetesAddress(t *testing.T) { |
|
441 |
- expectedServer := "https://some-other-server:1234" |
|
442 |
- expectedUser := "myuser" |
|
443 |
- |
|
444 |
- nodeArgs := NewDefaultNodeArgs() |
|
445 |
- nodeArgs.KubeConnectionArgs.KubernetesAddr.Set(expectedServer) |
|
446 |
- nodeArgs.KubeConnectionArgs.ClientConfigLoadingRules, nodeArgs.KubeConnectionArgs.ClientConfig = makeKubeconfig("https://another-server:2345", expectedUser) |
|
447 |
- |
|
448 |
- // GetKubernetesAddress returns the explicitly set address |
|
449 |
- actualServer, err := nodeArgs.KubeConnectionArgs.GetKubernetesAddress(nil) |
|
450 |
- if err != nil { |
|
451 |
- t.Fatalf("unexpected error: %v", err) |
|
452 |
- } |
|
453 |
- if expectedServer != actualServer.String() { |
|
454 |
- t.Fatalf("expected %v, got %v", expectedServer, actualServer) |
|
455 |
- } |
|
456 |
-} |
|
457 |
- |
|
458 | 414 |
func makeEmptyKubeconfig() (clientcmd.ClientConfigLoadingRules, clientcmd.ClientConfig) { |
459 | 415 |
// Set a non-empty CommandLinePath to trigger loading |
460 | 416 |
loadingRules := clientcmd.ClientConfigLoadingRules{} |
... | ... |
@@ -27,7 +27,8 @@ type KubeConnectionArgs struct { |
27 | 27 |
} |
28 | 28 |
|
29 | 29 |
func BindKubeConnectionArgs(args *KubeConnectionArgs, flags *pflag.FlagSet, prefix string) { |
30 |
- flags.Var(&args.KubernetesAddr, prefix+"kubernetes", "The address of the Kubernetes server (host, host:port, or URL). If specified, no Kubernetes components will be started.") |
|
30 |
+ // TODO remove entirely |
|
31 |
+ flags.Var(&args.KubernetesAddr, prefix+"kubernetes", "removed in favor of --"+prefix+"kubeconfig") |
|
31 | 32 |
flags.StringVar(&args.ClientConfigLoadingRules.ExplicitPath, prefix+"kubeconfig", "", "Path to the kubeconfig file to use for requests to the Kubernetes API.") |
32 | 33 |
} |
33 | 34 |
|
... | ... |
@@ -41,6 +42,14 @@ func NewDefaultKubeConnectionArgs() *KubeConnectionArgs { |
41 | 41 |
return config |
42 | 42 |
} |
43 | 43 |
|
44 |
+func (args KubeConnectionArgs) Validate() error { |
|
45 |
+ if args.KubernetesAddr.Provided { |
|
46 |
+ return errors.New("--kubernetes is no longer allowed, try using --kubeconfig") |
|
47 |
+ } |
|
48 |
+ |
|
49 |
+ return nil |
|
50 |
+} |
|
51 |
+ |
|
44 | 52 |
func (args KubeConnectionArgs) GetExternalKubernetesClientConfig() (*client.Config, bool, error) { |
45 | 53 |
if len(args.ClientConfigLoadingRules.ExplicitPath) == 0 || args.ClientConfig == nil { |
46 | 54 |
return nil, false, nil |
... | ... |
@@ -53,10 +62,6 @@ func (args KubeConnectionArgs) GetExternalKubernetesClientConfig() (*client.Conf |
53 | 53 |
} |
54 | 54 |
|
55 | 55 |
func (args KubeConnectionArgs) GetKubernetesAddress(defaultAddress *url.URL) (*url.URL, error) { |
56 |
- if args.KubernetesAddr.Provided { |
|
57 |
- return args.KubernetesAddr.URL, nil |
|
58 |
- } |
|
59 |
- |
|
60 | 56 |
config, ok, err := args.GetExternalKubernetesClientConfig() |
61 | 57 |
if err != nil { |
62 | 58 |
return nil, err |
... | ... |
@@ -30,8 +30,7 @@ type MasterArgs struct { |
30 | 30 |
EtcdAddr flagtypes.Addr |
31 | 31 |
PortalNet flagtypes.IPNet |
32 | 32 |
// addresses for external clients |
33 |
- MasterPublicAddr flagtypes.Addr |
|
34 |
- KubernetesPublicAddr flagtypes.Addr |
|
33 |
+ MasterPublicAddr flagtypes.Addr |
|
35 | 34 |
|
36 | 35 |
// DNSBindAddr exposed for integration tests to set |
37 | 36 |
DNSBindAddr flagtypes.Addr |
... | ... |
@@ -56,7 +55,6 @@ func BindMasterArgs(args *MasterArgs, flags *pflag.FlagSet, prefix string) { |
56 | 56 |
flags.Var(&args.MasterAddr, prefix+"master", "The master address for use by OpenShift components (host, host:port, or URL). Scheme and port default to the --listen scheme and port. When unset, attempt to use the first public IPv4 non-loopback address registered on this host.") |
57 | 57 |
flags.Var(&args.MasterPublicAddr, prefix+"public-master", "The master address for use by public clients, if different (host, host:port, or URL). Defaults to same as --master.") |
58 | 58 |
flags.Var(&args.EtcdAddr, prefix+"etcd", "The address of the etcd server (host, host:port, or URL). If specified, no built-in etcd will be started.") |
59 |
- flags.Var(&args.KubernetesPublicAddr, prefix+"public-kubernetes", "The Kubernetes server address for use by public clients, if different. (host, host:port, or URL). Defaults to same as --kubernetes.") |
|
60 | 59 |
flags.Var(&args.PortalNet, prefix+"portal-net", "A CIDR notation IP range from which to assign portal IPs. This must not overlap with any IP ranges assigned to nodes for pods.") |
61 | 60 |
|
62 | 61 |
flags.StringVar(&args.EtcdDir, prefix+"etcd-dir", "openshift.local.etcd", "The etcd data directory.") |
... | ... |
@@ -68,12 +66,11 @@ func BindMasterArgs(args *MasterArgs, flags *pflag.FlagSet, prefix string) { |
68 | 68 |
// NewDefaultMasterArgs creates MasterArgs with sub-objects created and default values set. |
69 | 69 |
func NewDefaultMasterArgs() *MasterArgs { |
70 | 70 |
config := &MasterArgs{ |
71 |
- MasterAddr: flagtypes.Addr{Value: "localhost:8443", DefaultScheme: "https", DefaultPort: 8443, AllowPrefix: true}.Default(), |
|
72 |
- EtcdAddr: flagtypes.Addr{Value: "0.0.0.0:4001", DefaultScheme: "https", DefaultPort: 4001}.Default(), |
|
73 |
- PortalNet: flagtypes.DefaultIPNet("172.30.17.0/24"), |
|
74 |
- MasterPublicAddr: flagtypes.Addr{Value: "localhost:8443", DefaultScheme: "https", DefaultPort: 8443, AllowPrefix: true}.Default(), |
|
75 |
- KubernetesPublicAddr: flagtypes.Addr{Value: "localhost:8443", DefaultScheme: "https", DefaultPort: 8443, AllowPrefix: true}.Default(), |
|
76 |
- DNSBindAddr: flagtypes.Addr{Value: "0.0.0.0:53", DefaultScheme: "http", DefaultPort: 53, AllowPrefix: true}.Default(), |
|
71 |
+ MasterAddr: flagtypes.Addr{Value: "localhost:8443", DefaultScheme: "https", DefaultPort: 8443, AllowPrefix: true}.Default(), |
|
72 |
+ EtcdAddr: flagtypes.Addr{Value: "0.0.0.0:4001", DefaultScheme: "https", DefaultPort: 4001}.Default(), |
|
73 |
+ PortalNet: flagtypes.DefaultIPNet("172.30.17.0/24"), |
|
74 |
+ MasterPublicAddr: flagtypes.Addr{Value: "localhost:8443", DefaultScheme: "https", DefaultPort: 8443, AllowPrefix: true}.Default(), |
|
75 |
+ DNSBindAddr: flagtypes.Addr{Value: "0.0.0.0:53", DefaultScheme: "http", DefaultPort: 53, AllowPrefix: true}.Default(), |
|
77 | 76 |
|
78 | 77 |
ListenArg: NewDefaultListenArg(), |
79 | 78 |
PolicyArgs: NewDefaultPolicyArgs(), |
... | ... |
@@ -92,10 +89,6 @@ func (args MasterArgs) BuildSerializeableMasterConfig() (*configapi.MasterConfig |
92 | 92 |
if err != nil { |
93 | 93 |
return nil, err |
94 | 94 |
} |
95 |
- kubePublicAddr, err := args.GetKubernetesPublicAddress() |
|
96 |
- if err != nil { |
|
97 |
- return nil, err |
|
98 |
- } |
|
99 | 95 |
assetPublicAddr, err := args.GetAssetPublicAddress() |
100 | 96 |
if err != nil { |
101 | 97 |
return nil, err |
... | ... |
@@ -128,7 +121,7 @@ func (args MasterArgs) BuildSerializeableMasterConfig() (*configapi.MasterConfig |
128 | 128 |
} |
129 | 129 |
} |
130 | 130 |
|
131 |
- builtInKubernetes := !args.KubeConnectionArgs.KubernetesAddr.Provided && len(args.KubeConnectionArgs.ClientConfigLoadingRules.ExplicitPath) == 0 |
|
131 |
+ builtInKubernetes := len(args.KubeConnectionArgs.ClientConfigLoadingRules.ExplicitPath) == 0 |
|
132 | 132 |
var kubernetesMasterConfig *configapi.KubernetesMasterConfig |
133 | 133 |
if builtInKubernetes { |
134 | 134 |
kubernetesMasterConfig, err = args.BuildSerializeableKubeMasterConfig() |
... | ... |
@@ -162,10 +155,9 @@ func (args MasterArgs) BuildSerializeableMasterConfig() (*configapi.MasterConfig |
162 | 162 |
BindAddress: args.GetAssetBindAddress(), |
163 | 163 |
}, |
164 | 164 |
|
165 |
- LogoutURL: "", |
|
166 |
- MasterPublicURL: masterPublicAddr.String(), |
|
167 |
- PublicURL: assetPublicAddr.String(), |
|
168 |
- KubernetesPublicURL: kubePublicAddr.String(), |
|
165 |
+ LogoutURL: "", |
|
166 |
+ MasterPublicURL: masterPublicAddr.String(), |
|
167 |
+ PublicURL: assetPublicAddr.String(), |
|
169 | 168 |
}, |
170 | 169 |
|
171 | 170 |
DNSConfig: &configapi.DNSConfig{ |
... | ... |
@@ -374,16 +366,14 @@ func (args MasterArgs) Validate() error { |
374 | 374 |
return fmt.Errorf("master public url may not include a path: '%v'", addr.Path) |
375 | 375 |
} |
376 | 376 |
|
377 |
- if addr, err := args.KubeConnectionArgs.GetKubernetesAddress(masterAddr); err != nil { |
|
377 |
+ if err := args.KubeConnectionArgs.Validate(); err != nil { |
|
378 | 378 |
return err |
379 |
- } else if len(addr.Path) != 0 { |
|
380 |
- return fmt.Errorf("kubernetes url may not include a path: '%v'", addr.Path) |
|
381 | 379 |
} |
382 | 380 |
|
383 |
- if addr, err := args.GetKubernetesPublicAddress(); err != nil { |
|
381 |
+ if addr, err := args.KubeConnectionArgs.GetKubernetesAddress(masterAddr); err != nil { |
|
384 | 382 |
return err |
385 | 383 |
} else if len(addr.Path) != 0 { |
386 |
- return fmt.Errorf("kubernetes public url may not include a path: '%v'", addr.Path) |
|
384 |
+ return fmt.Errorf("kubernetes url may not include a path: '%v'", addr.Path) |
|
387 | 385 |
} |
388 | 386 |
|
389 | 387 |
return nil |
... | ... |
@@ -399,16 +389,12 @@ func (args MasterArgs) GetServerCertHostnames() (util.StringSet, error) { |
399 | 399 |
if err != nil { |
400 | 400 |
return nil, err |
401 | 401 |
} |
402 |
- kubePublicAddr, err := args.GetKubernetesPublicAddress() |
|
403 |
- if err != nil { |
|
404 |
- return nil, err |
|
405 |
- } |
|
406 | 402 |
assetPublicAddr, err := args.GetAssetPublicAddress() |
407 | 403 |
if err != nil { |
408 | 404 |
return nil, err |
409 | 405 |
} |
410 | 406 |
|
411 |
- allHostnames := util.NewStringSet("localhost", "127.0.0.1", "openshift.default.local", "kubernetes.default.local", "kubernetes-ro.default.local", masterAddr.Host, masterPublicAddr.Host, kubePublicAddr.Host, assetPublicAddr.Host) |
|
407 |
+ allHostnames := util.NewStringSet("localhost", "127.0.0.1", "openshift.default.local", "kubernetes.default.local", "kubernetes-ro.default.local", masterAddr.Host, masterPublicAddr.Host, assetPublicAddr.Host) |
|
412 | 408 |
certHostnames := util.StringSet{} |
413 | 409 |
for hostname := range allHostnames { |
414 | 410 |
if host, _, err := net.SplitHostPort(hostname); err == nil { |
... | ... |
@@ -511,23 +497,6 @@ func (args MasterArgs) GetEtcdPeerAddress() (*url.URL, error) { |
511 | 511 |
|
512 | 512 |
return etcdAddress, nil |
513 | 513 |
} |
514 |
-func (args MasterArgs) GetKubernetesPublicAddress() (*url.URL, error) { |
|
515 |
- if args.KubernetesPublicAddr.Provided { |
|
516 |
- return args.KubernetesPublicAddr.URL, nil |
|
517 |
- } |
|
518 |
- if args.KubeConnectionArgs.KubernetesAddr.Provided { |
|
519 |
- return args.KubeConnectionArgs.KubernetesAddr.URL, nil |
|
520 |
- } |
|
521 |
- config, ok, err := args.KubeConnectionArgs.GetExternalKubernetesClientConfig() |
|
522 |
- if err != nil { |
|
523 |
- return nil, err |
|
524 |
- } |
|
525 |
- if ok && len(config.Host) > 0 { |
|
526 |
- return url.Parse(config.Host) |
|
527 |
- } |
|
528 |
- |
|
529 |
- return args.GetMasterPublicAddress() |
|
530 |
-} |
|
531 | 514 |
|
532 | 515 |
func (args MasterArgs) GetAssetPublicAddress() (*url.URL, error) { |
533 | 516 |
t, err := args.GetMasterPublicAddress() |
... | ... |
@@ -1,6 +1,7 @@ |
1 | 1 |
package start |
2 | 2 |
|
3 | 3 |
import ( |
4 |
+ "errors" |
|
4 | 5 |
"fmt" |
5 | 6 |
"net" |
6 | 7 |
"net/url" |
... | ... |
@@ -27,7 +28,7 @@ type NodeArgs struct { |
27 | 27 |
AllowDisabledDocker bool |
28 | 28 |
VolumeDir string |
29 | 29 |
|
30 |
- DefaultKubernetesURL url.URL |
|
30 |
+ DefaultKubernetesURL *url.URL |
|
31 | 31 |
ClusterDomain string |
32 | 32 |
ClusterDNS net.IP |
33 | 33 |
|
... | ... |
@@ -70,6 +71,17 @@ func NewDefaultNodeArgs() *NodeArgs { |
70 | 70 |
} |
71 | 71 |
} |
72 | 72 |
|
73 |
+func (args NodeArgs) Validate() error { |
|
74 |
+ if err := args.KubeConnectionArgs.Validate(); err != nil { |
|
75 |
+ return err |
|
76 |
+ } |
|
77 |
+ if _, err := args.KubeConnectionArgs.GetKubernetesAddress(args.DefaultKubernetesURL); err != nil { |
|
78 |
+ return errors.New("--kubeconfig must be set to provide API server connection information") |
|
79 |
+ } |
|
80 |
+ |
|
81 |
+ return nil |
|
82 |
+} |
|
83 |
+ |
|
73 | 84 |
// BuildSerializeableNodeConfig takes the NodeArgs (partially complete config) and uses them along with defaulting behavior to create the fully specified |
74 | 85 |
// config object for starting the node |
75 | 86 |
func (args NodeArgs) BuildSerializeableNodeConfig() (*configapi.NodeConfig, error) { |
... | ... |
@@ -91,7 +91,7 @@ func NewCommandStartAllInOne() (*cobra.Command, *AllInOneOptions) { |
91 | 91 |
flags.StringVar(&options.MasterConfigFile, "master-config", "", "Location of the master configuration file to run from, or write to (when used with --write-config). When running from configuration files, all other command-line arguments are ignored.") |
92 | 92 |
flags.StringVar(&options.NodeConfigFile, "node-config", "", "Location of the node configuration file to run from, or write to (when used with --write-config). When running from configuration files, all other command-line arguments are ignored.") |
93 | 93 |
|
94 |
- masterArgs, nodeArgs, listenArg, imageFormatArgs, kubeConnectionArgs, certArgs := GetAllInOneArgs() |
|
94 |
+ masterArgs, nodeArgs, listenArg, imageFormatArgs, _, certArgs := GetAllInOneArgs() |
|
95 | 95 |
options.MasterArgs, options.NodeArgs = masterArgs, nodeArgs |
96 | 96 |
// by default, all-in-ones all disabled docker. Set it here so that if we allow it to be bound later, bindings take precendence |
97 | 97 |
options.NodeArgs.AllowDisabledDocker = true |
... | ... |
@@ -101,7 +101,6 @@ func NewCommandStartAllInOne() (*cobra.Command, *AllInOneOptions) { |
101 | 101 |
BindListenArg(listenArg, flags, "") |
102 | 102 |
BindPolicyArgs(options.MasterArgs.PolicyArgs, flags, "") |
103 | 103 |
BindImageFormatArgs(imageFormatArgs, flags, "") |
104 |
- BindKubeConnectionArgs(kubeConnectionArgs, flags, "") |
|
105 | 104 |
BindCertArgs(certArgs, flags, "") |
106 | 105 |
|
107 | 106 |
startMaster, _ := NewCommandStartMaster() |
... | ... |
@@ -154,6 +153,14 @@ func (o AllInOneOptions) Validate(args []string) error { |
154 | 154 |
return err |
155 | 155 |
} |
156 | 156 |
|
157 |
+ if err := o.NodeArgs.Validate(); err != nil { |
|
158 |
+ return err |
|
159 |
+ } |
|
160 |
+ |
|
161 |
+ if len(o.MasterArgs.KubeConnectionArgs.ClientConfigLoadingRules.ExplicitPath) != 0 { |
|
162 |
+ return errors.New("all-in-one cannot start against with a remote kubernetes, start just the master instead") |
|
163 |
+ } |
|
164 |
+ |
|
157 | 165 |
return nil |
158 | 166 |
} |
159 | 167 |
|
... | ... |
@@ -165,8 +172,21 @@ func (o AllInOneOptions) Complete() error { |
165 | 165 |
} |
166 | 166 |
o.MasterArgs.NodeList = nodeList.List() |
167 | 167 |
|
168 |
+ masterAddr, err := o.MasterArgs.GetMasterAddress() |
|
169 |
+ if err != nil { |
|
170 |
+ return nil |
|
171 |
+ } |
|
172 |
+ // in the all-in-one, default kubernetes URL to the master's address |
|
173 |
+ o.NodeArgs.DefaultKubernetesURL = masterAddr |
|
168 | 174 |
o.NodeArgs.NodeName = strings.ToLower(o.NodeArgs.NodeName) |
169 | 175 |
|
176 |
+ // in the all-in-one, default ClusterDNS to the master's address |
|
177 |
+ if host, _, err := net.SplitHostPort(masterAddr.Host); err == nil { |
|
178 |
+ if ip := net.ParseIP(host); ip != nil { |
|
179 |
+ o.NodeArgs.ClusterDNS = ip |
|
180 |
+ } |
|
181 |
+ } |
|
182 |
+ |
|
170 | 183 |
return nil |
171 | 184 |
} |
172 | 185 |
|
... | ... |
@@ -199,28 +219,11 @@ func (o AllInOneOptions) StartAllInOne() error { |
199 | 199 |
} |
200 | 200 |
|
201 | 201 |
masterOptions := MasterOptions{o.MasterArgs, o.WriteConfigOnly, o.MasterConfigFile} |
202 |
- |
|
203 |
- masterAddr, err := masterOptions.MasterArgs.GetMasterAddress() |
|
204 |
- if err != nil { |
|
205 |
- return nil |
|
206 |
- } |
|
207 |
- |
|
208 |
- // in the all-in-one, default kubernetes URL to the master's address |
|
209 |
- o.NodeArgs.DefaultKubernetesURL = *masterAddr |
|
210 |
- |
|
211 |
- // in the all-in-one, default ClusterDNS to the master's address |
|
212 |
- if host, _, err := net.SplitHostPort(masterAddr.Host); err == nil { |
|
213 |
- if ip := net.ParseIP(host); ip != nil { |
|
214 |
- o.NodeArgs.ClusterDNS = ip |
|
215 |
- } |
|
216 |
- } |
|
217 |
- |
|
218 |
- nodeOptions := NodeOptions{o.NodeArgs, o.WriteConfigOnly, o.NodeConfigFile} |
|
219 |
- |
|
220 | 202 |
if err := masterOptions.RunMaster(); err != nil { |
221 | 203 |
return err |
222 | 204 |
} |
223 | 205 |
|
206 |
+ nodeOptions := NodeOptions{o.NodeArgs, o.WriteConfigOnly, o.NodeConfigFile} |
|
224 | 207 |
if err := nodeOptions.RunNode(); err != nil { |
225 | 208 |
return err |
226 | 209 |
} |
... | ... |
@@ -98,6 +98,10 @@ func (o NodeOptions) Validate(args []string) error { |
98 | 98 |
} |
99 | 99 |
} |
100 | 100 |
|
101 |
+ if err := o.NodeArgs.Validate(); err != nil { |
|
102 |
+ return err |
|
103 |
+ } |
|
104 |
+ |
|
101 | 105 |
return nil |
102 | 106 |
} |
103 | 107 |
|
... | ... |
@@ -133,7 +137,7 @@ func (o NodeOptions) RunNode() error { |
133 | 133 |
|
134 | 134 |
if mintCerts { |
135 | 135 |
if err := o.CreateCerts(); err != nil { |
136 |
- return nil |
|
136 |
+ return err |
|
137 | 137 |
} |
138 | 138 |
} |
139 | 139 |
|
... | ... |
@@ -219,7 +223,7 @@ func (o NodeOptions) CreateCerts() error { |
219 | 219 |
dnsIP = o.NodeArgs.ClusterDNS.String() |
220 | 220 |
} |
221 | 221 |
|
222 |
- masterAddr, err := o.NodeArgs.KubeConnectionArgs.GetKubernetesAddress(&o.NodeArgs.DefaultKubernetesURL) |
|
222 |
+ masterAddr, err := o.NodeArgs.KubeConnectionArgs.GetKubernetesAddress(o.NodeArgs.DefaultKubernetesURL) |
|
223 | 223 |
if err != nil { |
224 | 224 |
return err |
225 | 225 |
} |