Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Introduce --kubeconfig instead of --config #18806

Closed
wants to merge 3 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
552 changes: 274 additions & 278 deletions contrib/completions/bash/oc

Large diffs are not rendered by default.

552 changes: 274 additions & 278 deletions contrib/completions/zsh/oc

Large diffs are not rendered by default.

42 changes: 21 additions & 21 deletions hack/lib/start.sh
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,7 @@ function os::start::internal::patch_master_config() {

# Make oc use ${MASTER_CONFIG_DIR}/admin.kubeconfig, and ignore anything in the running user's $HOME dir
export ADMIN_KUBECONFIG="${MASTER_CONFIG_DIR}/admin.kubeconfig"
CLUSTER_ADMIN_CONTEXT=$(oc config view --config="${ADMIN_KUBECONFIG}" --flatten -o template --template='{{index . "current-context"}}'); export CLUSTER_ADMIN_CONTEXT
CLUSTER_ADMIN_CONTEXT=$(oc config view --kubeconfig="${ADMIN_KUBECONFIG}" --flatten -o template --template='{{index . "current-context"}}'); export CLUSTER_ADMIN_CONTEXT
${sudo} chmod -R a+rwX "${ADMIN_KUBECONFIG}"
os::log::debug "To debug: export KUBECONFIG=$ADMIN_KUBECONFIG"
}
Expand Down Expand Up @@ -281,14 +281,14 @@ function os::start::master() {
os::log::debug "OpenShift server start at: $( date )"

os::test::junit::declare_suite_start "setup/start-master"
os::cmd::try_until_text "oc get --raw /healthz --as system:unauthenticated --config='${ADMIN_KUBECONFIG}'" 'ok' $(( 160 * second )) 0.25
os::cmd::try_until_text "oc get --raw /healthz/ready --as system:unauthenticated --config='${ADMIN_KUBECONFIG}'" 'ok' $(( 160 * second )) 0.25
os::cmd::try_until_success "oc get service kubernetes --namespace default --config='${ADMIN_KUBECONFIG}'" $(( 160 * second )) 0.25
os::cmd::try_until_text "oc get --raw /healthz --as system:unauthenticated --kubeconfig='${ADMIN_KUBECONFIG}'" 'ok' $(( 160 * second )) 0.25
os::cmd::try_until_text "oc get --raw /healthz/ready --as system:unauthenticated --kubeconfig='${ADMIN_KUBECONFIG}'" 'ok' $(( 160 * second )) 0.25
os::cmd::try_until_success "oc get service kubernetes --namespace default --kubeconfig='${ADMIN_KUBECONFIG}'" $(( 160 * second )) 0.25

# wait for lease acquisition that indicates the controllers and scheduler have successfully started
os::cmd::try_until_success "oc get configmap kube-controller-manager --namespace kube-system --config='${ADMIN_KUBECONFIG}'" $(( 160 * second )) 0.25
os::cmd::try_until_success "oc get configmap openshift-master-controllers --namespace kube-system --config='${ADMIN_KUBECONFIG}'" $(( 160 * second )) 0.25
os::cmd::try_until_success "oc get configmap kube-scheduler --namespace kube-system --config='${ADMIN_KUBECONFIG}'" $(( 160 * second )) 0.25
os::cmd::try_until_success "oc get configmap kube-controller-manager --namespace kube-system --kubeconfig='${ADMIN_KUBECONFIG}'" $(( 160 * second )) 0.25
os::cmd::try_until_success "oc get configmap openshift-master-controllers --namespace kube-system --kubeconfig='${ADMIN_KUBECONFIG}'" $(( 160 * second )) 0.25
os::cmd::try_until_success "oc get configmap kube-scheduler --namespace kube-system --kubeconfig='${ADMIN_KUBECONFIG}'" $(( 160 * second )) 0.25
os::test::junit::declare_suite_end

os::log::debug "OpenShift server health checks done at: $( date )"
Expand Down Expand Up @@ -340,11 +340,11 @@ function os::start::all_in_one() {
os::log::debug "OpenShift server start at: $( date )"

os::test::junit::declare_suite_start "setup/start-all_in_one"
os::cmd::try_until_text "oc get --raw /healthz --as system:unauthenticated --config='${ADMIN_KUBECONFIG}'" 'ok' $(( 80 * second )) 0.25
os::cmd::try_until_text "oc get --raw ${KUBELET_SCHEME}://${KUBELET_HOST}:${KUBELET_PORT}/healthz --as system:unauthenticated --config='${ADMIN_KUBECONFIG}'" 'ok' $(( 2 * minute )) 0.5
os::cmd::try_until_text "oc get --raw /healthz/ready --as system:unauthenticated --config='${ADMIN_KUBECONFIG}'" 'ok' $(( 80 * second )) 0.25
os::cmd::try_until_success "oc get service kubernetes --namespace default --config='${ADMIN_KUBECONFIG}'" $(( 160 * second )) 0.25
os::cmd::try_until_success "oc get --raw /api/v1/nodes/${KUBELET_HOST} --config='${ADMIN_KUBECONFIG}'" $(( 80 * second )) 0.25
os::cmd::try_until_text "oc get --raw /healthz --as system:unauthenticated --kubeconfig='${ADMIN_KUBECONFIG}'" 'ok' $(( 80 * second )) 0.25
os::cmd::try_until_text "oc get --raw ${KUBELET_SCHEME}://${KUBELET_HOST}:${KUBELET_PORT}/healthz --as system:unauthenticated --kubeconfig='${ADMIN_KUBECONFIG}'" 'ok' $(( 2 * minute )) 0.5
os::cmd::try_until_text "oc get --raw /healthz/ready --as system:unauthenticated --kubeconfig='${ADMIN_KUBECONFIG}'" 'ok' $(( 80 * second )) 0.25
os::cmd::try_until_success "oc get service kubernetes --namespace default --kubeconfig='${ADMIN_KUBECONFIG}'" $(( 160 * second )) 0.25
os::cmd::try_until_success "oc get --raw /api/v1/nodes/${KUBELET_HOST} --kubeconfig='${ADMIN_KUBECONFIG}'" $(( 80 * second )) 0.25
os::test::junit::declare_suite_end

os::log::debug "OpenShift server health checks done at: $( date )"
Expand Down Expand Up @@ -414,8 +414,8 @@ function os::start::api_server() {
os::log::debug "OpenShift API server start at: $( date )"

os::test::junit::declare_suite_start "setup/start-api_server"
os::cmd::try_until_text "oc get --raw /healthz --as system:unauthenticated --config='${ADMIN_KUBECONFIG}'" 'ok' $(( 80 * second )) 0.25
os::cmd::try_until_text "oc get --raw /healthz/ready --as system:unauthenticated --config='${ADMIN_KUBECONFIG}'" 'ok' $(( 160 * second )) 0.25
os::cmd::try_until_text "oc get --raw /healthz --as system:unauthenticated --kubeconfig='${ADMIN_KUBECONFIG}'" 'ok' $(( 80 * second )) 0.25
os::cmd::try_until_text "oc get --raw /healthz/ready --as system:unauthenticated --kubeconfig='${ADMIN_KUBECONFIG}'" 'ok' $(( 160 * second )) 0.25
os::test::junit::declare_suite_end

os::log::debug "OpenShift API server health checks done at: $( date )"
Expand Down Expand Up @@ -484,7 +484,7 @@ function os::start::internal::start_node() {
os::log::debug "OpenShift node start at: $( date )"

os::test::junit::declare_suite_start "setup/start-node"
os::cmd::try_until_text "oc get --raw ${KUBELET_SCHEME}://${KUBELET_HOST}:${KUBELET_PORT}/healthz --as system:unauthenticated --config='${ADMIN_KUBECONFIG}'" 'ok' $(( 80 * second )) 0.25
os::cmd::try_until_text "oc get --raw ${KUBELET_SCHEME}://${KUBELET_HOST}:${KUBELET_PORT}/healthz --as system:unauthenticated --kubeconfig='${ADMIN_KUBECONFIG}'" 'ok' $(( 80 * second )) 0.25
os::test::junit::declare_suite_end

os::log::debug "OpenShift node health checks done at: $( date )"
Expand Down Expand Up @@ -596,7 +596,7 @@ function os::start::internal::print_server_info() {
# None
function os::start::router() {
os::log::debug "Installing the router"
oc adm policy add-scc-to-user privileged --serviceaccount='router' --config="${ADMIN_KUBECONFIG}"
oc adm policy add-scc-to-user privileged --serviceaccount='router' --kubeconfig="${ADMIN_KUBECONFIG}"
# Create a TLS certificate for the router
if [[ -n "${CREATE_ROUTER_CERT:-}" ]]; then
os::log::debug "Generating router TLS certificate"
Expand All @@ -609,9 +609,9 @@ function os::start::router() {
cat "${MASTER_CONFIG_DIR}/router.crt" \
"${MASTER_CONFIG_DIR}/router.key" \
"${MASTER_CONFIG_DIR}/ca.crt" > "${MASTER_CONFIG_DIR}/router.pem"
oc adm router --config="${ADMIN_KUBECONFIG}" --images="${USE_IMAGES}" --service-account=router --default-cert="${MASTER_CONFIG_DIR}/router.pem"
oc adm router --kubeconfig="${ADMIN_KUBECONFIG}" --images="${USE_IMAGES}" --service-account=router --default-cert="${MASTER_CONFIG_DIR}/router.pem"
else
oc adm router --config="${ADMIN_KUBECONFIG}" --images="${USE_IMAGES}" --service-account=router
oc adm router --kubeconfig="${ADMIN_KUBECONFIG}" --images="${USE_IMAGES}" --service-account=router
fi
}
readonly -f os::start::router
Expand All @@ -630,8 +630,8 @@ function os::start::registry() {
os::log::debug "Installing the registry"
# For testing purposes, ensure the quota objects are always up to date in the registry by
# disabling project cache.
oc adm registry --config="${ADMIN_KUBECONFIG}" --images="${USE_IMAGES}" --enforce-quota -o json | \
oc env --config="${ADMIN_KUBECONFIG}" -f - --output json "REGISTRY_MIDDLEWARE_REPOSITORY_OPENSHIFT_PROJECTCACHETTL=0" | \
oc create --config="${ADMIN_KUBECONFIG}" -f -
oc adm registry --kubeconfig="${ADMIN_KUBECONFIG}" --images="${USE_IMAGES}" --enforce-quota -o json | \
oc env --kubeconfig="${ADMIN_KUBECONFIG}" -f - --output json "REGISTRY_MIDDLEWARE_REPOSITORY_OPENSHIFT_PROJECTCACHETTL=0" | \
oc create --kubeconfig="${ADMIN_KUBECONFIG}" -f -
}
readonly -f os::start::registry
2 changes: 1 addition & 1 deletion hack/test-cmd.sh
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ for test in "${tests[@]}"; do
done

os::log::debug "Metrics information logged to ${LOG_DIR}/metrics.log"
oc get --raw /metrics --config="${MASTER_CONFIG_DIR}/admin.kubeconfig"> "${LOG_DIR}/metrics.log"
oc get --raw /metrics --kubeconfig="${MASTER_CONFIG_DIR}/admin.kubeconfig"> "${LOG_DIR}/metrics.log"

if [[ -n "${failed:-}" ]]; then
exit 1
Expand Down
4 changes: 4 additions & 0 deletions pkg/cmd/infra/router/clientcmd.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,10 @@ func DefaultClientConfig(flags *pflag.FlagSet) kclientcmd.ClientConfig {
loadingRules := kclientcmd.NewDefaultClientConfigLoadingRules()
flags.StringVar(&loadingRules.ExplicitPath, kclientcmd.OpenShiftKubeConfigFlagName, "", "Path to the config file to use for CLI requests.")
cobra.MarkFlagFilename(flags, kclientcmd.OpenShiftKubeConfigFlagName)
flags.MarkHidden(kclientcmd.OpenShiftKubeConfigFlagName)
flags.MarkDeprecated(kclientcmd.OpenShiftKubeConfigFlagName, fmt.Sprintf("Use --%s instead.", kclientcmd.RecommendedConfigPathFlag))
flags.StringVar(&loadingRules.ExplicitPath, kclientcmd.RecommendedConfigPathFlag, "", "Path to the kubeconfig file to use for CLI requests.")
cobra.MarkFlagFilename(flags, kclientcmd.RecommendedConfigPathFlag)

// set our explicit defaults
defaultOverrides := &kclientcmd.ConfigOverrides{ClusterDefaults: kclientcmdapi.Cluster{Server: os.Getenv("KUBERNETES_MASTER")}}
Expand Down
7 changes: 6 additions & 1 deletion pkg/oc/admin/diagnostics/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,13 @@ func (o DiagnosticsOptions) detectClientConfig() (expected bool, detected bool)
return false, false
}
o.Logger().Notice("CED2011", "Determining if client configuration exists for client/cluster diagnostics")
confFlagName := kclientcmd.OpenShiftKubeConfigFlagName
confFlagName := kclientcmd.RecommendedConfigPathFlag
confFlagValue := o.ClientFlags.Lookup(confFlagName).Value.String()
// fallback to the old flag when the value is empty, but the flagname presented
// everywhere should be the new one
if len(confFlagValue) == 0 {
confFlagValue = o.ClientFlags.Lookup(kclientcmd.OpenShiftKubeConfigFlagName).Value.String()
}
successfulLoad := false

var foundPath string
Expand Down
1 change: 1 addition & 0 deletions pkg/oc/admin/diagnostics/diagnostics.go
Original file line number Diff line number Diff line change
Expand Up @@ -224,6 +224,7 @@ func (o *DiagnosticsOptions) bindClientFlags(flags *flag.FlagSet) {
o.ClientFlags = flag.NewFlagSet("client", flag.ContinueOnError) // hide the extensive set of client flags
o.Factory = osclientcmd.New(o.ClientFlags) // that would otherwise be added to this command
flags.AddFlag(o.ClientFlags.Lookup(kclientcmd.OpenShiftKubeConfigFlagName))
flags.AddFlag(o.ClientFlags.Lookup(kclientcmd.RecommendedConfigPathFlag))
flags.AddFlag(o.ClientFlags.Lookup("context")) // TODO: find k8s constant
flags.StringVar(&o.ClientClusterContext, options.FlagClusterContextName, "", "Client context to use for cluster administrator")
flags.BoolVar(&o.PreventModification, options.FlagPreventModificationName, false, "If true, may be set to prevent diagnostics making any changes via the API")
Expand Down
2 changes: 1 addition & 1 deletion pkg/oc/cli/cmd/wrappers.go
Original file line number Diff line number Diff line change
Expand Up @@ -735,7 +735,7 @@ func NewCmdConfig(parentName, name string, f *clientcmd.Factory, out, errOut io.
pathOptions := &kclientcmd.PathOptions{
GlobalFile: kclientcmd.RecommendedHomeFile,
EnvVar: kclientcmd.RecommendedConfigPathEnvVar,
ExplicitFileFlag: kclientcmd.OpenShiftKubeConfigFlagName,
ExplicitFileFlag: kclientcmd.RecommendedConfigPathFlag,

GlobalFileSubpath: path.Join(kclientcmd.RecommendedHomeDir, kclientcmd.RecommendedFileName),

Expand Down
11 changes: 7 additions & 4 deletions pkg/oc/cli/config/loader.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,18 +8,21 @@ import (
)

func NewPathOptions(cmd *cobra.Command) *kclientcmd.PathOptions {
return NewPathOptionsWithConfig(kcmdutil.GetFlagString(cmd, kclientcmd.OpenShiftKubeConfigFlagName))
return NewPathOptionsWithConfig(
kcmdutil.GetFlagString(cmd, kclientcmd.RecommendedConfigPathFlag),
kcmdutil.GetFlagString(cmd, kclientcmd.OpenShiftKubeConfigFlagName))
}

func NewPathOptionsWithConfig(configPath string) *kclientcmd.PathOptions {
func NewPathOptionsWithConfig(configPath, deprecatedConfigPath string) *kclientcmd.PathOptions {
return &kclientcmd.PathOptions{
GlobalFile: kclientcmd.RecommendedHomeFile,

EnvVar: kclientcmd.RecommendedConfigPathEnvVar,
ExplicitFileFlag: kclientcmd.OpenShiftKubeConfigFlagName,
ExplicitFileFlag: kclientcmd.RecommendedConfigPathFlag,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks broken. Please explicitly check both flags with oc login and oc project

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've added test to login.sh checking both login and project.


LoadingRules: &kclientcmd.ClientConfigLoadingRules{
ExplicitPath: configPath,
ExplicitPath: configPath,
DeprecatedExplicitPath: deprecatedConfigPath,
},
}
}
4 changes: 2 additions & 2 deletions pkg/oc/clusterup/docker/openshift/project.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ func CreateProject(f *clientcmd.Factory, name, display, desc, basecmd string, ou
if err != nil {
return err
}
pathOptions := config.NewPathOptionsWithConfig("")
pathOptions := config.NewPathOptionsWithConfig("", "")
opt := &cmd.NewProjectOptions{
ProjectName: name,
DisplayName: display,
Expand Down Expand Up @@ -51,7 +51,7 @@ func CreateProject(f *clientcmd.Factory, name, display, desc, basecmd string, ou
}

func setCurrentProject(f *clientcmd.Factory, name string, out io.Writer) error {
pathOptions := config.NewPathOptionsWithConfig("")
pathOptions := config.NewPathOptionsWithConfig("", "")
opt := &cmd.ProjectOptions{PathOptions: pathOptions}
opt.Complete(f, []string{name}, out)
return opt.RunProject()
Expand Down
2 changes: 1 addition & 1 deletion test/cmd/admin.sh
Original file line number Diff line number Diff line change
Expand Up @@ -548,7 +548,7 @@ os::cmd::expect_success_and_text "oc adm top imagestreams" "default/busybox\W+65
os::cmd::expect_success "oc delete is/busybox -n default"

# log in as an image-pruner and test that oc adm prune images works against the atomic binary
os::cmd::expect_success "oc adm policy add-cluster-role-to-user system:image-pruner pruner --config='${MASTER_CONFIG_DIR}/admin.kubeconfig'"
os::cmd::expect_success "oc adm policy add-cluster-role-to-user system:image-pruner pruner --kubeconfig='${MASTER_CONFIG_DIR}/admin.kubeconfig'"
os::cmd::expect_success "oc login --server=${KUBERNETES_MASTER} --certificate-authority='${MASTER_CONFIG_DIR}/ca.crt' -u pruner -p anything"
os::cmd::expect_success_and_text "oc adm prune images" "Dry run enabled - no modifications will be made. Add --confirm to remove images"

Expand Down
8 changes: 4 additions & 4 deletions test/cmd/config.sh
Original file line number Diff line number Diff line change
Expand Up @@ -34,15 +34,15 @@ os::cmd::expect_success_and_not_text 'oc get bc' 'does not exist'
# need some level of default (both upstream and here) to get the pretty auth message because you fail on namespace first.
os::cmd::expect_failure_and_text 'KUBERNETES_MASTER=anything env -u KUBERNETES_SERVICE_HOST oc get buildconfigs --user="test"' 'auth info "test" does not exist'

os::cmd::expect_failure_and_text 'oc get bc --config=missing' 'missing: no such file or directory'
os::cmd::expect_failure_and_text 'oc get bc --kubeconfig=missing' 'missing: no such file or directory'

# define temp location for new config
NEW_CONFIG_LOC="${BASETMPDIR}/new-config.yaml"

# make sure non-existing --cluster and --user can still be set
os::cmd::expect_success_and_text "oc config set-context new-context-name --cluster=missing-cluster --user=missing-user --namespace=default --config='${NEW_CONFIG_LOC}'" 'Context "new-context-name" '
os::cmd::expect_failure_and_text "env -u KUBERNETES_SERVICE_HOST -u KUBECONFIG -u KUBERNETES_MASTER oc get buildconfigs --config='${NEW_CONFIG_LOC}'" 'Missing or incomplete configuration info'
os::cmd::expect_failure_and_text "env -u KUBERNETES_SERVICE_HOST oc get buildconfigs --config='${NEW_CONFIG_LOC}'" 'Missing or incomplete configuration info'
os::cmd::expect_success_and_text "oc config set-context new-context-name --cluster=missing-cluster --user=missing-user --namespace=default --kubeconfig='${NEW_CONFIG_LOC}'" 'Context "new-context-name" '
os::cmd::expect_failure_and_text "env -u KUBERNETES_SERVICE_HOST -u KUBECONFIG -u KUBERNETES_MASTER oc get buildconfigs --kubeconfig='${NEW_CONFIG_LOC}'" 'Missing or incomplete configuration info'
os::cmd::expect_failure_and_text "env -u KUBERNETES_SERVICE_HOST oc get buildconfigs --kubeconfig='${NEW_CONFIG_LOC}'" 'Missing or incomplete configuration info'
)
echo "config error handling: ok"
os::test::junit::declare_suite_end
Loading