fhcap-cli 0.4.9 → 0.4.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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": {