cheftacular 2.14.0 → 2.14.1
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 +4 -4
- data/lib/cheftacular/actions/backups.rb +9 -7
- data/lib/cheftacular/actions/check.rb +2 -2
- data/lib/cheftacular/actions/db_console.rb +4 -0
- data/lib/cheftacular/actions/deploy.rb +6 -4
- data/lib/cheftacular/actions/verify.rb +5 -1
- data/lib/cheftacular/auditor.rb +19 -16
- data/lib/cheftacular/getter.rb +8 -3
- data/lib/cheftacular/helper.rb +6 -0
- data/lib/cheftacular/initializer.rb +1 -0
- data/lib/cheftacular/stateless_actions/server_update.rb +2 -2
- data/lib/cheftacular/stateless_actions/update_cookbook.rb +35 -16
- data/lib/cheftacular/stateless_actions/update_the_cheftacular_cookbook_and_knife_upload.rb +31 -0
- data/lib/cheftacular/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 827adc94d0f767ea316d7bcf827cfb10cd3fa2ee
|
4
|
+
data.tar.gz: f5cf035f7411a8a7ec542c836e28f5820581dbb7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0f5e9bc8c1f3e075fa0f084857bf6ba940b2adf3434be56f903e2f6ed3ca35aad6ea1914dbdd5011e35332cec9da7a0e6bb7b2babbe092758bef1fe316f46318
|
7
|
+
data.tar.gz: b2360f856866988ff682fa1aa4f1b223fb955bbe89604f73fb9309603de1e1796367505dc31bcbc6455943e80fd55f87c1d998df5cc77491a8c4cad23cdb50ab
|
@@ -1,6 +1,6 @@
|
|
1
1
|
|
2
2
|
class Cheftacular
|
3
|
-
class
|
3
|
+
class ActionDocumentation
|
4
4
|
def backups
|
5
5
|
@config['documentation']['action'][__method__] ||= {}
|
6
6
|
@config['documentation']['action'][__method__]['long_description'] = [
|
@@ -18,7 +18,8 @@ class Cheftacular
|
|
18
18
|
" 4. `load` will fetch the latest backup from the production primary **if it doesn't already exist on " +
|
19
19
|
"the server** and run the _backup loading command_ to load this backup into the env.",
|
20
20
|
|
21
|
-
" 5. `restore` will simply just run the _backup loading command_ to load the latest backup onto the server."
|
21
|
+
" 5. `restore` will simply just run the _backup loading command_ to load the latest backup onto the server. This " +
|
22
|
+
"command is REPOSITORY SENSITIVE, to restore a repo other than default, you must use the -R REPOSITORY flag.",
|
22
23
|
|
23
24
|
" 6. `status` will display the current state of the backups",
|
24
25
|
|
@@ -30,7 +31,7 @@ class Cheftacular
|
|
30
31
|
end
|
31
32
|
end
|
32
33
|
|
33
|
-
class
|
34
|
+
class Action
|
34
35
|
def backups command=''
|
35
36
|
command = ARGV[1] if command.blank?
|
36
37
|
|
@@ -74,8 +75,9 @@ class Cheftacular
|
|
74
75
|
end
|
75
76
|
|
76
77
|
target_db_primary, nodes = @config['getter'].get_db_primary_node_and_nodes
|
77
|
-
applications_as_string = @config['getter'].get_repo_names_for_repositories({ database: @config['getter'].get_current_database }).keys.join(',')
|
78
|
+
applications_as_string = @config['getter'].get_repo_names_for_repositories([{ database: @config['getter'].get_current_database }, { restore_backup_file_name: 'NOT NIL' , ignore_val: true}]).keys.join(',')
|
78
79
|
env_db_pass = @config[@options['env']]['chef_passwords_bag_hash']["#{ backup_mode }_pass"]
|
80
|
+
env_db_user = @config['getter'].get_current_repo_config['application_database_user']
|
79
81
|
env_db_mode = @config['getter'].get_current_database
|
80
82
|
|
81
83
|
options, locs, ridley, logs_bag_hash, pass_bag_hash, bundle_command, cheftacular, passwords = @config['helper'].set_local_instance_vars
|
@@ -87,7 +89,7 @@ class Cheftacular
|
|
87
89
|
|
88
90
|
puts("Beginning db_backup_run for #{ n.name } (#{ n.public_ipaddress }) for env #{ options['env'] }") unless options['quiet']
|
89
91
|
|
90
|
-
start_db_backup_restore( n.name, n.public_ipaddress, options, locs, cheftacular, passwords, applications_as_string, env_db_pass, ruby_command, env_db_mode )
|
92
|
+
start_db_backup_restore( n.name, n.public_ipaddress, options, locs, cheftacular, passwords, applications_as_string, env_db_pass, ruby_command, env_db_mode, env_db_user )
|
91
93
|
end
|
92
94
|
end
|
93
95
|
|
@@ -235,7 +237,7 @@ module SSHKit
|
|
235
237
|
puts "Finished transferring #{ full_backup_path } to #{ name }(#{ ip_address })..."
|
236
238
|
end
|
237
239
|
|
238
|
-
def start_db_backup_restore name, ip_address, options, locs, cheftacular, passwords, applications_as_string, env_db_pass, ruby_command, env_db_mode, out=''
|
240
|
+
def start_db_backup_restore name, ip_address, options, locs, cheftacular, passwords, applications_as_string, env_db_pass, ruby_command, env_db_mode, env_db_user, out=''
|
239
241
|
log_loc, timestamp = set_log_loc_and_timestamp(locs)
|
240
242
|
|
241
243
|
puts "Beginning backup run on #{ name } (#{ ip_address }), this command may take a while to complete..."
|
@@ -244,7 +246,7 @@ module SSHKit
|
|
244
246
|
when 'backup_gem'
|
245
247
|
command = cheftacular['backup_config']['backup_load_command']
|
246
248
|
command = command.gsub('ENVIRONMENT', options['env']).gsub('APPLICATIONS', applications_as_string).gsub('DB_PASS', env_db_pass)
|
247
|
-
command = command.gsub('RUBY_COMMAND', ruby_command ).gsub('MODE', env_db_mode)
|
249
|
+
command = command.gsub('RUBY_COMMAND', ruby_command ).gsub('MODE', env_db_mode).gsub('DATABASE_USER', env_db_user)
|
248
250
|
|
249
251
|
out << sudo_capture( passwords[ip_address], command )
|
250
252
|
when 'raw'
|
@@ -11,7 +11,7 @@ class Cheftacular
|
|
11
11
|
|
12
12
|
" 2. If the all argument is provided, all repositories will be checked for the current environment",
|
13
13
|
|
14
|
-
" 3. If the verify argument is provided, cft will attempt to see if the servers are using the latest commits",
|
14
|
+
" 3. If the verify argument is provided, cft will attempt to see if the servers are using the latest commits. This is also aliased to `cft ch ve`",
|
15
15
|
|
16
16
|
" 4. Aliased to `cft ch`"
|
17
17
|
]
|
@@ -25,7 +25,7 @@ class Cheftacular
|
|
25
25
|
@config['filesystem'].cleanup_file_caches('current-nodes')
|
26
26
|
|
27
27
|
fetch_all_repository_data = ARGV[1] == 'all'
|
28
|
-
verify_state_is_latest = ARGV[1] == 'verify'
|
28
|
+
verify_state_is_latest = ARGV[1] == 'verify' || ARGV[1] == 've'
|
29
29
|
verify_state_is_latest = mode == 'verify' if ARGV[1] != 'verify'
|
30
30
|
|
31
31
|
nodes = @config['getter'].get_true_node_objects(fetch_all_repository_data)
|
@@ -37,6 +37,8 @@ class Cheftacular
|
|
37
37
|
|
38
38
|
start_console_postgresql(n.public_ipaddress, private_database_host_address )
|
39
39
|
end
|
40
|
+
|
41
|
+
@config['auditor'].notify_slack_on_completion("psql run completed on #{ nodes.first.name } (#{ nodes.first.public_ipaddress })\n") if @config['cheftacular']['auditing']
|
40
42
|
end
|
41
43
|
|
42
44
|
def db_console_mongodb private_database_host_address=nil
|
@@ -56,6 +58,8 @@ class Cheftacular
|
|
56
58
|
|
57
59
|
start_console_mongodb(n.public_ipaddress, private_database_host_address)
|
58
60
|
end
|
61
|
+
|
62
|
+
@config['auditor'].notify_slack_on_completion("mongo run completed on #{ nodes.first.name } (#{ nodes.first.public_ipaddress })\n") if @config['cheftacular']['auditing']
|
59
63
|
end
|
60
64
|
|
61
65
|
def db_console_mysql
|
@@ -19,9 +19,9 @@ class Cheftacular
|
|
19
19
|
|
20
20
|
" 5. The `-v|--verbose` option will cause failed deploys to output to the terminal window and to their normal log file. Useful for debugging.",
|
21
21
|
|
22
|
-
" 6. The `cft deploy check` argument will force a check run under the same environment as the initial deploy.",
|
22
|
+
" 6. The `cft deploy check` argument will force a check run under the same environment as the initial deploy. This is also aliased to `cft d ch`",
|
23
23
|
|
24
|
-
" 7. The `cft deploy verify` argument will force a check AND verify run under the same environment as the initial deploy",
|
24
|
+
" 7. The `cft deploy verify` argument will force a check AND verify run under the same environment as the initial deploy. This is also aliased to `cft d ve`",
|
25
25
|
|
26
26
|
" 8. Aliased to `cft d`"
|
27
27
|
]
|
@@ -33,8 +33,8 @@ class Cheftacular
|
|
33
33
|
|
34
34
|
class Action
|
35
35
|
def deploy deployment_args={ in: :groups, limit: 6, wait: 5 }
|
36
|
-
run_check = ARGV[1] == 'check'
|
37
|
-
run_verify = ARGV[1] == 'verify'
|
36
|
+
run_check = ARGV[1] == 'check' || ARGV[1] == 'ch'
|
37
|
+
run_verify = ARGV[1] == 'verify' || ARGV[1] == 've'
|
38
38
|
|
39
39
|
nodes = @config['getter'].get_true_node_objects(false) #when this is run in scaling we'll need to make sure we deploy to new nodes
|
40
40
|
|
@@ -66,6 +66,8 @@ class Cheftacular
|
|
66
66
|
|
67
67
|
@config['action'].check('verify') if run_verify && !@options['run_migration_already']
|
68
68
|
|
69
|
+
@config['auditor'].notify_slack_on_completion("deploy run completed on #{ nodes.map {|n| n.name }.join(', ') }\n") if @config['cheftacular']['auditing'] && !@options['run_migration_already']
|
70
|
+
|
69
71
|
@config['action'].migrate(nodes) if @config['getter'].get_current_repo_config['database'] != 'none' && !@options['run_migration_already']
|
70
72
|
|
71
73
|
split_nodes_hash = {}
|
@@ -5,7 +5,9 @@ class Cheftacular
|
|
5
5
|
@config['documentation']['action'][__method__]['long_description'] = [
|
6
6
|
"`cft verify` Checks to see if the servers for the current state are running the latest commits. ",
|
7
7
|
[
|
8
|
-
" 1. This command is functionally the same as `cft check verify`."
|
8
|
+
" 1. This command is functionally the same as `cft check verify`.",
|
9
|
+
|
10
|
+
" 2. This command is aliased to `cft ve`"
|
9
11
|
]
|
10
12
|
]
|
11
13
|
@config['documentation']['action'][__method__]['short_description'] = "Checks the commits currently deployed to an env for your repo"
|
@@ -16,5 +18,7 @@ class Cheftacular
|
|
16
18
|
def verify
|
17
19
|
@config['action'].check('verify')
|
18
20
|
end
|
21
|
+
|
22
|
+
alias_method :ve, :verify
|
19
23
|
end
|
20
24
|
end
|
data/lib/cheftacular/auditor.rb
CHANGED
@@ -85,22 +85,25 @@ class Cheftacular
|
|
85
85
|
|
86
86
|
def aliased_command_hash
|
87
87
|
{
|
88
|
-
check:
|
89
|
-
console:
|
90
|
-
deploy:
|
91
|
-
cheftacular_config:
|
92
|
-
cheftacular_yml_help:
|
93
|
-
client_list:
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
88
|
+
check: ['ch'],
|
89
|
+
console: ['co'],
|
90
|
+
deploy: ['d'],
|
91
|
+
cheftacular_config: ['cc'],
|
92
|
+
cheftacular_yml_help: ['yml_help'],
|
93
|
+
client_list: ['cl'],
|
94
|
+
cloud_bootstrap: ['cb'],
|
95
|
+
environment: ['e'],
|
96
|
+
fix_known_hosts: ['fkh'],
|
97
|
+
knife_upload: ['ku'],
|
98
|
+
location_aliases: ['la'],
|
99
|
+
remove_client: ['rc'],
|
100
|
+
role_toggle: ['rt'],
|
101
|
+
update_cookbook: ['uc'],
|
102
|
+
update_the_cheftacular_cookbook_and_knife_upload: ['utcc', 'utccaku'],
|
103
|
+
upload_nodes: ['un'],
|
104
|
+
upload_roles: ['ur'],
|
105
|
+
verify: ['ve'],
|
106
|
+
version: ['v']
|
104
107
|
}
|
105
108
|
end
|
106
109
|
end
|
data/lib/cheftacular/getter.rb
CHANGED
@@ -161,12 +161,17 @@ class Cheftacular
|
|
161
161
|
ret
|
162
162
|
end
|
163
163
|
|
164
|
-
def get_repo_names_for_repositories restrict_to={}, ret={}
|
164
|
+
def get_repo_names_for_repositories restrict_to=[{}], ret={}
|
165
165
|
@config['cheftacular']['repositories'].each_pair do |name, repo_hash|
|
166
166
|
unless restrict_to.empty?
|
167
167
|
skip = false
|
168
|
-
restrict_to.
|
169
|
-
|
168
|
+
restrict_to.each do |restrict_hash|
|
169
|
+
restrict_hash.each_pair do |key, val|
|
170
|
+
skip = true if repo_hash[key.to_s] != val && restrict_hash.has_key?(:ignore_value)
|
171
|
+
skip = true if val == 'NOT NIL' && repo_hash[key.to_s].nil?
|
172
|
+
skip = true if val == 'NIL' && !repo_hash[key.to_s].nil?
|
173
|
+
puts "#{ name } => k:#{ key }::v:#{ val }:::#{ skip }:[#{ repo_hash[key.to_s] }]"
|
174
|
+
end
|
170
175
|
end
|
171
176
|
|
172
177
|
next if skip
|
data/lib/cheftacular/helper.rb
CHANGED
@@ -303,6 +303,12 @@ class Cheftacular
|
|
303
303
|
if git_output.blank?
|
304
304
|
puts "! The remote organization #{ org_name_to_check } does not have the repository: #{ @options['repository'] }! Please verify your repositories and try again"
|
305
305
|
|
306
|
+
exit
|
307
|
+
elsif !git_output.include?(revision_to_check) && output_mode == 'display_for_check'
|
308
|
+
puts "WARNING! The commit #{ repo_state_hash['revision'] } is NOT the latest for the branch #{ repo_state_hash['branch'] } in organization #{ repo_state_hash['deploy_organization'] }!"
|
309
|
+
|
310
|
+
puts "Please re-run your deploy again and if this continues to not work, check with your DevOps personel!"
|
311
|
+
|
306
312
|
exit
|
307
313
|
elsif !git_output.include?(revision_to_check)
|
308
314
|
puts "! The remote organization #{ org_name_to_check } does not have a revision / branch #{ revision_to_check } for repository: #{ @options['repository'] } !"
|
@@ -330,6 +330,7 @@ class Cheftacular
|
|
330
330
|
end
|
331
331
|
|
332
332
|
locs['chef-repo'] = Dir.getwd
|
333
|
+
locs['true-root'] = File.expand_path("#{ locs['chef-repo'] }/..")
|
333
334
|
locs['roles'] = File.expand_path("#{ locs['chef-repo'] }/roles")
|
334
335
|
locs['nodes'] = File.expand_path("#{ locs['chef-repo'] }/nodes_dir") #DO NOT RENAME THIS TO NODES
|
335
336
|
locs['root'] = locs['chef-repo'] unless locs['root']
|
@@ -48,7 +48,7 @@ class Cheftacular
|
|
48
48
|
|
49
49
|
log_data, timestamp = start_apt_updater( n.name, n.public_ipaddress, options, locs, passwords)
|
50
50
|
|
51
|
-
logs_bag_hash["#{ n.name }-upgrade"] = { text: log_data.scrub_pretty_text, timestamp: timestamp }
|
51
|
+
#logs_bag_hash["#{ n.name }-upgrade"] = { text: log_data.scrub_pretty_text, timestamp: timestamp }
|
52
52
|
end
|
53
53
|
|
54
54
|
on ( nodes.map { |n| @config['cheftacular']['deploy_user'] + "@" + n.public_ipaddress } ), in: :groups, limit: 5, wait: 120 do |host|
|
@@ -59,7 +59,7 @@ class Cheftacular
|
|
59
59
|
start_sys_restarter( n.name, n.public_ipaddress, options, locs, passwords)
|
60
60
|
end if @options['rolling_restart']
|
61
61
|
|
62
|
-
|
62
|
+
#@config['ChefDataBag'].save_logs_bag
|
63
63
|
end
|
64
64
|
end
|
65
65
|
end
|
@@ -4,12 +4,14 @@ class Cheftacular
|
|
4
4
|
def update_cookbook
|
5
5
|
@config['documentation']['stateless_action'][__method__] ||= {}
|
6
6
|
@config['documentation']['stateless_action'][__method__]['long_description'] = [
|
7
|
-
"`cft update_cookbook [COOKBOOK_NAME] [INSTALL_VERSION]` allows you to specifically update a single cookbook",
|
7
|
+
"`cft update_cookbook [COOKBOOK_NAME] [INSTALL_VERSION|local]` allows you to specifically update a single cookbook",
|
8
8
|
|
9
9
|
[
|
10
10
|
" 1. This command passed with no arguments will update TheCheftacularCookbook",
|
11
11
|
|
12
|
-
" 2.
|
12
|
+
" 2. If the 2nd argument is local, the command will drop a local version of the cookbook onto your chef-repo",
|
13
|
+
|
14
|
+
" 3. Aliased to `cft uc`"
|
13
15
|
]
|
14
16
|
]
|
15
17
|
|
@@ -17,6 +19,12 @@ class Cheftacular
|
|
17
19
|
end
|
18
20
|
end
|
19
21
|
|
22
|
+
class InitializationAction
|
23
|
+
def update_cookbook
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
20
28
|
class StatelessAction
|
21
29
|
def update_cookbook cookbook='TheCheftacularCookbook', version='latest'
|
22
30
|
raise "This action can only be performed if the mode is set to devops" unless @config['helper'].running_in_mode?('devops')
|
@@ -24,23 +32,34 @@ class Cheftacular
|
|
24
32
|
cookbook = ARGV[1] if ARGV[1]
|
25
33
|
version = ARGV[2] if ARGV[2]
|
26
34
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
+
if version == 'local'
|
36
|
+
if File.exists?(File.expand_path("#{ @config['locs']['true-root'] }/#{ cookbook }"))
|
37
|
+
`rm -Rf #{ @config['locs']['cookbooks'] }/#{ cookbook }` if File.exists?(File.expand_path("#{ @config['locs']['cookbooks'] }/#{ cookbook }"))
|
38
|
+
`cp -Rf #{ @config['locs']['true-root'] }/#{ cookbook } #{ @config['locs']['cookbooks'] }/#{ cookbook }`
|
39
|
+
|
40
|
+
`rm -Rf #{ @config['locs']['true-root'] }/#{ cookbook }/.git`
|
41
|
+
else
|
42
|
+
puts "You do not have #{ cookbook } under the #{ @config['locs']['true-root'] } directory!"
|
43
|
+
end
|
44
|
+
else
|
45
|
+
@config['cheftacular']['wrapper_cookbooks'].split(',').each do |wrapper_cookbook|
|
46
|
+
wrapper_cookbook_loc = "#{ @config['locs']['cookbooks'] }/#{ wrapper_cookbook }"
|
47
|
+
FileUtils.rm_rf(File.expand_path("#{ @config['locs']['berks'] }/cookbooks")) if File.exists?(File.expand_path("#{ @config['locs']['berks'] }/cookbooks"))
|
48
|
+
|
49
|
+
Dir.chdir wrapper_cookbook_loc
|
50
|
+
puts "Installing new cookbooks..."
|
51
|
+
out = `berks install`
|
52
|
+
puts "#{out}\nFinished fetching cookbooks, moving #{ cookbook } into local chef repo"
|
35
53
|
|
36
|
-
|
54
|
+
specific_cookbook = @config['filesystem'].parse_berkshelf_cookbook_versions(version).select {|key| key.include?(cookbook)}[cookbook]
|
37
55
|
|
38
|
-
|
56
|
+
puts "Moving #{ cookbook } (#{ specific_cookbook['version'] })[#{ specific_cookbook['mtime'] }] to your chef-repo!"
|
39
57
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
58
|
+
`rm -Rf #{ @config['locs']['cookbooks'] }/#{ cookbook }` if File.exists?(File.expand_path("#{ @config['locs']['cookbooks'] }/#{ cookbook }"))
|
59
|
+
`cp -Rf #{ @config['locs']['berks'] }/#{ specific_cookbook['location'] } #{ @config['locs']['cookbooks'] }/#{ cookbook }`
|
60
|
+
|
61
|
+
break
|
62
|
+
end
|
44
63
|
end
|
45
64
|
end
|
46
65
|
|
@@ -0,0 +1,31 @@
|
|
1
|
+
|
2
|
+
class Cheftacular
|
3
|
+
class StatelessActionDocumentation
|
4
|
+
def update_the_cheftacular_cookbook_and_knife_upload
|
5
|
+
@config['documentation']['stateless_action'][__method__] ||= {}
|
6
|
+
@config['documentation']['stateless_action'][__method__]['long_description'] = [
|
7
|
+
"`cft update_the_cheftacular_cookbook_and_knife_upload` update your local cheftacular cookbook with your local (out of chef-repo) cheftacular " +
|
8
|
+
"cookbook and knife_upload afterwards.",
|
9
|
+
|
10
|
+
[
|
11
|
+
" 1. This method is aliased to `cft utccaku` and `cft utcc`."
|
12
|
+
]
|
13
|
+
]
|
14
|
+
|
15
|
+
@config['documentation']['stateless_action']['utccaku']['short_description'] = 'Runs `update_cookbook` and `knife_upload` for the cheftacular cookbook'
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
class StatelessAction
|
20
|
+
def update_the_cheftacular_cookbook_and_knife_upload
|
21
|
+
raise "This action can only be performed if the mode is set to devops" unless @config['helper'].running_in_mode?('devops')
|
22
|
+
|
23
|
+
@config['stateless_action'].update_cookbook('TheCheftacularCookbook', 'local')
|
24
|
+
|
25
|
+
@config['stateless_action'].knife_upload
|
26
|
+
end
|
27
|
+
|
28
|
+
alias_method :utccaku, :update_the_cheftacular_cookbook_and_knife_upload
|
29
|
+
alias_method :utcc, :update_the_cheftacular_cookbook_and_knife_upload
|
30
|
+
end
|
31
|
+
end
|
data/lib/cheftacular/version.rb
CHANGED
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.14.
|
4
|
+
version: 2.14.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Louis Alridge
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-03-
|
11
|
+
date: 2016-03-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: hashie
|
@@ -338,6 +338,7 @@ files:
|
|
338
338
|
- lib/cheftacular/stateless_actions/update_cloudflare_dns_from_cloud.rb
|
339
339
|
- lib/cheftacular/stateless_actions/update_cookbook.rb
|
340
340
|
- lib/cheftacular/stateless_actions/update_split_branches.rb
|
341
|
+
- lib/cheftacular/stateless_actions/update_the_cheftacular_cookbook_and_knife_upload.rb
|
341
342
|
- lib/cheftacular/stateless_actions/update_tld.rb
|
342
343
|
- lib/cheftacular/stateless_actions/upload_nodes.rb
|
343
344
|
- lib/cheftacular/stateless_actions/upload_roles.rb
|