diff --git a/pkg/cmd/server/api/types.go b/pkg/cmd/server/api/types.go index daafcca27e7a..3e1e4c2fe6c1 100644 --- a/pkg/cmd/server/api/types.go +++ b/pkg/cmd/server/api/types.go @@ -47,10 +47,14 @@ type MasterConfig struct { // CORSAllowedOrigins CORSAllowedOrigins []string + // MasterPublicURL is how clients can access the OpenShift API server + MasterPublicURL string + // EtcdStorageConfig contains information about how API resources are // stored in Etcd. These values are only relevant when etcd is the // backing store for the cluster. EtcdStorageConfig EtcdStorageConfig + // EtcdClientInfo contains information about how to connect to etcd EtcdClientInfo EtcdConnectionInfo diff --git a/pkg/cmd/server/api/v1/types.go b/pkg/cmd/server/api/v1/types.go index 96e03b60f31a..daa66a409baa 100644 --- a/pkg/cmd/server/api/v1/types.go +++ b/pkg/cmd/server/api/v1/types.go @@ -46,10 +46,14 @@ type MasterConfig struct { // CORSAllowedOrigins CORSAllowedOrigins []string `json:"corsAllowedOrigins"` + // MasterPublicURL is how clients can access the OpenShift API server + MasterPublicURL string `json:"masterPublicURL"` + // EtcdStorageConfig contains information about how API resources are // stored in Etcd. These values are only relevant when etcd is the // backing store for the cluster. EtcdStorageConfig EtcdStorageConfig `json:"etcdStorageConfig"` + // EtcdClientInfo contains information about how to connect to etcd EtcdClientInfo EtcdConnectionInfo `json:"etcdClientInfo"` // KubeletClientInfo contains information about how to connect to kubelets diff --git a/pkg/cmd/server/api/validation/master.go b/pkg/cmd/server/api/validation/master.go index 77dc8d64c701..be852d610d1e 100644 --- a/pkg/cmd/server/api/validation/master.go +++ b/pkg/cmd/server/api/validation/master.go @@ -14,6 +14,10 @@ import ( func ValidateMasterConfig(config *api.MasterConfig) fielderrors.ValidationErrorList { allErrs := fielderrors.ValidationErrorList{} + if _, urlErrs := ValidateURL(config.MasterPublicURL, "masterPublicURL"); len(urlErrs) > 0 { + allErrs = append(allErrs, urlErrs...) + } + if config.AssetConfig != nil { allErrs = append(allErrs, ValidateAssetConfig(config.AssetConfig).Prefix("assetConfig")...) colocated := config.AssetConfig.ServingInfo.BindAddress == config.ServingInfo.BindAddress @@ -115,6 +119,10 @@ func ValidateAssetConfig(config *api.AssetConfig) fielderrors.ValidationErrorLis } } + if _, urlErrs := ValidateURL(config.MasterPublicURL, "masterPublicURL"); len(urlErrs) > 0 { + allErrs = append(allErrs, urlErrs...) + } + return allErrs } diff --git a/pkg/cmd/server/api/validation/oauth.go b/pkg/cmd/server/api/validation/oauth.go index 07a514f1e536..b73f96dc2781 100644 --- a/pkg/cmd/server/api/validation/oauth.go +++ b/pkg/cmd/server/api/validation/oauth.go @@ -18,8 +18,8 @@ func ValidateOAuthConfig(config *api.OAuthConfig) fielderrors.ValidationErrorLis allErrs = append(allErrs, fielderrors.NewFieldRequired("masterURL")) } - if len(config.MasterPublicURL) == 0 { - allErrs = append(allErrs, fielderrors.NewFieldRequired("masterPublicURL")) + if _, urlErrs := ValidateURL(config.MasterPublicURL, "masterPublicURL"); len(urlErrs) > 0 { + allErrs = append(allErrs, urlErrs...) } if len(config.AssetPublicURL) == 0 { diff --git a/pkg/cmd/server/origin/auth.go b/pkg/cmd/server/origin/auth.go index f2ed5498097a..66bf2fb6385a 100644 --- a/pkg/cmd/server/origin/auth.go +++ b/pkg/cmd/server/origin/auth.go @@ -168,7 +168,7 @@ func (c *AuthConfig) InstallAPI(container *restful.Container) []string { return []string{ fmt.Sprintf("Started OAuth2 API at %%s%s", OpenShiftOAuthAPIPrefix), - fmt.Sprintf("Started login server at %%s%s", OpenShiftLoginPrefix), + fmt.Sprintf("Started Login endpoint at %%s%s", OpenShiftLoginPrefix), } } diff --git a/pkg/cmd/server/origin/master.go b/pkg/cmd/server/origin/master.go index 4c6bd05d42e3..4eef6bce70bd 100644 --- a/pkg/cmd/server/origin/master.go +++ b/pkg/cmd/server/origin/master.go @@ -434,8 +434,9 @@ func (c *MasterConfig) Run(protected []APIInstaller, unprotected []APIInstaller) // install swagger swaggerConfig := swagger.Config{ - WebServices: append(safe.RegisteredWebServices(), open.RegisteredWebServices()...), - ApiPath: swaggerAPIPrefix, + WebServicesUrl: c.Options.MasterPublicURL, + WebServices: append(safe.RegisteredWebServices(), open.RegisteredWebServices()...), + ApiPath: swaggerAPIPrefix, } // log nothing from swagger swagger.LogInfo = func(format string, v ...interface{}) {} diff --git a/pkg/cmd/server/start/master_args.go b/pkg/cmd/server/start/master_args.go index e62b109407c0..1708d8010386 100644 --- a/pkg/cmd/server/start/master_args.go +++ b/pkg/cmd/server/start/master_args.go @@ -140,6 +140,7 @@ func (args MasterArgs) BuildSerializeableMasterConfig() (*configapi.MasterConfig BindAddress: args.ListenArg.ListenAddr.URL.Host, }, CORSAllowedOrigins: corsAllowedOrigins.List(), + MasterPublicURL: masterPublicAddr.String(), KubernetesMasterConfig: kubernetesMasterConfig, EtcdConfig: etcdConfig,