Skip to content

Commit

Permalink
break remaining deps on pkg/oc
Browse files Browse the repository at this point in the history
  • Loading branch information
juanvallejo committed Nov 30, 2017
1 parent 14a5503 commit 213f9a8
Show file tree
Hide file tree
Showing 19 changed files with 183 additions and 233 deletions.
96 changes: 96 additions & 0 deletions pkg/client/config/smart_merge.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
package config

import (
"crypto/x509"
"fmt"
"net"
"net/url"
"strconv"
"strings"

x509request "k8s.io/apiserver/pkg/authentication/request/x509"

"k8s.io/apimachinery/third_party/forked/golang/netutil"
)

// GetClusterNicknameFromURL returns host:port of the apiServerLocation, with .'s replaced by -'s
func GetClusterNicknameFromURL(apiServerLocation string) (string, error) {
u, err := url.Parse(apiServerLocation)
if err != nil {
return "", err
}
hostPort := netutil.CanonicalAddr(u)

// we need a character other than "." to avoid conflicts with. replace with '-'
return strings.Replace(hostPort, ".", "-", -1), nil
}

func GetUserNicknameFromCert(clusterNick string, chain ...*x509.Certificate) (string, error) {
userInfo, _, err := x509request.CommonNameUserConversion(chain)
if err != nil {
return "", err
}

return userInfo.GetName() + "/" + clusterNick, nil
}

func GetContextNickname(namespace, clusterNick, userNick string) string {
tokens := strings.SplitN(userNick, "/", 2)
return namespace + "/" + clusterNick + "/" + tokens[0]
}

var validURLSchemes = []string{"https://", "http://", "tcp://"}

// NormalizeServerURL is opinionated normalization of a string that represents a URL. Returns the URL provided matching the format
// expected when storing a URL in a config. Sets a scheme and port if not present, removes unnecessary trailing
// slashes, etc. Can be used to normalize a URL provided by user input.
func NormalizeServerURL(s string) (string, error) {
// normalize scheme
if !hasScheme(s) {
s = validURLSchemes[0] + s
}

addr, err := url.Parse(s)
if err != nil {
return "", fmt.Errorf("Not a valid URL: %v.", err)
}

// normalize host:port
if strings.Contains(addr.Host, ":") {
_, port, err := net.SplitHostPort(addr.Host)
if err != nil {
return "", fmt.Errorf("Not a valid host:port: %v.", err)
}
_, err = strconv.ParseUint(port, 10, 16)
if err != nil {
return "", fmt.Errorf("Not a valid port: %v. Port numbers must be between 0 and 65535.", port)
}
} else {
port := 0
switch addr.Scheme {
case "http":
port = 80
case "https":
port = 443
default:
return "", fmt.Errorf("No port specified.")
}
addr.Host = net.JoinHostPort(addr.Host, strconv.FormatInt(int64(port), 10))
}

// remove trailing slash if that's the only path we have
if addr.Path == "/" {
addr.Path = ""
}

return addr.String(), nil
}

func hasScheme(s string) bool {
for _, p := range validURLSchemes {
if strings.HasPrefix(s, p) {
return true
}
}
return false
}
1 change: 0 additions & 1 deletion pkg/cmd/infra/router/f5.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ import (
clientcmd "github.com/openshift/origin/pkg/client/cmd"
"github.com/openshift/origin/pkg/cmd/util"
cmdversion "github.com/openshift/origin/pkg/cmd/version"
"github.com/openshift/origin/pkg/oc/cli/util/clientcmd"
projectinternalclientset "github.com/openshift/origin/pkg/project/generated/internalclientset"
routeapi "github.com/openshift/origin/pkg/route/apis/route"
routeinternalclientset "github.com/openshift/origin/pkg/route/generated/internalclientset"
Expand Down
1 change: 0 additions & 1 deletion pkg/cmd/infra/router/template.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ import (
"github.com/openshift/origin/pkg/cmd/server/crypto"
"github.com/openshift/origin/pkg/cmd/util"
cmdversion "github.com/openshift/origin/pkg/cmd/version"
"github.com/openshift/origin/pkg/oc/cli/util/clientcmd"
projectinternalclientset "github.com/openshift/origin/pkg/project/generated/internalclientset"
routeinternalclientset "github.com/openshift/origin/pkg/route/generated/internalclientset"
"github.com/openshift/origin/pkg/router"
Expand Down
46 changes: 4 additions & 42 deletions pkg/cmd/openshift/openshift.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import (
"strings"

"github.com/spf13/cobra"
"github.com/spf13/pflag"

ktemplates "k8s.io/kubernetes/pkg/kubectl/cmd/templates"
kcmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
Expand All @@ -20,8 +19,9 @@ import (
"github.com/openshift/origin/pkg/cmd/server/start"
"github.com/openshift/origin/pkg/cmd/templates"
cmdutil "github.com/openshift/origin/pkg/cmd/util"
cmdversion "github.com/openshift/origin/pkg/cmd/version"
"github.com/openshift/origin/pkg/oc/cli/cmd"
"github.com/openshift/origin/pkg/oc/cli/util/clientcmd"
osversion "github.com/openshift/origin/pkg/version/openshift"
)

var (
Expand Down Expand Up @@ -91,12 +91,10 @@ func NewCommandOpenShift(name string) *cobra.Command {
Run: kcmdutil.DefaultSubCommandRun(out),
}

f := clientcmd.New(pflag.NewFlagSet("", pflag.ContinueOnError))

startAllInOne, _ := start.NewCommandStartAllInOne(name, out, errout)
root.AddCommand(startAllInOne)
root.AddCommand(newCompletionCommand("completion", name+" completion"))
root.AddCommand(cmd.NewCmdVersion(name, f, out, cmd.VersionOptions{PrintEtcdVersion: true, IsServer: true}))
root.AddCommand(cmdversion.NewCmdVersion(name, osversion.Get(), os.Stdout))
root.AddCommand(cmd.NewCmdOptions(out))

// TODO: add groups
Expand All @@ -105,43 +103,7 @@ func NewCommandOpenShift(name string) *cobra.Command {
return root
}

var (
completion_long = ktemplates.LongDesc(`
Output shell completion code for the given shell (bash or zsh).
This command prints shell code which must be evaluation to provide interactive
completion of kubectl commands.`)

completion_example = ktemplates.Examples(`
$ source <(kubectl completion bash)
will load the kubectl completion code for bash. Note that this depends on the bash-completion
framework. It must be sourced before sourcing the kubectl completion, i.e. on the Mac:
$ brew install bash-completion
$ source $(brew --prefix)/etc/bash_completion
$ source <(kubectl completion bash)
If you use zsh, the following will load kubectl zsh completion:
$ source <(kubectl completion zsh)`)
)

func newCompletionCommand(name, fullName string) *cobra.Command {
out := os.Stdout

completion := &cobra.Command{
Use: fmt.Sprintf("%s SHELL", name),
Short: "Output shell completion code for the given shell (bash or zsh)",
Long: completion_long,
Example: completion_example,
Run: func(cmd *cobra.Command, args []string) {

},
}

f := clientcmd.New(completion.PersistentFlags())

return cmd.NewCmdCompletion(fullName, f, out)
return cmd.NewCmdCompletion(fullName, os.Stdout)

}
13 changes: 6 additions & 7 deletions pkg/cmd/server/admin/create_kubeconfig.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,8 @@ import (
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
kcmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"

"github.com/openshift/origin/pkg/client/config"
"github.com/openshift/origin/pkg/cmd/server/crypto"
"github.com/openshift/origin/pkg/oc/cli/config"
cliconfig "github.com/openshift/origin/pkg/oc/cli/config"
"k8s.io/client-go/tools/clientcmd"
clientcmdapi "k8s.io/client-go/tools/clientcmd/api"
)
Expand Down Expand Up @@ -161,15 +160,15 @@ func (o CreateKubeConfigOptions) CreateKubeConfig() (*clientcmdapi.Config, error
}

// determine all the nicknames
clusterNick, err := cliconfig.GetClusterNicknameFromURL(o.APIServerURL)
clusterNick, err := config.GetClusterNicknameFromURL(o.APIServerURL)
if err != nil {
return nil, err
}
userNick, err := cliconfig.GetUserNicknameFromCert(clusterNick, certConfig.Certs...)
userNick, err := config.GetUserNicknameFromCert(clusterNick, certConfig.Certs...)
if err != nil {
return nil, err
}
contextNick := cliconfig.GetContextNickname(o.ContextNamespace, clusterNick, userNick)
contextNick := config.GetContextNickname(o.ContextNamespace, clusterNick, userNick)

credentials := make(map[string]*clientcmdapi.AuthInfo)
credentials[userNick] = &clientcmdapi.AuthInfo{
Expand All @@ -194,11 +193,11 @@ func (o CreateKubeConfigOptions) CreateKubeConfig() (*clientcmdapi.Config, error

createPublic := (len(o.PublicAPIServerURL) > 0) && o.APIServerURL != o.PublicAPIServerURL
if createPublic {
publicClusterNick, err := cliconfig.GetClusterNicknameFromURL(o.PublicAPIServerURL)
publicClusterNick, err := config.GetClusterNicknameFromURL(o.PublicAPIServerURL)
if err != nil {
return nil, err
}
publicContextNick := cliconfig.GetContextNickname(o.ContextNamespace, publicClusterNick, userNick)
publicContextNick := config.GetContextNickname(o.ContextNamespace, publicClusterNick, userNick)

clusters[publicClusterNick] = &clientcmdapi.Cluster{
Server: o.PublicAPIServerURL,
Expand Down
1 change: 0 additions & 1 deletion pkg/cmd/server/origin/controller/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ import (
configapi "github.com/openshift/origin/pkg/cmd/server/api"
"github.com/openshift/origin/pkg/cmd/server/crypto"
"github.com/openshift/origin/pkg/cmd/util/variable"
"github.com/openshift/origin/pkg/oc/cli/util/clientcmd"
)

func envVars(host string, caData []byte, insecure bool, bearerTokenFile string) []kapi.EnvVar {
Expand Down
2 changes: 1 addition & 1 deletion pkg/oc/admin/admin.go
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ func NewCommandAdmin(name, fullName string, in io.Reader, out io.Writer, errout
cmds.AddCommand(
// part of every root command
cmd.NewCmdConfig(fullName, "config", out, errout),
cmd.NewCmdCompletion(fullName, f, out),
cmd.NewCmdCompletion(fullName, out),

// hidden
cmd.NewCmdOptions(out),
Expand Down
1 change: 0 additions & 1 deletion pkg/oc/admin/diagnostics/diagnostics/pod/auth.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ import (
knet "k8s.io/apimachinery/pkg/util/net"
restclient "k8s.io/client-go/rest"

clientcmd "github.com/openshift/origin/pkg/client/cmd"
"github.com/openshift/origin/pkg/cmd/flagtypes"
"github.com/openshift/origin/pkg/oc/admin/diagnostics/diagnostics/types"
"github.com/openshift/origin/pkg/oc/cli/util/clientcmd"
Expand Down
2 changes: 1 addition & 1 deletion pkg/oc/cli/cli.go
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,7 @@ func NewCommandCLI(name, fullName string, in io.Reader, out, errout io.Writer) *
login.NewCmdLogout("logout", fullName+" logout", fullName+" login", f, in, out),
cmd.NewCmdConfig(fullName, "config", out, errout),
cmd.NewCmdWhoAmI(cmd.WhoAmIRecommendedCommandName, fullName+" "+cmd.WhoAmIRecommendedCommandName, f, out),
cmd.NewCmdCompletion(fullName, f, out),
cmd.NewCmdCompletion(fullName, out),
},
},
}
Expand Down
9 changes: 5 additions & 4 deletions pkg/oc/cli/cmd/login/loginoptions.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,13 @@ import (
kclientcmdapi "k8s.io/client-go/tools/clientcmd/api"
kterm "k8s.io/kubernetes/pkg/kubectl/util/term"

"github.com/openshift/origin/pkg/client/config"
cmdutil "github.com/openshift/origin/pkg/cmd/util"
"github.com/openshift/origin/pkg/cmd/util/term"
"github.com/openshift/origin/pkg/cmd/util/tokencmd"
"github.com/openshift/origin/pkg/oc/cli/cmd/errors"
loginutil "github.com/openshift/origin/pkg/oc/cli/cmd/login/util"
"github.com/openshift/origin/pkg/oc/cli/config"
cliconfig "github.com/openshift/origin/pkg/oc/cli/config"
"github.com/openshift/origin/pkg/oc/cli/util/clientcmd"
cmderr "github.com/openshift/origin/pkg/oc/errors"
projectclient "github.com/openshift/origin/pkg/project/generated/internalclientset"
Expand Down Expand Up @@ -347,7 +348,7 @@ func (o *LoginOptions) SaveConfig() (bool, error) {
globalExistedBefore = false
}

newConfig, err := config.CreateConfig(o.Project, o.Config)
newConfig, err := cliconfig.CreateConfig(o.Project, o.Config)
if err != nil {
return false, err
}
Expand All @@ -360,11 +361,11 @@ func (o *LoginOptions) SaveConfig() (bool, error) {
if err != nil {
return false, err
}
if err := config.RelativizeClientConfigPaths(newConfig, baseDir); err != nil {
if err := cliconfig.RelativizeClientConfigPaths(newConfig, baseDir); err != nil {
return false, err
}

configToWrite, err := config.MergeConfig(*o.StartingKubeConfig, *newConfig)
configToWrite, err := cliconfig.MergeConfig(*o.StartingKubeConfig, *newConfig)
if err != nil {
return false, err
}
Expand Down
2 changes: 1 addition & 1 deletion pkg/oc/cli/cmd/login/loginoptions_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ import (

"github.com/MakeNowJust/heredoc"

"github.com/openshift/origin/pkg/client/config"
"github.com/openshift/origin/pkg/oauth/util"
"github.com/openshift/origin/pkg/oc/cli/config"
"github.com/openshift/origin/pkg/oc/cli/util/clientcmd"

kapierrs "k8s.io/apimachinery/pkg/api/errors"
Expand Down
5 changes: 3 additions & 2 deletions pkg/oc/cli/cmd/project.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import (
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
kcmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"

clientcfg "github.com/openshift/origin/pkg/client/config"
cliconfig "github.com/openshift/origin/pkg/oc/cli/config"
"github.com/openshift/origin/pkg/oc/cli/util/clientcmd"
projectapi "github.com/openshift/origin/pkg/project/apis/project"
Expand Down Expand Up @@ -186,7 +187,7 @@ func (o ProjectOptions) RunProject() error {
return err
}

defaultContextName := cliconfig.GetContextNickname(currentContext.Namespace, currentContext.Cluster, currentContext.AuthInfo)
defaultContextName := clientcfg.GetContextNickname(currentContext.Namespace, currentContext.Cluster, currentContext.AuthInfo)

// if they specified a project name and got a generated context, then only show the information they care about. They won't recognize
// a context name they didn't choose
Expand Down Expand Up @@ -286,7 +287,7 @@ func (o ProjectOptions) RunProject() error {

// calculate what name we'd generate for the context. If the context has the same name, don't drop it into the output, because the user won't
// recognize the name since they didn't choose it.
defaultContextName := cliconfig.GetContextNickname(namespaceInUse, config.Contexts[contextInUse].Cluster, config.Contexts[contextInUse].AuthInfo)
defaultContextName := clientcfg.GetContextNickname(namespaceInUse, config.Contexts[contextInUse].Cluster, config.Contexts[contextInUse].AuthInfo)

switch {
// if there is no namespace, then the only information we can provide is the context and server
Expand Down
3 changes: 2 additions & 1 deletion pkg/oc/cli/cmd/projects.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import (
kcmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"

oapi "github.com/openshift/origin/pkg/api"
clientcfg "github.com/openshift/origin/pkg/client/config"
cliconfig "github.com/openshift/origin/pkg/oc/cli/config"
"github.com/openshift/origin/pkg/oc/cli/util/clientcmd"
projectapi "github.com/openshift/origin/pkg/project/apis/project"
Expand Down Expand Up @@ -140,7 +141,7 @@ func (o ProjectsOptions) RunProjects() error {

var defaultContextName string
if currentContext != nil {
defaultContextName = cliconfig.GetContextNickname(currentContext.Namespace, currentContext.Cluster, currentContext.AuthInfo)
defaultContextName = clientcfg.GetContextNickname(currentContext.Namespace, currentContext.Cluster, currentContext.AuthInfo)
}

var msg string
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 @@ -229,7 +229,7 @@ var (
* zsh completions are only supported in versions of zsh >= 5.2`)
)

func NewCmdCompletion(fullName string, f *clientcmd.Factory, out io.Writer) *cobra.Command {
func NewCmdCompletion(fullName string, out io.Writer) *cobra.Command {
cmdHelpName := fullName

if strings.HasSuffix(fullName, "completion") {
Expand Down
Loading

0 comments on commit 213f9a8

Please sign in to comment.