1
0
mirror of https://github.com/gluster/glusterd2.git synced 2026-02-05 12:45:38 +01:00

added endpoints flag to glustercli

to connect to glusterd2

Signed-off-by: Madhu Rajanna <mrajanna@redhat.com>
This commit is contained in:
Madhu Rajanna
2018-06-01 13:06:24 +05:30
committed by Aravinda VK
parent 8aad2d0728
commit 0e014fae05
3 changed files with 39 additions and 47 deletions

View File

@@ -13,8 +13,8 @@ var (
client *restclient.Client
logWriter io.WriteCloser
errFailedToConnectToGlusterd = `Failed to connect to glusterd. Please check if
- Glusterd is running(%s://%s:%d) and reachable from this node.
- Make sure hostname/IP and Port specified in the command are valid
- Glusterd is running(%s) and reachable from this node.
- Make sure Endpoints specified in the command is valid
`
)
@@ -34,24 +34,20 @@ func isNoRouteToHostErr(err error) bool {
return strings.Contains(err.Error(), "no route to host")
}
func handleGlusterdConnectFailure(msg string, err error, https bool, host string, port int, errcode int) {
func handleGlusterdConnectFailure(msg, endpoints string, err error, errcode int) {
if err == nil {
return
}
if isConnectionRefusedErr(err) || isNoSuchHostErr(err) || isNoRouteToHostErr(err) {
scheme := "http"
if https {
scheme = "https"
}
os.Stderr.WriteString(msg + "\n\n")
os.Stderr.WriteString(fmt.Sprintf(errFailedToConnectToGlusterd, scheme, flagHostname, flagPort))
os.Stderr.WriteString(fmt.Sprintf(errFailedToConnectToGlusterd, endpoints))
os.Exit(errcode)
}
}
func failure(msg string, err error, errcode int) {
handleGlusterdConnectFailure(msg, err, flagHTTPS, flagHostname, flagPort, errcode)
handleGlusterdConnectFailure(msg, flagEndpoints[0], err, errcode)
// If different error
os.Stderr.WriteString(msg + "\n")

View File

@@ -3,6 +3,7 @@ package cmd
import (
"errors"
"fmt"
"net/url"
"os"
"strings"
@@ -44,19 +45,20 @@ Rerun the Session Create command with --force once the issues related to Remote
errGeorepStatusCommandFailed = "Geo-replication Status command failed.\n"
)
const (
geoRepHTTPScheme = "http"
geoRepGlusterdPort = 24007
)
var (
flagGeorepCmdForce bool
flagGeorepShowAllConfig bool
flagGeorepRemoteGlusterdHTTPS bool
flagGeorepRemoteGlusterdHost string
flagGeorepRemoteGlusterdPort int
flagGeorepCmdForce bool
flagGeorepShowAllConfig bool
flagGeorepRemoteEndpoints string
)
func init() {
// Geo-rep Create
georepCreateCmd.Flags().BoolVarP(&flagGeorepRemoteGlusterdHTTPS, "remote-glusterd-https", "", false, "Remote Glusterd HTTPS")
georepCreateCmd.Flags().StringVarP(&flagGeorepRemoteGlusterdHost, "remote-glusterd-host", "", "", "Remote Glusterd Host")
georepCreateCmd.Flags().IntVarP(&flagGeorepRemoteGlusterdPort, "remote-glusterd-port", "", 24007, "Remote Glusterd Port")
georepCreateCmd.Flags().StringVar(&flagGeorepRemoteEndpoints, "remote-endpoints", "", "remote glusterd2 endpoints")
georepCreateCmd.Flags().BoolVarP(&flagGeorepCmdForce, "force", "f", false, "Force")
georepCmd.AddCommand(georepCreateCmd)
@@ -188,11 +190,13 @@ var georepCreateCmd = &cobra.Command{
failure(errGeorepSessionCreationFailed, err, 1)
}
rclient := getRemoteClient(remotehost)
remoteEndpoint, rclient, err := getRemoteClient(remotehost)
if err != nil {
failure(errGeorepSessionCreationFailed, err, 1)
}
remotevoldata, err := getVolumeDetails(remotevol, rclient)
if err != nil {
handleGlusterdConnectFailure(errGeorepSessionCreationFailed, err, flagGeorepRemoteGlusterdHTTPS, flagGeorepRemoteGlusterdHost, flagGeorepRemoteGlusterdPort, 1)
handleGlusterdConnectFailure(errGeorepSessionCreationFailed, remoteEndpoint, err, 1)
// If not Glusterd connect Failure
failure(errGeorepSessionCreationFailed, err, 1)
@@ -233,7 +237,7 @@ var georepCreateCmd = &cobra.Command{
"error": err.Error(),
}).Error("failed to push SSH Keys to Remote Cluster")
}
handleGlusterdConnectFailure(errGeorepSessionCreationFailed, err, flagGeorepRemoteGlusterdHTTPS, flagGeorepRemoteGlusterdHost, flagGeorepRemoteGlusterdPort, 1)
handleGlusterdConnectFailure(errGeorepSessionCreationFailed, remoteEndpoint, err, 1)
// If not Glusterd connect issue
failure(errGeorepSSHKeysPush, err, 1)
@@ -344,21 +348,19 @@ var georepDeleteCmd = &cobra.Command{
},
}
func getRemoteClient(host string) *restclient.Client {
func getRemoteClient(host string) (string, *restclient.Client, error) {
// TODO: Handle Remote Cluster Authentication and certificates and URL scheme
scheme := "http"
if flagGeorepRemoteGlusterdHTTPS {
scheme = "https"
}
if flagGeorepRemoteGlusterdHost != "" {
host = flagGeorepRemoteGlusterdHost
}
clienturl := flagGeorepRemoteEndpoints
// Set Global based on final decision
flagGeorepRemoteGlusterdHost = host
return restclient.New(fmt.Sprintf("%s://%s:%d", scheme, host, flagGeorepRemoteGlusterdPort),
"", "", "", true)
if flagGeorepRemoteEndpoints != "" {
_, err := url.Parse(flagGeorepRemoteEndpoints)
if err != nil {
return "", nil, errors.New("failed to parse geo-replication remote endpoints")
}
} else {
clienturl = fmt.Sprintf("%s://%s:%d", geoRepHTTPScheme, host, geoRepGlusterdPort)
}
return clienturl, restclient.New(clienturl, "", "", "", true), nil
}
func getVolIDs(pargs []string) (*volumeDetails, *volumeDetails, error) {
@@ -378,7 +380,10 @@ func getVolIDs(pargs []string) (*volumeDetails, *volumeDetails, error) {
if err != nil {
return nil, nil, err
}
rclient := getRemoteClient(remotehost)
_, rclient, err := getRemoteClient(remotehost)
if err != nil {
return nil, nil, err
}
remotedata, err = getVolumeDetails(remotevol, rclient)
if err != nil {
return nil, nil, err

View File

@@ -17,21 +17,14 @@ var RootCmd = &cobra.Command{
if err != nil {
fmt.Println("Error initializing log file ", err)
}
scheme := "http"
if flagHTTPS {
scheme = "https"
}
hostname := fmt.Sprintf("%s://%s:%d", scheme, flagHostname, flagPort)
initRESTClient(hostname, flagUser, flagSecret, flagCacert, flagInsecure)
initRESTClient(flagEndpoints[0], flagUser, flagSecret, flagCacert, flagInsecure)
},
}
var (
flagXMLOutput bool
flagJSONOutput bool
flagHostname string
flagHTTPS bool
flagPort int
flagEndpoints []string
flagCacert string
flagInsecure bool
flagLogLevel string
@@ -48,9 +41,7 @@ func init() {
// Global flags, applicable for all sub commands
RootCmd.PersistentFlags().BoolVarP(&flagXMLOutput, "xml", "", false, "XML Output")
RootCmd.PersistentFlags().BoolVarP(&flagJSONOutput, "json", "", false, "JSON Output")
RootCmd.PersistentFlags().StringVarP(&flagHostname, "glusterd-host", "", "localhost", "Glusterd Host")
RootCmd.PersistentFlags().BoolVarP(&flagHTTPS, "glusterd-https", "", false, "Use HTTPS while connecting to Glusterd")
RootCmd.PersistentFlags().IntVarP(&flagPort, "glusterd-port", "", 24007, "Glusterd Port")
RootCmd.PersistentFlags().StringSliceVar(&flagEndpoints, "endpoints", []string{"http://127.0.0.1:24007"}, "glusterd2 endpoints")
RootCmd.PersistentFlags().BoolVarP(&verbose, "verbose", "v", false, "verbose output")
//user and secret for token authentication