Changing role, env, and name to be string pointers. This is due to the fact that TaskQuery can now take nil pointers to ignore certain fields. This allows querying for all jobs of a certain environment, all jobs from a certain role, and all jobs with a certain name.
This commit is contained in:
parent
ce71939546
commit
0a3288a1dd
5 changed files with 104 additions and 27 deletions
|
@ -8,9 +8,9 @@ import (
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
rootCmd.AddCommand(createCmd)
|
rootCmd.AddCommand(createCmd)
|
||||||
createCmd.Flags().StringVarP(&env, "environment", "e", "", "Aurora Environment")
|
createCmd.Flags().StringVarP(env, "environment", "e", "", "Aurora Environment")
|
||||||
createCmd.Flags().StringVarP(&role, "role", "r", "", "Aurora Role")
|
createCmd.Flags().StringVarP(role, "role", "r", "", "Aurora Role")
|
||||||
createCmd.Flags().StringVarP(&name, "name", "n", "", "Aurora Name")
|
createCmd.Flags().StringVarP(name, "name", "n", "", "Aurora Name")
|
||||||
createCmd.MarkFlagRequired("environment")
|
createCmd.MarkFlagRequired("environment")
|
||||||
createCmd.MarkFlagRequired("role")
|
createCmd.MarkFlagRequired("role")
|
||||||
createCmd.MarkFlagRequired("name")
|
createCmd.MarkFlagRequired("name")
|
||||||
|
|
31
cmd/fetch.go
31
cmd/fetch.go
|
@ -16,16 +16,16 @@ func init() {
|
||||||
|
|
||||||
// Fetch Task Config
|
// Fetch Task Config
|
||||||
fetchCmd.AddCommand(taskConfigCmd)
|
fetchCmd.AddCommand(taskConfigCmd)
|
||||||
taskConfigCmd.Flags().StringVarP(&env, "environment", "e", "", "Aurora Environment")
|
taskConfigCmd.Flags().StringVarP(env, "environment", "e", "", "Aurora Environment")
|
||||||
taskConfigCmd.Flags().StringVarP(&role, "role", "r", "", "Aurora Role")
|
taskConfigCmd.Flags().StringVarP(role, "role", "r", "", "Aurora Role")
|
||||||
taskConfigCmd.Flags().StringVarP(&name, "name", "n", "", "Aurora Name")
|
taskConfigCmd.Flags().StringVarP(name, "name", "n", "", "Aurora Name")
|
||||||
|
|
||||||
// Fetch Leader
|
// Fetch Leader
|
||||||
fetchCmd.AddCommand(leaderCmd)
|
fetchCmd.AddCommand(leaderCmd)
|
||||||
|
|
||||||
// Fetch jobs
|
// Fetch jobs
|
||||||
fetchCmd.AddCommand(fetchJobsCmd)
|
fetchCmd.AddCommand(fetchJobsCmd)
|
||||||
fetchJobsCmd.Flags().StringVarP(&role, "role", "r", "", "Aurora Role")
|
fetchJobsCmd.Flags().StringVarP(role, "role", "r", "", "Aurora Role")
|
||||||
}
|
}
|
||||||
|
|
||||||
var fetchCmd = &cobra.Command{
|
var fetchCmd = &cobra.Command{
|
||||||
|
@ -59,6 +59,17 @@ var fetchJobsCmd = &cobra.Command{
|
||||||
func fetchTasks(cmd *cobra.Command, args []string) {
|
func fetchTasks(cmd *cobra.Command, args []string) {
|
||||||
fmt.Printf("Fetching job configuration for [%s/%s/%s] \n", env, role, name)
|
fmt.Printf("Fetching job configuration for [%s/%s/%s] \n", env, role, name)
|
||||||
|
|
||||||
|
// Task Query takes nil for values it shouldn't need to match against.
|
||||||
|
// This allows us to potentially more expensive calls for specific environments, roles, or job names.
|
||||||
|
if *env == "" {
|
||||||
|
env = nil
|
||||||
|
}
|
||||||
|
if *role == "" {
|
||||||
|
role = nil
|
||||||
|
}
|
||||||
|
if *role == "" {
|
||||||
|
role = nil
|
||||||
|
}
|
||||||
//TODO: Add filtering down by status
|
//TODO: Add filtering down by status
|
||||||
taskQuery := &aurora.TaskQuery{Environment: env, Role: role, JobName: name}
|
taskQuery := &aurora.TaskQuery{Environment: env, Role: role, JobName: name}
|
||||||
|
|
||||||
|
@ -93,22 +104,22 @@ func fetchLeader(cmd *cobra.Command, args []string) {
|
||||||
|
|
||||||
// TODO: Expand this to be able to filter by job name and environment.
|
// TODO: Expand this to be able to filter by job name and environment.
|
||||||
func fetchJobs(cmd *cobra.Command, args []string) {
|
func fetchJobs(cmd *cobra.Command, args []string) {
|
||||||
fmt.Printf("Fetching tasks under role: %s \n", role)
|
fmt.Printf("Fetching tasks under role: %s \n", *role)
|
||||||
|
|
||||||
if role == "" {
|
if *role == "" {
|
||||||
fmt.Println("Role must be specified.")
|
fmt.Println("Role must be specified.")
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
if role == "*" {
|
if *role == "*" {
|
||||||
fmt.Println("Warning: This is an expensive operation.")
|
fmt.Println("Warning: This is an expensive operation.")
|
||||||
role = ""
|
*role = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
_, result, err := client.GetJobs(role)
|
_, result, err := client.GetJobs(*role)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Print("error: %+v\n", err.Error())
|
fmt.Printf("error: %+v\n", err.Error())
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
52
cmd/kill.go
52
cmd/kill.go
|
@ -5,34 +5,59 @@ import (
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
realis "github.com/paypal/gorealis"
|
"github.com/paypal/gorealis"
|
||||||
"github.com/paypal/gorealis/gen-go/apache/aurora"
|
"github.com/paypal/gorealis/gen-go/apache/aurora"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
rootCmd.AddCommand(killCmd)
|
rootCmd.AddCommand(killCmd)
|
||||||
killCmd.Flags().StringVarP(&env, "environment", "e", "", "Aurora Environment")
|
|
||||||
killCmd.Flags().StringVarP(&role, "role", "r", "", "Aurora Role")
|
|
||||||
killCmd.Flags().StringVarP(&name, "name", "n", "", "Aurora Name")
|
/* Sub-Commands */
|
||||||
killCmd.MarkFlagRequired("environment")
|
|
||||||
killCmd.MarkFlagRequired("role")
|
|
||||||
killCmd.MarkFlagRequired("name")
|
// Kill Job
|
||||||
|
killCmd.AddCommand(killJobCmd)
|
||||||
|
|
||||||
|
killJobCmd.Flags().StringVarP(env, "environment", "e", "", "Aurora Environment")
|
||||||
|
killJobCmd.Flags().StringVarP(role, "role", "r", "", "Aurora Role")
|
||||||
|
killJobCmd.Flags().StringVarP(name, "name", "n", "", "Aurora Name")
|
||||||
|
killJobCmd.MarkFlagRequired("environment")
|
||||||
|
killJobCmd.MarkFlagRequired("role")
|
||||||
|
killJobCmd.MarkFlagRequired("name")
|
||||||
|
|
||||||
|
// Kill every task in the Aurora cluster
|
||||||
|
killCmd.AddCommand(killEntireClusterCmd)
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var killCmd = &cobra.Command{
|
var killCmd = &cobra.Command{
|
||||||
Use: "kill",
|
Use: "kill",
|
||||||
Short: "Kill an Aurora Job",
|
Short: "Kill an Aurora Job",
|
||||||
|
}
|
||||||
|
|
||||||
|
var killJobCmd = &cobra.Command{
|
||||||
|
Use: "job",
|
||||||
|
Short: "Kill an Aurora Job",
|
||||||
Run: killJob,
|
Run: killJob,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var killEntireClusterCmd = &cobra.Command{
|
||||||
|
Use: "entire-cluster",
|
||||||
|
Short: "Kill every task in the cluster.",
|
||||||
|
Long: `To be written.`,
|
||||||
|
Run: killEntireCluster,
|
||||||
|
}
|
||||||
|
|
||||||
func killJob(cmd *cobra.Command, args []string) {
|
func killJob(cmd *cobra.Command, args []string) {
|
||||||
log.Printf("Killing job [Env:%s Role:%s Name:%s]\n", env, role, name)
|
log.Printf("Killing job [Env:%s Role:%s Name:%s]\n", *env, *role, *name)
|
||||||
|
|
||||||
job := realis.NewJob().
|
job := realis.NewJob().
|
||||||
Environment(env).
|
Environment(*env).
|
||||||
Role(role).
|
Role(*role).
|
||||||
Name(name)
|
Name(*name)
|
||||||
resp, err := client.KillJob(job.JobKey())
|
resp, err := client.KillJob(job.JobKey())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
|
@ -47,3 +72,8 @@ func killJob(cmd *cobra.Command, args []string) {
|
||||||
}
|
}
|
||||||
fmt.Println(resp.String())
|
fmt.Println(resp.String())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func killEntireCluster(cmd *cobra.Command, args []string) {
|
||||||
|
log.Println("This command will kill every single task inside of a cluster.")
|
||||||
|
log.Println("Not implemented yet.")
|
||||||
|
}
|
||||||
|
|
|
@ -21,7 +21,7 @@ var rootCmd = &cobra.Command{
|
||||||
}
|
}
|
||||||
|
|
||||||
var username, password, zkAddr, schedAddr string
|
var username, password, zkAddr, schedAddr string
|
||||||
var env, role, name string
|
var env, role, name *string
|
||||||
var client realis.Realis
|
var client realis.Realis
|
||||||
var monitor *realis.Monitor
|
var monitor *realis.Monitor
|
||||||
var insecureSkipVerify bool
|
var insecureSkipVerify bool
|
||||||
|
@ -66,8 +66,6 @@ func connect(cmd *cobra.Command, args []string) {
|
||||||
zkOptions := []realis.ZKOpt{ realis.ZKEndpoints(zkAddr), realis.ZKPath("/aurora/scheduler")}
|
zkOptions := []realis.ZKOpt{ realis.ZKEndpoints(zkAddr), realis.ZKPath("/aurora/scheduler")}
|
||||||
|
|
||||||
if clientKey != "" || clientCert != "" || caCertsPath != "" {
|
if clientKey != "" || clientCert != "" || caCertsPath != "" {
|
||||||
zkOptions = append(zkOptions, realis.ZKAuroraPortOverride(8081), realis.ZKAuroraSchemeOverride("https"))
|
|
||||||
|
|
||||||
realisOptions = append(realisOptions, realis.Certspath(caCertsPath), realis.ClientCerts(clientKey, clientCert))
|
realisOptions = append(realisOptions, realis.Certspath(caCertsPath), realis.ClientCerts(clientKey, clientCert))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
38
cmd/stop.go
38
cmd/stop.go
|
@ -15,6 +15,14 @@ func init() {
|
||||||
stopCmd.AddCommand(stopMaintCmd)
|
stopCmd.AddCommand(stopMaintCmd)
|
||||||
stopMaintCmd.Flags().IntVar(&monitorInterval,"interval", 5, "Interval at which to poll scheduler.")
|
stopMaintCmd.Flags().IntVar(&monitorInterval,"interval", 5, "Interval at which to poll scheduler.")
|
||||||
stopMaintCmd.Flags().IntVar(&monitorTimeout,"timeout", 50, "Time after which the monitor will stop polling and throw an error.")
|
stopMaintCmd.Flags().IntVar(&monitorTimeout,"timeout", 50, "Time after which the monitor will stop polling and throw an error.")
|
||||||
|
|
||||||
|
// Stop update
|
||||||
|
|
||||||
|
stopCmd.AddCommand(stopUpdateCmd)
|
||||||
|
stopUpdateCmd.Flags().StringVarP(env, "environment", "e", "", "Aurora Environment")
|
||||||
|
stopUpdateCmd.Flags().StringVarP(role, "role", "r", "", "Aurora Role")
|
||||||
|
stopUpdateCmd.Flags().StringVarP(name, "name", "n", "", "Aurora Name")
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var stopCmd = &cobra.Command{
|
var stopCmd = &cobra.Command{
|
||||||
|
@ -29,6 +37,13 @@ var stopMaintCmd = &cobra.Command{
|
||||||
Run: endMaintenance,
|
Run: endMaintenance,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var stopUpdateCmd = &cobra.Command{
|
||||||
|
Use: "update [update ID]",
|
||||||
|
Short: "Stop update",
|
||||||
|
Long: `To be written.`,
|
||||||
|
Run: stopUpdate,
|
||||||
|
}
|
||||||
|
|
||||||
func endMaintenance(cmd *cobra.Command, args []string) {
|
func endMaintenance(cmd *cobra.Command, args []string) {
|
||||||
fmt.Println("Setting hosts to NONE maintenance status.")
|
fmt.Println("Setting hosts to NONE maintenance status.")
|
||||||
fmt.Println(args)
|
fmt.Println(args)
|
||||||
|
@ -57,3 +72,26 @@ func endMaintenance(cmd *cobra.Command, args []string) {
|
||||||
|
|
||||||
fmt.Println(result.String())
|
fmt.Println(result.String())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func stopUpdate(cmd *cobra.Command, args []string) {
|
||||||
|
|
||||||
|
if len(args) != 1 {
|
||||||
|
fmt.Println("Only a single update ID must be provided.")
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Printf("Stopping (aborting) update [%s/%s/%s] %s\n", *env, *role, *name, args[0])
|
||||||
|
|
||||||
|
resp, err := client.AbortJobUpdate(aurora.JobUpdateKey{
|
||||||
|
Job: &aurora.JobKey{Environment: *env, Role: *role, Name: *name},
|
||||||
|
ID: args[0],
|
||||||
|
},
|
||||||
|
"")
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
fmt.Println(resp.String())
|
||||||
|
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue