github.com/chenbh/concourse/v6@v6.4.2/fly/commands/prune_worker.go (about)

     1  package commands
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/chenbh/concourse/v6/fly/commands/internal/displayhelpers"
     7  	"github.com/chenbh/concourse/v6/fly/commands/internal/flaghelpers"
     8  	"github.com/chenbh/concourse/v6/fly/rc"
     9  	"github.com/chenbh/concourse/v6/fly/ui"
    10  )
    11  
    12  type PruneWorkerCommand struct {
    13  	Worker     flaghelpers.WorkerFlag `short:"w"  long:"worker" description:"Worker to prune"`
    14  	AllStalled bool                   `short:"a" long:"all-stalled" description:"Prune all stalled workers"`
    15  }
    16  
    17  func (command *PruneWorkerCommand) Execute(args []string) error {
    18  	if command.Worker == "" && !command.AllStalled {
    19  		displayhelpers.Failf("Either a worker name or --all-stalled are required")
    20  	}
    21  
    22  	workerName := command.Worker.Name()
    23  	var workersNames []string
    24  
    25  	if command.Worker != "" {
    26  		workersNames = append(workersNames, workerName)
    27  	}
    28  
    29  	target, err := rc.LoadTarget(Fly.Target, Fly.Verbose)
    30  	if err != nil {
    31  		return err
    32  	}
    33  
    34  	err = target.Validate()
    35  	if err != nil {
    36  		return err
    37  	}
    38  
    39  	if command.AllStalled {
    40  		workers, err := target.Client().ListWorkers()
    41  		if err != nil {
    42  			return err
    43  		}
    44  		for _, worker := range workers {
    45  			if worker.State == "stalled" {
    46  				workersNames = append(workersNames, worker.Name)
    47  			}
    48  		}
    49  		if workersNames == nil {
    50  			fmt.Printf(ui.WarningColor("WARNING: No stalled workers found.\n"))
    51  		}
    52  	}
    53  
    54  	for _, workerName := range workersNames {
    55  		err = target.Client().PruneWorker(workerName)
    56  		if err != nil {
    57  			return err
    58  		}
    59  
    60  		fmt.Printf("pruned '%s'\n", workerName)
    61  	}
    62  	return nil
    63  }