pull out workercmd from cmd/concourse

Signed-off-by: Divya Dadlani <ddadlani@pivotal.io>
Signed-off-by: Denise Yu <dyu@pivotal.io>
This commit is contained in:
Nader Ziada 2019-09-12 10:00:39 -04:00
parent bdcb9d0d85
commit e5066df1db
17 changed files with 71 additions and 51 deletions

13
cmd/cmd_suite_test.go Normal file
View File

@ -0,0 +1,13 @@
package cmd_test
import (
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
"testing"
)
func TestCmd(t *testing.T) {
RegisterFailHandler(Fail)
RunSpecs(t, "Cmd Suite")
}

View File

@ -4,15 +4,16 @@ import (
"github.com/concourse/concourse/atc/atccmd" "github.com/concourse/concourse/atc/atccmd"
"github.com/concourse/concourse/worker/land" "github.com/concourse/concourse/worker/land"
"github.com/concourse/concourse/worker/retire" "github.com/concourse/concourse/worker/retire"
flags "github.com/jessevdk/go-flags" "github.com/concourse/concourse/worker/workercmd"
"github.com/jessevdk/go-flags"
) )
type ConcourseCommand struct { type ConcourseCommand struct {
Version func() `short:"v" long:"version" description:"Print the version of Concourse and exit"` Version func() `short:"v" long:"version" description:"Print the version of Concourse and exit"`
Web WebCommand `command:"web" description:"Run the web UI and build scheduler."` Web WebCommand `command:"web" description:"Run the web UI and build scheduler."`
Worker WorkerCommand `command:"worker" description:"Run and register a worker."` Worker workercmd.WorkerCommand `command:"worker" description:"Run and register a worker."`
Migrate atccmd.Migration `command:"migrate" description:"Run database migrations."` Migrate atccmd.Migration `command:"migrate" description:"Run database migrations."`
Quickstart QuickstartCommand `command:"quickstart" description:"Run both 'web' and 'worker' together, auto-wired. Not recommended for production."` Quickstart QuickstartCommand `command:"quickstart" description:"Run both 'web' and 'worker' together, auto-wired. Not recommended for production."`
@ -22,8 +23,8 @@ type ConcourseCommand struct {
GenerateKey GenerateKeyCommand `command:"generate-key" description:"Generate RSA key for use with Concourse components."` GenerateKey GenerateKeyCommand `command:"generate-key" description:"Generate RSA key for use with Concourse components."`
} }
func (cmd ConcourseCommand) lessenRequirements(parser *flags.Parser) { func (cmd ConcourseCommand) LessenRequirements(parser *flags.Parser) {
cmd.Quickstart.lessenRequirements(parser.Find("quickstart")) cmd.Quickstart.LessenRequirements(parser.Find("quickstart"))
cmd.Web.lessenRequirements(parser.Find("web")) cmd.Web.LessenRequirements(parser.Find("web"))
cmd.Worker.lessenRequirements("", parser.Find("worker")) cmd.Worker.LessenRequirements("", parser.Find("worker"))
} }

View File

@ -21,7 +21,7 @@ func main() {
parser := flags.NewParser(&cmd, flags.HelpFlag|flags.PassDoubleDash) parser := flags.NewParser(&cmd, flags.HelpFlag|flags.PassDoubleDash)
parser.NamespaceDelimiter = "-" parser.NamespaceDelimiter = "-"
cmd.lessenRequirements(parser) cmd.LessenRequirements(parser)
cmd.Web.WireDynamicFlags(parser.Command.Find("web")) cmd.Web.WireDynamicFlags(parser.Command.Find("web"))
cmd.Quickstart.WebCommand.WireDynamicFlags(parser.Command.Find("quickstart")) cmd.Quickstart.WebCommand.WireDynamicFlags(parser.Command.Find("quickstart"))

View File

@ -6,8 +6,10 @@ import (
"fmt" "fmt"
"os" "os"
concourseCmd "github.com/concourse/concourse/cmd"
"github.com/concourse/concourse/worker/workercmd"
"github.com/concourse/flag" "github.com/concourse/flag"
flags "github.com/jessevdk/go-flags" "github.com/jessevdk/go-flags"
"github.com/tedsuo/ifrit" "github.com/tedsuo/ifrit"
"github.com/tedsuo/ifrit/grouper" "github.com/tedsuo/ifrit/grouper"
"github.com/tedsuo/ifrit/sigmon" "github.com/tedsuo/ifrit/sigmon"
@ -15,13 +17,13 @@ import (
) )
type QuickstartCommand struct { type QuickstartCommand struct {
*WebCommand `group:"Web Configuration"` *WebCommand `group:"Web Configuration"`
*WorkerCommand `group:"Worker Configuration" namespace:"worker"` *workercmd.WorkerCommand `group:"Worker Configuration" namespace:"worker"`
} }
func (cmd QuickstartCommand) lessenRequirements(command *flags.Command) { func (cmd QuickstartCommand) LessenRequirements(command *flags.Command) {
cmd.WebCommand.lessenRequirements(command) cmd.WebCommand.LessenRequirements(command)
cmd.WorkerCommand.lessenRequirements("worker-", command) cmd.WorkerCommand.LessenRequirements("worker-", command)
// autogenerated // autogenerated
command.FindOptionByLongName("session-signing-key").Required = false command.FindOptionByLongName("session-signing-key").Required = false
@ -106,9 +108,9 @@ func (cmd *QuickstartCommand) Runner(args []string) (ifrit.Runner, error) {
return grouper.NewParallel(os.Interrupt, grouper.Members{ return grouper.NewParallel(os.Interrupt, grouper.Members{
{ {
Name: "web", Name: "web",
Runner: NewLoggingRunner(logger.Session("web-runner"), webRunner)}, Runner: concourseCmd.NewLoggingRunner(logger.Session("web-runner"), webRunner)},
{ {
Name: "worker", Name: "worker",
Runner: NewLoggingRunner(logger.Session("worker-runner"), workerRunner)}, Runner: concourseCmd.NewLoggingRunner(logger.Session("worker-runner"), workerRunner)},
}), nil }), nil
} }

View File

@ -6,10 +6,12 @@ import (
"fmt" "fmt"
"os" "os"
concourseCmd "github.com/concourse/concourse/cmd"
"github.com/concourse/concourse/atc/atccmd" "github.com/concourse/concourse/atc/atccmd"
"github.com/concourse/concourse/tsa/tsacmd" "github.com/concourse/concourse/tsa/tsacmd"
"github.com/concourse/flag" "github.com/concourse/flag"
flags "github.com/jessevdk/go-flags" "github.com/jessevdk/go-flags"
"github.com/tedsuo/ifrit" "github.com/tedsuo/ifrit"
"github.com/tedsuo/ifrit/grouper" "github.com/tedsuo/ifrit/grouper"
"github.com/tedsuo/ifrit/sigmon" "github.com/tedsuo/ifrit/sigmon"
@ -22,7 +24,7 @@ type WebCommand struct {
*tsacmd.TSACommand `group:"TSA Configuration" namespace:"tsa"` *tsacmd.TSACommand `group:"TSA Configuration" namespace:"tsa"`
} }
func (WebCommand) lessenRequirements(command *flags.Command) { func (WebCommand) LessenRequirements(command *flags.Command) {
// defaults to atc external URL // defaults to atc external URL
command.FindOptionByLongName("tsa-atc-url").Required = false command.FindOptionByLongName("tsa-atc-url").Required = false
@ -41,7 +43,7 @@ func (cmd *WebCommand) Execute(args []string) error {
func (cmd *WebCommand) Runner(args []string) (ifrit.Runner, error) { func (cmd *WebCommand) Runner(args []string) (ifrit.Runner, error) {
if cmd.RunCommand.CLIArtifactsDir == "" { if cmd.RunCommand.CLIArtifactsDir == "" {
cmd.RunCommand.CLIArtifactsDir = flag.Dir(discoverAsset("fly-assets")) cmd.RunCommand.CLIArtifactsDir = flag.Dir(concourseCmd.DiscoverAsset("fly-assets"))
} }
cmd.populateTSAFlagsFromATCFlags() cmd.populateTSAFlagsFromATCFlags()
@ -60,11 +62,11 @@ func (cmd *WebCommand) Runner(args []string) (ifrit.Runner, error) {
return grouper.NewParallel(os.Interrupt, grouper.Members{ return grouper.NewParallel(os.Interrupt, grouper.Members{
{ {
Name: "atc", Name: "atc",
Runner: NewLoggingRunner(logger.Session("atc-runner"), atcRunner), Runner: concourseCmd.NewLoggingRunner(logger.Session("atc-runner"), atcRunner),
}, },
{ {
Name: "tsa", Name: "tsa",
Runner: NewLoggingRunner(logger.Session("tsa-runner"), tsaRunner), Runner: concourseCmd.NewLoggingRunner(logger.Session("tsa-runner"), tsaRunner),
}, },
}), nil }), nil
} }

View File

@ -1,4 +1,4 @@
package main package cmd
import ( import (
"os" "os"
@ -8,7 +8,7 @@ import (
// discoverAsset will find an asset path relative to the executable, assuming // discoverAsset will find an asset path relative to the executable, assuming
// the executable is installed as /usr/local/concourse/bin/concourse, and the // the executable is installed as /usr/local/concourse/bin/concourse, and the
// asset lives under /usr/local/concourse // asset lives under /usr/local/concourse
func discoverAsset(name string) string { func DiscoverAsset(name string) string {
self, err := os.Executable() self, err := os.Executable()
if err != nil { if err != nil {
return "" return ""

View File

@ -1,4 +1,4 @@
package main package cmd
import ( import (
"os" "os"

View File

@ -1,11 +1,11 @@
package main_test package cmd_test
import ( import (
"errors" "errors"
"os" "os"
"code.cloudfoundry.org/lager/lagertest" "code.cloudfoundry.org/lager/lagertest"
. "github.com/concourse/concourse/cmd/concourse" . "github.com/concourse/concourse/cmd"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
"github.com/tedsuo/ifrit" "github.com/tedsuo/ifrit"

View File

@ -323,7 +323,7 @@ func listenForTokenCallback(tokenChannel chan string, errorChannel chan error, p
w.Header().Set("Access-Control-Allow-Origin", targetUrl) w.Header().Set("Access-Control-Allow-Origin", targetUrl)
tokenChannel <- r.FormValue("token") tokenChannel <- r.FormValue("token")
w.WriteHeader(200) w.WriteHeader(200)
_,_ = fmt.Fprint(w, "token received by fly") _, _ = fmt.Fprint(w, "token received by fly")
}), }),
} }

View File

@ -1,4 +1,4 @@
package main package workercmd
import ( import (
"os" "os"

View File

@ -1,4 +1,4 @@
package main package workercmd
import ( import (
"fmt" "fmt"

View File

@ -1,4 +1,4 @@
package main package workercmd
import ( import (
"os" "os"

View File

@ -1,4 +1,4 @@
package main package workercmd
import ( import (
"fmt" "fmt"

View File

@ -1,4 +1,4 @@
package main package workercmd
import ( import (
"fmt" "fmt"
@ -13,6 +13,7 @@ import (
"github.com/concourse/baggageclaim/baggageclaimcmd" "github.com/concourse/baggageclaim/baggageclaimcmd"
bclient "github.com/concourse/baggageclaim/client" bclient "github.com/concourse/baggageclaim/client"
"github.com/concourse/concourse" "github.com/concourse/concourse"
concourseCmd "github.com/concourse/concourse/cmd"
"github.com/concourse/concourse/worker" "github.com/concourse/concourse/worker"
"github.com/concourse/flag" "github.com/concourse/flag"
"github.com/tedsuo/ifrit" "github.com/tedsuo/ifrit"
@ -70,7 +71,7 @@ func (cmd *WorkerCommand) Execute(args []string) error {
func (cmd *WorkerCommand) Runner(args []string) (ifrit.Runner, error) { func (cmd *WorkerCommand) Runner(args []string) (ifrit.Runner, error) {
if cmd.ResourceTypes == "" { if cmd.ResourceTypes == "" {
cmd.ResourceTypes = flag.Dir(discoverAsset("resource-types")) cmd.ResourceTypes = flag.Dir(concourseCmd.DiscoverAsset("resource-types"))
} }
logger, _ := cmd.Logger.Logger("worker") logger, _ := cmd.Logger.Logger("worker")
@ -150,18 +151,18 @@ func (cmd *WorkerCommand) Runner(args []string) (ifrit.Runner, error) {
if !cmd.gardenIsExternal() { if !cmd.gardenIsExternal() {
members = append(members, grouper.Member{ members = append(members, grouper.Member{
Name: "garden", Name: "garden",
Runner: NewLoggingRunner(logger.Session("garden-runner"), gardenRunner), Runner: concourseCmd.NewLoggingRunner(logger.Session("garden-runner"), gardenRunner),
}) })
} }
members = append(members, grouper.Members{ members = append(members, grouper.Members{
{ {
Name: "baggageclaim", Name: "baggageclaim",
Runner: NewLoggingRunner(logger.Session("baggageclaim-runner"), baggageclaimRunner), Runner: concourseCmd.NewLoggingRunner(logger.Session("baggageclaim-runner"), baggageclaimRunner),
}, },
{ {
Name: "debug", Name: "debug",
Runner: NewLoggingRunner( Runner: concourseCmd.NewLoggingRunner(
logger.Session("debug-runner"), logger.Session("debug-runner"),
http_server.New( http_server.New(
fmt.Sprintf("%s:%d", cmd.DebugBindIP.IP, cmd.DebugBindPort), fmt.Sprintf("%s:%d", cmd.DebugBindIP.IP, cmd.DebugBindPort),
@ -171,7 +172,7 @@ func (cmd *WorkerCommand) Runner(args []string) (ifrit.Runner, error) {
}, },
{ {
Name: "healthcheck", Name: "healthcheck",
Runner: NewLoggingRunner( Runner: concourseCmd.NewLoggingRunner(
logger.Session("healthcheck-runner"), logger.Session("healthcheck-runner"),
http_server.New( http_server.New(
fmt.Sprintf("%s:%d", cmd.HealthcheckBindIP.IP, cmd.HealthcheckBindPort), fmt.Sprintf("%s:%d", cmd.HealthcheckBindIP.IP, cmd.HealthcheckBindPort),
@ -181,21 +182,21 @@ func (cmd *WorkerCommand) Runner(args []string) (ifrit.Runner, error) {
}, },
{ {
Name: "beacon", Name: "beacon",
Runner: NewLoggingRunner( Runner: concourseCmd.NewLoggingRunner(
logger.Session("beacon-runner"), logger.Session("beacon-runner"),
beaconRunner, beaconRunner,
), ),
}, },
{ {
Name: "container-sweeper", Name: "container-sweeper",
Runner: NewLoggingRunner( Runner: concourseCmd.NewLoggingRunner(
logger.Session("container-sweeper"), logger.Session("container-sweeper"),
containerSweeper, containerSweeper,
), ),
}, },
{ {
Name: "volume-sweeper", Name: "volume-sweeper",
Runner: NewLoggingRunner( Runner: concourseCmd.NewLoggingRunner(
logger.Session("volume-sweeper"), logger.Session("volume-sweeper"),
volumeSweeper, volumeSweeper,
), ),

View File

@ -1,4 +1,4 @@
package main package workercmd
import ( import (
"time" "time"

View File

@ -1,4 +1,4 @@
package main package workercmd
import ( import (
"encoding/json" "encoding/json"
@ -15,8 +15,9 @@ import (
"code.cloudfoundry.org/lager" "code.cloudfoundry.org/lager"
"code.cloudfoundry.org/localip" "code.cloudfoundry.org/localip"
"github.com/concourse/concourse/atc" "github.com/concourse/concourse/atc"
concourseCmd "github.com/concourse/concourse/cmd"
"github.com/concourse/flag" "github.com/concourse/flag"
flags "github.com/jessevdk/go-flags" "github.com/jessevdk/go-flags"
"github.com/tedsuo/ifrit" "github.com/tedsuo/ifrit"
"github.com/tedsuo/ifrit/grouper" "github.com/tedsuo/ifrit/grouper"
) )
@ -34,7 +35,7 @@ type GardenBackend struct {
DNS DNSConfig `group:"DNS Proxy Configuration" namespace:"dns-proxy"` DNS DNSConfig `group:"DNS Proxy Configuration" namespace:"dns-proxy"`
} }
func (cmd WorkerCommand) lessenRequirements(prefix string, command *flags.Command) { func (cmd WorkerCommand) LessenRequirements(prefix string, command *flags.Command) {
// configured as work-dir/volumes // configured as work-dir/volumes
command.FindOptionByLongName(prefix + "baggageclaim-volumes").Required = false command.FindOptionByLongName(prefix + "baggageclaim-volumes").Required = false
} }
@ -76,7 +77,7 @@ func (cmd *WorkerCommand) gardenRunner(logger lager.Logger) (atc.Worker, ifrit.R
} }
func (cmd *WorkerCommand) gdnRunner(logger lager.Logger) (ifrit.Runner, error) { func (cmd *WorkerCommand) gdnRunner(logger lager.Logger) (ifrit.Runner, error) {
if binDir := discoverAsset("bin"); binDir != "" { if binDir := concourseCmd.DiscoverAsset("bin"); binDir != "" {
// ensure packaged 'gdn' executable is available in $PATH // ensure packaged 'gdn' executable is available in $PATH
err := os.Setenv("PATH", binDir+":"+os.Getenv("PATH")) err := os.Setenv("PATH", binDir+":"+os.Getenv("PATH"))
if err != nil { if err != nil {
@ -130,7 +131,7 @@ func (cmd *WorkerCommand) gdnRunner(logger lager.Logger) (ifrit.Runner, error) {
members = append(members, grouper.Member{ members = append(members, grouper.Member{
Name: "dns-proxy", Name: "dns-proxy",
Runner: NewLoggingRunner( Runner: concourseCmd.NewLoggingRunner(
logger.Session("dns-proxy-runner"), logger.Session("dns-proxy-runner"),
dnsProxyRunner, dnsProxyRunner,
), ),
@ -153,7 +154,7 @@ func (cmd *WorkerCommand) gdnRunner(logger lager.Logger) (ifrit.Runner, error) {
members = append(members, grouper.Member{ members = append(members, grouper.Member{
Name: "gdn", Name: "gdn",
Runner: NewLoggingRunner( Runner: concourseCmd.NewLoggingRunner(
logger.Session("gdn-runner"), logger.Session("gdn-runner"),
cmdRunner{gdnCmd}, cmdRunner{gdnCmd},
), ),

View File

@ -1,13 +1,13 @@
// +build !linux // +build !linux
package main package workercmd
import ( import (
"runtime" "runtime"
"code.cloudfoundry.org/lager" "code.cloudfoundry.org/lager"
"github.com/concourse/concourse/atc" "github.com/concourse/concourse/atc"
flags "github.com/jessevdk/go-flags" "github.com/jessevdk/go-flags"
"github.com/tedsuo/ifrit" "github.com/tedsuo/ifrit"
) )
@ -15,7 +15,7 @@ type GardenBackend struct{}
type Certs struct{} type Certs struct{}
func (cmd WorkerCommand) lessenRequirements(prefix string, command *flags.Command) { func (cmd WorkerCommand) LessenRequirements(prefix string, command *flags.Command) {
// created in the work-dir // created in the work-dir
command.FindOptionByLongName(prefix + "baggageclaim-volumes").Required = false command.FindOptionByLongName(prefix + "baggageclaim-volumes").Required = false
} }