@@ -38,8 +38,8 @@ func run(c *cli.Context) error {
38
38
return cli .ShowAppHelp (c )
39
39
}
40
40
41
- // Create a consul client
42
- client , err := consulClient (consulServer )
41
+ // Create a consul catalog client
42
+ catalog , err := consulCatalog (consulServer )
43
43
if err != nil {
44
44
return cli .Exit (fmt .Sprintf (
45
45
"Error creating consul agent: %s\n " , err ,
@@ -50,7 +50,7 @@ func run(c *cli.Context) error {
50
50
service := c .String ("service" )
51
51
if service == "" {
52
52
fmt .Printf ("No service specified. Available services:\n " )
53
- avail , err := consulServices (client )
53
+ avail , err := consulServices (catalog )
54
54
if err != nil {
55
55
return cli .Exit (fmt .Sprintf (
56
56
"Error querying Consul services: %s\n " , err ,
@@ -63,7 +63,7 @@ func run(c *cli.Context) error {
63
63
}
64
64
65
65
// Add consul services to linked list
66
- machineList , err := populateList (client , service , c .String ("user" ))
66
+ machineList , err := populateList (catalog , service , c .String ("user" ))
67
67
if err != nil {
68
68
return cli .Exit (fmt .Sprintf (
69
69
"Error populating DSH machine list: %s\n " , err ,
@@ -81,6 +81,11 @@ func run(c *cli.Context) error {
81
81
opts .RemoteCommand = fmt .Sprintf ("%s %s" , opts .RemoteCommand , v )
82
82
}
83
83
84
+ if machineList .Len () < 1 {
85
+ return cli .Exit (fmt .Sprintf (
86
+ "No servers found for service %s" , service ), 1 )
87
+ }
88
+
84
89
// Execute DSH!
85
90
if err := opts .Execute (); err != nil {
86
91
return cli .Exit (fmt .Sprintf ("Error executing: %s" , err ), 1 )
@@ -100,9 +105,7 @@ func defaultDSHConfig() dsh.ExecOpts {
100
105
}
101
106
102
107
// Returns all available consul services
103
- func consulServices (client * consul.Client ) (map [string ][]string , error ) {
104
- // Create catalog
105
- catalog := client .Catalog ()
108
+ func consulServices (catalog * consul.Catalog ) (map [string ][]string , error ) {
106
109
services , _ , err := catalog .Services (nil )
107
110
if err != nil {
108
111
return nil , err
@@ -111,31 +114,31 @@ func consulServices(client *consul.Client) (map[string][]string, error) {
111
114
}
112
115
113
116
// Returns a Consul Client
114
- func consulClient (server string ) (* consul.Client , error ) {
117
+ func consulCatalog (server string ) (* consul.Catalog , error ) {
115
118
// Create Consul Client
116
119
config := consul .DefaultConfig ()
117
120
config .Address = server
118
- return consul .NewClient (config )
121
+ client , err := consul .NewClient (config )
122
+ if err != nil {
123
+ return nil , err
124
+ }
125
+ return client .Catalog (), nil
119
126
}
120
127
121
128
// Populates doubly linked machine list, with a list of requested consul services's addresses
122
- func populateList (client * consul.Client , service string , user string ) (* list.List , error ) {
123
- // Create consul agent
124
- agent := client .Agent ()
125
- services , err := agent .Services ()
129
+ func populateList (catalog * consul.Catalog , service string , user string ) (* list.List , error ) {
130
+ services , _ , err := catalog .Service (service , "" , nil )
126
131
if err != nil {
127
132
return nil , fmt .Errorf ("Error querying consul services: %s" , err )
128
133
}
129
134
130
135
serviceList := list .New ()
131
136
for _ , v := range services {
132
- if v .Service == service {
133
- remoteAddr := v .Address
134
- if user != "" {
135
- remoteAddr = fmt .Sprintf ("%s@%s" , user , remoteAddr )
136
- }
137
- addList (serviceList , remoteAddr )
137
+ remoteAddr := v .Address
138
+ if user != "" {
139
+ remoteAddr = fmt .Sprintf ("%s@%s" , user , remoteAddr )
138
140
}
141
+ addList (serviceList , remoteAddr )
139
142
}
140
143
141
144
return serviceList , nil
0 commit comments