1
0
mirror of https://github.com/ceph/ceph-csi.git synced 2025-06-14 02:43:36 +00:00
Files
cephfs
deploy
docs
examples
pkg
rbd
vendor
github.com
golang.org
google.golang.org
k8s.io
apimachinery
kubernetes
.github
Godeps
api
build
cluster
cmd
docs
hack
logo
pkg
api
apis
auth
capabilities
client
cloudprovider
controller
credentialprovider
features
fieldpath
generated
kubeapiserver
kubectl
apply
apps
cmd
auth
config
create
get
rollout
scalejob
set
templates
testdata
testing
util
wait
BUILD
alpha.go
annotate.go
annotate_test.go
apiresources.go
apiversions.go
apply.go
apply_edit_last_applied.go
apply_set_last_applied.go
apply_test.go
apply_view_last_applied.go
attach.go
attach_test.go
autoscale.go
certificates.go
clusterinfo.go
clusterinfo_dump.go
clusterinfo_dump_test.go
cmd.go
cmd_printing_test.go
cmd_test.go
completion.go
convert.go
convert_test.go
cp.go
cp_test.go
delete.go
delete_flags.go
delete_test.go
describe.go
describe_test.go
diff.go
diff_test.go
drain.go
drain_test.go
edit.go
edit_test.go
exec.go
exec_test.go
explain.go
expose.go
expose_test.go
help.go
label.go
label_test.go
logs.go
logs_test.go
options.go
patch.go
patch_test.go
plugin.go
plugin_test.go
portforward.go
portforward_test.go
proxy.go
replace.go
replace_test.go
rollingupdate.go
rollingupdate_test.go
run.go
run_test.go
scale.go
taint.go
taint_test.go
top.go
top_node.go
top_node_test.go
top_pod.go
top_pod_test.go
top_test.go
version.go
explain
genericclioptions
metricsutil
plugins
polymorphichelpers
proxy
scheme
util
validation
.import-restrictions
BUILD
OWNERS
apply.go
autoscale.go
autoscale_test.go
clusterrolebinding.go
clusterrolebinding_test.go
conditions.go
configmap.go
configmap_test.go
deployment.go
deployment_test.go
doc.go
env_file.go
env_file_test.go
generate.go
generate_test.go
history.go
history_test.go
interfaces.go
namespace.go
namespace_test.go
pdb.go
pdb_test.go
priorityclass.go
priorityclass_test.go
quota.go
quota_test.go
rolebinding.go
rolebinding_test.go
rollback.go
rollback_test.go
rolling_updater.go
rolling_updater_test.go
rollout_status.go
rollout_status_test.go
run.go
run_test.go
scale.go
scale_test.go
secret.go
secret_for_docker_registry.go
secret_for_docker_registry_test.go
secret_for_tls.go
secret_for_tls_test.go
secret_test.go
service.go
service_basic.go
service_basic_test.go
service_test.go
serviceaccount.go
serviceaccount_test.go
sorter.go
sorter_test.go
kubelet
kubemark
master
printers
probe
proxy
quota
registry
routes
scheduler
security
securitycontext
serviceaccount
ssh
util
version
volume
watch
windows
.import-restrictions
BUILD
OWNERS
plugin
staging
test
third_party
translations
.generated_files
.gitattributes
.gitignore
CHANGELOG-1.11.md
CHANGELOG.md
CONTRIBUTING.md
LICENSE
OWNERS
OWNERS_ALIASES
README.md
SECURITY_CONTACTS
SUPPORT.md
code-of-conduct.md
labels.yaml
utils
.gitignore
.travis.yml
Gopkg.lock
Gopkg.toml
LICENSE
Makefile
README.md
deploy.sh
ceph-csi/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/clusterinfo.go
2018-07-31 14:53:26 +02:00

167 lines
4.8 KiB
Go

/*
Copyright 2015 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package cmd
import (
"fmt"
"io"
"strconv"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
utilnet "k8s.io/apimachinery/pkg/util/net"
restclient "k8s.io/client-go/rest"
"k8s.io/kubernetes/pkg/api/legacyscheme"
api "k8s.io/kubernetes/pkg/apis/core"
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
"k8s.io/kubernetes/pkg/kubectl/genericclioptions"
"k8s.io/kubernetes/pkg/kubectl/genericclioptions/resource"
"k8s.io/kubernetes/pkg/kubectl/util/i18n"
ct "github.com/daviddengcn/go-colortext"
"github.com/spf13/cobra"
)
var (
longDescr = templates.LongDesc(i18n.T(`
Display addresses of the master and services with label kubernetes.io/cluster-service=true
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.`))
clusterinfoExample = templates.Examples(i18n.T(`
# Print the address of the master and cluster services
kubectl cluster-info`))
)
type ClusterInfoOptions struct {
genericclioptions.IOStreams
Namespace string
Builder *resource.Builder
Client *restclient.Config
}
func NewCmdClusterInfo(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *cobra.Command {
o := &ClusterInfoOptions{
IOStreams: ioStreams,
}
cmd := &cobra.Command{
Use: "cluster-info",
Short: i18n.T("Display cluster info"),
Long: longDescr,
Example: clusterinfoExample,
Run: func(cmd *cobra.Command, args []string) {
cmdutil.CheckErr(o.Complete(f, cmd))
cmdutil.CheckErr(o.Run())
},
}
cmd.AddCommand(NewCmdClusterInfoDump(f, ioStreams))
return cmd
}
func (o *ClusterInfoOptions) Complete(f cmdutil.Factory, cmd *cobra.Command) error {
var err error
o.Client, err = f.ToRESTConfig()
if err != nil {
return err
}
cmdNamespace := cmdutil.GetFlagString(cmd, "namespace")
if cmdNamespace == "" {
cmdNamespace = metav1.NamespaceSystem
}
o.Namespace = cmdNamespace
o.Builder = f.NewBuilder()
return nil
}
func (o *ClusterInfoOptions) Run() error {
printService(o.Out, "Kubernetes master", o.Client.Host)
// TODO use generalized labels once they are implemented (#341)
b := o.Builder.
WithScheme(legacyscheme.Scheme).
NamespaceParam(o.Namespace).DefaultNamespace().
LabelSelectorParam("kubernetes.io/cluster-service=true").
ResourceTypeOrNameArgs(false, []string{"services"}...).
Latest()
err := b.Do().Visit(func(r *resource.Info, err error) error {
if err != nil {
return err
}
services := r.Object.(*api.ServiceList).Items
for _, service := range services {
var link string
if len(service.Status.LoadBalancer.Ingress) > 0 {
ingress := service.Status.LoadBalancer.Ingress[0]
ip := ingress.IP
if ip == "" {
ip = ingress.Hostname
}
for _, port := range service.Spec.Ports {
link += "http://" + ip + ":" + strconv.Itoa(int(port.Port)) + " "
}
} else {
name := service.ObjectMeta.Name
if len(service.Spec.Ports) > 0 {
port := service.Spec.Ports[0]
// guess if the scheme is https
scheme := ""
if port.Name == "https" || port.Port == 443 {
scheme = "https"
}
// format is <scheme>:<service-name>:<service-port-name>
name = utilnet.JoinSchemeNamePort(scheme, service.ObjectMeta.Name, port.Name)
}
if len(o.Client.GroupVersion.Group) == 0 {
link = o.Client.Host + "/api/" + o.Client.GroupVersion.Version + "/namespaces/" + service.ObjectMeta.Namespace + "/services/" + name + "/proxy"
} else {
link = o.Client.Host + "/api/" + o.Client.GroupVersion.Group + "/" + o.Client.GroupVersion.Version + "/namespaces/" + service.ObjectMeta.Namespace + "/services/" + name + "/proxy"
}
}
name := service.ObjectMeta.Labels["kubernetes.io/name"]
if len(name) == 0 {
name = service.ObjectMeta.Name
}
printService(o.Out, name, link)
}
return nil
})
o.Out.Write([]byte("\nTo further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.\n"))
return err
// TODO consider printing more information about cluster
}
func printService(out io.Writer, name, link string) {
ct.ChangeColor(ct.Green, false, ct.None, false)
fmt.Fprint(out, name)
ct.ResetColor()
fmt.Fprint(out, " is running at ")
ct.ChangeColor(ct.Yellow, false, ct.None, false)
fmt.Fprint(out, link)
ct.ResetColor()
fmt.Fprintln(out, "")
}