summaryrefslogtreecommitdiff
path: root/lib/leap_cli
diff options
context:
space:
mode:
authorelijah <elijah@riseup.net>2017-06-30 00:24:38 -0700
committerMicah Anderson <micah@riseup.net>2017-07-18 15:42:00 -0700
commitc0ddb0da43910e9a064e08acf424b2f2a0ccdd88 (patch)
tree9bd77eccf0717d2d1e56788c2a360134aeedec4e /lib/leap_cli
parenta34d1b14a9a0874bfd6a0c84fa6ac64f2bc3f55a (diff)
by default, new providers will now require invites. requires leap_cli 4173154a177b00c11a36b3168b1ce12af59f04af or later (>1.9.2). resolves #8474. create new invites with `leap run invite`
Diffstat (limited to 'lib/leap_cli')
-rw-r--r--lib/leap_cli/commands/run.rb53
-rw-r--r--lib/leap_cli/config/object_list.rb4
2 files changed, 54 insertions, 3 deletions
diff --git a/lib/leap_cli/commands/run.rb b/lib/leap_cli/commands/run.rb
index cad9b7a0..9149d594 100644
--- a/lib/leap_cli/commands/run.rb
+++ b/lib/leap_cli/commands/run.rb
@@ -3,13 +3,27 @@ module LeapCli; module Commands
desc 'Run a shell command remotely'
long_desc "Runs the specified command COMMAND on each node in the FILTER set. " +
"For example, `leap run 'uname -a' webapp`"
- arg_name 'COMMAND FILTER'
command :run do |c|
c.switch 'stream', :default => false, :desc => 'If set, stream the output as it arrives. (default: --stream for a single node, --no-stream for multiple nodes)'
c.flag 'port', :arg_name => 'SSH_PORT', :desc => 'Override default SSH port used when trying to connect to the server.'
- c.action do |global, options, args|
- run_shell_command(global, options, args)
+
+ c.desc 'Run an arbitrary shell command.'
+ c.arg_name 'FILTER', optional: true
+ c.command :command do |command|
+ command.action do |global, options, args|
+ run_shell_command(global, options, args)
+ end
+ end
+
+ c.desc 'Generate one or more new invite codes.'
+ c.arg_name '[COUNT] [ENVIRONMENT]'
+ c.command :invite do |invite|
+ invite.action do |global_options,options,args|
+ run_new_invites(global_options, options, args)
+ end
end
+
+ c.default_command :command
end
private
@@ -27,6 +41,39 @@ module LeapCli; module Commands
end
end
+ CMD_NEW_INVITES="cd /srv/leap/webapp; RAILS_ENV=production bundle exec rake \"generate_invites[NUM,USES]\""
+
+ def run_new_invites(global, options, args)
+ require 'leap_cli/ssh'
+ count = 1
+ uses = 1
+ env = nil
+ arg1 = args.shift
+ arg2 = args.shift
+ if arg1 && arg2
+ env = manager.env(arg2)
+ count = arg1
+ elsif arg1
+ env = manager.env(arg1)
+ else
+ env = manager.env(nil)
+ end
+ unless env
+ bail! "Environment name you specified does not match one that is available. See `leap env ls` for the available names"
+ end
+
+ env_name = env.name == 'default' ? nil : env.name
+ webapp_nodes = env.nodes[:environment => env_name][:services => 'webapp'].first
+ if webapp_nodes.empty?
+ bail! "Could not find a webapp node for the specified environment"
+ end
+ stream_command(
+ webapp_nodes,
+ CMD_NEW_INVITES.sub('NUM', count.to_s).sub('USES', uses.to_s),
+ options
+ )
+ end
+
def capture_command(nodes, cmd, options)
SSH.remote_command(nodes, options) do |ssh, host|
output = ssh.capture(cmd, :log_output => false)
diff --git a/lib/leap_cli/config/object_list.rb b/lib/leap_cli/config/object_list.rb
index 80f89d92..815864e4 100644
--- a/lib/leap_cli/config/object_list.rb
+++ b/lib/leap_cli/config/object_list.rb
@@ -49,6 +49,10 @@ module LeapCli
end
end
+ def first
+ ObjectList.new(self.values.first)
+ end
+
def exclude(node)
list = self.dup
list.delete(node.name)