hammer_cli_foreman_ssh 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 8964927a1adbb4a518e8abba7aaa185bd00eb55e
4
+ data.tar.gz: 9a512d7632e37ffdc667ca5e5ea5926254cac8cb
5
+ SHA512:
6
+ metadata.gz: a8502378c81fb1b5a9b12f2330b798ab3c5384f8ab342f981ee6e113f7eda259d757be6b81940f823a77b9050f718212d059142f2a51a9f1aaf2ce75367ea9f9
7
+ data.tar.gz: bb652c97e534091271d5ffd95d70c84504df2d395f699bd87aa933d548c4a37d6b901cd8bd0ef6a9e2b148cfa3ff127553469aa8137da18582ada0d312182481
@@ -0,0 +1,7 @@
1
+ module HammerCLIForeman
2
+ module SSH
3
+ def self.version
4
+ @version ||= Gem::Version.new '0.0.1'
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,72 @@
1
+ require 'hammer_cli'
2
+ require 'hammer_cli_foreman/host'
3
+ require 'net/ssh/multi'
4
+
5
+ module HammerCLIForeman::SSH
6
+ class Command < HammerCLIForeman::Command
7
+
8
+ DEFAULT_PER_PAGE = 1000
9
+
10
+ resource :hosts
11
+ action :index
12
+
13
+ command_name 'SSH to hosts'
14
+ option %w(-c --command), 'COMMAND', _('Command to execute'), :attribute_name => :command, :required => true
15
+ option %w(-u --user), 'USER', _('Execute as user'), :attribute_name => :user, :default => ENV['USER']
16
+ option %w(-s --search), 'FILTER', _('Filter hosts based on a filter'), :attribute_name => :search
17
+ option '--[no-]dns', :flag, _('Use DNS to resolve IP addresses'), :attribute_name => :use_dns
18
+ option '--[no-]prompt', :flag, _('Prompt for users approval'), :attribute_name => :prompt
19
+
20
+ def request_params
21
+ params = super
22
+ params['search'] ||= search
23
+ params['per_page'] ||= HammerCLI::Settings.get(:ui, :per_page) || DEFAULT_PER_PAGE
24
+ params
25
+ end
26
+
27
+ def execute
28
+ puts _("About to execute: #{command} as user #{user}\n" +
29
+ "on the following #{hosts.size} hosts: #{host_names.join(', ')}")
30
+
31
+ unless prompt? == false || ask(_('Continue, (y/N)')).downcase == 'y'
32
+ warn _('aborting per user request')
33
+ return HammerCLI::EX_OK
34
+ end
35
+
36
+ ssh_options = { :user => user, :auth_methods => ['publickey'] }
37
+
38
+ Net::SSH::Multi.start(:on_error => :warn) do |session|
39
+ targets.each { |s| session.use s, ssh_options }
40
+ session.exec command
41
+ session.loop
42
+ end
43
+
44
+ HammerCLI::EX_OK
45
+ end
46
+
47
+ private
48
+
49
+ def response
50
+ @response ||= send_request
51
+ end
52
+
53
+ def hosts
54
+ @hosts ||= response['results']
55
+ end
56
+
57
+ def host_names
58
+ @host_names ||= hosts.map { |h| h['name'] }
59
+ end
60
+
61
+ def targets
62
+ (use_dns?.nil? || use_dns?) ? host_names : host_ips
63
+ end
64
+
65
+ def host_ips
66
+ @host_ips ||= hosts.map { |h| h['ip'] }
67
+ end
68
+
69
+ end
70
+
71
+ HammerCLIForeman::Host.subcommand('ssh', _('Remote execution via SSH to selected hosts'), HammerCLIForeman::SSH::Command)
72
+ end
@@ -0,0 +1,3 @@
1
+ module HammerCLIForeman
2
+ end
3
+ require 'hammer_cli_foreman/ssh'
metadata ADDED
@@ -0,0 +1,87 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: hammer_cli_foreman_ssh
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Ohad Levy
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-09-29 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: hammer_cli
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 0.0.6
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 0.0.6
27
+ - !ruby/object:Gem::Dependency
28
+ name: hammer_cli_foreman
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: net-ssh-multi
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description:
56
+ email:
57
+ executables: []
58
+ extensions: []
59
+ extra_rdoc_files: []
60
+ files:
61
+ - lib/hammer_cli_foreman/ssh.rb
62
+ - lib/hammer_cli_foreman/ssh/version.rb
63
+ - lib/hammer_cli_foreman_ssh.rb
64
+ homepage:
65
+ licenses: []
66
+ metadata: {}
67
+ post_install_message:
68
+ rdoc_options: []
69
+ require_paths:
70
+ - lib
71
+ required_ruby_version: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ required_rubygems_version: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: '0'
81
+ requirements: []
82
+ rubyforge_project:
83
+ rubygems_version: 2.2.2
84
+ signing_key:
85
+ specification_version: 4
86
+ summary: Adds Remote SSH support to Hammer Foreman CLI
87
+ test_files: []