alpha_omega 0.0.69 → 0.0.70

Sign up to get free protection for your applications and to get access to all the features.
@@ -3,26 +3,67 @@ require 'yaml'
3
3
 
4
4
  module AlphaOmega
5
5
 
6
- def self.echo_magic
6
+ def self.magic_prefix
7
7
  "eea914aaa8dde6fdae29242b1084a2b0415eefaf"
8
8
  end
9
9
 
10
- def self.default_pods_tasks
11
- Proc.new do |config, pod_name, pod, mix_pods|
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
- config.task "world.echo" do
17
- end
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
- # each pod task sets the pod context for host/group tasks
20
- config.task pod_name do
21
- set :current_pod, pod_name
22
- end
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
- config.task "#{pod_name}.echo" do
25
- set :current_pod, pod_name
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.echo_magic} #{remote_name}"
76
+ puts "#{AlphaOmega.magic_prefix} #{remote_name}"
40
77
  end
41
78
 
42
- config.task "#{task_name}.echo" do
43
- after "#{task_name}.echo", "#{task_name}.#{current_pod}.echo"
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
- unless pod_name == "default"
52
- config.after "world", pod_name
53
- config.after "world.echo", "#{pod_name}.echo"
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
- after task_name, "#{task_name}.#{current_pod}"
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}.echo" do
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
- puts "#{AlphaOmega.echo_magic} #{remote_name}"
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
- config.task "#{task_name}.echo" do
93
- after "#{task_name}.echo", "#{task_name}.#{current_pod}.echo"
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) { |config, pod_name, pod| self.default_pods_tasks.call(config, pod_name, pod, mix_pods) }
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
- "default" => {
131
- "nodes_spec" => "#{node_home}/nodes/*.yaml",
132
- "node_suffix" => ""
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
- yield config, "default", pods["default"]
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}/nodes/#{this_host}.yaml"))
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
-
@@ -1,3 +1,3 @@
1
1
  module AlphaOmega
2
- Version = "0.0.69"
2
+ Version = "0.0.70"
3
3
  end
@@ -0,0 +1,7 @@
1
+ #!/bin/bash -e
2
+
3
+ export LOCAL_ONLY=true
4
+
5
+ {
6
+ cap $(for a in "$@"; do yaml $a.yaml; done)
7
+ } 2>&1 | grep eea914aaa8dde6fdae29242b1084a2b0415eefaf | sed 's#eea914aaa8dde6fdae29242b1084a2b0415eefaf ##'
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: 149
4
+ hash: 147
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 69
10
- version: 0.0.69
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: HeSYINUvSBZfxqA-capistrano
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-capistrano_colors
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-capistrano_log
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/stage
140
+ - libexec/shell
141
+ - libexec/dna
125
142
  - libexec/cook
126
143
  - libexec/hosts
127
- - libexec/shell
128
- - libexec/rollback
129
- - lib/alpha_omega/deploy/remote_dependency.rb
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/scm.rb
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