cli_tool 0.0.2 → 0.0.3
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 +4 -4
- data/lib/cli_tool/remote.rb +130 -0
- data/lib/cli_tool/version.rb +1 -1
- data/lib/cli_tool.rb +1 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5d6bebdc51c5d3fa303521a576030ef09a2a2f1e
|
4
|
+
data.tar.gz: 44314ab4226493adced0d5300540c55de8194801
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c4f62e534448942a0f7ef307b7c3be7b37807ca658692f89c7df97a11db30de081c6ec5eb82fdc3a6f0408df5e922e92edcc1e2351d636d64124e8bfffa5b57d
|
7
|
+
data.tar.gz: 0f5cc7400c20e4c3732aba67f733873d89843eff4f17901a362617e021518d72dfc22a65dd8d1217b12abdda98eb4c838b35553f26bc48854408397de2f12ec0
|
@@ -0,0 +1,130 @@
|
|
1
|
+
module CliTool
|
2
|
+
module Remote
|
3
|
+
class WaitingForSSH < StandardError; end;
|
4
|
+
class Failure < StandardError; end;
|
5
|
+
|
6
|
+
class Script < String
|
7
|
+
def <<(script)
|
8
|
+
script = script.strip + ';' unless script.match(/;$/)
|
9
|
+
script = Script.new(script)
|
10
|
+
super("#{script}\n")
|
11
|
+
end
|
12
|
+
|
13
|
+
def prepend(script)
|
14
|
+
script = script.strip + ';' unless script.match(/;$/)
|
15
|
+
script = Script.new(script)
|
16
|
+
super("#{script}\n")
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.included(base)
|
21
|
+
base.__send__(:include, ::CliTool::StdinOut)
|
22
|
+
base.__send__(:include, ::CliTool::OptionParser)
|
23
|
+
base.__send__(:include, ::CliTool::SoftwareDependencies)
|
24
|
+
base.extend(ClassMethods)
|
25
|
+
base.software(:ssh, :nc)
|
26
|
+
base.options host: :required,
|
27
|
+
identity: :required,
|
28
|
+
debug: :none,
|
29
|
+
user: {
|
30
|
+
dependency: :required,
|
31
|
+
default: %x{whoami}.strip
|
32
|
+
},
|
33
|
+
port: {
|
34
|
+
dependency: :required,
|
35
|
+
default: '22'
|
36
|
+
}
|
37
|
+
end
|
38
|
+
|
39
|
+
def script(script = nil, sudo = false, sudouser = nil)
|
40
|
+
@_script ||= Script.new
|
41
|
+
return Script.new(@_script.strip) if script.nil?
|
42
|
+
return @_script = Script.new if script == :reset
|
43
|
+
@_script << (sudo == :sudo ? %{sudo su -l -c "#{script.strip.gsub('"','\"')}" #{sudouser}} : script).strip
|
44
|
+
end
|
45
|
+
|
46
|
+
def script_exec
|
47
|
+
wait4ssh
|
48
|
+
|
49
|
+
command =[ "ssh -t -t" ]
|
50
|
+
command << "-I #{@identity}" if @identity
|
51
|
+
command << "-p #{@port}" if @port
|
52
|
+
command << "#{@user}@#{@host}"
|
53
|
+
command << "<<-SCRIPT\n#{script}\nexit;\nSCRIPT"
|
54
|
+
command = command.join(' ')
|
55
|
+
script :reset
|
56
|
+
|
57
|
+
puts("Running Remotely:\n#{command}\n", [:blue, :white_bg])
|
58
|
+
|
59
|
+
system(command)
|
60
|
+
|
61
|
+
unless $?.success?
|
62
|
+
raise Failure, "Error running \"#{command}\" on #{@host} exited with code #{$?.to_i}."
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def aptget(action = :update, *software)
|
67
|
+
software = software.map(&:to_s).join(' ')
|
68
|
+
script "apt-get #{action} -q -y --force-yes #{software}", :sudo
|
69
|
+
end
|
70
|
+
|
71
|
+
def aptkeyadd(*keys)
|
72
|
+
keys = keys.map(&:to_s).join(' ')
|
73
|
+
script "apt-key adv --keyserver keyserver.ubuntu.com --recv-keys #{keys}", :sudo
|
74
|
+
end
|
75
|
+
|
76
|
+
def restart
|
77
|
+
script :reset
|
78
|
+
script "shutdown -r now &", :sudo
|
79
|
+
script_exec
|
80
|
+
|
81
|
+
# Let the server shutdown
|
82
|
+
sleep 5
|
83
|
+
end
|
84
|
+
|
85
|
+
def adduser(user, system = false)
|
86
|
+
script "adduser --disabled-password --quiet --gecos '' #{user}".squeeze(' '), :sudo
|
87
|
+
end
|
88
|
+
|
89
|
+
def wait4ssh
|
90
|
+
_retry ||= false
|
91
|
+
%x{nc -z #{@host} #{@port}}
|
92
|
+
raise WaitingForSSH unless $?.success?
|
93
|
+
puts("\nSSH is now available!", :green) if _retry
|
94
|
+
rescue WaitingForSSH
|
95
|
+
print "Waiting for ssh..." unless _retry
|
96
|
+
_retry = true
|
97
|
+
print '.'
|
98
|
+
sleep 2
|
99
|
+
retry
|
100
|
+
end
|
101
|
+
|
102
|
+
module ClassMethods
|
103
|
+
|
104
|
+
# Create the options array
|
105
|
+
def software(*soft)
|
106
|
+
@@software ||= []
|
107
|
+
|
108
|
+
# If no software dependencies were passed then return
|
109
|
+
return @@software.uniq unless soft
|
110
|
+
|
111
|
+
# Find missing software
|
112
|
+
missing = []
|
113
|
+
soft.each do |app|
|
114
|
+
%x{which #{app}}
|
115
|
+
missing << app unless $?.success?
|
116
|
+
end
|
117
|
+
|
118
|
+
# Raise if there were any missing software's
|
119
|
+
unless missing.empty?
|
120
|
+
missing = missing.join(', ')
|
121
|
+
raise CliTool::MissingDependencies,
|
122
|
+
%{The required software packages "#{missing}" could not be found in your $PATH.}
|
123
|
+
end
|
124
|
+
|
125
|
+
# Append to the software list
|
126
|
+
@@software = @@software.concat(soft).uniq
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
data/lib/cli_tool/version.rb
CHANGED
data/lib/cli_tool.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cli_tool
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kelly Becker
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-10-
|
11
|
+
date: 2013-10-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -71,6 +71,7 @@ files:
|
|
71
71
|
- cli_tool.gemspec
|
72
72
|
- lib/cli_tool.rb
|
73
73
|
- lib/cli_tool/option_parser.rb
|
74
|
+
- lib/cli_tool/remote.rb
|
74
75
|
- lib/cli_tool/software_dependencies.rb
|
75
76
|
- lib/cli_tool/stdin_out.rb
|
76
77
|
- lib/cli_tool/version.rb
|