From fdb5173c11b66ea41d7530c237608491c6b4f5cc Mon Sep 17 00:00:00 2001 From: cornelk Date: Mon, 18 Feb 2019 21:14:15 -0600 Subject: [PATCH 1/3] fix typo --- pkg/addons/util.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/addons/util.go b/pkg/addons/util.go index f675b358..55669326 100644 --- a/pkg/addons/util.go +++ b/pkg/addons/util.go @@ -2,7 +2,7 @@ package addons import "log" -// FatalOnError is an helper function used to transfor error to fatal +// FatalOnError is an helper function used to transfer error to fatal func FatalOnError(err error) { if err != nil { log.Fatal(err) From c2a7ba2b1503b9c705d63cf433aa6e77a5dd7564 Mon Sep 17 00:00:00 2001 From: cornelk Date: Mon, 18 Feb 2019 21:16:58 -0600 Subject: [PATCH 2/3] addons: add dashboard --- pkg/addons/addon_dashboard.go | 89 +++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 pkg/addons/addon_dashboard.go diff --git a/pkg/addons/addon_dashboard.go b/pkg/addons/addon_dashboard.go new file mode 100644 index 00000000..da7ae18e --- /dev/null +++ b/pkg/addons/addon_dashboard.go @@ -0,0 +1,89 @@ +package addons + +import ( + "fmt" + + "github.com/xetys/hetzner-kube/pkg/clustermanager" +) + +// DashboardAddon installs dashboard +type DashboardAddon struct { + masterNode *clustermanager.Node + communicator clustermanager.NodeCommunicator +} + +// NewDashboardAddon installs dashboard to the cluster +func NewDashboardAddon(provider clustermanager.ClusterProvider, communicator clustermanager.NodeCommunicator) ClusterAddon { + masterNode, _ := provider.GetMasterNode() + return DashboardAddon{masterNode: masterNode, communicator: communicator} +} + +func init() { + addAddon(NewDashboardAddon) +} + +// Name returns the addons name +func (addon DashboardAddon) Name() string { + return "dashboard" +} + +// Requires returns a slice with the name of required addons +func (addon DashboardAddon) Requires() []string { + return []string{} +} + +// Description returns the addons description +func (addon DashboardAddon) Description() string { + return "Kubernetes Dashboard" +} + +// URL returns the URL of the addons underlying project +func (addon DashboardAddon) URL() string { + return "https://github.com/kubernetes/dashboard" +} + +// Install performs all steps to install the addon +func (addon DashboardAddon) Install(args ...string) { + node := *addon.masterNode + _, err := addon.communicator.RunCmd(node, "kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml") + FatalOnError(err) + + serviceAccount := `apiVersion: v1 +kind: ServiceAccount +metadata: + name: admin-user + namespace: kube-system +--- +apiVersion: rbac.authorization.k8s.io/v1beta1 +kind: ClusterRoleBinding +metadata: + name: admin-user +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: cluster-admin +subjects: + - kind: ServiceAccount + name: admin-user + namespace: kube-system` + err = addon.communicator.WriteFile(node, "/root/dashboard-service-account.yaml", serviceAccount, false) + FatalOnError(err) + + _, err = addon.communicator.RunCmd(node, "kubectl apply -f dashboard-service-account.yaml") + FatalOnError(err) + + token, err := addon.communicator.RunCmd(node, "kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}') | grep -E '^token' | cut -f2 -d':' | tr -d ' \t'") + FatalOnError(err) + + fmt.Printf("Use the following token to login to the dashboard: %s\n", token) + fmt.Println("Dashboard installed") +} + +// Uninstall performs all steps to remove the addon +func (addon DashboardAddon) Uninstall() { + node := *addon.masterNode + _, err := addon.communicator.RunCmd(node, "kubectl delete -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml") + FatalOnError(err) + + fmt.Println("Dashboard uninstalled") +} From 04f7414e54660244526ec91ba1746356a43fdf19 Mon Sep 17 00:00:00 2001 From: cornelk Date: Tue, 19 Feb 2019 11:54:13 -0600 Subject: [PATCH 3/3] fixed service account deletion on uninstall --- pkg/addons/addon_dashboard.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pkg/addons/addon_dashboard.go b/pkg/addons/addon_dashboard.go index da7ae18e..fe90a4a5 100644 --- a/pkg/addons/addon_dashboard.go +++ b/pkg/addons/addon_dashboard.go @@ -85,5 +85,8 @@ func (addon DashboardAddon) Uninstall() { _, err := addon.communicator.RunCmd(node, "kubectl delete -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml") FatalOnError(err) + _, err = addon.communicator.RunCmd(node, "kubectl delete -f dashboard-service-account.yaml") + FatalOnError(err) + fmt.Println("Dashboard uninstalled") }