mirror of
https://github.com/dokku/dokku.git
synced 2025-12-29 00:25:08 +01:00
Merge pull request #6798 from dokku/scheduler-k3s-app-status
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
|
||||
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
|
||||
PLUGIN_NAME = scheduler-k3s
|
||||
|
||||
|
||||
@@ -38,6 +38,10 @@ func main() {
|
||||
case "report":
|
||||
appName := flag.Arg(0)
|
||||
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":
|
||||
scheduler := flag.Arg(0)
|
||||
appName := flag.Arg(1)
|
||||
|
||||
@@ -75,6 +75,50 @@ func TriggerPostDelete(appName string) error {
|
||||
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
|
||||
func TriggerSchedulerDeploy(scheduler string, appName string, imageTag string) error {
|
||||
if scheduler != "k3s" {
|
||||
|
||||
Reference in New Issue
Block a user