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.
@@ -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