cheftacular 2.6.0 → 2.7.0

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.
@@ -0,0 +1,51 @@
1
+
2
+ class Cheftacular
3
+ class StatelessActionDocumentation
4
+ def cheftacular_config
5
+ @config['documentation']['stateless_action'] << [
6
+ "`cft cheftacular_config [display|sync|overwrite]` this command " +
7
+ "Allows you to interact with your complete cheftacular configuration, the union of all repository's cheftacular.ymls. ",
8
+
9
+ [
10
+ " 1. `display` will show the current overall configuration for cheftacular.",
11
+
12
+ " 2. `sync` will sync your local cheftacular yaml keys ONTO the server's keys. This happens automatically whenever a " +
13
+ "difference is detected between the local keys and the remote keys but can be run manually. Will send a slack notification " +
14
+ "if slack is configured (the slack notification contains the diffed keys). The sync only occurs if there are CHANGES to the file."
15
+ ]
16
+ ]
17
+
18
+ @config['documentation']['application'] << @config['documentation']['stateless_action'].last
19
+ end
20
+ end
21
+
22
+ class StatelessAction
23
+ def cheftacular_config command=''
24
+ command = ARGV[1] if command.blank?
25
+
26
+ raise "Unsupported command (#{ command }) for cft cheftacular_config" unless command =~ /display|sync|overwrite/
27
+
28
+ self.send("cheftacular_config_#{ command }")
29
+ end
30
+
31
+ private
32
+
33
+ def cheftacular_config_display
34
+ ap(@config['cheftacular'], {indent: 2})
35
+ end
36
+
37
+ def cheftacular_config_sync
38
+ parsed_cheftacular = Digest::SHA2.hexdigest(@config['helper'].get_cheftacular_yml_as_hash.to_s)
39
+
40
+ return true if File.exist?(@config['filesystem'].local_cheftacular_file_cache_path) && File.read(@config['filesystem'].local_cheftacular_file_cache_path) == parsed_cheftacular
41
+
42
+ @config['default']['cheftacular_bag_hash'] = @config['cheftacular'].deep_dup.except('default_repository', 'mode') #the values have already been merged
43
+
44
+ @config['ChefDataBag'].save_cheftacular_bag
45
+
46
+ puts "Creating file cache for #{ Time.now.strftime("%Y%m%d") }'s local cheftacular.yml."
47
+
48
+ @config['filesystem'].write_local_cheftacular_cache_file parsed_cheftacular
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,24 @@
1
+
2
+ class Cheftacular
3
+ class StatelessActionDocumentation
4
+ def clear_caches
5
+ @config['documentation']['stateless_action'] << [
6
+ "`cft clear_caches` this command allows you to clear all of your local caches.",
7
+ ]
8
+
9
+ @config['documentation']['application'] << @config['documentation']['stateless_action'].last
10
+ end
11
+ end
12
+
13
+ class InitializationAction
14
+ def clear_caches
15
+
16
+ end
17
+ end
18
+
19
+ class StatelessAction
20
+ def clear_caches
21
+ @config['filesystem'].cleanup_file_caches('all')
22
+ end
23
+ end
24
+ end
@@ -23,7 +23,7 @@ class Cheftacular
23
23
 
24
24
  class StatelessAction
25
25
  def client_list
26
- @config['filesystem'].cleanup_file_caches('current')
26
+ @config['filesystem'].cleanup_file_caches('current-nodes')
27
27
 
28
28
  nodes = @config['getter'].get_true_node_objects(true)
29
29
 
@@ -19,7 +19,8 @@ class Cheftacular
19
19
 
20
20
  class StatelessAction
21
21
  def create_git_key oauth_key=""
22
-
22
+ raise "This action can only be performed if the mode is set to devops" unless @config['helper'].running_in_mode?('devops')
23
+
23
24
  case ARGV[1]
24
25
  when nil then raise "Too few arguments, please enter the filename of the id_rsa file you want to use"
25
26
  when 'id_rsa' then raise "Sorry, you can't use your default id_rsa"
@@ -33,7 +33,7 @@ class Cheftacular
33
33
  @config['initializer'].initialize_addresses_bag_contents env
34
34
 
35
35
  @config[env]['addresses_bag_hash']['addresses'].each do |serv_hash|
36
- arr << serv_hash['dn'].split('.').first
36
+ arr << serv_hash['dn']
37
37
  arr << serv_hash['public']
38
38
  end
39
39
  end
@@ -2,9 +2,16 @@ class Cheftacular
2
2
  class StatelessActionDocumentation
3
3
  def initialize_cheftacular_yml
4
4
  @config['documentation']['stateless_action'] << [
5
- "`cft initialize_cheftacular_yml` will create a cheftacular.yml file in your config folder (and create the" +
6
- "config folder if it does not exist). If you already have a cheftacular.yml file in the config folder, it will " +
7
- "create a cheftacular.example.yml file that will contain the new changes / keys in the latest cheftacular version."
5
+ "`cft initialize_cheftacular_yml [application|TheCheftacularCookbook]` will create a cheftacular.yml " +
6
+ "file in your config folder (and create the config folder if it does not exist). If you already have a cheftacular.yml file " +
7
+ "in the config folder, it will create a cheftacular.example.yml file that will contain the new changes / keys in the latest " +
8
+ "cheftacular version.",
9
+
10
+ [
11
+ " 1. If `TheCheftacularCookbook` is passed, the generated cheftacular.yml file will include the additional TheCheftacularCookbook keys.",
12
+
13
+ " 2. If `application` is passed, the generated cheftacular.yml file will look like one you could use in an application directory."
14
+ ]
8
15
  ]
9
16
  end
10
17
  end
@@ -16,13 +23,16 @@ class Cheftacular
16
23
  end
17
24
 
18
25
  class StatelessAction
19
- def initialize_cheftacular_yml
26
+ def initialize_cheftacular_yml example_file_to_load='cheftacular.yml'
27
+ example_file_to_load = 'thecheftacularcookbook.cheftacular.yml' if ARGV[1] == 'TheCheftacularCookbook'
28
+ example_file_to_load = 'application.cheftacular.yml' if ARGV[1] == 'application'
29
+
20
30
  FileUtils.mkdir_p(File.join(@config['locs']['chef-repo'], "config"))
21
31
 
22
32
  if File.exist?(File.join(@config['locs']['chef-repo'], "config", "cheftacular.yml"))
23
- @config['helper'].write_config_cheftacular_yml_file('cheftacular.example.yml')
33
+ @config['helper'].write_config_cheftacular_yml_file('cheftacular.example.yml', example_file_to_load )
24
34
  else
25
- @config['helper'].write_config_cheftacular_yml_file
35
+ @config['helper'].write_config_cheftacular_yml_file('cheftacular.yml', example_file_to_load)
26
36
  end
27
37
  end
28
38
  end
@@ -30,6 +30,8 @@ class Cheftacular
30
30
 
31
31
  #@config['ChefDataBag'].initialize_node_roles_bag_contents env
32
32
 
33
+ @config['initializer'].initialize_environment_config_bag_contents if @config['helper'].running_in_mode?('devops')
34
+
33
35
  exit if @options['command'] == __method__
34
36
  end
35
37
  end
@@ -201,5 +203,46 @@ class Cheftacular
201
203
 
202
204
  @config['ChefDataBag'].save_audit_bag(env) if save_on_finish
203
205
  end
206
+
207
+ def initialize_cheftacular_data_bag_contents
208
+ @config['default']['cheftacular_bag_hash'] = @config['cheftacular']
209
+
210
+ @config['ChefDataBag'].save_cheftacular_bag
211
+ end
212
+
213
+ def initialize_environment_config_bag_contents
214
+ return true if File.exist?(@config['filesystem'].current_environment_config_cache_file_path)
215
+
216
+ hash = @config['default']['environment_config_bag_hash']
217
+
218
+ current_env_bag_names = []
219
+
220
+ @config[@options['env']].keys.each do |bag_name|
221
+ next if bag_name.include?('_bag_hash')
222
+
223
+ current_env_bag_names << bag_name.gsub('_bag','')
224
+ end
225
+
226
+ @config['chef_environments'].each do |env|
227
+ next if @config['ridley'].data_bag.find(env).nil?
228
+
229
+ hash[env] ||= {}
230
+ bags = []
231
+
232
+ current_env_bag_names.each do |bag_name|
233
+ next if @config['ridley'].data_bag.find(env).item.find(bag_name).nil?
234
+
235
+ bags << bag_name
236
+ end
237
+
238
+ hash[env]['bags'] = bags
239
+ end
240
+
241
+ @config['ChefDataBag'].save_environment_config_bag
242
+
243
+ puts "Creating file cache for #{ Time.now.strftime("%Y%m%d") }'s environment_config bag cache."
244
+
245
+ @config['filesystem'].write_environment_config_cache
246
+ end
204
247
  end
205
248
  end
@@ -0,0 +1,30 @@
1
+
2
+ class Cheftacular
3
+ class StatelessActionDocumentation
4
+ def reset_bag
5
+ @config['documentation']['stateless_action'] << [
6
+ "`cft reset_bag BAG_NAME` this command allows you to reset a data bag item to an empty state. " +
7
+ "Run this on full data bags to clear them out. "
8
+ ]
9
+ end
10
+ end
11
+
12
+ class StatelessAction
13
+ def reset_bag bag_name='', bag_env=''
14
+ raise "This action can only be performed if the mode is set to devops" unless @config['helper'].running_in_mode?('devops')
15
+
16
+ bag_name = ARGV[1] if bag_name.blank?
17
+ bag_env = @options['env'] if bag_env.blank?
18
+
19
+ begin
20
+ @config['ChefDataBag'].send("reset_#{ bag_name }_bag")
21
+
22
+ puts "Successfully reset bag #{ bag_name }."
23
+ rescue NoMethodError => e
24
+ puts "You are not able to reset the bag \"#{ bag_name }\" via reset_bag, please use knife to edit the contents.\n #{ e }"
25
+ end
26
+
27
+ @config['stateless_action'].clear_caches
28
+ end
29
+ end
30
+ end
@@ -9,7 +9,7 @@ class Cheftacular
9
9
  " 1. This command uses your *role_toggling:deactivated_role_suffix* attribute set in your cheftacular.yml to toggle the role, " +
10
10
  "it checks to see if the toggled name exists then sets the node's run_list to include the toggled role",
11
11
 
12
- " 2. EX: `cft role_toggle apisc01 worker activate` will find the node apisc01 and attempt to toggle the worker role to on. " +
12
+ " 2. EX: `cft role_toggle api01 worker activate` will find the node api01 and attempt to toggle the worker role to on. " +
13
13
  "If the node does NOT have the worker#{ @config['cheftacular']['role_toggling']['deactivated_role_suffix'] } role, then it will " +
14
14
  "add it if *role_toggling:strict_roles* is set to **false**",
15
15
 
@@ -27,9 +27,7 @@ class Cheftacular
27
27
 
28
28
  old_tld = @config[@options['env']]['config_bag_hash'][@options['sub_env']]['tld']
29
29
 
30
- if target_tld == 'self'
31
- target_tld = old_tld
32
- end
30
+ target_tld = old_tld if target_tld == 'self'
33
31
 
34
32
  nodes.each do |n|
35
33
 
@@ -1,5 +1,5 @@
1
1
  class Cheftacular
2
2
  #major_version.minor_version.bugfixes
3
- VERSION = "2.6.0"
3
+ VERSION = "2.7.0"
4
4
  RUBY_VERSION = "2.2.2"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cheftacular
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.6.0
4
+ version: 2.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Louis Alridge
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-08-06 00:00:00.000000000 Z
11
+ date: 2015-09-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: hashie
@@ -250,6 +250,7 @@ files:
250
250
  - lib/cheftacular/initialization_action.rb
251
251
  - lib/cheftacular/initializer.rb
252
252
  - lib/cheftacular/parser.rb
253
+ - lib/cheftacular/queue_master.rb
253
254
  - lib/cheftacular/stateless_action.rb
254
255
  - lib/cheftacular/stateless_actions/add_ssh_key_to_bag.rb
255
256
  - lib/cheftacular/stateless_actions/arguments.rb
@@ -263,10 +264,12 @@ files:
263
264
  - lib/cheftacular/stateless_actions/check_cheftacular_yml_keys.rb
264
265
  - lib/cheftacular/stateless_actions/chef_bootstrap.rb
265
266
  - lib/cheftacular/stateless_actions/chef_server.rb
267
+ - lib/cheftacular/stateless_actions/cheftacular_config.rb
266
268
  - lib/cheftacular/stateless_actions/clean_cookbooks.rb
267
269
  - lib/cheftacular/stateless_actions/clean_sensu_plugins.rb
268
270
  - lib/cheftacular/stateless_actions/clean_server_passwords.rb
269
271
  - lib/cheftacular/stateless_actions/cleanup_log_files.rb
272
+ - lib/cheftacular/stateless_actions/clear_caches.rb
270
273
  - lib/cheftacular/stateless_actions/client_list.rb
271
274
  - lib/cheftacular/stateless_actions/cloud.rb
272
275
  - lib/cheftacular/stateless_actions/cloud_bootstrap.rb
@@ -293,6 +296,7 @@ files:
293
296
  - lib/cheftacular/stateless_actions/reinitialize.rb
294
297
  - lib/cheftacular/stateless_actions/remove_client.rb
295
298
  - lib/cheftacular/stateless_actions/replication_status.rb
299
+ - lib/cheftacular/stateless_actions/reset_bag.rb
296
300
  - lib/cheftacular/stateless_actions/restart_swap.rb
297
301
  - lib/cheftacular/stateless_actions/role_toggle.rb
298
302
  - lib/cheftacular/stateless_actions/rvm.rb