fix: implement missing scheduler-app-status trigger in k3s scheduler plugin
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
SUBCOMMANDS = subcommands/annotations:set subcommands/autoscaling-auth:set subcommands/autoscaling-auth:report subcommands/cluster-add subcommands/cluster-list subcommands/cluster-remove subcommands/initialize subcommands/labels:set subcommands/report subcommands/set subcommands/show-kubeconfig subcommands/uninstall
|
SUBCOMMANDS = subcommands/annotations:set subcommands/autoscaling-auth:set subcommands/autoscaling-auth:report subcommands/cluster-add subcommands/cluster-list subcommands/cluster-remove subcommands/initialize subcommands/labels:set subcommands/report subcommands/set subcommands/show-kubeconfig subcommands/uninstall
|
||||||
TRIGGERS = triggers/install triggers/post-app-clone-setup triggers/post-app-rename-setup triggers/post-delete triggers/report triggers/scheduler-deploy triggers/scheduler-enter triggers/scheduler-logs triggers/scheduler-post-delete triggers/scheduler-run triggers/scheduler-run-list triggers/scheduler-stop
|
TRIGGERS = triggers/install triggers/post-app-clone-setup triggers/post-app-rename-setup triggers/post-delete triggers/report triggers/scheduler-app-status triggers/scheduler-deploy triggers/scheduler-enter triggers/scheduler-logs triggers/scheduler-post-delete triggers/scheduler-run triggers/scheduler-run-list triggers/scheduler-stop
|
||||||
BUILD = commands subcommands triggers
|
BUILD = commands subcommands triggers
|
||||||
PLUGIN_NAME = scheduler-k3s
|
PLUGIN_NAME = scheduler-k3s
|
||||||
|
|
||||||
|
|||||||
@@ -38,6 +38,10 @@ func main() {
|
|||||||
case "report":
|
case "report":
|
||||||
appName := flag.Arg(0)
|
appName := flag.Arg(0)
|
||||||
err = scheduler_k3s.ReportSingleApp(appName, "", "")
|
err = scheduler_k3s.ReportSingleApp(appName, "", "")
|
||||||
|
case "scheduler-app-status":
|
||||||
|
scheduler := flag.Arg(0)
|
||||||
|
appName := flag.Arg(1)
|
||||||
|
err = scheduler_k3s.TriggerSchedulerAppStatus(scheduler, appName)
|
||||||
case "scheduler-deploy":
|
case "scheduler-deploy":
|
||||||
scheduler := flag.Arg(0)
|
scheduler := flag.Arg(0)
|
||||||
appName := flag.Arg(1)
|
appName := flag.Arg(1)
|
||||||
|
|||||||
@@ -75,6 +75,50 @@ func TriggerPostDelete(appName string) error {
|
|||||||
return propertyErr
|
return propertyErr
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TriggerSchedulerAppStatus returns the status of an app on the scheduler
|
||||||
|
func TriggerSchedulerAppStatus(scheduler string, appName string) error {
|
||||||
|
if scheduler != "k3s" {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
clientset, err := NewKubernetesClient()
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Error creating kubernetes client: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := clientset.Ping(); err != nil {
|
||||||
|
return fmt.Errorf("kubernetes api not available: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace := getComputedNamespace(appName)
|
||||||
|
deployments, err := clientset.ListDeployments(context.Background(), ListDeploymentsInput{
|
||||||
|
Namespace: namespace,
|
||||||
|
LabelSelector: fmt.Sprintf("app.kubernetes.io/part-of=%s", appName),
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Error listing pods: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
processCount := 0
|
||||||
|
expectedProcesses := 0
|
||||||
|
runningProcesses := 0
|
||||||
|
for _, deployment := range deployments {
|
||||||
|
processCount += int(*deployment.Spec.Replicas)
|
||||||
|
expectedProcesses += int(*deployment.Spec.Replicas)
|
||||||
|
runningProcesses += int(deployment.Status.AvailableReplicas)
|
||||||
|
}
|
||||||
|
|
||||||
|
running := "true"
|
||||||
|
if expectedProcesses == 0 || runningProcesses == 0 {
|
||||||
|
running = "false"
|
||||||
|
} else if runningProcesses < expectedProcesses {
|
||||||
|
running = "mixed"
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Printf("%d %s", processCount, running)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// TriggerSchedulerDeploy deploys an image tag for a given application
|
// TriggerSchedulerDeploy deploys an image tag for a given application
|
||||||
func TriggerSchedulerDeploy(scheduler string, appName string, imageTag string) error {
|
func TriggerSchedulerDeploy(scheduler string, appName string, imageTag string) error {
|
||||||
if scheduler != "k3s" {
|
if scheduler != "k3s" {
|
||||||
|
|||||||
Reference in New Issue
Block a user