agent: bootstrap consul

This commit is contained in:
Gyu-Ho Lee 2016-03-23 07:30:06 -07:00
parent 339c06831b
commit bd60a7b110
1 changed files with 44 additions and 46 deletions

View File

@ -88,10 +88,12 @@ var (
consulToken = "gqYeGerkZGQHBiV4Zd5BMw==" // consul keygen consulToken = "gqYeGerkZGQHBiV4Zd5BMw==" // consul keygen
consulDataDir = "data.consul" consulDataDir = "data.consul"
consulBootstrapDataDir = "data_bootstrap.consul" consulConfigDir = "consul.d"
consulConfigPath = "consul.json" consulConfigPath = "server"
consulBootstrapConfigPath = "consul_bootstrap.json" consulConfigPathBootstrap = "bootstrap/config.json"
consulBootstrapLogPath = "database_bootstrap.json"
// consulBootstrapDataDir = "data_bootstrap.consul"
// consulBootstrapLogPath = "database_bootstrap.log"
consulConfigDefault = ConsulConfig{ consulConfigDefault = ConsulConfig{
Bootstrap: false, Bootstrap: false,
@ -207,17 +209,20 @@ func (t *transporterServer) Transfer(ctx context.Context, r *Request) (*Response
if !filepath.HasPrefix(consulDataDir, globalFlags.WorkingDirectory) { if !filepath.HasPrefix(consulDataDir, globalFlags.WorkingDirectory) {
consulDataDir = filepath.Join(globalFlags.WorkingDirectory, consulDataDir) consulDataDir = filepath.Join(globalFlags.WorkingDirectory, consulDataDir)
} }
if !filepath.HasPrefix(consulBootstrapDataDir, globalFlags.WorkingDirectory) { if !filepath.HasPrefix(consulConfigDir, globalFlags.WorkingDirectory) {
consulBootstrapDataDir = filepath.Join(globalFlags.WorkingDirectory, consulBootstrapDataDir) consulConfigDir = filepath.Join(globalFlags.WorkingDirectory, consulConfigDir)
} }
if !filepath.HasPrefix(consulConfigPath, globalFlags.WorkingDirectory) { if err := os.MkdirAll(consulConfigDir, 0777); err != nil {
consulConfigPath = filepath.Join(globalFlags.WorkingDirectory, consulConfigPath) return nil, err
} }
if !filepath.HasPrefix(consulBootstrapConfigPath, globalFlags.WorkingDirectory) { if err := os.MkdirAll(filepath.Join(consulConfigDir, "bootstrap"), 0777); err != nil {
consulBootstrapConfigPath = filepath.Join(globalFlags.WorkingDirectory, consulBootstrapConfigPath) return nil, err
} }
if !filepath.HasPrefix(consulBootstrapLogPath, globalFlags.WorkingDirectory) { if !filepath.HasPrefix(consulConfigPath, consulConfigDir) {
consulBootstrapLogPath = filepath.Join(globalFlags.WorkingDirectory, consulBootstrapLogPath) consulConfigPath = filepath.Join(consulConfigDir, consulConfigPath)
}
if !filepath.HasPrefix(consulConfigPathBootstrap, consulConfigDir) {
consulConfigPathBootstrap = filepath.Join(consulConfigDir, consulConfigPathBootstrap)
} }
if !filepath.HasPrefix(zkWorkingDir, globalFlags.WorkingDirectory) { if !filepath.HasPrefix(zkWorkingDir, globalFlags.WorkingDirectory) {
zkWorkingDir = filepath.Join(globalFlags.WorkingDirectory, zkWorkingDir) zkWorkingDir = filepath.Join(globalFlags.WorkingDirectory, zkWorkingDir)
@ -480,10 +485,8 @@ func (t *transporterServer) Transfer(ctx context.Context, r *Request) (*Response
consulCfg.RetryJoin = joins consulCfg.RetryJoin = joins
if t.req.ServerIndex == 0 { // leader if t.req.ServerIndex == 0 { // leader
// start bootstrap
bcfg := consulCfg bcfg := consulCfg
bcfg.Bootstrap = true bcfg.Bootstrap = true
bcfg.DataDir = consulBootstrapDataDir
bcfg.StartJoin = nil bcfg.StartJoin = nil
bcfg.RetryJoin = nil bcfg.RetryJoin = nil
bcfg.RetryInterval = "" bcfg.RetryInterval = ""
@ -492,40 +495,35 @@ func (t *transporterServer) Transfer(ctx context.Context, r *Request) (*Response
return nil, err return nil, err
} }
cc := buf.String() cc := buf.String()
log.Printf("Writing %q to %s", cc, consulConfigPathBootstrap)
log.Printf("Writing %q to %s", cc, consulBootstrapConfigPath) if err := toFile(cc, consulConfigPathBootstrap); err != nil {
if err := toFile(cc, consulBootstrapConfigPath); err != nil {
return nil, err
}
flags := []string{
"agent",
"-config-file", consulBootstrapConfigPath,
}
flagString := strings.Join(flags, " ")
if err := os.RemoveAll(consulBootstrapDataDir); err != nil {
return nil, err
}
bf, err := openToAppend(consulBootstrapLogPath)
if err != nil {
return nil, err return nil, err
} }
cmd := exec.Command(consulBinaryPath, flags...) // flags := []string{
cmd.Stdout = bf // "agent",
cmd.Stderr = bf // "-config-file", consulConfigPathBootstrap,
log.Printf("Starting: %s %s", cmd.Path, flagString) // }
if err := cmd.Start(); err != nil { // flagString := strings.Join(flags, " ")
return nil, err // bf, err := openToAppend(consulBootstrapLogPath)
} // if err != nil {
log.Printf("Starting: %s %s", cmd.Path, flagString) // return nil, err
go func() { // }
if err := cmd.Wait(); err != nil { // cmd := exec.Command(consulBinaryPath, flags...)
log.Printf("%s %s cmd.Wait returned %v", cmd.Path, flagString, err) // cmd.Stdout = bf
return // cmd.Stderr = bf
} // log.Printf("Starting: %s %s", cmd.Path, flagString)
log.Printf("Exiting %s", cmd.Path) // if err := cmd.Start(); err != nil {
}() // return nil, err
// }
// log.Printf("Starting: %s %s", cmd.Path, flagString)
// go func() {
// if err := cmd.Wait(); err != nil {
// log.Printf("%s %s cmd.Wait returned %v", cmd.Path, flagString, err)
// return
// }
// log.Printf("Exiting %s", cmd.Path)
// }()
} }
buf := new(bytes.Buffer) buf := new(bytes.Buffer)
@ -540,7 +538,7 @@ func (t *transporterServer) Transfer(ctx context.Context, r *Request) (*Response
} }
flags := []string{ flags := []string{
"agent", "agent",
"-config-file", consulConfigPath, "-config-dir", consulConfigDir,
} }
flagString := strings.Join(flags, " ") flagString := strings.Join(flags, " ")