Skip to content
This repository has been archived by the owner on Jul 25, 2022. It is now read-only.

enable gardenctl logs for some components while targeting the control plane #471

Merged
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
97 changes: 83 additions & 14 deletions pkg/cmd/logs.go
Original file line number Diff line number Diff line change
Expand Up @@ -75,9 +75,9 @@ func validateArgs(targetReader TargetReader, args []string) error {
}
var t Target
ReadTarget(pathTarget, &t)
if !IsTargeted(targetReader, "shoot") && args[0] != "gardener-apiserver" && args[0] != "gardener-controller-manager" && args[0] != "tf" && args[0] != "kubernetes-dashboard" {
if !IsTargeted(targetReader, "shoot") && args[0] != "all" && args[0] != "api" && args[0] != "scheduler" && args[0] != "controller-manager" && args[0] != "etcd-main" && args[0] != "etcd-events" && args[0] != "machine-controller-manager" && args[0] != "prometheus" && args[0] != "cluster-autoscaler" && args[0] != "vpn-seed" && args[0] != "gardenlet" && args[0] != "gardener-apiserver" && args[0] != "gardener-controller-manager" && args[0] != "tf" && args[0] != "kubernetes-dashboard" {
return errors.New("No shoot targeted")
} else if !IsTargeted(targetReader, "project") && args[0] == "tf" || !IsTargeted(targetReader, "shoot") && args[0] == "tf" && !IsTargeted(targetReader, "seed") {
} else if !(IsTargeted(targetReader, "project") || IsTargeted(targetReader, "shoot") || IsTargeted(targetReader, "seed") || IsTargeted(targetReader, "namespace")) && args[0] == "tf" {
return errors.New("No seed or shoot targeted")
} else if !IsTargeted(targetReader) {
return errors.New("Target stack is empty")
Expand Down Expand Up @@ -563,9 +563,43 @@ func logsGardenerDashboard() {
logPodGarden("gardener", "garden")
}

//logPodWhileControlPlaneTargeted get log pod in shoot namespace while control plane targeted
func logPodWhileControlPlaneTargeted(targetReader TargetReader, toMatch string, toTarget string, container string) {
target := targetReader.ReadTarget(pathTarget)
if len(target.Stack()) != 3 {
fmt.Println("Control Plane not targeted")
os.Exit(2)
}
namespace := target.Stack()[2].Name
seed, err := GetSeedObject(targetReader, target.Stack()[1].Name)
checkError(err)
greaterThanLokiRelease, err := semver.NewConstraint(">=1.8.0")
checkError(err)
gardenerVersion, err := semver.NewVersion(seed.Status.Gardener.Version)
checkError(err)
Client, err = clientToTarget("seed")
checkError(err)
if flags.loki {
if greaterThanLokiRelease.Check(gardenerVersion) {
showLogsFromLoki(namespace, toMatch, container)
} else {
fmt.Println("--loki flag is available only for gardener version >= 1.8.0")
fmt.Println("Current version: " + gardenerVersion.String())
os.Exit(2)
}

} else {
showLogsFromKubectl(namespace, toMatch, container)
}
}

// logsAPIServer prints the logfile of the api-server
func logsAPIServer(targetReader TargetReader) {
logPod(targetReader, "kube-apiserver", "seed", "kube-apiserver")
if IsControlPlaneTargeted(targetReader) {
logPodWhileControlPlaneTargeted(targetReader, "kube-apiserver", "seed", "kube-apiserver")
} else {
logPod(targetReader, "kube-apiserver", "seed", "kube-apiserver")
}
}

func saveLogsAPIServer(targetReader TargetReader) {
Expand All @@ -574,7 +608,11 @@ func saveLogsAPIServer(targetReader TargetReader) {

// logsScheduler prints the logfile of the scheduler
func logsScheduler(targetReader TargetReader) {
logPod(targetReader, "kube-scheduler", "seed", emptyString)
if IsControlPlaneTargeted(targetReader) {
logPodWhileControlPlaneTargeted(targetReader, "kube-scheduler", "seed", emptyString)
} else {
logPod(targetReader, "kube-scheduler", "seed", emptyString)
}
}

func saveLogsScheduler(targetReader TargetReader) {
Expand All @@ -583,7 +621,11 @@ func saveLogsScheduler(targetReader TargetReader) {

// logsAPIServer prints the logfile of the controller-manager
func logsControllerManager(targetReader TargetReader) {
logPod(targetReader, "kube-controller-manager", "seed", emptyString)
if IsControlPlaneTargeted(targetReader) {
logPodWhileControlPlaneTargeted(targetReader, "kube-controller-manager", "seed", emptyString)
} else {
logPod(targetReader, "kube-controller-manager", "seed", emptyString)
}
}

func saveLogsControllerManager(targetReader TargetReader) {
Expand All @@ -593,11 +635,18 @@ func saveLogsControllerManager(targetReader TargetReader) {
// logsVpnSeed prints the logfile of the vpn-seed container
func logsVpnSeed(targetReader TargetReader, shootTechnicalID string) {
fmt.Println("-----------------------Kube-Apiserver")
if shootTechnicalID == emptyString {
shootTechnicalID = GetFromTargetInfo(targetReader, "shootTechnicalID")
logPodSeed("kube-apiserver", shootTechnicalID, "vpn-seed")
if IsControlPlaneTargeted(targetReader) {
target := targetReader.ReadTarget(pathTarget)
shootTechID := target.Stack()[2].Name
fmt.Println("in logsVpnSeed the namespace is" + shootTechID)
logPodSeed("kube-apiserver", shootTechID, "vpn-seed")
} else {
logPodSeed("kube-apiserver", shootTechnicalID, "vpn-seed")
if shootTechnicalID == emptyString {
shootTechnicalID = GetFromTargetInfo(targetReader, "shootTechnicalID")
logPodSeed("kube-apiserver", shootTechnicalID, "vpn-seed")
} else {
logPodSeed("kube-apiserver", shootTechnicalID, "vpn-seed")
}
}
}

Expand All @@ -608,7 +657,11 @@ func logsEtcdOpertor() {

// logsEtcdMain prints the logfile of etcd-main
func logsEtcdMain(targetReader TargetReader, containerName string) {
logPod(targetReader, "etcd-main", "seed", containerName)
if IsControlPlaneTargeted(targetReader) {
logPodWhileControlPlaneTargeted(targetReader, "etcd-main", "seed", containerName)
} else {
logPod(targetReader, "etcd-main", "seed", containerName)
}
}

func saveLogsEtcdMain(targetReader TargetReader, containerName string) {
Expand All @@ -626,7 +679,11 @@ func saveLogsEtcdMainBackup(targetReader TargetReader) {

// logsEtcdEvents prints the logfile of etcd-events
func logsEtcdEvents(targetReader TargetReader, containerName string) {
logPod(targetReader, "etcd-events-", "seed", containerName)
if IsControlPlaneTargeted(targetReader) {
logPodWhileControlPlaneTargeted(targetReader, "etcd-events-", "seed", containerName)
} else {
logPod(targetReader, "etcd-events-", "seed", containerName)
}
}

func saveLogsEtcdEvents(targetReader TargetReader, containerName string) {
Expand Down Expand Up @@ -655,7 +712,11 @@ func saveLogsVpnShoot() {

// logsMachineControllerManager prints the logfile of machine-controller-manager
func logsMachineControllerManager(targetReader TargetReader) {
logPod(targetReader, "machine-controller-manager", "seed", emptyString)
if IsControlPlaneTargeted(targetReader) {
logPodWhileControlPlaneTargeted(targetReader, "machine-controller-manager", "seed", emptyString)
} else {
logPod(targetReader, "machine-controller-manager", "seed", emptyString)
}
}

func saveLogsMachineControllerManager(targetReader TargetReader) {
Expand Down Expand Up @@ -740,7 +801,11 @@ func saveLogsKubernetesDashboard() {

// logsPrometheus prints the logfiles of prometheus pod
func logsPrometheus(targetReader TargetReader) {
logPod(targetReader, "prometheus", "seed", "prometheus")
if IsControlPlaneTargeted(targetReader) {
logPodWhileControlPlaneTargeted(targetReader, "prometheus", "seed", "prometheus")
} else {
logPod(targetReader, "prometheus", "seed", "prometheus")
}
}

func saveLogsPrometheus(targetReader TargetReader) {
Expand All @@ -766,7 +831,11 @@ func saveLogsGardenlet() {

// logsClusterAutoscaler prints the logfiles of cluster-autoscaler
func logsClusterAutoscaler(targetReader TargetReader) {
logPod(targetReader, "cluster-autoscaler", "seed", "cluster-autoscaler")
if IsControlPlaneTargeted(targetReader) {
logPodWhileControlPlaneTargeted(targetReader, "cluster-autoscaler", "seed", "cluster-autoscaler")
} else {
logPod(targetReader, "cluster-autoscaler", "seed", "cluster-autoscaler")
}
}

func saveLogsClusterAutoscaler(targetReader TargetReader) {
Expand Down
16 changes: 16 additions & 0 deletions pkg/cmd/miscellaneous.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import (
"net/http"
"net/url"
"os"
"strings"

authorizationv1 "k8s.io/api/authorization/v1"

Expand Down Expand Up @@ -332,6 +333,21 @@ func IsTargeted(targetReader TargetReader, args ...string) bool {
return true
}

//IsControlPlaneTargeted returns whether current targeting a control plane for a shoot
func IsControlPlaneTargeted(targetReader TargetReader) bool {
target := targetReader.ReadTarget(pathTarget)
if !IsTargeted(targetReader, "garden", "seed", "namespace") {
return false
}
if len(target.Stack()) != 3 {
return false
}
if !strings.HasPrefix(target.Stack()[2].Name, "shoot") {
return false
}
return true
}

//GetFromTargetInfo validation value from global map targetInfo garden/project/shoot/seed/shootTechnicalID/....
func GetFromTargetInfo(targetReader TargetReader, key string) string {
getTargetMapInfo(targetReader)
Expand Down