fhcap-cli 0.4.3 → 0.4.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +10 -0
  3. data/fhcap-cli.gemspec +1 -0
  4. data/lib/cookbooks/provision/recipes/cluster_create_instances.rb +2 -1
  5. data/lib/cookbooks/provision/recipes/cluster_provision_instances.rb +2 -1
  6. data/lib/cookbooks/provision/recipes/galera_reset_cluster.rb +62 -0
  7. data/lib/cookbooks/provision/recipes/mongo_reset_cluster.rb +45 -0
  8. data/lib/cookbooks/provision/recipes/post_create_instances.rb +4 -0
  9. data/lib/cookbooks/provision/recipes/rabbitmq_reset_cluster.rb +71 -0
  10. data/lib/cookbooks/provision/recipes/restart_services.rb +9 -15
  11. data/lib/cookbooks/provision/recipes/seed_cookbooks.rb +4 -3
  12. data/lib/fhcap/cluster.rb +4 -0
  13. data/lib/fhcap/tasks/chef/chef_server_task.rb +3 -0
  14. data/lib/fhcap/tasks/chef/cookbook/update_config.rb +2 -2
  15. data/lib/fhcap/tasks/chef/cookbook/update_metadata.rb +1 -0
  16. data/lib/fhcap/tasks/chef/provisioning/create.rb +1 -2
  17. data/lib/fhcap/tasks/chef/provisioning/provision.rb +1 -1
  18. data/lib/fhcap/tasks/cluster/chef_provisioning_task.rb +2 -0
  19. data/lib/fhcap/tasks/cluster/create.rb +5 -2
  20. data/lib/fhcap/tasks/cluster/create_environment.rb +2 -0
  21. data/lib/fhcap/version.rb +1 -1
  22. data/lib/fhcap.rb +1 -1
  23. data/spec/fhcap/tasks/chef/cookbook/update_metadata_spec.rb +30 -0
  24. data/templates/chef/environment_core.json.erb +28 -5
  25. data/templates/chef/environment_farm.json.erb +60 -0
  26. data/templates/chef/environment_mbaas.json.erb +27 -1
  27. data/templates/chef/environment_single.json.erb +9 -5
  28. data/templates/cluster/aws/farm-3node.json.erb +104 -0
  29. data/templates/cluster/aws/farm-single.json.erb +87 -0
  30. data/templates/cluster/aws/mbaas-3node.json.erb +2 -2
  31. data/templates/cluster/farm-3node.json.erb +8 -0
  32. data/templates/cluster/farm-single.json.erb +8 -0
  33. data/templates/cluster/openstack/core-3node.json.erb +3 -3
  34. data/templates/cluster/openstack/farm-3node.json.erb +14 -0
  35. data/templates/cluster/openstack/farm-single.json.erb +8 -0
  36. data/templates/cluster/openstack/mbaas-3node.json.erb +3 -3
  37. metadata +29 -3
  38. data/lib/cookbooks/provision/recipes/reset_rabbitmq.rb +0 -58
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4068e4a42ccdb6ecf9ed5f1e74e34f8a7d1050ea
4
- data.tar.gz: 9e703a039cda7f9572dbb78254ccc24d36b9a495
3
+ metadata.gz: c70a588e2af142866f7769a2f1b8ee1a8cf669bf
4
+ data.tar.gz: 12ee618fb29f5376cddd76ccccd9334cb4315f58
5
5
  SHA512:
6
- metadata.gz: c7c1c547d42be6f597042723e9f00e3a46cc30e93750bc93b65e50d2bc08436f5b1a1a2339a5be8d46e5a2eb97067e79aa89b85fab72f88fb6d81a1d23b2a883
7
- data.tar.gz: 95daf1cb3fa9e7dc7f58b5574daf68a4084fff9cef39706f8f2ab3e89a9e3ee8c9124a8a4f27e505cea9ae6d5c15b4e994c2b83eead184a1e824d885d5e641d4
6
+ metadata.gz: ae42d497ed5c59525b800a31f8a09d5a34c6a00a9eb67989287e38da4e3a06075360aec7161f6e063b7a48ea8d317996c1b568665815fcf894e5f513e2a49d20
7
+ data.tar.gz: d769c3a259218b4314b0472bf1d83aca477cb4ef37d516698b3389a022fad0759ea37ced456d6949b6522cd58ff8f5481f05aa2f62d21383c39ddbb03d0d6f2e
data/CHANGELOG.md CHANGED
@@ -1,4 +1,14 @@
1
1
 
2
+ ## 0.4.4
3
+
4
+ * [RHMAP-3188] - Multi node template improvements. Breaks out clustered component (galera, rabbitmq and mongo) provisions into separate creation steps allowing them to be handled in isolation from the full chef run.
5
+ * [RHMAP-3473] - Add 3 node and single farm template (Android only) for aws and openstack.
6
+ * Generate Random api key for messaging and metrics mbaas
7
+ * [RHMAP-3278] - Add erubis as a dependency in gemspec.
8
+ * [RHMAP-2928] - Update fhcap dev to point at QED1 for Android builds
9
+ * Use dev.json for fh-metrics & fh-messaging
10
+ * [RHMAP-3667] - Show examples when prompting for input during cluster create
11
+
2
12
  ## 0.4.3
3
13
 
4
14
  * [RHMAP-3056] - Adds the option to use 'local' chef server, removes the need to have access to a public server to provision anything.
data/fhcap-cli.gemspec CHANGED
@@ -21,6 +21,7 @@ Gem::Specification.new do |spec|
21
21
  spec.add_dependency 'thor', '= 0.19.1'
22
22
  spec.add_dependency 'sshkey', '= 1.6.1'
23
23
  spec.add_dependency 'public_suffix', '= 1.5.2'
24
+ spec.add_dependency 'erubis', '= 2.7.0'
24
25
  spec.add_dependency 'launchy', '= 2.4.3'
25
26
  spec.add_dependency 'librarian-chef', '= 0.0.4'
26
27
  spec.add_dependency 'knife-block', '= 0.2.1'
@@ -1,11 +1,12 @@
1
1
  with_cluster_instances(node) do |cluster_instances|
2
2
  cluster_instances.each do |chef_environment, instances|
3
3
  with_chef_environment chef_environment do
4
- machine_batch do
4
+ machine_batch 'cluster_create_instances' do
5
5
  instances.each do |name, cfg|
6
6
  machine name do
7
7
  chef_environment chef_environment
8
8
  machine_options(cfg[:machine_options])
9
+ run_list []
9
10
  end
10
11
  end
11
12
  end
@@ -1,12 +1,13 @@
1
1
  with_cluster_instances(node) do |cluster_instances|
2
2
  cluster_instances.each do |chef_environment, instances|
3
3
  with_chef_environment chef_environment do
4
- machine_batch do
4
+ machine_batch 'cluster_provision_instances' do
5
5
  instances.each do |name, cfg|
6
6
  machine name do
7
7
  chef_environment chef_environment
8
8
  run_list cfg[:instance_config][:run_list]
9
9
  machine_options(cfg[:machine_options])
10
+ converge true
10
11
  end
11
12
  end
12
13
  end
@@ -0,0 +1,62 @@
1
+ include_recipe 'provision::common'
2
+ include_recipe "provision::#{node['driver']}"
3
+
4
+ # Help on verifying a galera cluster can be found here http://galeracluster.com/documentation-webpages/testingcluster.html
5
+
6
+ with_cluster_instances(node) do |cluster_instances|
7
+ cluster_instances.each do |chef_environment, instances|
8
+ with_chef_environment chef_environment do
9
+
10
+ search_role = 'galera.*_server'
11
+
12
+ search_nodes = search(:node, "chef_environment:#{chef_environment} AND roles:#{search_role}").map { |n| n.name }
13
+
14
+ run_list_query = /role\[#{search_role}\]/
15
+
16
+ galera_instances = instances.select do |name, cfg|
17
+ if cfg[:instance_config] && cfg[:instance_config][:run_list] && cfg[:instance_config][:run_list].index { |s| s =~ run_list_query }
18
+ tmp_run_list = []
19
+ tmp_run_list << cfg[:instance_config][:run_list][cfg[:instance_config][:run_list].index { |s| s =~ run_list_query }]
20
+ cfg[:instance_config][:tmp_run_list] = tmp_run_list
21
+ true
22
+ else
23
+ false
24
+ end
25
+ end
26
+
27
+ #Delete the installed flag to force a re-install of galera, Note DO NOT run this in a prod setup that is being used for real.
28
+ galera_instances.each do |name, cfg|
29
+ machine_execute "galera_reset_cluster - #{name}: Remove /root/.galera_installed" do
30
+ command 'sudo rm -rf /root/.galera_installed'
31
+ machine name
32
+ end
33
+ end
34
+
35
+ # Chef run to force the install recipe for galera to run, depending on weather nodes exist on the server already or not, we will need to do this once or twice.
36
+ batch_provisions = search_nodes.length > 1 ? 1 : 2
37
+ batch_provisions.times do |index|
38
+ machine_batch "galera_reset_cluster: Batch Provison #{index + 1}/#{batch_provisions}" do
39
+ galera_instances.each do |name, cfg|
40
+ machine name do
41
+ chef_environment chef_environment
42
+ machine_options(cfg[:machine_options])
43
+ run_list cfg[:instance_config][:tmp_run_list]
44
+ converge true
45
+ end
46
+ end
47
+ end
48
+ end
49
+
50
+ # Chef run on each node in series to setup clustering
51
+ galera_instances.each do |name, cfg|
52
+ machine name do
53
+ chef_environment chef_environment
54
+ machine_options(cfg[:machine_options])
55
+ run_list cfg[:instance_config][:tmp_run_list]
56
+ converge true
57
+ end
58
+ end
59
+
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,45 @@
1
+ include_recipe 'provision::common'
2
+ include_recipe "provision::#{node['driver']}"
3
+
4
+ with_cluster_instances(node) do |cluster_instances|
5
+ cluster_instances.each do |chef_environment, instances|
6
+ with_chef_environment chef_environment do
7
+
8
+ search_role = '.*mongo.*_server'
9
+
10
+ run_list_query = /role\[#{search_role}\]/
11
+
12
+ mongo_instances = instances.select do |name, cfg|
13
+ if cfg[:instance_config] && cfg[:instance_config][:run_list] && cfg[:instance_config][:run_list].index { |s| s =~ run_list_query }
14
+ tmp_run_list = []
15
+ tmp_run_list << cfg[:instance_config][:run_list][cfg[:instance_config][:run_list].index { |s| s =~ run_list_query }]
16
+ cfg[:instance_config][:tmp_run_list] = tmp_run_list
17
+ true
18
+ else
19
+ false
20
+ end
21
+ end
22
+
23
+ # It always take 3 provisions for mongo to be working in a clustered setup.
24
+ #
25
+ # 1. install mongo and update chef server
26
+ # 2. configure mongo configs with all the other nodes and setup replicaset
27
+ # 3. Add any users to what should be a now working mongo cluster
28
+
29
+ batch_provisions = 3
30
+ batch_provisions.times do |index|
31
+ machine_batch "mongo_reset_cluster: Batch Provison #{index + 1}/#{batch_provisions}" do
32
+ mongo_instances.each do |name, cfg|
33
+ machine name do
34
+ chef_environment chef_environment
35
+ machine_options(cfg[:machine_options])
36
+ run_list cfg[:instance_config][:tmp_run_list]
37
+ converge true
38
+ end
39
+ end
40
+ end
41
+ end
42
+
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,4 @@
1
+
2
+ include_recipe "provision::galera_reset_cluster"
3
+ include_recipe "provision::rabbitmq_reset_cluster"
4
+ include_recipe "provision::mongo_reset_cluster"
@@ -0,0 +1,71 @@
1
+ include_recipe 'provision::common'
2
+ include_recipe "provision::#{node['driver']}"
3
+
4
+ # Help on verifying a rabbitmq cluster can be found here https://www.rabbitmq.com/clustering.html
5
+
6
+ with_cluster_instances(node) do |cluster_instances|
7
+ cluster_instances.each do |chef_environment, instances|
8
+ with_chef_environment chef_environment do
9
+
10
+ search_role = 'rabbitmq_server'
11
+
12
+ run_list_query = /role\[#{search_role}\]/
13
+
14
+ rabbitmq_instances = instances.select do |name, cfg|
15
+ if cfg[:instance_config] && cfg[:instance_config][:run_list] && cfg[:instance_config][:run_list].index { |s| s =~ run_list_query }
16
+ tmp_run_list = []
17
+ tmp_run_list << cfg[:instance_config][:run_list][cfg[:instance_config][:run_list].index { |s| s =~ run_list_query }]
18
+ cfg[:instance_config][:tmp_run_list] = tmp_run_list
19
+ true
20
+ else
21
+ false
22
+ end
23
+ end
24
+
25
+ # It always take 2 provisions for rabbitmq to be working in a clustered setup
26
+ #
27
+ # 1. install rabbit and update chef server
28
+ # 2. configure rabbit configs with all the other nodes and setup cluster
29
+
30
+ batch_provisions = 2
31
+ batch_provisions.times do |index|
32
+ machine_batch "rabbitmq_reset_cluster: Batch Provison #{index + 1}/#{batch_provisions}" do
33
+ rabbitmq_instances.each do |name, cfg|
34
+ machine name do
35
+ chef_environment chef_environment
36
+ machine_options(cfg[:machine_options])
37
+ run_list cfg[:instance_config][:tmp_run_list]
38
+ converge true
39
+ end
40
+ end
41
+ end
42
+ end
43
+
44
+ rabbitmq_instances.each do |name, cfg|
45
+ machine_execute 'sudo rabbitmqctl stop_app' do
46
+ machine name
47
+ end
48
+
49
+ machine_execute 'sudo rabbitmqctl reset' do
50
+ machine name
51
+ end
52
+
53
+ machine_execute 'sudo rabbitmqctl start_app' do
54
+ machine name
55
+ end
56
+ end
57
+
58
+ machine_batch "rabbitmq_reset_cluster: Batch Provison 1/1" do
59
+ rabbitmq_instances.each do |name, cfg|
60
+ machine name do
61
+ chef_environment chef_environment
62
+ machine_options(cfg[:machine_options])
63
+ run_list cfg[:instance_config][:tmp_run_list]
64
+ converge true
65
+ end
66
+ end
67
+ end
68
+
69
+ end
70
+ end
71
+ end
@@ -1,24 +1,18 @@
1
1
  include_recipe 'provision::common'
2
2
  include_recipe "provision::#{node['driver']}"
3
3
 
4
- cluster_config = cluster_config_for(node)
5
- org_name = cluster_config[:id]
4
+ with_cluster_instances(node) do |cluster_instances|
5
+ cluster_instances.each do |chef_environment, instances|
6
+ with_chef_environment chef_environment do
6
7
 
7
- cluster_config[:environments].each do |env, env_config|
8
- chef_environment = fh_name_for(org_name, env)
8
+ instances.each do |name, cfg|
9
9
 
10
- nodes = search(:node, "chef_environment:#{chef_environment}")
11
-
12
- with_chef_environment chef_environment do
13
-
14
- nodes.each do |n|
15
- machine_execute 'sudo fhctl restart' do
16
- live_stream true
17
- machine n.name
18
- only_if {n.recipes.include? 'feedhenry_common::fhctl'}
10
+ machine_execute 'sudo fhctl restart' do
11
+ live_stream true
12
+ machine name
13
+ end
19
14
  end
20
- end
21
15
 
16
+ end
22
17
  end
23
-
24
18
  end
@@ -16,19 +16,20 @@ cluster_config[:environments].each do |env, env_config|
16
16
  with_chef_environment chef_environment do
17
17
 
18
18
  nodes.each do |n|
19
- machine_execute "Seed #{target_dir}/cookbooks" do
19
+ machine_execute "#{n.name} seed #{target_dir}/cookbooks" do
20
20
  command "sudo tar -xvzf #{local_archive} -C #{target_dir} --keep-old-files"
21
21
  live_stream false
22
22
  machine n.name
23
23
  action :nothing
24
24
  end
25
25
 
26
- machine_file local_archive do
26
+ machine_file "#{n.name} #{local_archive}" do
27
+ path local_archive
27
28
  machine n.name
28
29
  local_path node[:local_cookbook_archive]
29
30
  action :upload
30
31
  only_if { node[:local_cookbook_archive]}
31
- notifies :run, "machine_execute[Seed #{target_dir}/cookbooks]", :immediately
32
+ notifies :run, "machine_execute[#{n.name} seed #{target_dir}/cookbooks]", :immediately
32
33
  end
33
34
 
34
35
  end
data/lib/fhcap/cluster.rb CHANGED
@@ -113,6 +113,10 @@ module Fhcap
113
113
 
114
114
  method_option 'name', :type => :string, :required => true, :desc => 'Cluster name'
115
115
  method_option 'run-list', :type => :array, :required => true, :desc => 'Chef Provisioning Run List i.e provision::cluster_provision'
116
+ chef_provision_steps = %w{server-bootstrap}
117
+ chef_provision_steps.each do |step|
118
+ method_option :"skip-#{step}", :type => :boolean, :default => false, :desc => "Skip #{step}"
119
+ end
116
120
 
117
121
  def chef_provision
118
122
  require 'fhcap/tasks/cluster/chef_provisioning_task'
@@ -56,12 +56,15 @@ module Fhcap
56
56
  local_repo = repo_dir(@chef_repo)
57
57
  thor.say "[Chef Zero Server] - Syncing nodes from #{local_repo}"
58
58
  knife_upload(local_repo, @chef_server, ['/nodes'])
59
+ knife_upload(local_repo, @chef_server, ['/data_bags/aws_*'])
59
60
  begin
60
61
  block.call
61
62
  ensure
62
63
  thor.say "[Chef Zero Server] - Syncing nodes to #{local_repo}"
63
64
  FileUtils.rm_rf(File.join(local_repo, 'nodes'))
65
+ FileUtils.rm_rf Dir.glob(File.join(local_repo, 'data_bags/aws_*'))
64
66
  knife_download(local_repo, @chef_server, ['/nodes'])
67
+ knife_download(local_repo, @chef_server, ['/data_bags/aws_*'])
65
68
  end
66
69
  end
67
70
 
@@ -15,8 +15,8 @@ module Fhcap
15
15
  "fh-supercore" => "fh-supercore/config/dev.json",
16
16
  "fh-docs" => ["fh-docs/config/development.json", "fh-docs/config/config.json"],
17
17
  "fh-doxy" => "fh-doxy/config/dev.json",
18
- "fh-messaging" => "fh-messaging/fh-messaging/config/conf.json",
19
- "fh-metrics" => "fh-messaging/fh-metrics/config/conf.json",
18
+ "fh-messaging" => "fh-messaging/fh-messaging/config/dev.json",
19
+ "fh-metrics" => "fh-messaging/fh-metrics/config/dev.json",
20
20
  "fh-ditch" => "fh-ditch/config/dev.json",
21
21
  "fh-scm" => "fh-scm/config/dev.json",
22
22
  "fh-stats" => "fh-stats/fh-statsd/config/dev.json",
@@ -1,5 +1,6 @@
1
1
  require 'fhcap/tasks/chef/chef_task_base'
2
2
  require 'fhcap/dummy_node'
3
+ require 'erubis'
3
4
 
4
5
  module Fhcap
5
6
  module Tasks
@@ -15,9 +15,8 @@ module Fhcap
15
15
 
16
16
  unless options[:'skip-provision']
17
17
  seed_cookbooks if local_chef_server?
18
+ do_chef_run("provision::post_create_instances")
18
19
  do_chef_run("provision::cluster_provision")
19
- do_chef_run("provision::reset_rabbitmq")
20
- do_chef_run("provision::restart_services")
21
20
  end
22
21
  end
23
22
  end
@@ -9,7 +9,7 @@ module Fhcap
9
9
  def run
10
10
  thor.say "Chef::Provisioning::Provision #{@name}", :yellow
11
11
  with_chef_server do
12
- seed_cookbooks if local_chef_server?
12
+ #seed_cookbooks if local_chef_server?
13
13
  do_chef_run("provision::cluster_provision")
14
14
  end
15
15
  end
@@ -1,4 +1,5 @@
1
1
  require 'fhcap/tasks/cluster/cluster_task_base'
2
+ require 'fhcap/tasks/chef/server/bootstrap'
2
3
  require 'fhcap/tasks/chef/provisioning/chef_provisioning_task'
3
4
 
4
5
  module Fhcap
@@ -7,6 +8,7 @@ module Fhcap
7
8
  class ChefProvisioningTask < ClusterTaskBase
8
9
 
9
10
  def run
11
+ Chef::Server::Bootstrap.new(@options.dup.merge({:environments => cluster_environments}.merge(chef_task_options))).run unless options[:'skip-server-bootstrap']
10
12
  Tasks::Chef::Provisioning::ChefProvisioningTask.new(@options.dup.merge(chef_task_options)).run
11
13
  end
12
14
 
@@ -84,6 +84,7 @@ module Fhcap
84
84
  options: {:limited_to => repo_names}
85
85
  },
86
86
  domain: {
87
+ msg: "Base domain/hostname (e.g. foo.skunkhenry.com) for this cluster?",
87
88
  },
88
89
  chef_server: {
89
90
  options: {:limited_to => chef_server_names}
@@ -103,7 +104,9 @@ module Fhcap
103
104
  region: {
104
105
  options: {:limited_to => aws_regions.keys.collect { |k| k.to_s }}
105
106
  },
106
- cidr: {}
107
+ cidr: {
108
+ msg: "CIDR block for AWS VPC (e.g. 10.123.0.0/16)?",
109
+ }
107
110
  }
108
111
  end
109
112
 
@@ -241,4 +244,4 @@ module Fhcap
241
244
  end
242
245
  end
243
246
  end
244
- end
247
+ end
@@ -160,6 +160,8 @@ module Fhcap
160
160
  'mbaas'
161
161
  when /single/
162
162
  'single'
163
+ when /farm/
164
+ 'farm'
163
165
  else
164
166
  'empty'
165
167
  end
data/lib/fhcap/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Fhcap
2
- VERSION = "0.4.3"
2
+ VERSION = "0.4.4"
3
3
  end
data/lib/fhcap.rb CHANGED
@@ -3,7 +3,7 @@ require "pathname"
3
3
 
4
4
  module Fhcap
5
5
  GEM_DIR = File.expand_path '..', File.dirname(__FILE__)
6
- TEMPLATE_NAMES = %w{single core-3node mbaas-3node core-mbaas-6node core-small-9node nginx-test single-blank}.sort
6
+ TEMPLATE_NAMES = %w{single core-3node mbaas-3node core-mbaas-6node core-small-9node nginx-test single-blank farm-3node farm-single}.sort
7
7
 
8
8
  class << self
9
9
  def source_root
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+ require "fhcap/tasks/chef/cookbook/update_metadata"
3
+
4
+ describe Fhcap::Tasks::Chef::Cookbook::UpdateMetadata do
5
+
6
+ subject {
7
+ Fhcap::Tasks::Chef::Cookbook::UpdateMetadata.new(options)
8
+ }
9
+
10
+ let(:thor) do
11
+ DummyThor.new
12
+ end
13
+
14
+ let(:config) do
15
+ {}
16
+ end
17
+
18
+ let(:options) do
19
+ {
20
+ :config => config,
21
+ :thor => thor,
22
+ :cookbook => 'testname'
23
+ }
24
+ end
25
+
26
+ describe "#initialize" do
27
+ specify { expect(subject.name).to eq('testname') }
28
+ end
29
+
30
+ end
@@ -2,6 +2,7 @@
2
2
  require 'securerandom'
3
3
 
4
4
  @passwords = {}
5
+ @keys = {}
5
6
 
6
7
  def random_password(name)
7
8
  unless @passwords[name]
@@ -9,6 +10,14 @@ def random_password(name)
9
10
  end
10
11
  @passwords[name]
11
12
  end
13
+
14
+ def random_key(name)
15
+ unless @keys[name]
16
+ @keys[name] = SecureRandom.urlsafe_base64(16)
17
+ end
18
+ @keys[name]
19
+
20
+ end
12
21
  -%>
13
22
  {
14
23
  "name": "<%= config[:name] %>",
@@ -20,7 +29,15 @@ end
20
29
  "default_attributes": {
21
30
  "apache2": {
22
31
  "buildfarm": {
23
- "url": "e103-stg-digman-01.feedhenry.net"
32
+ "android": {
33
+ "url": "qed1-builder.feedhenry.net"
34
+ },
35
+ "windowsphone": {
36
+ "url": "e103-stg-digman-01.feedhenry.net"
37
+ },
38
+ "ios": {
39
+ "url": "e103-stg-digman-01.feedhenry.net"
40
+ }
24
41
  }
25
42
  },
26
43
  "apache2_feedhenry": {
@@ -70,6 +87,7 @@ end
70
87
  },
71
88
  "fh-messaging": {
72
89
  "conf": {
90
+ "msgAPIKey": "<%=random_key('fh-messaging')%>",
73
91
  "database": {
74
92
  "auth": {
75
93
  "user": "u-messaging",
@@ -85,6 +103,7 @@ end
85
103
  "fh-metrics": {
86
104
  "conf": {
87
105
  "metrics": {
106
+ "metricsAPIKey": "<%=random_key('fh-metrics')%>",
88
107
  "database": {
89
108
  "auth": {
90
109
  "user": "u-messaging",
@@ -97,6 +116,12 @@ end
97
116
  "fh-supercore": {
98
117
  "conf": {
99
118
  "fhsupercore": {
119
+ "fhmetrics":{
120
+ "apikey":"<%=random_key('fh-metrics')%>"
121
+ },
122
+ "fhmessaging":{
123
+ "apikey":"<%=random_key('fh-messaging')%>"
124
+ },
100
125
  "database": {
101
126
  "auth": {
102
127
  "user": "u-supercore",
@@ -118,13 +143,9 @@ end
118
143
  }
119
144
  },
120
145
  "digger": {
121
- "callbackhost": "127.0.0.1",
122
146
  "polling": {
123
147
  "iphone": true,
124
148
  "android": true
125
- },
126
- "download": {
127
- "host": "e103-stg-digman-01.feedhenry.net"
128
149
  }
129
150
  },
130
151
  "ditch": {
@@ -186,6 +207,8 @@ end
186
207
  "studio-js-preview-default-device": "galaxy_s6",
187
208
  "studio-js-cloudresources-enabled": false,
188
209
  "studio-js-admin-environments-mbaases-ui": true,
210
+ "studio-protocol": "http",
211
+ "millicore.protocol": "http",
189
212
  "studio": {
190
213
  "version": {
191
214
  "option": {
@@ -0,0 +1,60 @@
1
+ <%-
2
+ require 'securerandom'
3
+
4
+ @passwords = {}
5
+
6
+ def random_password(name)
7
+ unless @passwords[name]
8
+ @passwords[name]= SecureRandom.urlsafe_base64(6)
9
+ end
10
+ @passwords[name]
11
+ end
12
+ -%>
13
+ {
14
+ "name": "<%= config[:name] %>",
15
+ "description": "<%= config[:name] %> Environment",
16
+ "cookbook_versions": {
17
+ },
18
+ "json_class": "Chef::Environment",
19
+ "chef_type": "environment",
20
+ "default_attributes": {
21
+ "apache2_feedhenry": {
22
+ "ops_proxy": {
23
+ "enabled": false
24
+ }
25
+ },
26
+ "feedhenry_common": {
27
+ "backups": {
28
+ "enabled": false
29
+ },
30
+ "domain": "<%= config[:domain] %>",
31
+ "baseurl": "<%= config[:name] %>.<%= config[:domain] %>",
32
+ "manage": {
33
+ "denyhosts": false
34
+ },
35
+ "notifications": {
36
+ "enabled": false,
37
+ "email": "root"
38
+ }
39
+ },
40
+ "nagios": {
41
+ "services_databag": "nagios_services,nagios_services_<%= config[:name].gsub('-', '_') %>",
42
+ "contacts_databag": "nagios_contacts",
43
+ "notifications_enabled": 0
44
+ }
45
+ },
46
+ "override_attributes": {
47
+ "authorization": {
48
+ "sudo": {
49
+ "passwordless": true
50
+ }
51
+ },
52
+ "denyhosts": {
53
+ "allowed_hosts": [],
54
+ "config": {
55
+ "admin_email": "",
56
+ "block_service": ""
57
+ }
58
+ }
59
+ }
60
+ }
@@ -2,13 +2,21 @@
2
2
  require 'securerandom'
3
3
 
4
4
  @passwords = {}
5
-
5
+ @keys = {}
6
6
  def random_password(name)
7
7
  unless @passwords[name]
8
8
  @passwords[name]= SecureRandom.urlsafe_base64(6)
9
9
  end
10
10
  @passwords[name]
11
11
  end
12
+
13
+ def random_key(name)
14
+ unless @keys[name]
15
+ @keys[name] = SecureRandom.urlsafe_base64(16)
16
+ end
17
+ @keys[name]
18
+
19
+ end
12
20
  -%>
13
21
  {
14
22
  "name": "<%= config[:name] %>",
@@ -62,9 +70,27 @@ end
62
70
  "dynofarm": "https://api.<%= config[:domain] %>",
63
71
  "username": "df-<%= config[:name] %>",
64
72
  "_password": "<%= random_password('fh-proxy') %>"
73
+ },
74
+ "fhmetrics":{
75
+ "apikey": "<%=random_key('fh-metrics')%>"
76
+ },
77
+ "fhmessaging":{
78
+ "apikey": "<%=random_key('fh-messaging')%>"
65
79
  }
66
80
  }
67
81
  },
82
+ "fh-metrics":{
83
+ "conf":{
84
+ "metrics": {
85
+ "metricsAPIKey": "<%=random_key('fh-metrics')%>"
86
+ }
87
+ }
88
+ },
89
+ "fh-messaging":{
90
+ "conf":{
91
+ "msgAPIKey": "<%=random_key('fh-messaging')%>"
92
+ }
93
+ },
68
94
  "fh-proxy": {
69
95
  "conf": {
70
96
  "fhproxy": {
@@ -20,7 +20,15 @@ end
20
20
  "default_attributes": {
21
21
  "apache2": {
22
22
  "buildfarm": {
23
- "url": "e103-stg-digman-01.feedhenry.net"
23
+ "android": {
24
+ "url": "qed1-builder.feedhenry.net"
25
+ },
26
+ "windowsphone": {
27
+ "url": "e103-stg-digman-01.feedhenry.net"
28
+ },
29
+ "ios": {
30
+ "url": "e103-stg-digman-01.feedhenry.net"
31
+ }
24
32
  }
25
33
  },
26
34
  "apache2_feedhenry": {
@@ -175,13 +183,9 @@ end
175
183
  }
176
184
  },
177
185
  "digger": {
178
- "callbackhost": "127.0.0.1",
179
186
  "polling": {
180
187
  "iphone": true,
181
188
  "android": true
182
- },
183
- "download": {
184
- "host": "e103-stg-digman-01.feedhenry.net"
185
189
  }
186
190
  },
187
191
  "ditch": {
@@ -0,0 +1,104 @@
1
+ {
2
+ "domain": "<%= config[:domain] %>",
3
+ "subnets": {
4
+ "1a": {
5
+ "cidr": "0/26",
6
+ "availability_zone": "1a"
7
+ },
8
+ "1b": {
9
+ "cidr": "64/26",
10
+ "availability_zone": "1b"
11
+ },
12
+ "1c": {
13
+ "cidr": "128/26",
14
+ "availability_zone": "1c"
15
+ }
16
+ },
17
+ "security_groups": {
18
+ "<%= config[:environment_name] %>-ssh": {
19
+ "authorize_ingress": [
20
+ {
21
+ "protocols": ["tcp"],
22
+ "start": 22,
23
+ "end": 22,
24
+ "sources": ["0.0.0.0/0"]
25
+ }
26
+ ]
27
+ },
28
+ "<%= config[:environment_name] %>-builder-lb": {
29
+ "authorize_ingress": [
30
+ {
31
+ "protocols": ["tcp"],
32
+ "start": 443,
33
+ "end": 443,
34
+ "sources": ["0.0.0.0/0"]
35
+ }
36
+ ]
37
+ },
38
+ "<%= config[:environment_name] %>": {
39
+ "authorize_ingress": [
40
+ {
41
+ "protocols": ["all"],
42
+ "start": 0,
43
+ "end": 65535,
44
+ "groups": ["<%= config[:environment_name] %>"]
45
+ },
46
+ {
47
+ "protocols": ["icmp"],
48
+ "start": -1,
49
+ "end": -1,
50
+ "groups": ["<%= config[:environment_name] %>"]
51
+ },
52
+ {
53
+ "protocols": ["tcp"],
54
+ "start": 80,
55
+ "end": 80,
56
+ "groups": ["<%= config[:environment_name] %>-builder-lb"]
57
+ }
58
+ ]
59
+ }
60
+ },
61
+ "load_balancers": {
62
+ "digman": {
63
+ "security_groups": ["<%= config[:environment_name] %>-builder-lb"],
64
+ "subnets": ["1a", "1b", "1c"],
65
+ "scheme": "internet-facing",
66
+ "listeners": [
67
+ {
68
+ "port": 80,
69
+ "protocol": "http",
70
+ "instance_port": 80,
71
+ "instance_protocol": "http"
72
+ }
73
+ ]
74
+ }
75
+ },
76
+ "instances": {
77
+ "linux1": {
78
+ "aws": {
79
+ "security_groups": ["ops-admin", "<%= config[:environment_name] %>", "<%= config[:environment_name] %>-ssh"],
80
+ "private_ip_address": "",
81
+ "subnet": "1a"
82
+ },
83
+ "load_balancers": [],
84
+ "run_list": ["role[mount_data_volumes]", "role[fh-digger]", "recipe[feedhenry_common::fhctl]"]
85
+ },
86
+ "digman1": {
87
+ "aws": {
88
+ "security_groups": ["ops-admin", "<%= config[:environment_name] %>", "<%= config[:environment_name] %>-ssh"],
89
+ "private_ip_address": "",
90
+ "subnet": "1b"
91
+ },
92
+ "load_balancers": ["digman"],
93
+ "run_list": ["role[fh-digman]"]
94
+ },
95
+ "mgt1": {
96
+ "aws": {
97
+ "security_groups": ["ops-admin", "<%= config[:environment_name] %>", "<%= config[:environment_name] %>-ssh"],
98
+ "private_ip_address": "",
99
+ "subnet": "1c"
100
+ },
101
+ "run_list": ["role[management_server]"]
102
+ }
103
+ }
104
+ }
@@ -0,0 +1,87 @@
1
+ {
2
+ "domain": "<%= config[:domain] %>",
3
+ "subnets": {
4
+ "1a": {
5
+ "cidr": "0/26",
6
+ "availability_zone": "1a"
7
+ },
8
+ "1b": {
9
+ "cidr": "64/26",
10
+ "availability_zone": "1b"
11
+ },
12
+ "1c": {
13
+ "cidr": "128/26",
14
+ "availability_zone": "1c"
15
+ }
16
+ },
17
+ "security_groups": {
18
+ "<%= config[:environment_name] %>-ssh": {
19
+ "authorize_ingress": [
20
+ {
21
+ "protocols": ["tcp"],
22
+ "start": 22,
23
+ "end": 22,
24
+ "sources": ["0.0.0.0/0"]
25
+ }
26
+ ]
27
+ },
28
+ "<%= config[:environment_name] %>-builder-lb": {
29
+ "authorize_ingress": [
30
+ {
31
+ "protocols": ["tcp"],
32
+ "start": 443,
33
+ "end": 443,
34
+ "sources": ["0.0.0.0/0"]
35
+ }
36
+ ]
37
+ },
38
+ "<%= config[:environment_name] %>": {
39
+ "authorize_ingress": [
40
+ {
41
+ "protocols": ["all"],
42
+ "start": 0,
43
+ "end": 65535,
44
+ "groups": ["<%= config[:environment_name] %>"]
45
+ },
46
+ {
47
+ "protocols": ["icmp"],
48
+ "start": -1,
49
+ "end": -1,
50
+ "groups": ["<%= config[:environment_name] %>"]
51
+ },
52
+ {
53
+ "protocols": ["tcp"],
54
+ "start": 80,
55
+ "end": 80,
56
+ "groups": ["<%= config[:environment_name] %>-builder-lb"]
57
+ }
58
+ ]
59
+ }
60
+ },
61
+ "load_balancers": {
62
+ "digman": {
63
+ "security_groups": ["<%= config[:environment_name] %>-builder-lb"],
64
+ "subnets": ["1a", "1b", "1c"],
65
+ "scheme": "internet-facing",
66
+ "listeners": [
67
+ {
68
+ "port": 80,
69
+ "protocol": "http",
70
+ "instance_port": 80,
71
+ "instance_protocol": "http"
72
+ }
73
+ ]
74
+ }
75
+ },
76
+ "instances": {
77
+ "linux1": {
78
+ "aws": {
79
+ "security_groups": ["ops-admin", "<%= config[:environment_name] %>", "<%= config[:environment_name] %>-ssh"],
80
+ "private_ip_address": "",
81
+ "subnet": "1a"
82
+ },
83
+ "load_balancers": ["digman"],
84
+ "run_list": ["role[mount_data_volumes]", "role[fh-digger]", "role[fh-digman]", "role[management_server]", "recipe[feedhenry_common::fhctl]"]
85
+ }
86
+ }
87
+ }
@@ -92,7 +92,7 @@
92
92
  "subnet": "1a"
93
93
  },
94
94
  "load_balancers": ["api"],
95
- "run_list": ["role[mount_data_volumes]", "role[mongo_server]", "role[dyno_server]", "role[fh-ditch]", "recipe[feedhenry_common::fhctl]"]
95
+ "run_list": ["role[mount_data_volumes]", "role[mongo_server]", "role[rabbitmq_server]", "role[dyno_server]", "role[fh-ditch]", "recipe[feedhenry_common::fhctl]"]
96
96
  },
97
97
  "ship2": {
98
98
  "aws": {
@@ -101,7 +101,7 @@
101
101
  "subnet": "1b"
102
102
  },
103
103
  "load_balancers": ["api"],
104
- "run_list": ["role[mount_data_volumes]", "role[mongo_server]", "role[dyno_server]", "role[fh-ditch]", "recipe[feedhenry_common::fhctl]"]
104
+ "run_list": ["role[mount_data_volumes]", "role[mongo_server]", "role[rabbitmq_server]", "role[dyno_server]", "role[fh-ditch]", "recipe[feedhenry_common::fhctl]"]
105
105
  },
106
106
  "mgt1": {
107
107
  "aws": {
@@ -0,0 +1,8 @@
1
+ {
2
+ "environments": [
3
+ {
4
+ "name": "farm",
5
+ "template": "farm-3node"
6
+ }
7
+ ]
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "environments": [
3
+ {
4
+ "name": "farm",
5
+ "template": "farm-single"
6
+ }
7
+ ]
8
+ }
@@ -2,13 +2,13 @@
2
2
  "domain": "<%= config[:domain] %>",
3
3
  "instances": {
4
4
  "node1": {
5
- "run_list": ["role[platform_mongo_server]", "role[rabbitmq_server]", "role[app_server]", "role[fh-scm]", "role[fh-messaging]", "role[fh-metrics]", "role[fh-stats]", "recipe[feedhenry_common::fhctl]"]
5
+ "run_list": ["role[platform_mongo_server]", "role[rabbitmq_server]", "role[galera_server]", "role[app_server]", "role[fh-scm]", "role[fh-messaging]", "role[fh-metrics]", "role[fh-stats]", "recipe[feedhenry_common::fhctl]"]
6
6
  },
7
7
  "node2": {
8
- "run_list": ["role[platform_mongo_server]", "role[rabbitmq_server]", "role[app_server]", "role[fh-scm]", "role[fh-messaging]", "role[fh-metrics]", "recipe[feedhenry_common::fhctl]"]
8
+ "run_list": ["role[platform_mongo_server]", "role[rabbitmq_server]", "role[galera_server]", "role[app_server]", "role[fh-scm]", "role[fh-messaging]", "role[fh-metrics]", "recipe[feedhenry_common::fhctl]"]
9
9
  },
10
10
  "mgt1": {
11
- "run_list": ["role[platform_mongo_server]", "role[mysql_server]", "role[gitlab-shell_server]", "role[management_server]", "recipe[feedhenry_common::fhctl]", "recipe[nginx_feedhenry::loadbalancer]"]
11
+ "run_list": ["role[platform_mongo_server]", "role[gitlab-shell_server]", "role[management_server]", "recipe[feedhenry_common::fhctl]", "recipe[nginx_feedhenry::loadbalancer]"]
12
12
  }
13
13
  }
14
14
  }
@@ -0,0 +1,14 @@
1
+ {
2
+ "domain": "<%= config[:domain] %>",
3
+ "instances": {
4
+ "linux1": {
5
+ "run_list": ["role[fh-digger]", "recipe[feedhenry_common::fhctl]"]
6
+ },
7
+ "digman1": {
8
+ "run_list": ["role[fh-digman]"]
9
+ },
10
+ "mgt1": {
11
+ "run_list": ["role[management_server]"]
12
+ }
13
+ }
14
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "domain": "<%= config[:domain] %>",
3
+ "instances": {
4
+ "linux1": {
5
+ "run_list": ["role[fh-digger]", "role[fh-digman]", "role[management_server]", "recipe[feedhenry_common::fhctl]"]
6
+ }
7
+ }
8
+ }
@@ -2,13 +2,13 @@
2
2
  "domain": "<%= config[:domain] %>",
3
3
  "instances": {
4
4
  "ship1": {
5
- "run_list": ["role[mongo_server]", "role[dyno_server]", "role[fh-ditch]", "recipe[feedhenry_common::fhctl]"]
5
+ "run_list": ["role[mongo_server]", "role[rabbitmq_server]", "role[dyno_server]", "role[fh-ditch]", "recipe[feedhenry_common::fhctl]"]
6
6
  },
7
7
  "ship2": {
8
- "run_list": ["role[mongo_server]", "role[dyno_server]", "role[fh-ditch]", "recipe[feedhenry_common::fhctl]"]
8
+ "run_list": ["role[mongo_server]", "role[rabbitmq_server]", "role[dyno_server]", "role[fh-ditch]", "recipe[feedhenry_common::fhctl]"]
9
9
  },
10
10
  "mgt1": {
11
- "run_list": ["role[platform_mongo_server]", "role[mongo_server]", "role[fh-stats]", "role[management_server]", "recipe[nginx_feedhenry::loadbalancer]"]
11
+ "run_list": ["role[mongo_server]", "role[fh-stats]", "role[management_server]", "recipe[nginx_feedhenry::loadbalancer]"]
12
12
  }
13
13
  }
14
14
  }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fhcap-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.3
4
+ version: 0.4.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Nairn
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-12-04 00:00:00.000000000 Z
11
+ date: 2016-01-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - '='
53
53
  - !ruby/object:Gem::Version
54
54
  version: 1.5.2
55
+ - !ruby/object:Gem::Dependency
56
+ name: erubis
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '='
60
+ - !ruby/object:Gem::Version
61
+ version: 2.7.0
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '='
67
+ - !ruby/object:Gem::Version
68
+ version: 2.7.0
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: launchy
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -365,10 +379,13 @@ files:
365
379
  - lib/cookbooks/provision/recipes/cluster_status.rb
366
380
  - lib/cookbooks/provision/recipes/common.rb
367
381
  - lib/cookbooks/provision/recipes/default.rb
382
+ - lib/cookbooks/provision/recipes/galera_reset_cluster.rb
383
+ - lib/cookbooks/provision/recipes/mongo_reset_cluster.rb
368
384
  - lib/cookbooks/provision/recipes/openstack.rb
369
385
  - lib/cookbooks/provision/recipes/openstack_cluster_create.rb
370
386
  - lib/cookbooks/provision/recipes/openstack_cluster_destroy.rb
371
- - lib/cookbooks/provision/recipes/reset_rabbitmq.rb
387
+ - lib/cookbooks/provision/recipes/post_create_instances.rb
388
+ - lib/cookbooks/provision/recipes/rabbitmq_reset_cluster.rb
372
389
  - lib/cookbooks/provision/recipes/restart_services.rb
373
390
  - lib/cookbooks/provision/recipes/seed_cookbooks.rb
374
391
  - lib/extensions/chef/provisioning.rb
@@ -455,6 +472,7 @@ files:
455
472
  - spec/fhcap/tasks/chef/cookbook/list_artifacts_spec.rb
456
473
  - spec/fhcap/tasks/chef/cookbook/update_artifact_spec.rb
457
474
  - spec/fhcap/tasks/chef/cookbook/update_config_spec.rb
475
+ - spec/fhcap/tasks/chef/cookbook/update_metadata_spec.rb
458
476
  - spec/fhcap/tasks/cluster/create_spec.rb
459
477
  - spec/fhcap/tasks/dns/create_record_spec.rb
460
478
  - spec/fhcap/tasks/dns/delete_record_spec.rb
@@ -473,11 +491,14 @@ files:
473
491
  - templates/chef/cookbook/metadata.erb
474
492
  - templates/chef/environment_core.json.erb
475
493
  - templates/chef/environment_empty.json.erb
494
+ - templates/chef/environment_farm.json.erb
476
495
  - templates/chef/environment_mbaas.json.erb
477
496
  - templates/chef/environment_single.json.erb
478
497
  - templates/cluster/aws/common.json.erb
479
498
  - templates/cluster/aws/core-3node.json.erb
480
499
  - templates/cluster/aws/core-small-9node.json.erb
500
+ - templates/cluster/aws/farm-3node.json.erb
501
+ - templates/cluster/aws/farm-single.json.erb
481
502
  - templates/cluster/aws/mbaas-3node.json.erb
482
503
  - templates/cluster/aws/nginx-test.json.erb
483
504
  - templates/cluster/aws/single-blank.json.erb
@@ -485,11 +506,15 @@ files:
485
506
  - templates/cluster/core-3node.json.erb
486
507
  - templates/cluster/core-mbaas-6node.json.erb
487
508
  - templates/cluster/core-small-9node.json.erb
509
+ - templates/cluster/farm-3node.json.erb
510
+ - templates/cluster/farm-single.json.erb
488
511
  - templates/cluster/mbaas-3node.json.erb
489
512
  - templates/cluster/nginx-test.json.erb
490
513
  - templates/cluster/openstack/common.json.erb
491
514
  - templates/cluster/openstack/core-3node.json.erb
492
515
  - templates/cluster/openstack/core-small-9node.json.erb
516
+ - templates/cluster/openstack/farm-3node.json.erb
517
+ - templates/cluster/openstack/farm-single.json.erb
493
518
  - templates/cluster/openstack/mbaas-3node.json.erb
494
519
  - templates/cluster/openstack/nginx-test.json.erb
495
520
  - templates/cluster/openstack/single-blank.json.erb
@@ -532,6 +557,7 @@ test_files:
532
557
  - spec/fhcap/tasks/chef/cookbook/list_artifacts_spec.rb
533
558
  - spec/fhcap/tasks/chef/cookbook/update_artifact_spec.rb
534
559
  - spec/fhcap/tasks/chef/cookbook/update_config_spec.rb
560
+ - spec/fhcap/tasks/chef/cookbook/update_metadata_spec.rb
535
561
  - spec/fhcap/tasks/cluster/create_spec.rb
536
562
  - spec/fhcap/tasks/dns/create_record_spec.rb
537
563
  - spec/fhcap/tasks/dns/delete_record_spec.rb
@@ -1,58 +0,0 @@
1
- include_recipe 'provision::common'
2
- include_recipe "provision::#{node['driver']}"
3
-
4
- cluster_config = cluster_config_for(node)
5
- org_name = cluster_config[:id]
6
-
7
- def rabbit_reset_required?(nodes)
8
- # Need better logic to check whether or not a reset of rabbit is actually required
9
- nodes.length > 1
10
- end
11
-
12
- default_instance_options = cluster_config[:default_instance_options]
13
- cluster_config[:environments].each do |env, env_config|
14
- chef_environment = fh_name_for(org_name, env)
15
-
16
- instances = {}
17
- env_config[:instances].each do |instance_name, instance_config|
18
- instances[instance_name_for(org_name, env, instance_name)] = {}
19
- instances[instance_name_for(org_name, env, instance_name)][:instance_config] = instance_config
20
- instances[instance_name_for(org_name, env, instance_name)][:machine_options] = machine_options_for(cluster_config[:driver], org_name, env, default_instance_options.merge(instance_config[cluster_config[:driver].to_sym] || {}))
21
- end
22
-
23
- rabbit_nodes = search(:node, "chef_environment:#{chef_environment} AND roles:rabbitmq_server").map { |n| n.name }
24
-
25
- if rabbit_reset_required? rabbit_nodes
26
- with_chef_environment chef_environment do
27
-
28
- rabbit_nodes.each do |instance_name|
29
- machine_execute 'sudo rabbitmqctl stop_app' do
30
- machine instance_name
31
- end
32
-
33
- machine_execute 'sudo rabbitmqctl reset' do
34
- machine instance_name
35
- end
36
-
37
- machine_execute 'sudo rabbitmqctl start_app' do
38
- machine instance_name
39
- end
40
- end
41
-
42
- machine_batch do
43
- rabbit_nodes.each do |instance_name|
44
- machine_options = instances[instance_name][:machine_options]
45
- instance_config = instances[instance_name][:instance_config]
46
- machine instance_name do
47
- chef_environment chef_environment
48
- run_list instance_config[:run_list]
49
- machine_options(machine_options)
50
- end
51
- end
52
- end
53
-
54
- end
55
- else
56
- Chef::Log.info('Rabbitmq Reset not required!')
57
- end
58
- end