github.com/secure-build/gitlab-runner@v12.5.0+incompatible/commands/unregister.go (about)

     1  package commands
     2  
     3  import (
     4  	"github.com/sirupsen/logrus"
     5  	"github.com/urfave/cli"
     6  
     7  	"gitlab.com/gitlab-org/gitlab-runner/common"
     8  	"gitlab.com/gitlab-org/gitlab-runner/network"
     9  )
    10  
    11  type UnregisterCommand struct {
    12  	configOptions
    13  	common.RunnerCredentials
    14  	network    common.Network
    15  	Name       string `toml:"name" json:"name" short:"n" long:"name" description:"Name of the runner you wish to unregister"`
    16  	AllRunners bool   `toml:"all_runners" json:"all-runners" long:"all-runners" description:"Unregister all runners"`
    17  }
    18  
    19  func (c *UnregisterCommand) unregisterAllRunners() (runners []*common.RunnerConfig) {
    20  	logrus.Warningln("Unregistering all runners")
    21  	for _, r := range c.config.Runners {
    22  		if !c.network.UnregisterRunner(r.RunnerCredentials) {
    23  			logrus.Errorln("Failed to unregister runner", r.Name)
    24  			//If unregister fails, leave the runner in the config
    25  			runners = append(runners, r)
    26  		}
    27  	}
    28  	return
    29  }
    30  
    31  func (c *UnregisterCommand) unregisterSingleRunner() (runners []*common.RunnerConfig) {
    32  	if len(c.Name) > 0 { // Unregister when given a name
    33  		runnerConfig, err := c.RunnerByName(c.Name)
    34  		if err != nil {
    35  			logrus.Fatalln(err)
    36  		}
    37  		c.RunnerCredentials = runnerConfig.RunnerCredentials
    38  	}
    39  
    40  	// Unregister given Token and URL of the runner
    41  	if !c.network.UnregisterRunner(c.RunnerCredentials) {
    42  		logrus.Fatalln("Failed to unregister runner", c.Name)
    43  	}
    44  
    45  	for _, otherRunner := range c.config.Runners {
    46  		if otherRunner.RunnerCredentials == c.RunnerCredentials {
    47  			continue
    48  		}
    49  		runners = append(runners, otherRunner)
    50  	}
    51  	return
    52  }
    53  
    54  func (c *UnregisterCommand) Execute(context *cli.Context) {
    55  	userModeWarning(false)
    56  
    57  	err := c.loadConfig()
    58  	if err != nil {
    59  		logrus.Fatalln(err)
    60  		return
    61  	}
    62  
    63  	var runners []*common.RunnerConfig
    64  	if c.AllRunners {
    65  		runners = c.unregisterAllRunners()
    66  	} else {
    67  		runners = c.unregisterSingleRunner()
    68  	}
    69  
    70  	// check if anything changed
    71  	if len(c.config.Runners) == len(runners) {
    72  		return
    73  	}
    74  
    75  	c.config.Runners = runners
    76  
    77  	// save config file
    78  	err = c.saveConfig()
    79  	if err != nil {
    80  		logrus.Fatalln("Failed to update", c.ConfigFile, err)
    81  	}
    82  	logrus.Println("Updated", c.ConfigFile)
    83  }
    84  
    85  func init() {
    86  	common.RegisterCommand2("unregister", "unregister specific runner", &UnregisterCommand{
    87  		network: network.NewGitLabClient(),
    88  	})
    89  }