hammer_cli_foreman_ssh 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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: []