grocery_delivery 0.0.4 → 0.0.9
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 +7 -0
- data/README.md +37 -25
- data/bin/grocery-delivery +44 -20
- data/lib/grocery_delivery/config.rb +9 -5
- data/lib/grocery_delivery/hooks.rb +12 -14
- data/lib/grocery_delivery/logging.rb +16 -8
- metadata +128 -23
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: f337a09319eafef3f7c95d9fd358468a320c6912c580c9ec52fb59ab74203b44
|
4
|
+
data.tar.gz: 56bb4c32c4be6387fded401705215f699d17ba9d8ee90a1825e6bfefd5566fbb
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 110709d96037e3dec5636b43d2b4324dbeef043e5ec6476142c4a28023e5f18d9a90e8b8e5e24cf8126db0018bc4397bf66d563835199bb2783710061372570f
|
7
|
+
data.tar.gz: 35c38494431c9af2f7e1bdffd5a023160fa8744b7e94600d128be8ccf62ed4f218f36c50e589ec891bc1a3684020468f6b4450c6135d6115875e326cf3d47b14
|
data/README.md
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# Grocery Delivery
|
2
2
|
|
3
|
+

|
4
|
+
|
3
5
|
## Intro
|
4
6
|
Ohai!
|
5
7
|
|
@@ -27,12 +29,12 @@ principals:
|
|
27
29
|
* You want all your chef-servers in sync
|
28
30
|
* Everything you care about comes from version control.
|
29
31
|
|
30
|
-
We recommend
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
32
|
+
We recommend enabling attributes whitelisting to prevent node attributes being
|
33
|
+
saved back to the server. In recent versions of Chef (past Chef 11), this
|
34
|
+
feature is [built-in](https://docs.chef.io/nodes/#whitelist-attributes). For
|
35
|
+
older versions, we recommend using the
|
36
|
+
[`whitelist_node_attrs`](https://github.com/chef-boneyard/whitelist-node-attrs)
|
37
|
+
cookbook.
|
36
38
|
|
37
39
|
## Dependencies
|
38
40
|
|
@@ -41,45 +43,51 @@ http://docs.getchef.com/essentials_node_object.html#whitelist-attributes
|
|
41
43
|
|
42
44
|
## Config file
|
43
45
|
|
44
|
-
The default config file is `/etc/gd-config.rb` but you may use
|
46
|
+
The default config file is `/etc/gd-config.rb` but you may use `-c` to specify
|
45
47
|
another. The config file works the same as client.rb does for Chef - there
|
46
|
-
are a series of keywords that take an
|
48
|
+
are a series of keywords that take an argument and anything else is just
|
47
49
|
standard Ruby.
|
48
50
|
|
49
51
|
All command-line options are available in the config file:
|
50
52
|
* dry_run (bool, default: false)
|
51
53
|
* debug (bool, default: false)
|
52
|
-
* timestamp (bool, default: false)
|
53
54
|
* config_file (string, default: `/etc/gd-config.rb`)
|
54
55
|
* lockfile (string, default: `/var/lock/subsys/grocery_delivery`)
|
55
56
|
* pidfile (string, default: `/var/run/grocery_delivery.pid`)
|
56
57
|
|
57
58
|
In addition the following are also available:
|
58
|
-
* master_path - The top-level path for Grocery Delivery's work. Most other
|
59
|
+
* `master_path` - The top-level path for Grocery Delivery's work. Most other
|
59
60
|
paths are relative to this. Default: `/var/chef/grocery_delivery_work`
|
60
|
-
* repo_url - The URL to clone/checkout if it doesn't exist. Default: `nil`
|
61
|
-
* reponame - The relative directory to check the repo out to, inside of
|
61
|
+
* `repo_url` - The URL to clone/checkout if it doesn't exist. Default: `nil`
|
62
|
+
* `reponame` - The relative directory to check the repo out to, inside of
|
62
63
|
`master_path`. Default: `ops`
|
63
|
-
* cookbook_paths - An array of directories that contain cookbooks relative to
|
64
|
+
* `cookbook_paths` - An array of directories that contain cookbooks relative to
|
64
65
|
`reponame`. Default: `['chef/cookbooks']`
|
65
|
-
* role_path - A directory to find roles in relative to `reponame`. Default:
|
66
|
-
`
|
67
|
-
*
|
68
|
-
|
69
|
-
|
66
|
+
* `role_path` - A directory to find roles in relative to `reponame`. Default:
|
67
|
+
`'chef/roles'`
|
68
|
+
* `role_type` - RB or JSON roles? Default: `rb`
|
69
|
+
* `databag_path` - A directory to find databags in relative to `reponame`.
|
70
|
+
Default: `'chef/databags'`
|
71
|
+
* `rev_checkpoint` - Name of the file to store the last-uploaded revision,
|
70
72
|
relative to `reponame`. Default: `gd_revision`
|
71
|
-
* knife_config - Knife config to use for uploads. Default:
|
73
|
+
* `knife_config` - Knife config to use for uploads. Default:
|
72
74
|
`/root/.chef/knife.rb`
|
73
|
-
|
74
|
-
|
75
|
-
|
75
|
+
Note: `knife.rb` will need to set `cookbook_path` pointing to the cookbook
|
76
|
+
path in the work directory,
|
77
|
+
e.g. `/var/chef/grocery_delivery_work/ops/chef/cookbooks`
|
78
|
+
* `knife_bin` - Path to knife. Default: `/opt/chef/bin/knife`
|
79
|
+
* `vcs_type` - Git or SVN? Default: `svn`
|
80
|
+
* `vcs_path` - Path to git or svn binary. If not given, just uses 'git' or 'svn'.
|
76
81
|
Default: `nil`
|
77
|
-
* plugin_path - Path to plugin file. Default: `/etc/gd-plugin.rb`
|
82
|
+
* `plugin_path` - Path to plugin file. Default: `/etc/gd-plugin.rb`
|
83
|
+
* `berks` - Boolean to determine if we should use berkshelf to resolve
|
84
|
+
dependencies and upload cookbooks. Default: `false`
|
85
|
+
* `berks_bin` - Path to berkshelf. Default: `/opt/chefdk/bin/berks`
|
78
86
|
|
79
87
|
## Plugin
|
80
88
|
|
81
89
|
The plugin should be a ruby file which defines several class methods. It is
|
82
|
-
class_eval()d into a Hooks class.
|
90
|
+
`class_eval()`d into a `Hooks` class.
|
83
91
|
|
84
92
|
The following functions can optionally be defined:
|
85
93
|
|
@@ -101,7 +109,7 @@ to parse it.
|
|
101
109
|
|
102
110
|
* self.postrun(dryrun, success, msg)
|
103
111
|
|
104
|
-
After we've parsed the updates to the repo and uploaded/deleted the
|
112
|
+
After we've parsed the updates to the repo and uploaded/deleted the relevant
|
105
113
|
items from the local server. `Success` is a bool for whether we succeeded, and
|
106
114
|
`msg` is the status message - either the revision we sync'd or an error.
|
107
115
|
|
@@ -109,3 +117,7 @@ items from the local server. `Success` is a bool for whether we succeeded, and
|
|
109
117
|
|
110
118
|
Same as postrun, but is registered as an atexit function so it happens even
|
111
119
|
if we crash.
|
120
|
+
|
121
|
+
## License
|
122
|
+
|
123
|
+
See the `LICENSE` file in this repo.
|
data/bin/grocery-delivery
CHANGED
@@ -1,14 +1,14 @@
|
|
1
|
-
#!/
|
1
|
+
#!/usr/bin/env ruby
|
2
2
|
# vim: syntax=ruby:expandtab:shiftwidth=2:softtabstop=2:tabstop=2
|
3
3
|
|
4
4
|
# Copyright 2013-present Facebook
|
5
|
-
#
|
5
|
+
#
|
6
6
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
7
|
# you may not use this file except in compliance with the License.
|
8
8
|
# You may obtain a copy of the License at
|
9
|
-
#
|
9
|
+
#
|
10
10
|
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
-
#
|
11
|
+
#
|
12
12
|
# Unless required by applicable law or agreed to in writing, software
|
13
13
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
14
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
@@ -42,7 +42,7 @@ end
|
|
42
42
|
def get_lock
|
43
43
|
GroceryDelivery::Log.warn('Attempting to acquire lock')
|
44
44
|
$lockfileh = File.open(GroceryDelivery::Config.lockfile,
|
45
|
-
File::RDWR | File::CREAT,
|
45
|
+
File::RDWR | File::CREAT, 0o600)
|
46
46
|
$lockfileh.flock(File::LOCK_EX)
|
47
47
|
GroceryDelivery::Log.warn('Lock acquired')
|
48
48
|
end
|
@@ -62,12 +62,20 @@ end
|
|
62
62
|
|
63
63
|
def read_checkpoint
|
64
64
|
GroceryDelivery::Log.debug("Reading #{checkpoint_path}")
|
65
|
-
File.
|
65
|
+
File.exist?(checkpoint_path) ? File.read(checkpoint_path).strip : nil
|
66
66
|
end
|
67
67
|
|
68
68
|
def full_upload(knife)
|
69
|
-
GroceryDelivery::
|
70
|
-
|
69
|
+
if GroceryDelivery::Config.berks
|
70
|
+
GroceryDelivery::Log.warn('Uploading all cookbooks with berkshelf')
|
71
|
+
GroceryDelivery::Log.debug(
|
72
|
+
"Using cookbook paths: #{GroceryDelivery::Config.cookbook_paths}",
|
73
|
+
)
|
74
|
+
knife.berks_cookbook_upload_all
|
75
|
+
else
|
76
|
+
GroceryDelivery::Log.warn('Uploading all cookbooks')
|
77
|
+
knife.cookbook_upload_all
|
78
|
+
end
|
71
79
|
GroceryDelivery::Log.warn('Uploading all roles')
|
72
80
|
knife.role_upload_all
|
73
81
|
GroceryDelivery::Log.warn('Uploading all databags')
|
@@ -76,7 +84,7 @@ end
|
|
76
84
|
|
77
85
|
def partial_upload(knife, repo, checkpoint, local_head)
|
78
86
|
GroceryDelivery::Log.warn(
|
79
|
-
"
|
87
|
+
"Determining changes... from #{checkpoint} to #{local_head}",
|
80
88
|
)
|
81
89
|
|
82
90
|
begin
|
@@ -93,6 +101,7 @@ def partial_upload(knife, repo, checkpoint, local_head)
|
|
93
101
|
:databag_dir =>
|
94
102
|
GroceryDelivery::Config.databag_path,
|
95
103
|
},
|
104
|
+
GroceryDelivery::Config.track_symlinks,
|
96
105
|
)
|
97
106
|
rescue BetweenMeals::Changeset::ReferenceError
|
98
107
|
GroceryDelivery::Log.error('Repo error, invalid revision, exiting')
|
@@ -115,12 +124,19 @@ def partial_upload(knife, repo, checkpoint, local_head)
|
|
115
124
|
'Deleted databags' => deleted_databags,
|
116
125
|
}.each do |msg, list|
|
117
126
|
if list
|
118
|
-
GroceryDelivery::Log.warn("#{msg}: #{list}")
|
127
|
+
GroceryDelivery::Log.warn("#{msg}: #{list.map(&:to_s)}")
|
119
128
|
end
|
120
129
|
end
|
121
130
|
|
122
131
|
knife.cookbook_delete(deleted_cookbooks) if deleted_cookbooks
|
123
|
-
|
132
|
+
if added_cookbooks
|
133
|
+
if GroceryDelivery::Config.berks
|
134
|
+
GroceryDelivery::Log.warn('Using Berkshelf to upload cookbooks')
|
135
|
+
knife.berks_cookbook_upload(added_cookbooks)
|
136
|
+
else
|
137
|
+
knife.cookbook_upload(added_cookbooks)
|
138
|
+
end
|
139
|
+
end
|
124
140
|
knife.role_delete(deleted_roles) if deleted_roles
|
125
141
|
knife.role_upload(added_roles) if added_roles
|
126
142
|
knife.databag_delete(deleted_databags) if deleted_databags
|
@@ -137,12 +153,18 @@ def upload_changed(repo, checkpoint)
|
|
137
153
|
:logger => GroceryDelivery::Log,
|
138
154
|
:config => GroceryDelivery::Config.knife_config,
|
139
155
|
:bin => GroceryDelivery::Config.knife_bin,
|
156
|
+
:berks_bin => GroceryDelivery::Config.berks_bin,
|
157
|
+
:berks_config => GroceryDelivery::Config.berks_config,
|
140
158
|
:role_dir => File.join(base_dir, GroceryDelivery::Config.role_path),
|
159
|
+
:role_type => GroceryDelivery::Config.role_type,
|
141
160
|
:cookbook_dirs => GroceryDelivery::Config.cookbook_paths.map do |x|
|
142
161
|
File.join(base_dir, x)
|
143
162
|
end,
|
144
163
|
:databag_dir => File.join(base_dir, GroceryDelivery::Config.databag_path),
|
145
|
-
}
|
164
|
+
},
|
165
|
+
)
|
166
|
+
GroceryDelivery::Hooks.pre_upload(
|
167
|
+
GroceryDelivery::Config.dry_run, knife, local_head
|
146
168
|
)
|
147
169
|
|
148
170
|
if checkpoint
|
@@ -168,11 +190,8 @@ def setup_config
|
|
168
190
|
options[:verbosity] = ::Logger::INFO
|
169
191
|
end
|
170
192
|
end
|
171
|
-
opts.on('-T', '--timestamp', 'Timestamp output') do |s|
|
172
|
-
options[:timestamp] = s
|
173
|
-
end
|
174
193
|
opts.on('-c', '--config-file FILE', 'config file') do |s|
|
175
|
-
unless File.
|
194
|
+
unless File.exist?(File.expand_path(s))
|
176
195
|
GroceryDelivery::Log.error("Config file #{s} not found.")
|
177
196
|
exit(2)
|
178
197
|
end
|
@@ -181,15 +200,19 @@ def setup_config
|
|
181
200
|
opts.on('-l', '--lockfile FILE', 'lockfile') do |s|
|
182
201
|
options[:lockfile] = s
|
183
202
|
end
|
203
|
+
opts.on('--stdout', 'Log to stdout as well.') do |_s|
|
204
|
+
options[:stdout] = true
|
205
|
+
end
|
184
206
|
opts.on('-p', '--pidfile FILE', 'pidfile') do |s|
|
185
207
|
options[:pidfile] = s
|
186
208
|
end
|
187
209
|
end.parse!
|
188
|
-
if File.
|
210
|
+
if File.exist?(File.expand_path(options[:config_file]))
|
189
211
|
GroceryDelivery::Config.from_file(options[:config_file])
|
190
212
|
end
|
191
213
|
GroceryDelivery::Config.merge!(options)
|
192
214
|
GroceryDelivery::Log.verbosity = GroceryDelivery::Config.verbosity
|
215
|
+
GroceryDelivery::Log.stdout = GroceryDelivery::Config.stdout
|
193
216
|
if GroceryDelivery::Config.dry_run
|
194
217
|
GroceryDelivery::Log.warn('Dryrun mode activated, no changes will be made.')
|
195
218
|
end
|
@@ -227,7 +250,7 @@ if repo.exists?
|
|
227
250
|
else
|
228
251
|
unless GroceryDelivery::Config.repo_url
|
229
252
|
GroceryDelivery::Log.error(
|
230
|
-
'No repo URL was specified, and no repo is checked out'
|
253
|
+
'No repo URL was specified, and no repo is checked out',
|
231
254
|
)
|
232
255
|
exit(1)
|
233
256
|
end
|
@@ -241,7 +264,7 @@ GroceryDelivery::Hooks.post_repo_up(GroceryDelivery::Config.dry_run)
|
|
241
264
|
|
242
265
|
if GroceryDelivery::Config.dry_run && !repo.exists?
|
243
266
|
GroceryDelivery::Log.warn(
|
244
|
-
'In dryrun mode, with no repo, there\'s not much I can dryrun'
|
267
|
+
'In dryrun mode, with no repo, there\'s not much I can dryrun',
|
245
268
|
)
|
246
269
|
GroceryDelivery::Hooks.postrun(GroceryDelivery::Config.dry_run, true,
|
247
270
|
'dryrun mode')
|
@@ -259,7 +282,7 @@ else
|
|
259
282
|
write_checkpoint(ver)
|
260
283
|
$success = true
|
261
284
|
$status_msg = "Success at #{ver}"
|
262
|
-
rescue => e
|
285
|
+
rescue StandardError => e
|
263
286
|
$status_msg = e.message
|
264
287
|
e.backtrace.each do |line|
|
265
288
|
GroceryDelivery::Log.error(line)
|
@@ -270,4 +293,5 @@ end
|
|
270
293
|
GroceryDelivery::Log.warn($status_msg)
|
271
294
|
GroceryDelivery::Hooks.postrun(GroceryDelivery::Config.dry_run, $success,
|
272
295
|
$status_msg)
|
296
|
+
exit($success)
|
273
297
|
# rubocop:enable GlobalVars
|
@@ -1,13 +1,13 @@
|
|
1
1
|
# vim: syntax=ruby:expandtab:shiftwidth=2:softtabstop=2:tabstop=2
|
2
2
|
|
3
3
|
# Copyright 2013-present Facebook
|
4
|
-
#
|
4
|
+
#
|
5
5
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
6
|
# you may not use this file except in compliance with the License.
|
7
7
|
# You may obtain a copy of the License at
|
8
|
-
#
|
8
|
+
#
|
9
9
|
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
-
#
|
10
|
+
#
|
11
11
|
# Unless required by applicable law or agreed to in writing, software
|
12
12
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
13
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
@@ -23,10 +23,9 @@ module GroceryDelivery
|
|
23
23
|
# it's compatible with v2, so it should work in 11 too.
|
24
24
|
class Config
|
25
25
|
extend Mixlib::Config
|
26
|
-
|
26
|
+
stdout false
|
27
27
|
dry_run false
|
28
28
|
verbosity Logger::WARN
|
29
|
-
timestamp false
|
30
29
|
config_file '/etc/gd-config.rb'
|
31
30
|
pidfile '/var/run/grocery_delivery.pid'
|
32
31
|
lockfile '/var/lock/subsys/grocery_delivery'
|
@@ -35,6 +34,7 @@ module GroceryDelivery
|
|
35
34
|
reponame 'ops'
|
36
35
|
cookbook_paths ['chef/cookbooks']
|
37
36
|
role_path 'chef/roles'
|
37
|
+
role_type 'rb'
|
38
38
|
databag_path 'chef/databags'
|
39
39
|
rev_checkpoint 'gd_revision'
|
40
40
|
knife_config '/root/.chef/knife.rb'
|
@@ -42,5 +42,9 @@ module GroceryDelivery
|
|
42
42
|
vcs_type 'svn'
|
43
43
|
vcs_path nil
|
44
44
|
plugin_path '/etc/gd-plugin.rb'
|
45
|
+
berks false
|
46
|
+
berks_bin '/opt/chefdk/bin/berks'
|
47
|
+
berks_config nil
|
48
|
+
track_symlinks false
|
45
49
|
end
|
46
50
|
end
|
@@ -1,13 +1,13 @@
|
|
1
1
|
# vim: syntax=ruby:expandtab:shiftwidth=2:softtabstop=2:tabstop=2
|
2
2
|
|
3
3
|
# Copyright 2013-present Facebook
|
4
|
-
#
|
4
|
+
#
|
5
5
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
6
|
# you may not use this file except in compliance with the License.
|
7
7
|
# You may obtain a copy of the License at
|
8
|
-
#
|
8
|
+
#
|
9
9
|
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
-
#
|
10
|
+
#
|
11
11
|
# Unless required by applicable law or agreed to in writing, software
|
12
12
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
13
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
@@ -19,30 +19,28 @@ module GroceryDelivery
|
|
19
19
|
class Hooks
|
20
20
|
# This code will run once we've read our config and loaded our plugins
|
21
21
|
# but before *anything* else. We don't even have a lock yet.
|
22
|
-
def self.preflight_checks(_dryrun)
|
23
|
-
end
|
22
|
+
def self.preflight_checks(_dryrun); end
|
24
23
|
|
25
24
|
# This is run after we've gotten a lock, written a pidfile and initialized
|
26
25
|
# our repo object (but not touched the repo yet)
|
27
|
-
def self.prerun(_dryrun)
|
28
|
-
end
|
26
|
+
def self.prerun(_dryrun); end
|
29
27
|
|
30
28
|
# This is code to run after we've updated the repo, but before we've done
|
31
29
|
# any work to parse it.
|
32
|
-
def self.post_repo_up(_dryrun)
|
33
|
-
|
30
|
+
def self.post_repo_up(_dryrun); end
|
31
|
+
|
32
|
+
# This is code to run after right before we start uploads
|
33
|
+
def self.pre_upload(_dryrun, _knife, _local_head); end
|
34
34
|
|
35
35
|
# After we parse the updates to the repo and uploaded/deleted the relevent
|
36
36
|
# items from the local server.
|
37
|
-
def self.postrun(_dryrun, _success, _msg)
|
38
|
-
end
|
37
|
+
def self.postrun(_dryrun, _success, _msg); end
|
39
38
|
|
40
39
|
# exit hooks.
|
41
|
-
def self.atexit(_dryrun, _success, _msg)
|
42
|
-
end
|
40
|
+
def self.atexit(_dryrun, _success, _msg); end
|
43
41
|
|
44
42
|
def self.get(file)
|
45
|
-
class_eval(File.read(file),
|
43
|
+
class_eval(File.read(file), file, 1) if File.exist?(file)
|
46
44
|
end
|
47
45
|
end
|
48
46
|
end
|
@@ -1,13 +1,13 @@
|
|
1
1
|
# vim: syntax=ruby:expandtab:shiftwidth=2:softtabstop=2:tabstop=2
|
2
2
|
|
3
3
|
# Copyright 2013-present Facebook
|
4
|
-
#
|
4
|
+
#
|
5
5
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
6
|
# you may not use this file except in compliance with the License.
|
7
7
|
# You may obtain a copy of the License at
|
8
|
-
#
|
8
|
+
#
|
9
9
|
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
-
#
|
10
|
+
#
|
11
11
|
# Unless required by applicable law or agreed to in writing, software
|
12
12
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
13
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
@@ -29,40 +29,48 @@ module GroceryDelivery
|
|
29
29
|
@@init = true
|
30
30
|
end
|
31
31
|
|
32
|
+
def self.level
|
33
|
+
@@level
|
34
|
+
end
|
35
|
+
|
32
36
|
def self.verbosity=(val)
|
33
37
|
@@level = val
|
34
38
|
end
|
35
39
|
|
40
|
+
def self.stdout=(val)
|
41
|
+
@@stdout = val
|
42
|
+
end
|
43
|
+
|
36
44
|
def self.logit(level, msg)
|
37
45
|
init unless @@init
|
38
46
|
# You can't do `Syslog.log(level, msg)` because if there is a
|
39
47
|
# `%` in `msg` then ruby will interpret it as a printf string and
|
40
48
|
# expect more arguments to log().
|
41
49
|
Syslog.log(level, '%s', msg)
|
42
|
-
puts msg if $stdout.tty?
|
50
|
+
puts msg if $stdout.tty? || @@stdout
|
43
51
|
end
|
44
52
|
|
45
53
|
def self.debug(msg)
|
46
54
|
if @@level == Logger::DEBUG
|
47
|
-
msg.prepend('DEBUG: ')
|
55
|
+
msg.to_s.prepend('DEBUG: ')
|
48
56
|
logit(Syslog::LOG_DEBUG, msg)
|
49
57
|
end
|
50
58
|
end
|
51
59
|
|
52
60
|
def self.info(msg)
|
53
61
|
if @@level == Logger::INFO
|
54
|
-
msg.prepend('INFO: ')
|
62
|
+
msg.to_s.prepend('INFO: ')
|
55
63
|
logit(Syslog::LOG_INFO, msg)
|
56
64
|
end
|
57
65
|
end
|
58
66
|
|
59
67
|
def self.warn(msg)
|
60
|
-
msg.prepend('WARN: ')
|
68
|
+
msg.to_s.prepend('WARN: ')
|
61
69
|
logit(Syslog::LOG_WARNING, msg)
|
62
70
|
end
|
63
71
|
|
64
72
|
def self.error(msg)
|
65
|
-
msg.prepend('ERROR: ')
|
73
|
+
msg.to_s.prepend('ERROR: ')
|
66
74
|
logit(Syslog::LOG_ERR, msg)
|
67
75
|
end
|
68
76
|
end
|
metadata
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: grocery_delivery
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.0.9
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Phil Dibowitz
|
@@ -10,40 +9,148 @@ authors:
|
|
10
9
|
autorequire:
|
11
10
|
bindir: bin
|
12
11
|
cert_chain: []
|
13
|
-
date:
|
12
|
+
date: 2020-06-27 00:00:00.000000000 Z
|
14
13
|
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: between_meals
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - ">="
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: 0.0.11
|
21
|
+
type: :runtime
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: 0.0.11
|
15
28
|
- !ruby/object:Gem::Dependency
|
16
29
|
name: mixlib-config
|
17
30
|
requirement: !ruby/object:Gem::Requirement
|
18
|
-
none: false
|
19
31
|
requirements:
|
20
|
-
- -
|
32
|
+
- - ">="
|
21
33
|
- !ruby/object:Gem::Version
|
22
34
|
version: '0'
|
23
35
|
type: :runtime
|
24
36
|
prerelease: false
|
25
37
|
version_requirements: !ruby/object:Gem::Requirement
|
26
|
-
none: false
|
27
38
|
requirements:
|
28
|
-
- -
|
39
|
+
- - ">="
|
29
40
|
- !ruby/object:Gem::Version
|
30
41
|
version: '0'
|
31
42
|
- !ruby/object:Gem::Dependency
|
32
|
-
name:
|
43
|
+
name: chef-zero
|
33
44
|
requirement: !ruby/object:Gem::Requirement
|
34
|
-
none: false
|
35
45
|
requirements:
|
36
|
-
- -
|
46
|
+
- - ">="
|
37
47
|
- !ruby/object:Gem::Version
|
38
48
|
version: '0'
|
39
|
-
type: :
|
49
|
+
type: :development
|
50
|
+
prerelease: false
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - ">="
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: chef-dk
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0'
|
63
|
+
type: :development
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - ">="
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: openssl
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - ">="
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - ">="
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '0'
|
84
|
+
- !ruby/object:Gem::Dependency
|
85
|
+
name: rspec-core
|
86
|
+
requirement: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - ">="
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: '0'
|
91
|
+
type: :development
|
92
|
+
prerelease: false
|
93
|
+
version_requirements: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- - ">="
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: '0'
|
98
|
+
- !ruby/object:Gem::Dependency
|
99
|
+
name: rspec-expectations
|
100
|
+
requirement: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - ">="
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '0'
|
105
|
+
type: :development
|
106
|
+
prerelease: false
|
107
|
+
version_requirements: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - ">="
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '0'
|
112
|
+
- !ruby/object:Gem::Dependency
|
113
|
+
name: rspec-mocks
|
114
|
+
requirement: !ruby/object:Gem::Requirement
|
115
|
+
requirements:
|
116
|
+
- - ">="
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: '0'
|
119
|
+
type: :development
|
40
120
|
prerelease: false
|
41
121
|
version_requirements: !ruby/object:Gem::Requirement
|
42
|
-
none: false
|
43
122
|
requirements:
|
44
|
-
- -
|
123
|
+
- - ">="
|
45
124
|
- !ruby/object:Gem::Version
|
46
125
|
version: '0'
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: simplecov
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
129
|
+
requirements:
|
130
|
+
- - ">="
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: '0'
|
133
|
+
type: :development
|
134
|
+
prerelease: false
|
135
|
+
version_requirements: !ruby/object:Gem::Requirement
|
136
|
+
requirements:
|
137
|
+
- - ">="
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
version: '0'
|
140
|
+
- !ruby/object:Gem::Dependency
|
141
|
+
name: rubocop
|
142
|
+
requirement: !ruby/object:Gem::Requirement
|
143
|
+
requirements:
|
144
|
+
- - '='
|
145
|
+
- !ruby/object:Gem::Version
|
146
|
+
version: 0.55.0
|
147
|
+
type: :development
|
148
|
+
prerelease: false
|
149
|
+
version_requirements: !ruby/object:Gem::Requirement
|
150
|
+
requirements:
|
151
|
+
- - '='
|
152
|
+
- !ruby/object:Gem::Version
|
153
|
+
version: 0.55.0
|
47
154
|
description: Utility for keeping Chef servers in sync with a repo
|
48
155
|
email:
|
49
156
|
executables:
|
@@ -53,35 +160,33 @@ extra_rdoc_files:
|
|
53
160
|
- README.md
|
54
161
|
- LICENSE
|
55
162
|
files:
|
56
|
-
- README.md
|
57
163
|
- LICENSE
|
58
|
-
-
|
164
|
+
- README.md
|
165
|
+
- bin/grocery-delivery
|
59
166
|
- lib/grocery_delivery/config.rb
|
167
|
+
- lib/grocery_delivery/hooks.rb
|
60
168
|
- lib/grocery_delivery/logging.rb
|
61
|
-
- bin/grocery-delivery
|
62
169
|
homepage:
|
63
170
|
licenses:
|
64
171
|
- Apache
|
172
|
+
metadata: {}
|
65
173
|
post_install_message:
|
66
174
|
rdoc_options: []
|
67
175
|
require_paths:
|
68
176
|
- lib
|
69
177
|
required_ruby_version: !ruby/object:Gem::Requirement
|
70
|
-
none: false
|
71
178
|
requirements:
|
72
|
-
- -
|
179
|
+
- - ">="
|
73
180
|
- !ruby/object:Gem::Version
|
74
181
|
version: '0'
|
75
182
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
76
|
-
none: false
|
77
183
|
requirements:
|
78
|
-
- -
|
184
|
+
- - ">="
|
79
185
|
- !ruby/object:Gem::Version
|
80
186
|
version: '0'
|
81
187
|
requirements: []
|
82
|
-
|
83
|
-
rubygems_version: 1.8.29
|
188
|
+
rubygems_version: 3.0.1
|
84
189
|
signing_key:
|
85
|
-
specification_version:
|
190
|
+
specification_version: 4
|
86
191
|
summary: Grocery Delivery
|
87
192
|
test_files: []
|