ona 0.4.1 → 1.0.0
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/bin/ona +2 -10
- data/lib/ona.rb +164 -4
- data/ona.gemspec +15 -5
- metadata +45 -7
- data/lib/ona_cli.rb +0 -192
- data/lib/ona_instructions.rb +0 -43
- data/lib/ona_server.rb +0 -79
- data/lib/ona_stack.rb +0 -39
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 00cac1d1f46370554c113bd8046a84cd79da23f74531424140ffd1445c927374
|
4
|
+
data.tar.gz: db80fffc3243a7ad43363d292f27b7d7e855693cd19d1cfca9fe201a236cf251
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5e59d548206b8e69028e9bb5c337f4cd3043f46e00e2a21a79b5aae8c9cbee64cd2c8cc4068bfcfdf735d407cef5388398bef5fd073249ad1104b84b598778d9
|
7
|
+
data.tar.gz: '0604507116913163d44be4983b2efa1e09175c965c17c593694b4061799824b8f972344fcc7e591de2f9def4cd9f99725fc3f039e8b784c9371420ef48699b92'
|
data/bin/ona
CHANGED
@@ -8,15 +8,7 @@ unless File.exists? 'Onafile'
|
|
8
8
|
abort 'Please create a file named:[Onafile] to start the shell.'
|
9
9
|
end
|
10
10
|
|
11
|
-
stack = Ona::Stack.new
|
12
11
|
eval File.read 'Onafile'
|
13
|
-
cli = Ona::Cli.new(stack)
|
14
12
|
|
15
|
-
|
16
|
-
|
17
|
-
if (line == 'quit') || (line == 'exit')
|
18
|
-
puts 'bye.'
|
19
|
-
break
|
20
|
-
end
|
21
|
-
cli.parse(line)
|
22
|
-
end
|
13
|
+
Ona.main
|
14
|
+
|
data/lib/ona.rb
CHANGED
@@ -1,4 +1,164 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require '
|
4
|
-
require '
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'ostruct'
|
4
|
+
require 'readline'
|
5
|
+
require 'isna'
|
6
|
+
|
7
|
+
class Ona
|
8
|
+
def self.resource(name, attributes)
|
9
|
+
@resources ||= {}
|
10
|
+
@resources[name] ||= {}
|
11
|
+
@resources[name][:class] = Struct.new(*attributes)
|
12
|
+
@resources[name][:entries] = []
|
13
|
+
@resources[name][:handlers] = []
|
14
|
+
@resources[name][:attributes] = attributes
|
15
|
+
_create_to_s_method(@resources[name])
|
16
|
+
nil
|
17
|
+
end
|
18
|
+
def self._create_to_s_method(resource)
|
19
|
+
attribute_sizes = resource[:attributes].map do |attribute|
|
20
|
+
attribute.to_s.size
|
21
|
+
end
|
22
|
+
resource[:class].send(:define_method, :to_s) do
|
23
|
+
max_attribute_length = attribute_sizes.sort.last + 4
|
24
|
+
resource[:attributes].sort.map do |attribute|
|
25
|
+
key = attribute.to_s.rjust(max_attribute_length, ' ')
|
26
|
+
"#{key.to_ansi.green.to_s} : #{send(attribute)}"
|
27
|
+
end * "\n"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
def self.register(name, &block)
|
31
|
+
object = @resources[name][:class].new
|
32
|
+
block.call(object)
|
33
|
+
@resources[name][:entries].push(object)
|
34
|
+
nil
|
35
|
+
end
|
36
|
+
def self.action(hash, &block)
|
37
|
+
unless hash[:find]
|
38
|
+
_generic_action(hash, &block)
|
39
|
+
return
|
40
|
+
end
|
41
|
+
unless hash[:token]
|
42
|
+
$stderr.puts "No token for: #{hash.inspect}"
|
43
|
+
exit 1
|
44
|
+
end
|
45
|
+
_single_action(hash, &block)
|
46
|
+
end
|
47
|
+
def self._generic_action(hash, &block)
|
48
|
+
hash[:block] = block
|
49
|
+
@resources[hash[:resource]][:handlers].push(hash)
|
50
|
+
nil
|
51
|
+
end
|
52
|
+
def self._single_action(hash, &block)
|
53
|
+
Ona._generic_action(hash) do |resources, command, regex|
|
54
|
+
wanted_id = hash[:token].call(command.scan(regex))
|
55
|
+
wanted_id = wanted_id.to_i
|
56
|
+
resources.each_with_index do |array, id|
|
57
|
+
next if id != wanted_id
|
58
|
+
block.call(array, id)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
def self.run(command)
|
63
|
+
@resources.each do |name, resource|
|
64
|
+
resource[:handlers].each do |handler|
|
65
|
+
next unless handler[:regex].match(command)
|
66
|
+
handler[:block].call(resource[:entries], command, handler[:regex])
|
67
|
+
return
|
68
|
+
end
|
69
|
+
end
|
70
|
+
nil
|
71
|
+
end
|
72
|
+
def self.prompt=(string)
|
73
|
+
@prompt = string
|
74
|
+
end
|
75
|
+
def self.prompt
|
76
|
+
@prompt
|
77
|
+
end
|
78
|
+
def self.main(use_defaults = true)
|
79
|
+
defaults if use_defaults
|
80
|
+
_prompt = (prompt || 'Ona').to_ansi.cyan.to_s + '> '
|
81
|
+
while input = Readline.readline(_prompt, true)
|
82
|
+
Ona.run(input)
|
83
|
+
end
|
84
|
+
puts ''
|
85
|
+
end
|
86
|
+
def self._get_max_regex_length
|
87
|
+
max = 0
|
88
|
+
@resources.each do |name, resource|
|
89
|
+
resource[:handlers].each do |handler|
|
90
|
+
if max < handler[:regex].inspect.size
|
91
|
+
max = handler[:regex].inspect.size
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
max
|
96
|
+
end
|
97
|
+
def self._get_max_example_length
|
98
|
+
max = 0
|
99
|
+
@resources.each do |name, resource|
|
100
|
+
resource[:handlers].each do |handler|
|
101
|
+
if max < handler[:example].size
|
102
|
+
max = handler[:example].size
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
max
|
107
|
+
end
|
108
|
+
def self._get_max_name_length
|
109
|
+
max = 0
|
110
|
+
@resources.each do |name, resource|
|
111
|
+
if max < name.size
|
112
|
+
max = name.size
|
113
|
+
end
|
114
|
+
end
|
115
|
+
max
|
116
|
+
end
|
117
|
+
def self.help
|
118
|
+
@resources.each do |name, resource|
|
119
|
+
pretty_name = "[#{name}]".to_s.rjust(_get_max_name_length + 2, ' ')
|
120
|
+
pretty_name = pretty_name.to_ansi.cyan.to_s
|
121
|
+
resource[:handlers].sort do |a, b|
|
122
|
+
a[:example] <=> b[:example]
|
123
|
+
end.each do |handler|
|
124
|
+
pretty_regex = handler[:regex].inspect.ljust(_get_max_regex_length, ' ')
|
125
|
+
pretty_regex = pretty_regex.to_s.to_ansi.pink.to_s
|
126
|
+
pretty_example = handler[:example].ljust(_get_max_example_length, ' ')
|
127
|
+
pretty_example = pretty_example.to_s.to_ansi.yellow.to_s
|
128
|
+
puts "#{pretty_name} #{pretty_example} #{handler[:text]}"
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
132
|
+
def self.defaults
|
133
|
+
Ona.resource(:any, [:empty])
|
134
|
+
|
135
|
+
Ona.action(
|
136
|
+
:regex => /(^)(quit|exit)($)/,
|
137
|
+
:resource => :any,
|
138
|
+
:text => 'Exit this program.',
|
139
|
+
:example => 'quit'
|
140
|
+
) do |resource, command, regex|
|
141
|
+
puts 'bye.'
|
142
|
+
exit 0
|
143
|
+
end
|
144
|
+
|
145
|
+
Ona.action(
|
146
|
+
:regex => /^help$/,
|
147
|
+
:resource => :any,
|
148
|
+
:text => 'Print help.',
|
149
|
+
:example => 'help'
|
150
|
+
) do |resource, command, regex|
|
151
|
+
Ona.help
|
152
|
+
end
|
153
|
+
end
|
154
|
+
def self.confirm(text, expected)
|
155
|
+
puts ''
|
156
|
+
puts "# " + " #{text} ".to_ansi.white.red_background.to_s
|
157
|
+
puts "# " + '=' * 78
|
158
|
+
puts "Type [#{expected.to_ansi.green.to_s}] to continue. or anything else to skip."
|
159
|
+
print 'What to do? >'
|
160
|
+
input = gets.chomp
|
161
|
+
input == expected
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
data/ona.gemspec
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "ona"
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "1.0.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["kazuyoshi tlacaelel"]
|
@@ -27,10 +27,6 @@ Gem::Specification.new do |s|
|
|
27
27
|
"VERSION",
|
28
28
|
"bin/ona",
|
29
29
|
"lib/ona.rb",
|
30
|
-
"lib/ona_cli.rb",
|
31
|
-
"lib/ona_instructions.rb",
|
32
|
-
"lib/ona_server.rb",
|
33
|
-
"lib/ona_stack.rb",
|
34
30
|
"ona.gemspec",
|
35
31
|
"test/helper.rb",
|
36
32
|
"test/test_ona.rb"
|
@@ -42,6 +38,20 @@ Gem::Specification.new do |s|
|
|
42
38
|
|
43
39
|
if s.respond_to? :specification_version then
|
44
40
|
s.specification_version = 3
|
41
|
+
|
42
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
43
|
+
s.add_runtime_dependency(%q<rake>, ["= 0.8.7"])
|
44
|
+
s.add_runtime_dependency(%q<jeweler>, [">= 0"])
|
45
|
+
s.add_development_dependency(%q<thoughtbot-shoulda>, [">= 0"])
|
46
|
+
else
|
47
|
+
s.add_dependency(%q<rake>, ["= 0.8.7"])
|
48
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
49
|
+
s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
|
50
|
+
end
|
51
|
+
else
|
52
|
+
s.add_dependency(%q<rake>, ["= 0.8.7"])
|
53
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
54
|
+
s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
|
45
55
|
end
|
46
56
|
end
|
47
57
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ona
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- kazuyoshi tlacaelel
|
@@ -9,7 +9,49 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
date: 2013-12-14 00:00:00.000000000 Z
|
12
|
-
dependencies:
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rake
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.8.7
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.8.7
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: jeweler
|
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: thoughtbot-shoulda
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
13
55
|
description: Simple shell for deployment.
|
14
56
|
email: kazu.dev@gmail.com
|
15
57
|
executables:
|
@@ -28,10 +70,6 @@ files:
|
|
28
70
|
- VERSION
|
29
71
|
- bin/ona
|
30
72
|
- lib/ona.rb
|
31
|
-
- lib/ona_cli.rb
|
32
|
-
- lib/ona_instructions.rb
|
33
|
-
- lib/ona_server.rb
|
34
|
-
- lib/ona_stack.rb
|
35
73
|
- ona.gemspec
|
36
74
|
- test/helper.rb
|
37
75
|
- test/test_ona.rb
|
@@ -53,7 +91,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
53
91
|
- !ruby/object:Gem::Version
|
54
92
|
version: '0'
|
55
93
|
requirements: []
|
56
|
-
rubygems_version: 3.0.
|
94
|
+
rubygems_version: 3.0.3
|
57
95
|
signing_key:
|
58
96
|
specification_version: 3
|
59
97
|
summary: Ona -- Deployment symplified.
|
data/lib/ona_cli.rb
DELETED
@@ -1,192 +0,0 @@
|
|
1
|
-
module Ona
|
2
|
-
|
3
|
-
class Cli
|
4
|
-
|
5
|
-
TRANSLATION = {
|
6
|
-
'show' => { :method => :show, :id_required => true },
|
7
|
-
'setup' => { :method => :setup, :id_required => true },
|
8
|
-
'deploy' => { :method => :deploy, :id_required => true },
|
9
|
-
'ssh#' => { :method => :ssh_root, :id_required => true },
|
10
|
-
'ssh' => { :method => :ssh_deploy,:id_required => true },
|
11
|
-
'go' => { :method => :go_deploy, :id_required => true },
|
12
|
-
'go#' => { :method => :go_root, :id_required => true },
|
13
|
-
'http' => { :method => :http, :id_required => true },
|
14
|
-
'key' => { :method => :key, :id_required => true },
|
15
|
-
'keys' => { :method => :keys, :id_required => true },
|
16
|
-
'rake' => { :method => :rake, :id_required => true },
|
17
|
-
'ls' => { :method => :ls, :id_required => false },
|
18
|
-
'help' => { :method => :help, :id_required => false },
|
19
|
-
}
|
20
|
-
|
21
|
-
def initialize(stack)
|
22
|
-
@stack = stack
|
23
|
-
@instructions = Ona::Instructions.new(/[a-z]+[#]*/, /\d+/)
|
24
|
-
end
|
25
|
-
|
26
|
-
def parse command_string
|
27
|
-
# Handle this separately for now.
|
28
|
-
return run_instruction('ls', 0) if command_string == 'ls'
|
29
|
-
return run_instruction('help', 0) if command_string == 'help'
|
30
|
-
|
31
|
-
@instructions.define_command_string(command_string)
|
32
|
-
group = @instructions.group_targets_by_instruction
|
33
|
-
copy = group.dup
|
34
|
-
copy.pop
|
35
|
-
|
36
|
-
# Only last group has ids?
|
37
|
-
if copy.all? { |x| x.values == [[]] }
|
38
|
-
@instructions.instructions.each do |instruction|
|
39
|
-
@instructions.targets.each do |target|
|
40
|
-
run_instruction instruction, target
|
41
|
-
end
|
42
|
-
end
|
43
|
-
return
|
44
|
-
end
|
45
|
-
|
46
|
-
# Run by group.
|
47
|
-
group.each do |hash|
|
48
|
-
instruction, targets = hash.to_a[0][0], hash.to_a[0][1]
|
49
|
-
targets.each do |target|
|
50
|
-
run_instruction instruction, target
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
def run_instruction instruction, target
|
56
|
-
return unless TRANSLATION.keys.include?(instruction)
|
57
|
-
hash = TRANSLATION[instruction]
|
58
|
-
cmd = "#{TRANSLATION[instruction][:method]}"
|
59
|
-
if (hash[:id_required])
|
60
|
-
cmd << "(#{target.to_i})"
|
61
|
-
end
|
62
|
-
eval cmd
|
63
|
-
end
|
64
|
-
|
65
|
-
def help
|
66
|
-
puts "
|
67
|
-
Ona -- Deployment simplified.
|
68
|
-
|
69
|
-
deploy 1 # Deploy a specific server
|
70
|
-
exit # Same as *quit*
|
71
|
-
go # Go to server without opening a new window.
|
72
|
-
go# # Same as go but do it as root.
|
73
|
-
help # Show this help
|
74
|
-
http 1 # Open the server in default browser.
|
75
|
-
key 1 # Uploads my public ssh-key to remote server (root)
|
76
|
-
keys # Uploads my public ssh-key to all servers (root)
|
77
|
-
ls # Short list for available servers
|
78
|
-
quit # Termintes the ona shell.
|
79
|
-
rake # Shows rake tasks.
|
80
|
-
setup 1 # Upload ssh-keys and bootstrap server
|
81
|
-
show 1 # Detailed info for a specific server
|
82
|
-
ssh 1 # Open a ssh session as *deploy* on remote server (new window)
|
83
|
-
ssh# 1 # Open a ssh session as *root* to a remote server (new window)
|
84
|
-
|
85
|
-
--
|
86
|
-
|
87
|
-
Note: 1 is a server id, you can use many ids!
|
88
|
-
|
89
|
-
show 1 2 3 # Will display info for three servers.
|
90
|
-
|
91
|
-
"
|
92
|
-
end
|
93
|
-
|
94
|
-
def http server_id
|
95
|
-
@stack.find_all(server_id).each do |server|
|
96
|
-
system server.to_http
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
def key server_id
|
101
|
-
@stack.find_all(server_id).each do |server|
|
102
|
-
puts 'Setting up key for root'
|
103
|
-
system server.setup_ssh
|
104
|
-
end
|
105
|
-
end
|
106
|
-
|
107
|
-
def show server_id
|
108
|
-
@stack.find_all(server_id).each do |server|
|
109
|
-
puts server.to_s
|
110
|
-
end
|
111
|
-
end
|
112
|
-
|
113
|
-
def ls
|
114
|
-
@stack.to_a.each do |server|
|
115
|
-
puts server.to_short_s
|
116
|
-
end
|
117
|
-
end
|
118
|
-
|
119
|
-
def ssh_deploy server_id
|
120
|
-
@stack.find_all(server_id).each do |server|
|
121
|
-
system server.to_ssh 'deploy'
|
122
|
-
end
|
123
|
-
end
|
124
|
-
|
125
|
-
def ssh_root server_id
|
126
|
-
@stack.find_all(server_id).each do |server|
|
127
|
-
system server.to_ssh 'root'
|
128
|
-
end
|
129
|
-
end
|
130
|
-
|
131
|
-
def go_deploy server_id
|
132
|
-
@stack.find_all(server_id).each do |server|
|
133
|
-
system server.to_go 'deploy'
|
134
|
-
end
|
135
|
-
end
|
136
|
-
|
137
|
-
def go_root server_id
|
138
|
-
@stack.find_all(server_id).each do |server|
|
139
|
-
system server.to_go 'root'
|
140
|
-
end
|
141
|
-
end
|
142
|
-
|
143
|
-
def deploy server_id
|
144
|
-
@stack.find_all(server_id).each do |server|
|
145
|
-
prompt_for_continuation server
|
146
|
-
system server.say_sure_to_deploy
|
147
|
-
line = gets
|
148
|
-
next unless line.chomp == 'yes'
|
149
|
-
system server.deploy
|
150
|
-
system server.say_deployed
|
151
|
-
end
|
152
|
-
end
|
153
|
-
|
154
|
-
def setup server_id
|
155
|
-
key server_id
|
156
|
-
@stack.find_all(server_id).each do |server|
|
157
|
-
prompt_for_continuation server
|
158
|
-
system server.say_sure_to_setup
|
159
|
-
line = gets
|
160
|
-
next unless line.chomp == 'yes'
|
161
|
-
system server.bootstrap
|
162
|
-
system server.say_finished_setup
|
163
|
-
end
|
164
|
-
end
|
165
|
-
|
166
|
-
def rake server_id
|
167
|
-
@stack.find_all(server_id).each do |server|
|
168
|
-
server.to_s
|
169
|
-
server.rake.each do |task|
|
170
|
-
puts task
|
171
|
-
end
|
172
|
-
end
|
173
|
-
end
|
174
|
-
|
175
|
-
def keys
|
176
|
-
@stack.to_a.each do |server|
|
177
|
-
puts 'Setting up key for root'
|
178
|
-
system server.setup_ssh
|
179
|
-
end
|
180
|
-
end
|
181
|
-
|
182
|
-
protected
|
183
|
-
|
184
|
-
def prompt_for_continuation server
|
185
|
-
puts server.to_s
|
186
|
-
puts 'Type [yes] to continue. or anything else to skip.'
|
187
|
-
print 'What to do? >'
|
188
|
-
end
|
189
|
-
|
190
|
-
end
|
191
|
-
|
192
|
-
end
|
data/lib/ona_instructions.rb
DELETED
@@ -1,43 +0,0 @@
|
|
1
|
-
module Ona
|
2
|
-
|
3
|
-
class Instructions
|
4
|
-
|
5
|
-
def initialize instruction_matcher, target_matcher
|
6
|
-
define_instruction_matcher instruction_matcher
|
7
|
-
define_target_matcher target_matcher
|
8
|
-
end
|
9
|
-
|
10
|
-
def define_command_string command_string
|
11
|
-
@command_string = command_string
|
12
|
-
end
|
13
|
-
|
14
|
-
def define_instruction_matcher matcher_regex
|
15
|
-
@instruction_matcher = matcher_regex
|
16
|
-
end
|
17
|
-
|
18
|
-
def define_target_matcher matcher_regex
|
19
|
-
@target_matcher = matcher_regex
|
20
|
-
end
|
21
|
-
|
22
|
-
def targets
|
23
|
-
@command_string.scan(@target_matcher)
|
24
|
-
end
|
25
|
-
|
26
|
-
def instructions
|
27
|
-
@command_string.scan(@instruction_matcher)
|
28
|
-
end
|
29
|
-
|
30
|
-
def group_targets_by_instruction
|
31
|
-
group = []
|
32
|
-
chunks = (@command_string.split(@instruction_matcher) - [""])
|
33
|
-
return group if chunks.size != instructions.size
|
34
|
-
chunks.each_with_index do |instruction_targets, index|
|
35
|
-
instruction_targets = (instruction_targets.scan(@target_matcher) - [])
|
36
|
-
group << { instructions[index] => instruction_targets }
|
37
|
-
end
|
38
|
-
group
|
39
|
-
end
|
40
|
-
|
41
|
-
end
|
42
|
-
|
43
|
-
end
|
data/lib/ona_server.rb
DELETED
@@ -1,79 +0,0 @@
|
|
1
|
-
module Ona
|
2
|
-
|
3
|
-
class Server
|
4
|
-
|
5
|
-
attr_accessor :id, :role, :ip, :pass, :desc, :dna
|
6
|
-
|
7
|
-
def load_block id, &block
|
8
|
-
@id = id
|
9
|
-
yield(self)
|
10
|
-
end
|
11
|
-
|
12
|
-
def setup_ssh
|
13
|
-
"rake upload_ssh_key server=root@#{ip} pass=#{pass} key=#{local_key}"
|
14
|
-
end
|
15
|
-
|
16
|
-
def say_deployed
|
17
|
-
"say #{desc} deployed"
|
18
|
-
end
|
19
|
-
|
20
|
-
def say_finished_setup
|
21
|
-
"say #{desc} setup terminated"
|
22
|
-
end
|
23
|
-
|
24
|
-
def say_sure_to_setup
|
25
|
-
"say 'Are you sure to setup #{desc}'"
|
26
|
-
end
|
27
|
-
|
28
|
-
def say_sure_to_deploy
|
29
|
-
"say 'Are you sure to deploy #{desc}'"
|
30
|
-
end
|
31
|
-
|
32
|
-
def bootstrap
|
33
|
-
"rake bootstrap server=root@#{ip}"
|
34
|
-
end
|
35
|
-
|
36
|
-
def deploy
|
37
|
-
"rake cook server=root@#{ip} dna=#{dna} instance_role=#{role}"
|
38
|
-
end
|
39
|
-
|
40
|
-
def to_ssh user
|
41
|
-
"open ssh://#{user}@#{ip}"
|
42
|
-
end
|
43
|
-
|
44
|
-
def to_go user
|
45
|
-
"ssh #{user}@#{ip}"
|
46
|
-
end
|
47
|
-
|
48
|
-
def to_http
|
49
|
-
"open http://#{ip}"
|
50
|
-
end
|
51
|
-
|
52
|
-
def to_short_s
|
53
|
-
"#{id}".ljust(5) + "#{desc}"
|
54
|
-
end
|
55
|
-
|
56
|
-
def to_s
|
57
|
-
"
|
58
|
-
#{id} - #{desc}
|
59
|
-
|
60
|
-
Id #{id}
|
61
|
-
Ip #{ip}
|
62
|
-
Dna #{dna}
|
63
|
-
Role #{role}
|
64
|
-
Password #{pass}
|
65
|
-
|
66
|
-
"
|
67
|
-
end
|
68
|
-
|
69
|
-
def rake
|
70
|
-
[setup_ssh, bootstrap, deploy]
|
71
|
-
end
|
72
|
-
|
73
|
-
def local_key
|
74
|
-
File.join(ENV['HOME'], '.ssh/id_rsa.pub')
|
75
|
-
end
|
76
|
-
|
77
|
-
end
|
78
|
-
|
79
|
-
end
|
data/lib/ona_stack.rb
DELETED
@@ -1,39 +0,0 @@
|
|
1
|
-
module Ona
|
2
|
-
|
3
|
-
class Stack
|
4
|
-
|
5
|
-
def initialize
|
6
|
-
@list = []
|
7
|
-
@id = 0
|
8
|
-
end
|
9
|
-
|
10
|
-
def append &block
|
11
|
-
@id += 1
|
12
|
-
server = Server.new
|
13
|
-
server.load_block(@id, &block)
|
14
|
-
@list << server
|
15
|
-
end
|
16
|
-
|
17
|
-
def find num
|
18
|
-
@list.each do |server|
|
19
|
-
return server if server.id == num
|
20
|
-
end
|
21
|
-
nil
|
22
|
-
end
|
23
|
-
|
24
|
-
def find_all *args
|
25
|
-
args.map { |id| find id }.compact
|
26
|
-
end
|
27
|
-
|
28
|
-
def exists? num
|
29
|
-
return false if find(num).nil?
|
30
|
-
true
|
31
|
-
end
|
32
|
-
|
33
|
-
def to_a
|
34
|
-
@list
|
35
|
-
end
|
36
|
-
|
37
|
-
end
|
38
|
-
|
39
|
-
end
|