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 +7 -0
- data/lib/hammer_cli_foreman/ssh/version.rb +7 -0
- data/lib/hammer_cli_foreman/ssh.rb +72 -0
- data/lib/hammer_cli_foreman_ssh.rb +3 -0
- metadata +87 -0
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,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
|
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: []
|