cheftacular 2.4.0 → 2.4.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/README.md +8 -6
- data/lib/cheftacular/actions/deploy.rb +19 -4
- data/lib/cheftacular/chef/data_bag.rb +2 -0
- data/lib/cheftacular/dns.rb +1 -1
- data/lib/cheftacular/initializer.rb +1 -1
- data/lib/cheftacular/stateless_actions/clean_cookbooks.rb +2 -2
- data/lib/cheftacular/stateless_actions/slack.rb +7 -4
- data/lib/cheftacular/version.rb +1 -1
- metadata +3 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d1824b19ce37e0733ceb249e6bbac87eecbb81d5
|
4
|
+
data.tar.gz: b448ce029765480b636de8ec62f4b0bd74a214a0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 513496fe5d458cc5131dfad0bf573888b6a05a762b1bce7070bf2dd639eabe03bf1ccfba52a2e8a3919048cfd22ff3a2eac0217f09417c207a005d48cadbe599
|
7
|
+
data.tar.gz: 941ccd83c2d7eaf0fcdaa40512a4f7b87c96d9b8f89caa5d6df5b9c608639ed86838c70c6eee2a83056a500f2c8a20161506a3b2ff44c0c2b14e44b4dda8149b
|
data/lib/cheftacular/README.md
CHANGED
@@ -53,7 +53,7 @@
|
|
53
53
|
|
54
54
|
2. `-z|--unset-revision` will unset a custom revision specified in the arg below and make the codebase utilize the default.
|
55
55
|
|
56
|
-
3. `-Z|--revision REVISION` will force the role you're deploying to to utilize the revision specified here. This can be a specific commit
|
56
|
+
3. `-Z|--revision REVISION` will force the role you're deploying to to utilize the revision specified here. This can be a specific commit, a branch name or even a tag.
|
57
57
|
|
58
58
|
1. Note: The system does not check if the revision exists, if you pass a non-existent revision no one will be able to deploy to that role until -Z with a correction revision or -z is passed.
|
59
59
|
|
@@ -82,6 +82,8 @@
|
|
82
82
|
|
83
83
|
1. This command also restarts services on the server and updates the code. Changes behavior slightly with the `-z|-Z` args but only if your cookbooks support switching revisions based on tags / branch names.
|
84
84
|
|
85
|
+
2. This command will also run migrations on both an role's normal servers and its split servers if certain conditions are met (such as the role having a database, etc).
|
86
|
+
|
85
87
|
7. `cft disk_report` will fetch useful statistics from every server for every environment and output it into your log directory.
|
86
88
|
|
87
89
|
8. `cft environment boot|destroy` will boot / destroy the current environment
|
@@ -187,7 +189,7 @@
|
|
187
189
|
|
188
190
|
9. `cft cloud <FIRST_LEVEL_ARG> [<SECOND_LEVEL_ARG>[:<SECOND_LEVEL_ARG_QUERY>]*] ` this command handles talking to various cloud APIs. If no args are passed nothing will happen.
|
189
191
|
|
190
|
-
1. `domain`
|
192
|
+
1. `domain` first level argument for interacting with cloud domains
|
191
193
|
|
192
194
|
1. `list` default behavior
|
193
195
|
|
@@ -207,7 +209,7 @@
|
|
207
209
|
|
208
210
|
9. `update_record:TOP_LEVEL_DOMAIN:SUBDOMAIN_NAME:IP_ADDRESS[:RECORD_TYPE[:TTL]]` similar to `create_record`.
|
209
211
|
|
210
|
-
2. `server`
|
212
|
+
2. `server` first level argument for interacting with cloud servers, if no additional args are passed the command will return a list of all servers on the preferred cloud.
|
211
213
|
|
212
214
|
1. `list` default behavior
|
213
215
|
|
@@ -220,7 +222,7 @@
|
|
220
222
|
2. NOTE! Most flavors have spaces in them, you must use quotes at the command line to utilize them!
|
221
223
|
|
222
224
|
4. `destroy:SERVER_NAME` destroys the server on the cloud. This must be an exact match of the server's actual name or the script will error.
|
223
|
-
|
225
|
+
|
224
226
|
5. `poll:SERVER_NAME` polls the cloud's server for the status of the SERVER_NAME. This command will stop polling if / when the status of the server is ACTIVE and its build progress is 100%.
|
225
227
|
|
226
228
|
6. `attach_volume:SERVER_NAME:VOLUME_NAME[:VOLUME_SIZE[:DEVICE_LOCATION]]` If VOLUME_NAME exists it will attach it if it is unattached otherwise it will create it
|
@@ -239,7 +241,7 @@
|
|
239
241
|
|
240
242
|
9. `read_volume:SERVER_NAME:VOLUME_NAME` returns the data of VOLUME_NAME if it is attached to the server.
|
241
243
|
|
242
|
-
3. `volume`
|
244
|
+
3. `volume` first level argument for interacting with cloud storage volumes, if no additional args are passed the command will return a list of all cloud storage containers.
|
243
245
|
|
244
246
|
1. `list` default behavior
|
245
247
|
|
@@ -249,7 +251,7 @@
|
|
249
251
|
|
250
252
|
4. `destroy:VOLUME_NAME` destroys the volume. This operation will not work if the volume is attached to a server.
|
251
253
|
|
252
|
-
4. `flavor`
|
254
|
+
4. `flavor` first level argument for listing the flavors available on the cloud service
|
253
255
|
|
254
256
|
1. `list` default behavior
|
255
257
|
|
@@ -31,12 +31,19 @@ class Cheftacular
|
|
31
31
|
|
32
32
|
puts("Beginning chef client run for #{ n.name } (#{ n.public_ipaddress }) on role #{ options['role'] }") unless options['quiet']
|
33
33
|
|
34
|
-
log_data, timestamp = start_deploy( n.name, n.public_ipaddress, options, locs, passwords)
|
34
|
+
log_data, timestamp, exit_status = start_deploy( n.name, n.public_ipaddress, options, locs, passwords)
|
35
35
|
|
36
|
-
logs_bag_hash["#{ n.name }-deploy"] = { text
|
36
|
+
logs_bag_hash["#{ n.name }-deploy"] = { "text" => log_data.scrub_pretty_text, "timestamp" => timestamp, "exit_status" => exit_status }
|
37
|
+
end
|
38
|
+
|
39
|
+
#Yes, you will get pinged on EVERY deploy until you fix the problem
|
40
|
+
if @config['cheftacular']['slack']['webhook']
|
41
|
+
logs_bag_hash.each_pair do |key, hash|
|
42
|
+
@config['stateless_action'].slack(hash['text'].prepend('```').insert(-1, '```')) if hash['exit_status'] && hash['exit_status'] == 1
|
43
|
+
end
|
37
44
|
end
|
38
45
|
|
39
|
-
|
46
|
+
@config['ChefDataBag'].save_logs_bag unless @options['debug'] #We don't really need to store entire chef runs in the logs bag
|
40
47
|
|
41
48
|
migrate(nodes) if @config['getter'].get_current_repo_config['database'] != 'none' && !@options['run_migration_already']
|
42
49
|
|
@@ -83,7 +90,15 @@ module SSHKit
|
|
83
90
|
|
84
91
|
puts "Succeeded deploy of #{ name } (#{ ip_address }) on role #{ options['role'] }"
|
85
92
|
|
86
|
-
[
|
93
|
+
['Successful Deploy', timestamp, 0] #return out to send to logs_bag
|
94
|
+
rescue SSHKit::Command::Failed => e
|
95
|
+
puts "@@@@@CRITICAL! Deploy failed for #{ name } (#{ ip_address })! Please check your #{ log_loc }/failed-deploy for the logs!@@@@@"
|
96
|
+
|
97
|
+
lines = e.message.split("\n").last(100).join("\n")
|
98
|
+
|
99
|
+
::File.open("#{ log_loc }/failed-deploy/#{ name }-deploy-#{ timestamp }.txt", "w") { |f| f.write(lines.scrub_pretty_text) }
|
100
|
+
|
101
|
+
[lines, timestamp, 1]
|
87
102
|
end
|
88
103
|
end
|
89
104
|
end
|
data/lib/cheftacular/dns.rb
CHANGED
@@ -62,7 +62,7 @@ class Cheftacular
|
|
62
62
|
record_hash['SRV_weight'],
|
63
63
|
record_hash['SRV_port'],
|
64
64
|
record_hash['SRV_target'],
|
65
|
-
(record_hash['activate_cloudflare'] ?
|
65
|
+
(record_hash['activate_cloudflare'] ? 0 : 1) #service_mode
|
66
66
|
)
|
67
67
|
|
68
68
|
print 'create'.ljust(20, '_')
|
@@ -417,7 +417,7 @@ class Cheftacular
|
|
417
417
|
end
|
418
418
|
|
419
419
|
def initialize_directories
|
420
|
-
['applog', 'deploy', 'rolelog', 'rvm', 'stashedlog'].each do |sub_log_directory|
|
420
|
+
['applog', 'deploy', 'failed-deploy', 'rolelog', 'rvm', 'stashedlog'].each do |sub_log_directory|
|
421
421
|
FileUtils.mkdir_p File.join( @config['locs']['chef-log'], sub_log_directory )
|
422
422
|
end
|
423
423
|
|
@@ -44,7 +44,7 @@ class Cheftacular
|
|
44
44
|
berkshelf_cookbooks.keys.each do |processed_berkshelf_cookbook|
|
45
45
|
if processed_berkshelf_cookbook.rpartition('-').first == berkshelf_cookbook.rpartition('-').first
|
46
46
|
cookbook_mtime = File.mtime(File.expand_path("#{ @config['locs']['berks'] }/#{ berkshelf_cookbook }"))
|
47
|
-
pcookbook_mtime = File.mtime(File.expand_path("#{ @
|
47
|
+
pcookbook_mtime = File.mtime(File.expand_path("#{ @config['locs']['berks'] }/#{ processed_berkshelf_cookbook }"))
|
48
48
|
|
49
49
|
skip = true if cookbook_mtime < pcookbook_mtime #get only the latest version, berkshelf pulls in multiple commits from git repos for SOME REASON
|
50
50
|
end
|
@@ -62,7 +62,7 @@ class Cheftacular
|
|
62
62
|
chef_repo_cookbooks = {}
|
63
63
|
|
64
64
|
Dir.foreach(@config['locs']['cookbooks']) do |chef_repo_cookbook|
|
65
|
-
next if @config['helper'].is_junk_filename?(
|
65
|
+
next if @config['helper'].is_junk_filename?(chef_repo_cookbook)
|
66
66
|
|
67
67
|
new_name = chef_repo_cookbook.rpartition('-').first
|
68
68
|
|
@@ -16,11 +16,14 @@ class Cheftacular
|
|
16
16
|
end
|
17
17
|
|
18
18
|
class StatelessAction
|
19
|
-
def slack
|
20
|
-
|
19
|
+
def slack message='', channel=''
|
20
|
+
@slack_notifier ||= Slack::Notifier.new @config['cheftacular']['slack']['webhook'], username: 'Cheftacular'
|
21
|
+
|
22
|
+
message = ARGV[1] if message.blank?
|
23
|
+
channel = ARGV[2] if channel.blank?
|
21
24
|
|
22
|
-
|
23
|
-
|
25
|
+
@slack_notifier.channel = channel.nil? ? @config['cheftacular']['slack']['default_channel'] : channel
|
26
|
+
@slack_notifier.ping message
|
24
27
|
end
|
25
28
|
end
|
26
29
|
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.4.
|
4
|
+
version: 2.4.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: 2015-06-
|
11
|
+
date: 2015-06-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: hashie
|
@@ -59,7 +59,7 @@ dependencies:
|
|
59
59
|
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
|
-
type: :
|
62
|
+
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
@@ -94,20 +94,6 @@ dependencies:
|
|
94
94
|
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
|
-
- !ruby/object:Gem::Dependency
|
98
|
-
name: pry
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
100
|
-
requirements:
|
101
|
-
- - ">="
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: '0'
|
104
|
-
type: :development
|
105
|
-
prerelease: false
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
107
|
-
requirements:
|
108
|
-
- - ">="
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
version: '0'
|
111
97
|
- !ruby/object:Gem::Dependency
|
112
98
|
name: awesome_print
|
113
99
|
requirement: !ruby/object:Gem::Requirement
|