alpha_omega 0.0.69 → 0.0.70
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.
- data/lib/alpha_omega/utils.rb +112 -47
- data/lib/alpha_omega/version.rb +1 -1
- data/libexec/dna +7 -0
- metadata +35 -20
data/lib/alpha_omega/utils.rb
CHANGED
@@ -3,26 +3,67 @@ require 'yaml'
|
|
3
3
|
|
4
4
|
module AlphaOmega
|
5
5
|
|
6
|
-
def self.
|
6
|
+
def self.magic_prefix
|
7
7
|
"eea914aaa8dde6fdae29242b1084a2b0415eefaf"
|
8
8
|
end
|
9
9
|
|
10
|
-
def self.
|
11
|
-
|
12
|
-
# world task accumulates all.* after tasks
|
13
|
-
config.task "world" do
|
14
|
-
end
|
10
|
+
def self.node_defaults(node, pods_config, opsdb, env_pod, this_pod, node_name)
|
11
|
+
node["node_name"] = node_name
|
15
12
|
|
16
|
-
|
17
|
-
|
13
|
+
# defaults
|
14
|
+
node["run_list"] ||= []
|
15
|
+
node["cap_group"] ||= []
|
16
|
+
node["nagios_group"] ||= []
|
17
|
+
node["private_aliases"] ||= []
|
18
|
+
node["node"] = nil
|
18
19
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
20
|
+
# enrich with pods config
|
21
|
+
node["env_pod"] = env_pod
|
22
|
+
node.deep_merge!(pods_config[env_pod])
|
23
|
+
|
24
|
+
# enrich with opsdb
|
25
|
+
node.deep_merge!(opsdb[env_pod][node_name])
|
26
|
+
|
27
|
+
node["run_list"] = node["run_list"].clone # TODO without a clone, node.run_list also updates pods_config.env_pod.run_list
|
28
|
+
|
29
|
+
# derive
|
30
|
+
node["fq_domain"] = %w(env_pod env_dc dc_domain).collect {|s| node[s] }.uniq.join(".")
|
31
|
+
node["fq_name"] = %w(node_name env_pod env_dc dc_domain).collect {|s| node[s] }.uniq.join(".")
|
32
|
+
node["p_name"] = "#{node["node_name"]}.#{node["env_pod"]}"
|
33
|
+
|
34
|
+
# check if managed
|
35
|
+
if "default" != env_pod # TODO get rid of default, use this_pod
|
36
|
+
node["q_name"] = "#{node["node_name"]}.#{node["env_pod"]}"
|
37
|
+
node["managed"] = true
|
38
|
+
else
|
39
|
+
node["q_name"] = node["node_name"]
|
40
|
+
node["managed"] = false
|
41
|
+
end
|
42
|
+
|
43
|
+
# check if infra pod
|
44
|
+
if node["env_pod"] == node["env_dc"]
|
45
|
+
node["infra"] = true
|
46
|
+
else
|
47
|
+
node["infra"] = false
|
48
|
+
node["infra_domain"] = "#{node["env_dc"]}.#{node["dc_domain"]}"
|
49
|
+
end
|
23
50
|
|
24
|
-
|
25
|
-
|
51
|
+
node["run_list"].concat pods_config[env_pod]["run_list"] if pods_config[env_pod].key? "run_list"
|
52
|
+
|
53
|
+
node
|
54
|
+
end
|
55
|
+
|
56
|
+
def self.default_pods_tasks
|
57
|
+
Proc.new do |config, pod_name, pod, mix_pods, pods_config, opsdb, this_pod|
|
58
|
+
[ "", ".echo", ".yaml" ].each do |tsuffix|
|
59
|
+
# world task accumulates all.* after tasks
|
60
|
+
config.task "world#{tsuffix}" do
|
61
|
+
end
|
62
|
+
|
63
|
+
# each pod task sets the pod context for host/group tasks
|
64
|
+
config.task "#{pod_name}#{tsuffix}" do
|
65
|
+
set :current_pod, pod_name
|
66
|
+
end
|
26
67
|
end
|
27
68
|
|
28
69
|
hosts =
|
@@ -31,30 +72,31 @@ module AlphaOmega
|
|
31
72
|
role :app, remote_name
|
32
73
|
end
|
33
74
|
|
34
|
-
config.task task_name do
|
35
|
-
after task_name, "#{task_name}.#{current_pod}"
|
36
|
-
end
|
37
|
-
|
38
75
|
config.task "#{task_name}.#{pod_name}.echo" do
|
39
|
-
puts "#{AlphaOmega.
|
76
|
+
puts "#{AlphaOmega.magic_prefix} #{remote_name}"
|
40
77
|
end
|
41
78
|
|
42
|
-
config.task "#{task_name}.
|
43
|
-
|
79
|
+
config.task "#{task_name}.#{pod_name}.yaml" do
|
80
|
+
n = self.node_defaults(node, pods_config. opsdb, pod_name, this_pod, task_name)
|
81
|
+
StringIO.new({ remote_name => n }.to_yaml).lines.each {|l| puts "#{AlphaOmega.magic_prefix} #{l}" }
|
82
|
+
end
|
83
|
+
|
84
|
+
[ "", ".echo", ".yaml" ].eeach do |tsuffix|
|
85
|
+
config.task "#{task_name}#{tsuffix}" do
|
86
|
+
after "#{task_name}#{tsuffix}", "#{task_name}.#{current_pod}#{tsuffix}"
|
87
|
+
end
|
44
88
|
end
|
45
|
-
|
46
89
|
end
|
47
90
|
|
48
91
|
AlphaOmega.what_groups hosts do |task_name, nodes|
|
49
92
|
if task_name == "all"
|
50
93
|
# simulate all podXX all
|
51
|
-
|
52
|
-
|
53
|
-
|
94
|
+
[ "", ".echo", ".yaml" ].each do |tsuffix|
|
95
|
+
unless pod_name == "default"
|
96
|
+
config.after "world#{tsuffix}", "#{pod_name}#{tsuffix}"
|
97
|
+
end
|
98
|
+
config.after "world#{tsuffix}", "#{task_name}#{tsuffix}"
|
54
99
|
end
|
55
|
-
|
56
|
-
config.after "world", task_name
|
57
|
-
config.after "world.echo", "#{task_name}.echo"
|
58
100
|
end
|
59
101
|
|
60
102
|
config.task "#{task_name}.#{pod_name}" do
|
@@ -71,11 +113,21 @@ module AlphaOmega
|
|
71
113
|
end
|
72
114
|
end
|
73
115
|
|
74
|
-
config.task task_name do
|
75
|
-
|
116
|
+
config.task "#{task_name}.#{pod_name}.echo" do
|
117
|
+
unless mix_pods
|
118
|
+
if last_pod && last_pod != pod_name
|
119
|
+
puts "ERROR: cannot call tasks that mix different dc_env (last pod = #{last_pod}, current pod = #{pod_name})"
|
120
|
+
exit 1
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
set :last_pod, pod_name
|
125
|
+
nodes.keys.sort.each do |remote_name|
|
126
|
+
puts "#{AlphaOmega.magic_prefix} #{remote_name}"
|
127
|
+
end
|
76
128
|
end
|
77
129
|
|
78
|
-
config.task "#{task_name}.#{pod_name}.
|
130
|
+
config.task "#{task_name}.#{pod_name}.yaml" do
|
79
131
|
unless mix_pods
|
80
132
|
if last_pod && last_pod != pod_name
|
81
133
|
puts "ERROR: cannot call tasks that mix different dc_env (last pod = #{last_pod}, current pod = #{pod_name})"
|
@@ -85,19 +137,24 @@ module AlphaOmega
|
|
85
137
|
|
86
138
|
set :last_pod, pod_name
|
87
139
|
nodes.keys.sort.each do |remote_name|
|
88
|
-
|
140
|
+
n = self.node_defaults(node, pods_config. opsdb, pod_name, this_pod, task_name)
|
141
|
+
StringIO.new({ remote_name => n }.to_yaml).lines.each {|l| puts "#{AlphaOmega.magic_prefix} #{l}" }
|
89
142
|
end
|
90
143
|
end
|
91
144
|
|
92
|
-
|
93
|
-
|
145
|
+
[ "", ".echo", ".yaml" ].each do |tsuffix|
|
146
|
+
config.task "#{task_name}#{tsuffix}" do
|
147
|
+
after "#{task_name}#{tsuffix}", "#{task_name}.#{current_pod}#{tsuffix}"
|
148
|
+
end
|
94
149
|
end
|
95
150
|
end
|
96
151
|
end
|
97
152
|
end
|
98
153
|
|
99
154
|
def self.setup_pods (config, node_home, mix_pods = true)
|
100
|
-
self.what_pods(config, node_home)
|
155
|
+
self.what_pods(config, node_home) do |config, pod_name, pod, pods_config, opsdb, this_pod|
|
156
|
+
self.default_pods_tasks.call(config, pod_name, pod, mix_pods, pods_config, opsdb, this_pod)
|
157
|
+
end
|
101
158
|
end
|
102
159
|
|
103
160
|
def self.what_branch (allowed = %w(production master develop))
|
@@ -126,24 +183,34 @@ module AlphaOmega
|
|
126
183
|
end
|
127
184
|
|
128
185
|
def self.what_pods (config, node_home)
|
129
|
-
pods
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
186
|
+
# pods config
|
187
|
+
pods_config = YAML.load(File.read("#{node_home}/config/pods.yml"))
|
188
|
+
|
189
|
+
# opsdb config
|
190
|
+
opsdb = Dir["#{node_home}/config/pod/*.yaml"].inject({}) do |acc, fname|
|
191
|
+
env_pod = File.basename fname, ".yaml"
|
192
|
+
acc[env_pod] = YAML.load(File.read(fname))
|
193
|
+
acc
|
194
|
+
end
|
135
195
|
|
136
|
-
|
196
|
+
pods = { }
|
197
|
+
|
198
|
+
this_pod = File.read("/etc/podname").strip
|
199
|
+
pods["default"] = {
|
200
|
+
"nodes_spec" => "#{node_home}/pods/#{this_pod}/*.yaml",
|
201
|
+
"node_suffix" => ""
|
202
|
+
}
|
203
|
+
yield config, "default", pods[this_pod], pods_config. opsdb, this_pod # TODO get rid of default and use this_pod
|
137
204
|
|
138
205
|
this_host = Socket.gethostname.chomp.split(".")[0]
|
139
|
-
this_node = YAML.load(File.read("#{node_home}/
|
206
|
+
this_node = YAML.load(File.read("#{node_home}/pods/#{this_pod}/#{this_host}.yaml"))
|
207
|
+
|
140
208
|
(this_node["pods"] || []).each do |pod_name|
|
141
209
|
pods[pod_name] = {
|
142
210
|
"nodes_spec" => "#{node_home}/pods/#{pod_name}/*.yaml",
|
143
211
|
"node_suffix" => ".#{pod_name}"
|
144
212
|
}
|
145
|
-
|
146
|
-
yield config, pod_name, pods[pod_name]
|
213
|
+
yield config, pod_name, pods[pod_name], pods_config, opsdb, this_pod
|
147
214
|
end
|
148
215
|
|
149
216
|
pods
|
@@ -187,6 +254,4 @@ module AlphaOmega
|
|
187
254
|
|
188
255
|
cap_groups
|
189
256
|
end
|
190
|
-
|
191
257
|
end
|
192
|
-
|
data/lib/alpha_omega/version.rb
CHANGED
data/libexec/dna
ADDED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: alpha_omega
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 147
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 70
|
10
|
+
version: 0.0.70
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- David Nghiem
|
@@ -62,7 +62,7 @@ dependencies:
|
|
62
62
|
type: :runtime
|
63
63
|
version_requirements: *id003
|
64
64
|
- !ruby/object:Gem::Dependency
|
65
|
-
name:
|
65
|
+
name: deep_merge
|
66
66
|
prerelease: false
|
67
67
|
requirement: &id004 !ruby/object:Gem::Requirement
|
68
68
|
none: false
|
@@ -76,7 +76,7 @@ dependencies:
|
|
76
76
|
type: :runtime
|
77
77
|
version_requirements: *id004
|
78
78
|
- !ruby/object:Gem::Dependency
|
79
|
-
name: HeSYINUvSBZfxqA-
|
79
|
+
name: HeSYINUvSBZfxqA-capistrano
|
80
80
|
prerelease: false
|
81
81
|
requirement: &id005 !ruby/object:Gem::Requirement
|
82
82
|
none: false
|
@@ -90,7 +90,7 @@ dependencies:
|
|
90
90
|
type: :runtime
|
91
91
|
version_requirements: *id005
|
92
92
|
- !ruby/object:Gem::Dependency
|
93
|
-
name: HeSYINUvSBZfxqA-
|
93
|
+
name: HeSYINUvSBZfxqA-capistrano_colors
|
94
94
|
prerelease: false
|
95
95
|
requirement: &id006 !ruby/object:Gem::Requirement
|
96
96
|
none: false
|
@@ -103,6 +103,20 @@ dependencies:
|
|
103
103
|
version: "0"
|
104
104
|
type: :runtime
|
105
105
|
version_requirements: *id006
|
106
|
+
- !ruby/object:Gem::Dependency
|
107
|
+
name: HeSYINUvSBZfxqA-capistrano_log
|
108
|
+
prerelease: false
|
109
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
110
|
+
none: false
|
111
|
+
requirements:
|
112
|
+
- - ">="
|
113
|
+
- !ruby/object:Gem::Version
|
114
|
+
hash: 3
|
115
|
+
segments:
|
116
|
+
- 0
|
117
|
+
version: "0"
|
118
|
+
type: :runtime
|
119
|
+
version_requirements: *id007
|
106
120
|
description: Common reciples for persistent capistrano releases
|
107
121
|
email:
|
108
122
|
- nghidav@gmail.com
|
@@ -117,29 +131,30 @@ files:
|
|
117
131
|
- LICENSE
|
118
132
|
- README.mkd
|
119
133
|
- Procfile.rb
|
134
|
+
- libexec/rollback
|
135
|
+
- libexec/stage
|
136
|
+
- libexec/patch
|
120
137
|
- libexec/compare
|
121
138
|
- libexec/check
|
122
|
-
- libexec/patch
|
123
139
|
- libexec/deploy
|
124
|
-
- libexec/
|
140
|
+
- libexec/shell
|
141
|
+
- libexec/dna
|
125
142
|
- libexec/cook
|
126
143
|
- libexec/hosts
|
127
|
-
-
|
128
|
-
-
|
129
|
-
- lib/alpha_omega/deploy/
|
130
|
-
- lib/alpha_omega/deploy/strategy/base.rb
|
131
|
-
- lib/alpha_omega/deploy/strategy/remote.rb
|
132
|
-
- lib/alpha_omega/deploy/strategy/checkout.rb
|
144
|
+
- lib/alpha_omega/deploy.rb
|
145
|
+
- lib/alpha_omega/version.rb
|
146
|
+
- lib/alpha_omega/deploy/scm.rb
|
133
147
|
- lib/alpha_omega/deploy/dependencies.rb
|
134
|
-
- lib/alpha_omega/deploy/local_dependency.rb
|
135
|
-
- lib/alpha_omega/deploy/strategy.rb
|
136
148
|
- lib/alpha_omega/deploy/templates/maintenance.rhtml
|
137
|
-
- lib/alpha_omega/deploy/
|
138
|
-
- lib/alpha_omega/deploy/scm/git.rb
|
149
|
+
- lib/alpha_omega/deploy/strategy.rb
|
139
150
|
- lib/alpha_omega/deploy/scm/base.rb
|
151
|
+
- lib/alpha_omega/deploy/scm/git.rb
|
152
|
+
- lib/alpha_omega/deploy/strategy/base.rb
|
153
|
+
- lib/alpha_omega/deploy/strategy/checkout.rb
|
154
|
+
- lib/alpha_omega/deploy/strategy/remote.rb
|
155
|
+
- lib/alpha_omega/deploy/local_dependency.rb
|
156
|
+
- lib/alpha_omega/deploy/remote_dependency.rb
|
140
157
|
- lib/alpha_omega/utils.rb
|
141
|
-
- lib/alpha_omega/version.rb
|
142
|
-
- lib/alpha_omega/deploy.rb
|
143
158
|
- bin/alpha_omega
|
144
159
|
has_rdoc: true
|
145
160
|
homepage: https://github.com/HeSYINUvSBZfxqA/alpha_omega
|