func join(joinAddr string, skipVerify bool, raftAddr, raftAdv string) error { addr := raftAddr if raftAdv != "" { addr = raftAdv } b, err := json.Marshal(map[string]string{"addr": addr}) if err != nil { return err } // Check for protocol scheme, and insert default if necessary. fullAddr := httpd.NormalizeAddr(fmt.Sprintf("%s/join", joinAddr)) // Enable skipVerify as requested. tr := &http.Transport{ TLSClientConfig: &tls.Config{InsecureSkipVerify: skipVerify}, } client := &http.Client{Transport: tr} // Attempt to join. resp, err := client.Post(fullAddr, "application-type/json", bytes.NewReader(b)) if err != nil { return err } defer resp.Body.Close() if resp.StatusCode != 200 { return fmt.Errorf("failed to join, node returned: %s", resp.Status) } return nil }
func join(joinAddr string, skipVerify bool, raftAddr, raftAdv string) error { addr := raftAddr if raftAdv != "" { addr = raftAdv } // Join using IP address, as that is what Hashicorp Raft works in. resv, err := net.ResolveTCPAddr("tcp", addr) if err != nil { return err } b, err := json.Marshal(map[string]string{"addr": resv.String()}) if err != nil { return err } // Check for protocol scheme, and insert default if necessary. fullAddr := httpd.NormalizeAddr(fmt.Sprintf("%s/join", joinAddr)) // Enable skipVerify as requested. tr := &http.Transport{ TLSClientConfig: &tls.Config{InsecureSkipVerify: skipVerify}, } client := &http.Client{Transport: tr} // Attempt to join. resp, err := client.Post(fullAddr, "application-type/json", bytes.NewReader(b)) if err != nil { return err } defer resp.Body.Close() b, err = ioutil.ReadAll(resp.Body) if err != nil { return err } if resp.StatusCode != 200 { return fmt.Errorf("failed to join, node returned: %s: (%s)", resp.Status, string(b)) } return nil }