fhcap-cli 0.4.9 → 0.4.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +13 -0
  3. data/Dockerfile +37 -0
  4. data/entrypoint.sh +11 -0
  5. data/fhcap-cli.gemspec +9 -4
  6. data/lib/cookbooks/provision/libraries/provision.rb +16 -2
  7. data/lib/cookbooks/provision/recipes/ssh.rb +25 -0
  8. data/lib/cookbooks/provision/recipes/ssh_cluster_create.rb +4 -0
  9. data/lib/cookbooks/provision/recipes/ssh_cluster_destroy.rb +4 -0
  10. data/lib/extensions/thor/actions.rb +33 -0
  11. data/lib/fhcap.rb +2 -2
  12. data/lib/fhcap/dns.rb +3 -3
  13. data/lib/fhcap/kitchen.rb +65 -16
  14. data/lib/fhcap/knife_helper.rb +1 -2
  15. data/lib/fhcap/providers_helper.rb +1 -0
  16. data/lib/fhcap/repos_helper.rb +1 -1
  17. data/lib/fhcap/tasks/chef/cookbook/update_config.rb +0 -1
  18. data/lib/fhcap/tasks/dns/aws/create_record.rb +81 -0
  19. data/lib/fhcap/tasks/dns/aws/delete_record.rb +57 -0
  20. data/lib/fhcap/tasks/dns/aws/list_records.rb +34 -0
  21. data/lib/fhcap/tasks/dns/{route53_helper.rb → aws/route53_helper.rb} +1 -1
  22. data/lib/fhcap/tasks/dns/create_record.rb +5 -67
  23. data/lib/fhcap/tasks/dns/delete_record.rb +5 -43
  24. data/lib/fhcap/tasks/dns/list_records.rb +25 -0
  25. data/lib/fhcap/thor_base.rb +5 -0
  26. data/lib/fhcap/version.rb +1 -1
  27. data/spec/fhcap/tasks/dns/{create_record_spec.rb → aws/create_record_spec.rb} +4 -4
  28. data/spec/fhcap/tasks/dns/{delete_record_spec.rb → aws/delete_record_spec.rb} +4 -4
  29. data/templates/chef/environment_mbaas.json.erb +32 -2
  30. data/templates/chef/environment_single.json.erb +8 -0
  31. data/templates/cluster/aws/farm-5node.json.erb +245 -0
  32. data/templates/cluster/farm-5node.json.erb +8 -0
  33. data/templates/cluster/openstack/farm-5node.json.erb +20 -0
  34. data/templates/kitchen/Dockerfile-rhel +23 -0
  35. data/templates/kitchen/Vagrantfile-osx.rb +10 -0
  36. data/templates/kitchen/docker_id_rsa +27 -0
  37. data/templates/kitchen/docker_id_rsa.pub +1 -0
  38. data/templates/kitchen/kitchen.aws.yml.erb +37 -14
  39. data/templates/kitchen/kitchen.docker.yml.erb +34 -1
  40. data/templates/kitchen/kitchen.vagrant.yml.erb +39 -3
  41. metadata +86 -14
  42. data/lib/fhcap/tasks/dns/list.rb +0 -37
@@ -13,7 +13,6 @@ module Fhcap
13
13
  "millicore" => "millicore/src/main/resources/config/cluster-config.properties",
14
14
  "fh-reaper" => "millicore/src/main/resources/config/reaper.properties",
15
15
  "fh-supercore" => "fh-supercore/config/dev.json",
16
- "fh-doxy" => "fh-doxy/config/dev.json",
17
16
  "fh-messaging" => "fh-messaging/fh-messaging/config/dev.json",
18
17
  "fh-metrics" => "fh-messaging/fh-metrics/config/dev.json",
19
18
  "fh-ditch" => "fh-ditch/config/dev.json",
@@ -0,0 +1,81 @@
1
+ require 'fhcap/tasks/task_base'
2
+ require 'fhcap/tasks/dns/aws/route53_helper'
3
+ require 'aws-sdk'
4
+
5
+ module Fhcap
6
+ module Tasks
7
+ module Dns
8
+ module Aws
9
+ class CreateRecord < TaskBase
10
+
11
+ include Fhcap::Route53Helper
12
+
13
+ attr_reader :domain, :ipaddress, :alias_target, :ttl
14
+
15
+ def initialize(options)
16
+ super
17
+ @domain = options[:domain]
18
+ @alias_target = options[:'alias-target']
19
+ @ipaddress = options[:ipaddress]
20
+ @ttl = options[:ttl] || 300
21
+ end
22
+
23
+ def run
24
+ thor.say "Dns::Aws::CreateRecord: name = #{domain}, ipaddress = #{ipaddress}, ttl = #{ttl}", :yellow
25
+
26
+ with_hosted_zone(domain) do |client, zone|
27
+ resp = client.list_resource_record_sets({
28
+ hosted_zone_id: zone.id,
29
+ start_record_name: domain,
30
+ start_record_type: "A",
31
+ max_items: 1
32
+ })
33
+ record_set = resp.resource_record_sets.reject { |z| !(z.name =~ /^#{domain}/) }.first
34
+ action = 'created'
35
+ if record_set
36
+ value = record_set.resource_records.map(&:value).join(',')
37
+ alias_target = record_set.alias_target.dns_name rescue nil
38
+ thor.say "Found existing record set, id: name: #{record_set.name}, type: #{record_set.type}, value: #{alias_target || value}\n"
39
+ action = 'updated'
40
+ return unless thor.yes? 'Do you want to update this DNS record? (y/n)'
41
+ end
42
+ change_request = {
43
+ :action => 'UPSERT',
44
+ :resource_record_set => {
45
+ :name => domain,
46
+ :type => "A"
47
+ }
48
+ }
49
+
50
+ if @alias_target
51
+ change_request[:resource_record_set].merge!(
52
+ {
53
+ alias_target: {
54
+ evaluate_target_health: false
55
+ }.merge!(@alias_target)
56
+ }
57
+ )
58
+ else
59
+ change_request[:resource_record_set].merge!(
60
+ {
61
+ :ttl => ttl,
62
+ :resource_records => [{:value => ipaddress}]
63
+ }
64
+ )
65
+ end
66
+
67
+ client.change_resource_record_sets({
68
+ :hosted_zone_id => zone.id,
69
+ :change_batch => {
70
+ :changes => [change_request]
71
+ }
72
+ })
73
+ thor.say "DNS record #{action} for #{domain}"
74
+ end
75
+ end
76
+
77
+ end
78
+ end
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,57 @@
1
+ require 'fhcap/tasks/task_base'
2
+ require 'fhcap/tasks/dns/aws/route53_helper'
3
+ require 'aws-sdk'
4
+
5
+ module Fhcap
6
+ module Tasks
7
+ module Dns
8
+ module Aws
9
+ class DeleteRecord < TaskBase
10
+
11
+ include Fhcap::Route53Helper
12
+
13
+ attr_reader :domain
14
+
15
+ def initialize(options)
16
+ super
17
+ @domain = options[:domain]
18
+ end
19
+
20
+ def run
21
+ thor.say "Dns::Aws::DeleteRecord: name = #{domain}", :yellow
22
+
23
+ with_hosted_zone(domain) do |client, zone|
24
+ resp = client.list_resource_record_sets({
25
+ hosted_zone_id: zone.id,
26
+ start_record_name: domain,
27
+ start_record_type: "A",
28
+ max_items: 1
29
+ })
30
+ record_set = resp.resource_record_sets.reject { |z| !(z.name =~ /^#{domain}/) }.first
31
+ if record_set
32
+ value = record_set.resource_records.map(&:value).join(',')
33
+ alias_target = record_set.alias_target.dns_name rescue nil
34
+ thor.say "Found existing record set, id: name: #{record_set.name}, type: #{record_set.type}, value: #{alias_target || value}\n"
35
+ change_request = {
36
+ :action => 'DELETE',
37
+ :resource_record_set => record_set
38
+ }
39
+
40
+ client.change_resource_record_sets({
41
+ :hosted_zone_id => zone.id,
42
+ :change_batch => {
43
+ :changes => [change_request]
44
+ }
45
+ })
46
+ thor.say "DNS record deleted for #{domain}"
47
+ else
48
+ thor.say "No record set found for #{domain}"
49
+ end
50
+ end
51
+ end
52
+
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,34 @@
1
+ require 'fhcap/tasks/task_base'
2
+ require 'fhcap/tasks/dns/aws/route53_helper'
3
+ require 'aws-sdk'
4
+
5
+ module Fhcap
6
+ module Tasks
7
+ module Dns
8
+ module Aws
9
+ class ListRecords < TaskBase
10
+
11
+ include Fhcap::Route53Helper
12
+
13
+ def run
14
+ records_data = []
15
+ provider_names_for('dns').each do |provider|
16
+ with_provider_client(provider) do |client|
17
+ resp = client.list_hosted_zones
18
+ resp.hosted_zones.each do |zone|
19
+ resp = client.list_resource_record_sets(hosted_zone_id: zone.id)
20
+ resp.resource_record_sets.each do |record_set|
21
+ value = record_set.resource_records.map(&:value).join(',')
22
+ alias_target = record_set.alias_target.dns_name rescue nil
23
+ records_data << table_row(record_set.name.gsub('\052', '*'), record_set.type, record_set.ttl, alias_target || value)
24
+ end
25
+ end
26
+ end
27
+ end
28
+ records_data
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -44,4 +44,4 @@ module Fhcap
44
44
  end
45
45
 
46
46
  end
47
- end
47
+ end
@@ -1,79 +1,17 @@
1
1
  require 'fhcap/tasks/task_base'
2
- require 'fhcap/tasks/dns/route53_helper'
3
- require 'aws-sdk'
2
+ require 'fhcap/providers_helper'
3
+ require 'fhcap/tasks/dns/aws/create_record'
4
4
 
5
5
  module Fhcap
6
6
  module Tasks
7
7
  module Dns
8
8
  class CreateRecord < TaskBase
9
9
 
10
- include Fhcap::Route53Helper
11
-
12
- attr_reader :domain, :ipaddress, :alias_target, :ttl
13
-
14
- def initialize(options)
15
- super
16
- @domain = options[:domain]
17
- @alias_target = options[:'alias-target']
18
- @ipaddress = options[:ipaddress]
19
- @ttl = options[:ttl] || 300
20
- end
21
-
22
- def run
23
- thor.say "Dns::CreateRecord: name = #{domain}, ipaddress = #{ipaddress}, ttl = #{ttl}", :yellow
24
-
25
- with_hosted_zone(domain) do |client, zone|
26
- resp = client.list_resource_record_sets({
27
- hosted_zone_id: zone.id,
28
- start_record_name: domain,
29
- start_record_type: "A",
30
- max_items: 1
31
- })
32
- record_set = resp.resource_record_sets.reject { |z| !(z.name =~ /^#{domain}/) }.first
33
- action = 'created'
34
- if record_set
35
- value = record_set.resource_records.map(&:value).join(',')
36
- alias_target = record_set.alias_target.dns_name rescue nil
37
- thor.say "Found existing record set, id: name: #{record_set.name}, type: #{record_set.type}, value: #{alias_target || value}\n"
38
- action = 'updated'
39
- return unless thor.yes? 'Do you want to update this DNS record? (y/n)'
40
- end
41
- change_request = {
42
- :action => 'UPSERT',
43
- :resource_record_set => {
44
- :name => domain,
45
- :type => "A"
46
- }
47
- }
48
-
49
- if @alias_target
50
- change_request[:resource_record_set].merge!(
51
- {
52
- alias_target: {
53
- evaluate_target_health: false
54
- }.merge!(@alias_target)
55
- }
56
- )
57
- else
58
- change_request[:resource_record_set].merge!(
59
- {
60
- :ttl => ttl,
61
- :resource_records => [{:value => ipaddress}]
62
- }
63
- )
64
- end
65
-
66
- client.change_resource_record_sets({
67
- :hosted_zone_id => zone.id,
68
- :change_batch => {
69
- :changes => [change_request]
70
- }
71
- })
72
- thor.say "DNS record #{action} for #{domain}"
73
- end
10
+ def run()
11
+ Tasks::Dns::Aws::CreateRecord.new(options).run
74
12
  end
75
13
 
76
14
  end
77
15
  end
78
16
  end
79
- end
17
+ end
@@ -1,55 +1,17 @@
1
1
  require 'fhcap/tasks/task_base'
2
- require 'fhcap/tasks/dns/route53_helper'
3
- require 'aws-sdk'
2
+ require 'fhcap/providers_helper'
3
+ require 'fhcap/tasks/dns/aws/delete_record'
4
4
 
5
5
  module Fhcap
6
6
  module Tasks
7
7
  module Dns
8
8
  class DeleteRecord < TaskBase
9
9
 
10
- include Fhcap::Route53Helper
11
-
12
- attr_reader :domain
13
-
14
- def initialize(options)
15
- super
16
- @domain = options[:domain]
17
- end
18
-
19
- def run
20
- thor.say "Dns::DeleteRecord: name = #{domain}", :yellow
21
-
22
- with_hosted_zone(domain) do |client, zone|
23
- resp = client.list_resource_record_sets({
24
- hosted_zone_id: zone.id,
25
- start_record_name: domain,
26
- start_record_type: "A",
27
- max_items: 1
28
- })
29
- record_set = resp.resource_record_sets.reject { |z| !(z.name =~ /^#{domain}/) }.first
30
- if record_set
31
- value = record_set.resource_records.map(&:value).join(',')
32
- alias_target = record_set.alias_target.dns_name rescue nil
33
- thor.say "Found existing record set, id: name: #{record_set.name}, type: #{record_set.type}, value: #{alias_target || value}\n"
34
- change_request = {
35
- :action => 'DELETE',
36
- :resource_record_set => record_set
37
- }
38
-
39
- client.change_resource_record_sets({
40
- :hosted_zone_id => zone.id,
41
- :change_batch => {
42
- :changes => [change_request]
43
- }
44
- })
45
- thor.say "DNS record deleted for #{domain}"
46
- else
47
- thor.say "No record set found for #{domain}"
48
- end
49
- end
10
+ def run()
11
+ Tasks::Dns::Aws::DeleteRecord.new(options).run
50
12
  end
51
13
 
52
14
  end
53
15
  end
54
16
  end
55
- end
17
+ end
@@ -0,0 +1,25 @@
1
+ require 'fhcap/tasks/task_base'
2
+ require 'fhcap/providers_helper'
3
+ require 'fhcap/tasks/dns/aws/list_records'
4
+
5
+ module Fhcap
6
+ module Tasks
7
+ module Dns
8
+ class ListRecords < TaskBase
9
+
10
+ def run()
11
+ thor.say "Dns::List", :yellow
12
+ records_data = Tasks::Dns::Aws::ListRecords.new(options).run
13
+
14
+ table_contents = [table_header('Domain', 'Type', 'TTL', 'Value')]
15
+
16
+ for record in records_data
17
+ table_contents << record
18
+ end
19
+
20
+ thor.print_table table_contents
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -3,6 +3,7 @@ require 'fhcap'
3
3
  require 'fhcap/config'
4
4
  require 'fhcap/providers_helper'
5
5
  require 'fhcap/repos_helper'
6
+ require 'extensions/thor/actions'
6
7
 
7
8
  module Fhcap
8
9
 
@@ -16,6 +17,10 @@ module Fhcap
16
17
  :config_file => ENV['FHCAP_CFG_FILE']
17
18
  )
18
19
 
20
+ def exit_on_failure?
21
+ true
22
+ end
23
+
19
24
  def add_shared_option(name, options = {})
20
25
  @@shared_options[name] = options
21
26
  end
@@ -1,3 +1,3 @@
1
1
  module Fhcap
2
- VERSION = "0.4.9"
2
+ VERSION = "0.4.10"
3
3
  end
@@ -1,10 +1,10 @@
1
1
  require 'spec_helper'
2
- require "fhcap/tasks/dns/create_record"
2
+ require "fhcap/tasks/dns/aws/create_record"
3
3
 
4
- describe Fhcap::Tasks::Dns::CreateRecord do
4
+ describe Fhcap::Tasks::Dns::Aws::CreateRecord do
5
5
 
6
6
  subject {
7
- Fhcap::Tasks::Dns::CreateRecord.new(options)
7
+ Fhcap::Tasks::Dns::Aws::CreateRecord.new(options)
8
8
  }
9
9
 
10
10
  let(:thor) do
@@ -31,4 +31,4 @@ describe Fhcap::Tasks::Dns::CreateRecord do
31
31
  specify { expect(subject.ttl).to eq(300) }
32
32
  end
33
33
 
34
- end
34
+ end
@@ -1,10 +1,10 @@
1
1
  require 'spec_helper'
2
- require "fhcap/tasks/dns/delete_record"
2
+ require "fhcap/tasks/dns/aws/delete_record"
3
3
 
4
- describe Fhcap::Tasks::Dns::DeleteRecord do
4
+ describe Fhcap::Tasks::Dns::Aws::DeleteRecord do
5
5
 
6
6
  subject {
7
- Fhcap::Tasks::Dns::DeleteRecord.new(options)
7
+ Fhcap::Tasks::Dns::Aws::DeleteRecord.new(options)
8
8
  }
9
9
 
10
10
  let(:thor) do
@@ -27,4 +27,4 @@ describe Fhcap::Tasks::Dns::DeleteRecord do
27
27
  specify { expect(subject.domain).to eq(options[:domain]) }
28
28
  end
29
29
 
30
- end
30
+ end
@@ -84,15 +84,45 @@ end
84
84
  }
85
85
  },
86
86
  "fh-metrics": {
87
+ "mongo_server_role": "mongo_server",
87
88
  "conf":{
88
89
  "metrics": {
89
- "metricsAPIKey": "<%=random_key('fh-metrics')%>"
90
+ "metricsAPIKey": "<%=random_key('fh-metrics')%>",
91
+ "database": {
92
+ "auth": {
93
+ "user": "u-messaging",
94
+ "pass": "<%=random_password('u-messaging')%>"
95
+ }
96
+ }
90
97
  }
91
98
  }
92
99
  },
93
100
  "fh-messaging": {
101
+ "mongo_server_role": "mongo_server",
94
102
  "conf":{
95
- "msgAPIKey": "<%=random_key('fh-messaging')%>"
103
+ "msgAPIKey": "<%=random_key('fh-messaging')%>",
104
+ "database": {
105
+ "auth": {
106
+ "user": "u-messaging",
107
+ "pass": "<%=random_password('u-messaging')%>"
108
+ }
109
+ },
110
+ "agenda": {
111
+ "enabled": false,
112
+ "schedule": "15 00 * * *",
113
+ "jobs": {
114
+ "metrics_rollup_job": {
115
+ "options": {
116
+ "doImport": false
117
+ }
118
+ }
119
+ }
120
+ },
121
+ "realtime": true,
122
+ "files": {
123
+ "recovery_file": "",
124
+ "backup_file": ""
125
+ }
96
126
  }
97
127
  },
98
128
  "fh-proxy": {