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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +10 -0
- data/fhcap-cli.gemspec +1 -0
- data/lib/cookbooks/provision/recipes/cluster_create_instances.rb +2 -1
- data/lib/cookbooks/provision/recipes/cluster_provision_instances.rb +2 -1
- data/lib/cookbooks/provision/recipes/galera_reset_cluster.rb +62 -0
- data/lib/cookbooks/provision/recipes/mongo_reset_cluster.rb +45 -0
- data/lib/cookbooks/provision/recipes/post_create_instances.rb +4 -0
- data/lib/cookbooks/provision/recipes/rabbitmq_reset_cluster.rb +71 -0
- data/lib/cookbooks/provision/recipes/restart_services.rb +9 -15
- data/lib/cookbooks/provision/recipes/seed_cookbooks.rb +4 -3
- data/lib/fhcap/cluster.rb +4 -0
- data/lib/fhcap/tasks/chef/chef_server_task.rb +3 -0
- data/lib/fhcap/tasks/chef/cookbook/update_config.rb +2 -2
- data/lib/fhcap/tasks/chef/cookbook/update_metadata.rb +1 -0
- data/lib/fhcap/tasks/chef/provisioning/create.rb +1 -2
- data/lib/fhcap/tasks/chef/provisioning/provision.rb +1 -1
- data/lib/fhcap/tasks/cluster/chef_provisioning_task.rb +2 -0
- data/lib/fhcap/tasks/cluster/create.rb +5 -2
- data/lib/fhcap/tasks/cluster/create_environment.rb +2 -0
- data/lib/fhcap/version.rb +1 -1
- data/lib/fhcap.rb +1 -1
- data/spec/fhcap/tasks/chef/cookbook/update_metadata_spec.rb +30 -0
- data/templates/chef/environment_core.json.erb +28 -5
- data/templates/chef/environment_farm.json.erb +60 -0
- data/templates/chef/environment_mbaas.json.erb +27 -1
- data/templates/chef/environment_single.json.erb +9 -5
- data/templates/cluster/aws/farm-3node.json.erb +104 -0
- data/templates/cluster/aws/farm-single.json.erb +87 -0
- data/templates/cluster/aws/mbaas-3node.json.erb +2 -2
- data/templates/cluster/farm-3node.json.erb +8 -0
- data/templates/cluster/farm-single.json.erb +8 -0
- data/templates/cluster/openstack/core-3node.json.erb +3 -3
- data/templates/cluster/openstack/farm-3node.json.erb +14 -0
- data/templates/cluster/openstack/farm-single.json.erb +8 -0
- data/templates/cluster/openstack/mbaas-3node.json.erb +3 -3
- metadata +29 -3
- 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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c70a588e2af142866f7769a2f1b8ee1a8cf669bf
|
4
|
+
data.tar.gz: 12ee618fb29f5376cddd76ccccd9334cb4315f58
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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,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
|
-
|
5
|
-
|
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
|
-
|
8
|
-
chef_environment = fh_name_for(org_name, env)
|
8
|
+
instances.each do |name, cfg|
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
|
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 "
|
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[
|
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/
|
19
|
-
"fh-metrics" => "fh-messaging/fh-metrics/config/
|
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",
|
@@ -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
|
@@ -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
|
data/lib/fhcap/version.rb
CHANGED
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
|
-
"
|
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
|
-
"
|
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": {
|
@@ -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[
|
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
|
+
}
|
@@ -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[
|
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.
|
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:
|
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/
|
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
|