formatron 0.1.9 → 0.1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: aa838c27b599f963e068ce0237499ac84df6fa86
4
- data.tar.gz: 103620771c737d722c3d80e00ac8be9f2edcbf9b
3
+ metadata.gz: f65ce71a403a7fb9643dc55ded5f5db6e29ed56a
4
+ data.tar.gz: 017ba0b1ecf0fb92becc855038b3bc1023bba5cc
5
5
  SHA512:
6
- metadata.gz: 00c35229a64d78d4102cdd0822787710f793d88e16a92545d247a80b92094450015710d1db5c31def0baa8684fa2f76d354f503557c909485adb8c98279218d0
7
- data.tar.gz: a78ce02b19afc19339f8923b5df1a04f01e48a2abd0994ec15d315bc2badbb5adce3377fafe1d48e779fc60dac7996cef5d48dfb7e17effc6ea3d9f9bdcec876
6
+ metadata.gz: 719acdc0c0e57bb503253f1a37c4b9543701a2112d9a069a4488ad50fc7b2a524d84d83b96771a3a683183652bfcb6d3c880f13385c0b0ea57616ef89b0de8d2
7
+ data.tar.gz: e429955eade1cd8f89039e43991583f02b47d00152a7389e120f133aa360ab072d6ec9bc7eb7b57a1c9993af12be21b5466864c533747adf49e4b2f8fe2c7dfe
data/lib/formatron.rb CHANGED
@@ -147,26 +147,26 @@ class Formatron
147
147
  end
148
148
  end
149
149
 
150
- def provision
150
+ def provision(guid: nil)
151
151
  @all_instances.each do |key, instances|
152
- _provision_vpc key, instances
152
+ _provision_vpc key, instances, guid
153
153
  end
154
154
  end
155
155
 
156
156
  # rubocop:disable Metrics/MethodLength
157
157
  # rubocop:disable Metrics/AbcSize
158
- def _provision_vpc(key, instances)
158
+ def _provision_vpc(key, instances, guid_filter)
159
159
  chef_clients = @chef_clients[key]
160
160
  chef_clients.init
161
- chef_clients.deploy_databags
162
161
  instances.values.each do |instance|
162
+ guid = instance.guid
163
+ next unless guid_filter.nil? || guid_filter.eql?(guid)
163
164
  dsl_chef = instance.chef
164
165
  next if dsl_chef.nil?
165
166
  chef = chef_clients.get dsl_chef.server
166
167
  cookbook = dsl_chef.cookbook
167
168
  bastion = dsl_chef.bastion
168
169
  sub_domain = instance.sub_domain
169
- guid = instance.guid
170
170
  _provision_instance chef, cookbook, sub_domain, guid, bastion
171
171
  end
172
172
  ensure
@@ -323,7 +323,6 @@ class Formatron
323
323
  def _destroy_chef_vpc_instances(key, instances)
324
324
  chef_clients = @chef_clients[key]
325
325
  chef_clients.init
326
- chef_clients.delete_databags
327
326
  instances.values.each do |instance|
328
327
  dsl_chef = instance.chef
329
328
  next if dsl_chef.nil?
@@ -331,8 +330,6 @@ class Formatron
331
330
  guid = instance.guid
332
331
  _destroy_chef_instance chef, guid
333
332
  end
334
- rescue => error
335
- LOG.warn error
336
333
  ensure
337
334
  chef_clients.unlink
338
335
  end
@@ -50,7 +50,6 @@ class Formatron
50
50
  username: username,
51
51
  organization: organization,
52
52
  ssl_verify: ssl_verify,
53
- name: @name,
54
53
  databag_secret: databag_secret,
55
54
  configuration: configuration
56
55
  )
@@ -75,21 +74,8 @@ class Formatron
75
74
  @berkshelf.init
76
75
  end
77
76
 
78
- def deploy_databag
79
- Formatron::LOG.info do
80
- "Deploying data bag to chef server: #{@chef_sub_domain}"
81
- end
82
- @knife.deploy_databag
83
- end
84
-
85
- def delete_databag
86
- Formatron::LOG.info do
87
- "Deleting data bag from chef server: #{@chef_sub_domain}"
88
- end
89
- @knife.delete_databag
90
- end
91
-
92
77
  # rubocop:disable Metrics/MethodLength
78
+ # rubocop:disable Metrics/AbcSize
93
79
  def provision(
94
80
  sub_domain:,
95
81
  guid:,
@@ -112,8 +98,18 @@ class Formatron
112
98
  hostname = _hostname(
113
99
  sub_domain: sub_domain
114
100
  )
101
+ Formatron::LOG.info do
102
+ "Deploying data bag item '#{guid}' to chef server: #{@chef_sub_domain}"
103
+ end
104
+ @knife.deploy_databag name: guid
105
+ Formatron::LOG.info do
106
+ "Lock cookbook versions for environment #{guid}"
107
+ end
115
108
  @knife.create_environment environment: guid
116
109
  @berkshelf.upload environment: guid, cookbook: cookbook
110
+ Formatron::LOG.info do
111
+ "Bootstrap node #{guid}"
112
+ end
117
113
  @knife.bootstrap(
118
114
  bastion_hostname: bastion_hostname,
119
115
  guid: guid,
@@ -121,17 +117,32 @@ class Formatron
121
117
  hostname: hostname
122
118
  )
123
119
  end
124
- # rubocop:enable Metrics/ParameterLists
120
+ # rubocop:enable Metrics/AbcSize
125
121
  # rubocop:enable Metrics/MethodLength
126
122
 
123
+ # rubocop:disable Metrics/MethodLength
127
124
  def destroy(guid:)
128
125
  Formatron::LOG.info do
129
126
  "Delete Chef configuration for node: #{guid}"
130
127
  end
128
+ Formatron::LOG.info do
129
+ "Deleting data bag item '#{guid}' from chef server: #{@chef_sub_domain}"
130
+ end
131
+ @knife.delete_databag name: guid
132
+ Formatron::LOG.info do
133
+ "Deleting node '#{guid}' from chef server: #{@chef_sub_domain}"
134
+ end
131
135
  @knife.delete_node node: guid
136
+ Formatron::LOG.info do
137
+ "Deleting client '#{guid}' from chef server: #{@chef_sub_domain}"
138
+ end
132
139
  @knife.delete_client client: guid
140
+ Formatron::LOG.info do
141
+ "Deleting environment '#{guid}' from chef server: #{@chef_sub_domain}"
142
+ end
133
143
  @knife.delete_environment environment: guid
134
144
  end
145
+ # rubocop:enable Metrics/MethodLength
135
146
 
136
147
  def unlink
137
148
  @keys.unlink
@@ -15,7 +15,6 @@ class Formatron
15
15
  username:,
16
16
  organization:,
17
17
  ssl_verify:,
18
- name:,
19
18
  databag_secret:,
20
19
  configuration:
21
20
  )
@@ -24,7 +23,6 @@ class Formatron
24
23
  @username = username
25
24
  @organization = organization
26
25
  @ssl_verify = ssl_verify
27
- @name = name
28
26
  @databag_secret = databag_secret
29
27
  @configuration = configuration
30
28
  end
@@ -47,15 +45,20 @@ class Formatron
47
45
  @databag_secret_file = Tempfile.new 'formatron-databag-secret-'
48
46
  @databag_secret_file.write @databag_secret
49
47
  @databag_secret_file.close
50
- @databag_file = Tempfile.new ['formatron-databag-', '.json']
51
- @databag_file.write @configuration.merge(id: @name).to_json
52
- @databag_file.close
53
48
  end
54
49
  # rubocop:enable Metrics/MethodLength
55
50
 
56
- def deploy_databag
51
+ def deploy_databag(name:)
52
+ databag_file = Tempfile.new ['formatron-databag-', '.json']
53
+ databag_file.write @configuration.merge(id: name).to_json
54
+ databag_file.close
57
55
  _attempt_to_create_databag unless _databag_exists
58
- _attempt_to_create_databag_item
56
+ _attempt_to_create_databag_item(
57
+ name: name,
58
+ databag_file: databag_file
59
+ )
60
+ ensure
61
+ databag_file.unlink unless databag_file.nil?
59
62
  end
60
63
 
61
64
  def _databag_exists
@@ -72,15 +75,15 @@ class Formatron
72
75
  # rubocop:enable Metrics/LineLength
73
76
  end
74
77
 
75
- def _attempt_to_create_databag_item
78
+ def _attempt_to_create_databag_item(name:, databag_file:)
76
79
  # rubocop:disable Metrics/LineLength
77
- fail "failed to create data bag item: #{@name}" unless _create_databag_item
80
+ fail "failed to create data bag item: #{name}" unless _create_databag_item databag_file: databag_file
78
81
  # rubocop:enable Metrics/LineLength
79
82
  end
80
83
 
81
- def _create_databag_item
84
+ def _create_databag_item(databag_file:)
82
85
  # rubocop:disable Metrics/LineLength
83
- Util::Shell.exec "knife data bag from file formatron #{@databag_file.path} --secret-file #{@databag_secret_file.path} -c #{@knife_file.path}"
86
+ Util::Shell.exec "knife data bag from file formatron #{databag_file.path} --secret-file #{@databag_secret_file.path} -c #{@knife_file.path}"
84
87
  # rubocop:enable Metrics/LineLength
85
88
  end
86
89
 
@@ -121,10 +124,10 @@ class Formatron
121
124
  # rubocop:enable Metrics/LineLength
122
125
  end
123
126
 
124
- def delete_databag
127
+ def delete_databag(name:)
125
128
  # rubocop:disable Metrics/LineLength
126
- command = "knife data bag delete formatron #{@name} -y -c #{@knife_file.path}"
127
- fail "failed to delete data bag item: #{@name}" unless Util::Shell.exec command
129
+ command = "knife data bag delete formatron #{name} -y -c #{@knife_file.path}"
130
+ fail "failed to delete data bag item: #{name}" unless Util::Shell.exec command
128
131
  # rubocop:enable Metrics/LineLength
129
132
  end
130
133
 
@@ -150,7 +153,6 @@ class Formatron
150
153
  def unlink
151
154
  @knife_file.unlink unless @knife_file.nil?
152
155
  @databag_secret_file.unlink unless @databag_secret_file.nil?
153
- @databag_file.unlink unless @databag_file.nil?
154
156
  end
155
157
 
156
158
  private(
@@ -61,13 +61,5 @@ class Formatron
61
61
  def unlink
62
62
  @chef_clients.values.each(&:unlink)
63
63
  end
64
-
65
- def deploy_databags
66
- @chef_clients.values.each(&:deploy_databag)
67
- end
68
-
69
- def delete_databags
70
- @chef_clients.values.each(&:delete_databag)
71
- end
72
64
  end
73
65
  end
data/lib/formatron/cli.rb CHANGED
@@ -7,6 +7,7 @@ class Formatron
7
7
  include Commander::Methods
8
8
 
9
9
  def global_options
10
+ global_option '-y', '--yes', 'Automatic yes to prompts'
10
11
  global_option '-c', '--credentials FILE', 'The credentials file'
11
12
  global_option(
12
13
  '-d',
@@ -23,8 +23,8 @@ class Formatron
23
23
  )
24
24
  end
25
25
 
26
- def deploy_ok(formatron, target)
27
- !formatron.protected? || agree(
26
+ def deploy_ok(options, formatron, target)
27
+ options.yes || !formatron.protected? || agree(
28
28
  "Are you sure you wish to deploy protected target: #{target}?"
29
29
  ) do |q|
30
30
  q.default = 'no'
@@ -40,7 +40,7 @@ class Formatron
40
40
  directory: directory,
41
41
  target: target
42
42
  )
43
- formatron.deploy if deploy_ok(formatron, target)
43
+ formatron.deploy if deploy_ok options, formatron, target
44
44
  end
45
45
  end
46
46
 
@@ -23,8 +23,8 @@ class Formatron
23
23
  )
24
24
  end
25
25
 
26
- def destroy_ok(formatron, target)
27
- !formatron.protected? || agree(
26
+ def destroy_ok(options, formatron, target)
27
+ options.yes || !formatron.protected? || agree(
28
28
  "Are you sure you wish to destroy protected target: #{target}?"
29
29
  ) do |q|
30
30
  q.default = 'no'
@@ -40,7 +40,7 @@ class Formatron
40
40
  directory: directory,
41
41
  target: target
42
42
  )
43
- formatron.destroy if destroy_ok formatron, target
43
+ formatron.destroy if destroy_ok options, formatron, target
44
44
  end
45
45
  end
46
46
 
@@ -92,7 +92,7 @@ class Formatron
92
92
  'The protected targets (eg. production)'
93
93
  )
94
94
  c.option(
95
- '-y',
95
+ '-q',
96
96
  '--unprotected-targets LIST',
97
97
  Array,
98
98
  'The unprotected targets (eg. test)'
@@ -5,6 +5,15 @@ class Formatron
5
5
  class CLI
6
6
  # CLI command for provision
7
7
  module Provision
8
+ def provision_options(c)
9
+ c.option(
10
+ '-g',
11
+ '--guid STRING',
12
+ 'The guid of an instance to provision ' \
13
+ '(will provision all instances if not specified)'
14
+ )
15
+ end
16
+
8
17
  def provision_directory(options)
9
18
  options.directory || Dir.pwd
10
19
  end
@@ -23,14 +32,15 @@ class Formatron
23
32
  )
24
33
  end
25
34
 
26
- def provision_ok(formatron, target)
27
- !formatron.protected? || agree(
35
+ def provision_ok(options, formatron, target)
36
+ options.yes || !formatron.protected? || agree(
28
37
  "Are you sure you wish to provision protected target: #{target}?"
29
38
  ) do |q|
30
39
  q.default = 'no'
31
40
  end
32
41
  end
33
42
 
43
+ # rubocop:disable Metrics/MethodLength
34
44
  def provision_action(c)
35
45
  c.action do |args, options|
36
46
  directory = provision_directory options
@@ -40,9 +50,12 @@ class Formatron
40
50
  directory: directory,
41
51
  target: target
42
52
  )
43
- formatron.provision if provision_ok formatron, target
53
+ formatron.provision(
54
+ guid: options.guid
55
+ ) if provision_ok options, formatron, target
44
56
  end
45
57
  end
58
+ # rubocop:enable Metrics/MethodLength
46
59
 
47
60
  def provision_formatron_command
48
61
  command :provision do |c|
@@ -51,6 +64,7 @@ class Formatron
51
64
  'stack using Opscode Chef'
52
65
  c.description = 'Provision the instances in a Formatron ' \
53
66
  'stack using Opscode Chef'
67
+ provision_options c
54
68
  provision_action c
55
69
  end
56
70
  end
@@ -1,4 +1,4 @@
1
1
  # add version to class
2
2
  class Formatron
3
- VERSION = '0.1.9'
3
+ VERSION = '0.1.10'
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: formatron
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.9
4
+ version: 0.1.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Halliday
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-12-08 00:00:00.000000000 Z
11
+ date: 2015-12-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -413,7 +413,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
413
413
  version: '0'
414
414
  requirements: []
415
415
  rubyforge_project:
416
- rubygems_version: 2.2.2
416
+ rubygems_version: 2.4.5.1
417
417
  signing_key:
418
418
  specification_version: 4
419
419
  summary: AWS/Chef Deployment Tool