cheftacular 2.7.2 → 2.8.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.
- checksums.yaml +4 -4
- data/lib/cheftacular/actions/check.rb +19 -7
- data/lib/cheftacular/actions/deploy.rb +8 -4
- data/lib/cheftacular/dns.rb +3 -4
- data/lib/cheftacular/getter.rb +15 -5
- data/lib/cheftacular/initializer.rb +7 -2
- data/lib/cheftacular/parser.rb +9 -6
- data/lib/cheftacular/stateless_actions/backups.rb +40 -25
- data/lib/cheftacular/stateless_actions/environment.rb +1 -0
- data/lib/cheftacular/stateless_actions/initialize_data_bag_contents.rb +13 -0
- data/lib/cheftacular/stateless_actions/remove_client.rb +1 -1
- data/lib/cheftacular/stateless_actions/role_toggle.rb +4 -0
- data/lib/cheftacular/stateless_actions/update_tld.rb +0 -2
- data/lib/cheftacular/version.rb +1 -1
- data/lib/sshkit/actions/start_task.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0eeae950bbcfe62a1c46bc55de2d7eb5ae3df178
|
4
|
+
data.tar.gz: 42f580f12bc1949089b59dfc44320db04e5f80f0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d459b3ef3d98c11a77dae22b15f5d3b882608d54735bd4675caf3a10da5146856a029a2ee3517fafcf11cdfebb3503d267b1ebe7f8100ea68438c4f37e198f9d
|
7
|
+
data.tar.gz: 86a4c1f2d457225a047dccfc4cca6b6648852df73fa0cd673efa14dbc1939889b3eab05bb70bb9c84420f0b3b9ea3597defd1d4069c42a1e05bafbaae05f1c6c
|
@@ -3,13 +3,18 @@ class Cheftacular
|
|
3
3
|
def check
|
4
4
|
@config['documentation']['action'] << [
|
5
5
|
"`cft check` Checks the commits for all servers for a repository (for an environment) and returns them in a simple chart. " +
|
6
|
-
"Also shows when these commits were deployed to the server."
|
6
|
+
"Also shows when these commits were deployed to the server.",
|
7
|
+
|
8
|
+
[
|
9
|
+
" 1. If the node has special repository based keys from TheCheftacularCookbook, this command will also display information " +
|
10
|
+
"about the branch and organization currently deployed to the node(s)."
|
11
|
+
]
|
7
12
|
]
|
8
13
|
end
|
9
14
|
end
|
10
15
|
|
11
16
|
class Action
|
12
|
-
def check commit_hash={}, have_revisions=false
|
17
|
+
def check commit_hash={}, have_revisions=false, have_changed_orgs=false
|
13
18
|
@config['filesystem'].cleanup_file_caches('current-nodes')
|
14
19
|
|
15
20
|
nodes = @config['getter'].get_true_node_objects
|
@@ -22,19 +27,26 @@ class Cheftacular
|
|
22
27
|
|
23
28
|
puts("Beginning commit check run for #{ n.name } (#{ n.public_ipaddress }) on role #{ options['role'] }") unless options['quiet']
|
24
29
|
|
25
|
-
commit_hash[n.name]
|
26
|
-
|
27
|
-
|
30
|
+
commit_hash[n.name] = start_commit_check( n.name, n.public_ipaddress, options, locs, cheftacular)
|
31
|
+
|
32
|
+
if n.normal_attributes.has_key?(options['repository'])
|
33
|
+
commit_hash[n.name]['branch'] = n.normal_attributes[options['repository']]['repo_branch'] if n.normal_attributes[options['repository']].has_key?('repo_branch')
|
34
|
+
commit_hash[n.name]['organization'] = n.normal_attributes[options['repository']]['repo_group'] if n.normal_attributes[options['repository']].has_key?('repo_group')
|
35
|
+
end
|
36
|
+
|
37
|
+
have_revisions = true if commit_hash[n.name].has_key?('branch')
|
38
|
+
have_changed_orgs = true if commit_hash[n.name].has_key?('organization')
|
28
39
|
end
|
29
40
|
|
30
|
-
puts "\n#{ 'name'.ljust(21) }#{ 'deployed_on'.ljust(22) } #{ 'commit'.ljust(40) } #{'revision'.ljust(
|
41
|
+
puts "\n#{ 'name'.ljust(21) }#{ 'deployed_on'.ljust(22) } #{ 'commit'.ljust(40) } #{'revision'.ljust(29) if have_revisions } #{'organization'.ljust(30) if have_changed_orgs }"
|
31
42
|
nodes.each do |n|
|
32
43
|
unless commit_hash[n.name]['name'].blank?
|
33
44
|
out = []
|
34
45
|
out << n.name.ljust(20, '_')
|
35
46
|
out << commit_hash[n.name]['time'].ljust(21)
|
36
47
|
out << commit_hash[n.name]['name'].ljust(39)
|
37
|
-
out << commit_hash[n.name]['branch'].ljust(
|
48
|
+
out << commit_hash[n.name]['branch'].ljust(29) if commit_hash[n.name].has_key?('branch')
|
49
|
+
out << commit_hash[n.name]['organization'].ljust(30) if commit_hash[n.name].has_key?('organization')
|
38
50
|
|
39
51
|
puts out.join(' ')
|
40
52
|
end
|
@@ -6,13 +6,17 @@ class Cheftacular
|
|
6
6
|
"Logs of the run itself will be sent to the local log directory in the application (or chef-repo) where the run was conducted.",
|
7
7
|
|
8
8
|
[
|
9
|
-
" 1.
|
10
|
-
"but only if your cookbooks support switching revisions based on tags / branch names.",
|
9
|
+
" 1. The `-Z REVISION` flag can be used with TheCheftacularCookbook to set a revision your app will run. ",
|
11
10
|
|
12
|
-
" 2.
|
11
|
+
" 2. The `-O ORGANIZATION` flag can be used with TheCheftacularCookbook to set an *organization* your app can try " +
|
12
|
+
"deploying from, your git user needs access to these forks / organization(s).",
|
13
|
+
|
14
|
+
" 3. The `-z|--unset-github-deploy-args` option will clear your current `-Z` and `-O` flags.",
|
15
|
+
|
16
|
+
" 4. This command will also run migrations on both an role's normal servers and its split servers if certain " +
|
13
17
|
"conditions are met (such as the role having a database, etc).",
|
14
18
|
|
15
|
-
"
|
19
|
+
" 5. The `-v|--verbose` option will cause failed deploys to output to the terminal window and to their normal log file. Useful for debugging."
|
16
20
|
]
|
17
21
|
]
|
18
22
|
end
|
data/lib/cheftacular/dns.rb
CHANGED
@@ -134,15 +134,14 @@ class Cheftacular
|
|
134
134
|
end
|
135
135
|
|
136
136
|
def should_route_wildcard_requests? node_name, env, descriptor, should_route_requests=false
|
137
|
-
repository_hash
|
137
|
+
repository_hash = descriptor.blank? ? {} : @config['parser'].parse_repository_hash_from_string(descriptor)
|
138
|
+
repository_hash ||= {}
|
138
139
|
|
139
140
|
if repository_hash.empty?
|
140
141
|
puts "Blank repository hash parsed for #{ node_name } in #{ env } with descriptor #{ descriptor }. Setting should route wildcard requests for server to false."
|
141
142
|
end
|
142
143
|
|
143
|
-
|
144
|
-
|
145
|
-
if @config['helper'].does_cheftacular_config_have?(["repositories:#{ repository_hash['role'] }:route_wildcard_requests_for_tld"])
|
144
|
+
if repository_hash.has_key?('role') && @config['helper'].does_cheftacular_config_have?(["repositories:#{ repository_hash['role'] }:route_wildcard_requests_for_tld"])
|
146
145
|
should_route_requests = @config['cheftacular']['repositories'][repository_hash['role']]['route_wildcard_requests_for_tld']
|
147
146
|
end
|
148
147
|
|
data/lib/cheftacular/getter.rb
CHANGED
@@ -120,11 +120,11 @@ class Cheftacular
|
|
120
120
|
ret_hash
|
121
121
|
end
|
122
122
|
|
123
|
-
def
|
123
|
+
def get_db_primary_node_and_nodes
|
124
124
|
nodes = get_true_node_objects true
|
125
125
|
target_db_role = get_current_repo_config['db_primary_host_role']
|
126
126
|
|
127
|
-
@config['parser'].exclude_nodes( nodes, [{ unless: "role[#{ target_db_role }]" }, { if: { not_env: @options['env'] } }], true)
|
127
|
+
[@config['parser'].exclude_nodes( nodes, [{ unless: "role[#{ target_db_role }]" }, { if: { not_env: @options['env'] } }], true), nodes]
|
128
128
|
end
|
129
129
|
|
130
130
|
def get_split_branch_hash ret={}
|
@@ -135,13 +135,23 @@ class Cheftacular
|
|
135
135
|
ret
|
136
136
|
end
|
137
137
|
|
138
|
-
def get_address_hash node_name, ret={}
|
138
|
+
def get_address_hash node_name, load_out_of_env_addresses=false, ret={}
|
139
|
+
break_on_found = false
|
140
|
+
|
139
141
|
@config['chef_environments'].each do |env|
|
140
|
-
next
|
142
|
+
next if !load_out_of_env_addresses && !@config.has_key?(env) #in case the env hashes are not loaded
|
143
|
+
@config['initializer'].initialize_data_bags_for_environment(env, false, ['addresses']) if @options['env'] != env
|
141
144
|
|
142
145
|
@config[env]['addresses_bag_hash']['addresses'].each do |serv_hash|
|
143
|
-
|
146
|
+
if serv_hash['name'] == node_name
|
147
|
+
ret[serv_hash['name']] = { "dn" => serv_hash['dn'], "priv" => serv_hash['address'], "pub" => serv_hash['public'] }
|
148
|
+
break_on_found = true
|
149
|
+
|
150
|
+
break
|
151
|
+
end
|
144
152
|
end
|
153
|
+
|
154
|
+
break if break_on_found
|
145
155
|
end
|
146
156
|
|
147
157
|
ret
|
@@ -151,14 +151,18 @@ class Cheftacular
|
|
151
151
|
@options['negative_role'] = name
|
152
152
|
end
|
153
153
|
|
154
|
-
opts.on('-z', '--unset-
|
155
|
-
@options['
|
154
|
+
opts.on('-z', '--unset-github-deploy-args', 'Tells the chef-server that we want to return to using the default revision and organization for a repository') do
|
155
|
+
@options['unset_github_deploy_args'] = true
|
156
156
|
end
|
157
157
|
|
158
158
|
opts.on('-Z REVISION', '--revision REVISION', "Tells the chef-server what branch / revision it should deploy for a repository") do |revision|
|
159
159
|
@options['target_revision'] = revision
|
160
160
|
end
|
161
161
|
|
162
|
+
opts.on('-O ORGANIZATION', '--deploy-org ORGANIZATION', "Tells the chef-server to use a certain organization on deploys (git user must have access)") do |org|
|
163
|
+
@options['deploy_organization'] = org
|
164
|
+
end
|
165
|
+
|
162
166
|
# client-list
|
163
167
|
opts.on('-W', '--with-priv', "On client-list this will show each server's private addresses") do
|
164
168
|
@options['with_private'] = true
|
@@ -416,6 +420,7 @@ class Cheftacular
|
|
416
420
|
|
417
421
|
#TODO Reevaluate for non-rvm setups
|
418
422
|
@config['bundle_command'] = "/home/#{ @config['cheftacular']['deploy_user'] }/.rvm/gems/#{ @config['ruby_string'].chomp }@global/bin/bundle"
|
423
|
+
@config['ruby_command'] = "/home/#{ @config['cheftacular']['deploy_user'] }/.rvm/rubies/#{ @config['ruby_string'].chomp }/bin/ruby"
|
419
424
|
end
|
420
425
|
|
421
426
|
def initialize_passwords env, refresh_bag=false
|
data/lib/cheftacular/parser.rb
CHANGED
@@ -21,7 +21,7 @@ class Cheftacular
|
|
21
21
|
|
22
22
|
parse_address(@options['address']) if @options['address']
|
23
23
|
|
24
|
-
|
24
|
+
parse_and_set_deploy_args if @options['target_revision'] || @options['deploy_organization'] || @options['unset_github_deploy_args']
|
25
25
|
end
|
26
26
|
|
27
27
|
#try and get the most accurate name of the repo
|
@@ -99,15 +99,18 @@ class Cheftacular
|
|
99
99
|
end
|
100
100
|
end
|
101
101
|
|
102
|
-
def
|
102
|
+
def parse_and_set_deploy_args
|
103
103
|
raise "Cannot set or unset target_revision without a role" unless @options['role']
|
104
104
|
|
105
|
-
|
106
|
-
|
105
|
+
repo_state_hash = @config[@options['env']]['config_bag_hash'][@options['sub_env']]['app_revisions'][@config['getter'].get_repository_from_role_name(@options['role'])]
|
106
|
+
repo_state_hash ||= {}
|
107
107
|
|
108
|
-
|
109
|
-
|
108
|
+
repo_state_hash['revision'] = @options['target_revision'] if @options['target_revision']
|
109
|
+
repo_state_hash['deploy_organization'] = @options['deploy_organization'] if @options['deploy_organization']
|
110
110
|
|
111
|
+
if @options['unset_github_deploy_args']
|
112
|
+
repo_state_hash['revision'] = nil
|
113
|
+
repo_state_hash['deploy_organization'] = nil
|
111
114
|
end
|
112
115
|
|
113
116
|
@config['ChefDataBag'].save_config_bag
|
@@ -3,7 +3,7 @@ class Cheftacular
|
|
3
3
|
class StatelessActionDocumentation
|
4
4
|
def backups
|
5
5
|
@config['documentation']['stateless_action'] << [
|
6
|
-
"`cft backups [activate|deactivate|load|
|
6
|
+
"`cft backups [activate|deactivate|load|restore]` this command " +
|
7
7
|
"sets the fetch_backups and restore_backups flags in your config data bag for an environment. " +
|
8
8
|
"These can be used to give application developers a way to trigger / untrigger restores in an environment",
|
9
9
|
|
@@ -15,7 +15,7 @@ class Cheftacular
|
|
15
15
|
" 3. `load` will fetch the latest backup from the production primary **if it doesn't already exist on " +
|
16
16
|
"the server** and run the _backup loading command_ to load this backup into the env.",
|
17
17
|
|
18
|
-
" 4. `
|
18
|
+
" 4. `restore` will simply just run the _backup loading command_ to load the latest backup onto the server."
|
19
19
|
]
|
20
20
|
]
|
21
21
|
|
@@ -27,7 +27,7 @@ class Cheftacular
|
|
27
27
|
def backups command=''
|
28
28
|
command = ARGV[1] if command.blank?
|
29
29
|
|
30
|
-
raise "Unsupported command (#{ command }) for cft backups" unless command =~ /activate|deactivate|load|
|
30
|
+
raise "Unsupported command (#{ command }) for cft backups" unless command =~ /activate|deactivate|load|restore/
|
31
31
|
|
32
32
|
self.send("backups_#{ command }")
|
33
33
|
end
|
@@ -59,7 +59,7 @@ class Cheftacular
|
|
59
59
|
@options['role'] = old_role
|
60
60
|
@options['env'] = old_env
|
61
61
|
|
62
|
-
target_db_primary = @config['getter'].
|
62
|
+
target_db_primary, nodes = @config['getter'].get_db_primary_node_and_nodes
|
63
63
|
|
64
64
|
args_config = [
|
65
65
|
{ unless: "role[#{ @config['cheftacular']['backup_config']['global_backup_role_name'] }]" },
|
@@ -67,14 +67,14 @@ class Cheftacular
|
|
67
67
|
]
|
68
68
|
|
69
69
|
backup_master = @config['parser'].exclude_nodes( nodes, args_config, true)
|
70
|
-
backup_master_local_ip = @config['getter'].get_address_hash(backup_master.first.name)['priv']
|
70
|
+
backup_master_local_ip = @config['getter'].get_address_hash(backup_master.first.name, true)[backup_master.first.name]['priv']
|
71
71
|
|
72
72
|
options, locs, ridley, logs_bag_hash, pass_bag_hash, bundle_command, cheftacular, passwords = @config['helper'].set_local_instance_vars
|
73
73
|
|
74
74
|
on ( backup_master.map { |n| @config['cheftacular']['deploy_user'] + "@" + n.public_ipaddress } ) do |host|
|
75
75
|
n = get_node_from_address(nodes, host.hostname)
|
76
76
|
|
77
|
-
puts("Beginning latest db_fetch_and_check for #{ n.name } (#{ n.public_ipaddress }) for env #{
|
77
|
+
puts("Beginning latest db_fetch_and_check for #{ n.name } (#{ n.public_ipaddress }) for env #{ backup_env }") unless options['quiet']
|
78
78
|
|
79
79
|
status_hash['latest_backup'] = start_db_check_and_fetch( n.name, n.public_ipaddress, options, locs, cheftacular, passwords)
|
80
80
|
end
|
@@ -89,22 +89,24 @@ class Cheftacular
|
|
89
89
|
start_db_backup_fetch( n.name, n.public_ipaddress, options, locs, cheftacular, passwords, backup_master_local_ip, status_hash['latest_backup'])
|
90
90
|
end
|
91
91
|
|
92
|
-
|
92
|
+
backups_restore
|
93
93
|
end
|
94
94
|
|
95
|
-
def
|
96
|
-
target_db_primary
|
97
|
-
applications_as_string
|
98
|
-
env_pg_pass
|
95
|
+
def backups_restore
|
96
|
+
target_db_primary, nodes = @config['getter'].get_db_primary_node_and_nodes
|
97
|
+
applications_as_string = @config['getter'].get_repo_names_for_repositories.keys.join(',')
|
98
|
+
env_pg_pass = @config[@options['env']]['chef_passwords_bag_hash']['pg_pass']
|
99
99
|
|
100
100
|
options, locs, ridley, logs_bag_hash, pass_bag_hash, bundle_command, cheftacular, passwords = @config['helper'].set_local_instance_vars
|
101
101
|
|
102
|
+
ruby_command = @config['ruby_command']
|
103
|
+
|
102
104
|
on ( target_db_primary.map { |n| @config['cheftacular']['deploy_user'] + "@" + n.public_ipaddress } ) do |host|
|
103
105
|
n = get_node_from_address(nodes, host.hostname)
|
104
106
|
|
105
107
|
puts("Beginning db_backup_run for #{ n.name } (#{ n.public_ipaddress }) for env #{ options['env'] }") unless options['quiet']
|
106
108
|
|
107
|
-
|
109
|
+
start_db_backup_restore( n.name, n.public_ipaddress, options, locs, cheftacular, passwords, applications_as_string, env_pg_pass, ruby_command )
|
108
110
|
end
|
109
111
|
end
|
110
112
|
|
@@ -154,46 +156,59 @@ module SSHKit
|
|
154
156
|
end
|
155
157
|
|
156
158
|
return_hash['file_check'] = true
|
157
|
-
return_hash['
|
159
|
+
return_hash['filename'] = [target_dir].flatten.last
|
158
160
|
return_hash['file_dir'] = case cheftacular['backup_filesystem']
|
159
161
|
when 'backup_gem' then target_dir.first
|
160
162
|
when 'raw' then base_dir
|
161
163
|
end
|
162
164
|
|
165
|
+
return_hash['backup_master_path'] = case cheftacular['backup_filesystem']
|
166
|
+
when 'backup_gem' then File.join(base_dir, return_hash['file_dir'], return_hash['filename'])
|
167
|
+
when 'raw' then File.join(base_dir, return_hash['filename'])
|
168
|
+
end
|
169
|
+
|
163
170
|
return_hash
|
164
171
|
end
|
165
172
|
|
166
173
|
def start_db_backup_fetch name, ip_address, options, locs, cheftacular, passwords, backup_master_local_ip, backup_hash, out=[]
|
167
|
-
|
168
|
-
|
174
|
+
full_backup_dir = File.join(cheftacular['backup_config']['db_primary_backup_path'], backup_hash['file_dir'])
|
175
|
+
full_backup_path = File.join(full_backup_dir, backup_hash['filename'])
|
176
|
+
|
177
|
+
if sudo_test( passwords[ip_address], full_backup_path ) #true if dir exists
|
178
|
+
puts "#{ name } (#{ ip_address }) already has the backup at #{ full_backup_path }, skipping #{ __method__ }..."
|
169
179
|
|
170
180
|
return true
|
171
181
|
end
|
172
182
|
|
173
|
-
sudo_execute( passwords[ip_address], :mkdir, '-p',
|
183
|
+
sudo_execute( passwords[ip_address], :mkdir, '-p', full_backup_dir )
|
174
184
|
|
175
|
-
sudo_execute( passwords[ip_address], :chown, "#{ cheftacular['deploy_user'] }:#{ cheftacular['deploy_user'] }",
|
185
|
+
sudo_execute( passwords[ip_address], :chown, "#{ cheftacular['deploy_user'] }:#{ cheftacular['deploy_user'] }", full_backup_dir )
|
176
186
|
|
177
|
-
sudo_execute( passwords[ip_address], :chmod, cheftacular['backup_config']['backup_dir_mode'],
|
187
|
+
sudo_execute( passwords[ip_address], :chmod, cheftacular['backup_config']['backup_dir_mode'], full_backup_dir )
|
178
188
|
|
179
|
-
execute( :scp, "#{ cheftacular['deploy_user'] }@#{ backup_master_local_ip }:#{ backup_hash['
|
189
|
+
execute( :scp, '-oStrictHostKeyChecking=no', "#{ cheftacular['deploy_user'] }@#{ backup_master_local_ip }:#{ backup_hash['backup_master_path'] }", full_backup_path )
|
180
190
|
|
181
|
-
puts "Finished transferring #{
|
191
|
+
puts "Finished transferring #{ full_backup_path } to #{ name }(#{ ip_address })..."
|
182
192
|
end
|
183
193
|
|
184
|
-
def
|
194
|
+
def start_db_backup_restore name, ip_address, options, locs, cheftacular, passwords, applications_as_string, env_pg_pass, ruby_command, out=''
|
195
|
+
log_loc, timestamp = set_log_loc_and_timestamp(locs)
|
196
|
+
|
185
197
|
puts "Beginning backup run on #{ name } (#{ ip_address }), this command may take a while to complete..."
|
198
|
+
|
186
199
|
case cheftacular['backup_filesystem']
|
187
200
|
when 'backup_gem'
|
188
|
-
#'ruby /root/backup_management.rb /mnt/postgresbackups/backups ENVIRONMENT APPLICATIONS PG_PASS > /root/restore.log 2>&1'
|
189
201
|
command = cheftacular['backup_config']['backup_load_command']
|
190
202
|
command = command.gsub('ENVIRONMENT', options['env']).gsub('APPLICATIONS', applications_as_string).gsub('PG_PASS', env_pg_pass)
|
203
|
+
command = command.gsub('RUBY_COMMAND', ruby_command )
|
191
204
|
|
192
|
-
|
205
|
+
out << sudo_capture( passwords[ip_address], command )
|
193
206
|
when 'raw'
|
194
207
|
end
|
195
208
|
|
196
|
-
|
209
|
+
::File.open("#{ log_loc }/#{ name }-backup-restore-#{ timestamp }.txt", "w") { |f| f.write(out.scrub_pretty_text) } unless options['no_logs']
|
210
|
+
|
211
|
+
puts "Finished executing backup command on #{ name } (#{ ip_address }). Wrote logs to #{ log_loc }/#{ name }-backup-restore-#{ timestamp }.txt"
|
197
212
|
end
|
198
213
|
|
199
214
|
def backup_gem_dir_sort password, cheftacular, base_dir
|
@@ -220,7 +235,7 @@ module SSHKit
|
|
220
235
|
|
221
236
|
target_file = sudo_capture( password, :ls, File.join(base_dir, target_dir) ).split(' ').last
|
222
237
|
|
223
|
-
[
|
238
|
+
[ target_dir, target_file ]
|
224
239
|
end
|
225
240
|
end
|
226
241
|
end
|
@@ -50,6 +50,7 @@ class Cheftacular
|
|
50
50
|
when 'boot'
|
51
51
|
initial_servers.each_pair do |name, config_hash|
|
52
52
|
next if nodes.map { |n| n.name }.include?(name)
|
53
|
+
config_hash ||= {}
|
53
54
|
|
54
55
|
@options['node_name'] = name
|
55
56
|
@options['flavor_name'] = config_hash.has_key?('flavor') ? config_hash['flavor'] : @config['cheftacular']['default_flavor_name']
|
@@ -168,6 +168,19 @@ class Cheftacular
|
|
168
168
|
save_on_finish = true
|
169
169
|
end
|
170
170
|
|
171
|
+
@config['getter'].get_repo_names_for_repositories.each_key do |repo_name|
|
172
|
+
#upgrades pre 2.7.2 to 2.8.0+ for config bag formats TODO DELETE ME (remove after 3.0.0)
|
173
|
+
if hash[env]['app_revisions'].has_key?(repo_name) && hash[env]['app_revisions'][repo_name].class.to_s == 'String'
|
174
|
+
hash[env]['app_revisions'][repo_name] = { "revision" => hash[env]['app_revisions'][repo_name] }
|
175
|
+
end
|
176
|
+
|
177
|
+
unless hash[env]['app_revisions'].has_key?(repo_name)
|
178
|
+
hash[env]['app_revisions'][repo_name] = {}
|
179
|
+
|
180
|
+
save_on_finish = true
|
181
|
+
end
|
182
|
+
end
|
183
|
+
|
171
184
|
unless hash[env].has_key?('cloudflare_activated_domains')
|
172
185
|
hash[env]['cloudflare_activated_domains'] = []
|
173
186
|
|
@@ -62,7 +62,7 @@ class Cheftacular
|
|
62
62
|
@config['ChefDataBag'].save_addresses_bag
|
63
63
|
end
|
64
64
|
end
|
65
|
-
|
65
|
+
|
66
66
|
puts("Done. Please verify that the output of the next line(s) match your expectations (running client-list)") if @options['verbose']
|
67
67
|
|
68
68
|
puts(`client-list`) if @options['verbose']
|
@@ -2,6 +2,10 @@
|
|
2
2
|
class Cheftacular
|
3
3
|
class StatelessActionDocumentation
|
4
4
|
def role_toggle
|
5
|
+
#set these config vars as they may not be loaded on an initialization run in a application repo
|
6
|
+
@config['cheftacular']['role_toggling'] ||= {}
|
7
|
+
@config['cheftacular']['role_toggling']['deactivated_role_suffix'] ||= '_deactivate'
|
8
|
+
|
5
9
|
@config['documentation']['stateless_action'] << [
|
6
10
|
"`cft role_toggle NODE_NAME ROLE_NAME activate|deactivate` This command will allow you to **toggle** roles on nodes without using `cft upload_nodes`",
|
7
11
|
|
@@ -54,8 +54,6 @@ class Cheftacular
|
|
54
54
|
|
55
55
|
@config[@options['env']]['config_bag_hash'][@options['sub_env']]['tld'] = target_tld
|
56
56
|
|
57
|
-
puts "BAG TLD::#{ @config[@options['env']]['config_bag_hash'][@options['sub_env']]['tld'] }"
|
58
|
-
|
59
57
|
@config['ChefDataBag'].save_config_bag
|
60
58
|
@config['ChefDataBag'].save_addresses_bag
|
61
59
|
end
|
data/lib/cheftacular/version.rb
CHANGED
@@ -7,7 +7,7 @@ module SSHKit
|
|
7
7
|
|
8
8
|
puts "Running #{ command } for #{ name } (#{ ip_address }) (Run with with --debug to generate a log as well)"
|
9
9
|
|
10
|
-
target_loc = "
|
10
|
+
target_loc = "#{ cheftacular['base_file_path'] }/#{ options['repository'] }/current"
|
11
11
|
|
12
12
|
if test( target_loc )
|
13
13
|
puts "#{ name } (#{ ip_address }) cannot run #{ command } as there is no directory at #{ target_loc }!"
|
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.
|
4
|
+
version: 2.8.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-
|
11
|
+
date: 2015-10-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: hashie
|