Browse code

remove dead parameters from openshift start

deads2k authored on 2015/04/02 02:30:48
Showing 12 changed files
... ...
@@ -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
 	}
... ...
@@ -12,7 +12,7 @@
12 12
           "ports": [{
13 13
               "containerPort": 8443,
14 14
           }],
15
-          "command": ["start", "master", "--kubernetes=:8443"],
15
+          "command": ["start", "master"],
16 16
           "imagePullPolicy": "PullIfNotPresent"
17 17
         }
18 18
       ],