depot3 0.0.0a1 → 3.0.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +55 -1
- data/bin/d3 +323 -0
- data/bin/d3admin +1011 -0
- data/bin/d3helper +354 -0
- data/bin/puppytime +334 -0
- data/data/d3/com.pixar.d3.RepoMan.plist +23 -0
- data/data/d3/d3.conf.example +507 -0
- data/data/d3/d3RepoMan.app/Contents/Frameworks/libswiftAppKit.dylib +0 -0
- data/data/d3/d3RepoMan.app/Contents/Frameworks/libswiftCore.dylib +0 -0
- data/data/d3/d3RepoMan.app/Contents/Frameworks/libswiftCoreData.dylib +0 -0
- data/data/d3/d3RepoMan.app/Contents/Frameworks/libswiftCoreGraphics.dylib +0 -0
- data/data/d3/d3RepoMan.app/Contents/Frameworks/libswiftCoreImage.dylib +0 -0
- data/data/d3/d3RepoMan.app/Contents/Frameworks/libswiftDarwin.dylib +0 -0
- data/data/d3/d3RepoMan.app/Contents/Frameworks/libswiftDispatch.dylib +0 -0
- data/data/d3/d3RepoMan.app/Contents/Frameworks/libswiftFoundation.dylib +0 -0
- data/data/d3/d3RepoMan.app/Contents/Frameworks/libswiftObjectiveC.dylib +0 -0
- data/data/d3/d3RepoMan.app/Contents/Info.plist +56 -0
- data/data/d3/d3RepoMan.app/Contents/MacOS/d3RepoMan +0 -0
- data/data/d3/d3RepoMan.app/Contents/PkgInfo +1 -0
- data/data/d3/d3RepoMan.app/Contents/Resources/Base.lproj/MainMenu.nib +0 -0
- data/data/d3/d3RepoMan.app/Contents/Resources/last-foreground-times-template.plist +5 -0
- data/data/d3/d3RepoMan.app/Contents/_CodeSignature/CodeResources +214 -0
- data/data/d3/puppytime/ImageLicenses.txt +165 -0
- data/data/d3/puppytime/notification_image +1 -0
- data/data/d3/puppytime/opt_out_image +1 -0
- data/data/d3/puppytime/slideshow/2008-07-11_White_German_Shepherd_pup_chilling_at_the_Coker_Arboretum.jpg +0 -0
- data/data/d3/puppytime/slideshow/2009-04-21_APBT_pup_on_deck.jpg +0 -0
- data/data/d3/puppytime/slideshow/A_puppy_Yorkie.jpg +0 -0
- data/data/d3/puppytime/slideshow/Alert_Pug_Puppy.jpg +0 -0
- data/data/d3/puppytime/slideshow/Australian_Cattle_Dog_puppies_04.JPG +0 -0
- data/data/d3/puppytime/slideshow/Beagle_puppy_Cadet.jpg +0 -0
- data/data/d3/puppytime/slideshow/Bernese_Mountain_Dog.jpg +0 -0
- data/data/d3/puppytime/slideshow/Bloodhound_Puppy.jpg +0 -0
- data/data/d3/puppytime/slideshow/Boston_terrier_with_toy.jpg +0 -0
- data/data/d3/puppytime/slideshow/Boxer_puppy_fawn_portrai.jpg +0 -0
- data/data/d3/puppytime/slideshow/Caracal_kitten.jpg +0 -0
- data/data/d3/puppytime/slideshow/Chihuahua_&_Doberman_Pup.jpg +0 -0
- data/data/d3/puppytime/slideshow/Cuccioli_di_Margot_a_35_gg_Basenjis.jpg +0 -0
- data/data/d3/puppytime/slideshow/Dalmatian_puppy_03.jpg +0 -0
- data/data/d3/puppytime/slideshow/GoldenRetrieverPuppyDaisyParker.JPG +0 -0
- data/data/d3/puppytime/slideshow/Green_eyed_beige_Chihuahua.jpg +0 -0
- data/data/d3/puppytime/slideshow/Let_Sleeping_Dogs_Lie.jpg +0 -0
- data/data/d3/puppytime/slideshow/Meatball_-_French_Bulldog_Puppy.jpg +0 -0
- data/data/d3/puppytime/slideshow/Oola_-_9_weeks.jpg +0 -0
- data/data/d3/puppytime/slideshow/Pancho0008.JPG +0 -0
- data/data/d3/puppytime/slideshow/Pomeranian_orange-sable_Coco.jpg +0 -0
- data/data/d3/puppytime/slideshow/Pug_puppy_001.jpg +0 -0
- data/data/d3/puppytime/slideshow/Puggle_puppy_6_weeks.JPG +0 -0
- data/data/d3/puppytime/slideshow/Puli_kan.jpg +0 -0
- data/data/d3/puppytime/slideshow/Puppy_French_Bulldog.jpg +0 -0
- data/data/d3/puppytime/slideshow/Rocco_the_Bulldog.jpg +0 -0
- data/data/d3/puppytime/slideshow/Rottweiler_Face.jpg +0 -0
- data/data/d3/puppytime/slideshow/Saint_Bernard_puppy.jpg +0 -0
- data/data/d3/puppytime/slideshow/Scottish_froment.jpg +0 -0
- data/data/d3/puppytime/slideshow/Shar_pei_puppy_(age_2_months).jpg +0 -0
- data/data/d3/puppytime/slideshow/Shiba-Inu_beim_Spielen_im_Schnee.JPG +0 -0
- data/data/d3/puppytime/slideshow/Smooth-coat_Border_Collie_puppy..jpg +0 -0
- data/data/d3/puppytime/slideshow/Smooth_Dachshund_puppies.jpg +0 -0
- data/data/d3/puppytime/slideshow/Snow_dog.jpg +0 -0
- data/data/d3/puppytime/slideshow/Taylor_the_Pembroke_Welsh_Corgi.png +0 -0
- data/data/d3/puppytime/slideshow/Weim_Pups_001.jpg +0 -0
- data/data/d3/puppytime/slideshow/Westie_pups.jpg +0 -0
- data/data/d3/puppytime/slideshow/Yellow_Labrador_puppies_(4165737325).jpg +0 -0
- data/lib/d3/admin/add.rb +451 -0
- data/lib/d3/admin/auth.rb +470 -0
- data/lib/d3/admin/edit.rb +297 -0
- data/lib/d3/admin/help.rb +396 -0
- data/lib/d3/admin/interactive.rb +972 -0
- data/lib/d3/admin/options.rb +454 -0
- data/lib/d3/admin/prefs.rb +204 -0
- data/lib/d3/admin/report.rb +727 -0
- data/lib/d3/admin/state.rb +42 -0
- data/lib/d3/admin/validate.rb +413 -0
- data/lib/d3/admin.rb +42 -0
- data/lib/d3/basename.rb +217 -0
- data/lib/d3/client/auth.rb +108 -0
- data/lib/d3/client/class_methods.rb +766 -0
- data/lib/d3/client/class_variables.rb +47 -0
- data/lib/d3/client/cli.rb +187 -0
- data/lib/d3/client/environment.rb +134 -0
- data/lib/d3/client/help.rb +110 -0
- data/lib/d3/client/lists.rb +314 -0
- data/lib/d3/client/receipt.rb +1173 -0
- data/lib/d3/client.rb +45 -0
- data/lib/d3/configuration.rb +319 -0
- data/lib/d3/constants.rb +60 -0
- data/lib/d3/database.rb +488 -0
- data/lib/d3/exceptions.rb +44 -0
- data/lib/d3/log.rb +271 -0
- data/lib/d3/package/aliases.rb +80 -0
- data/lib/d3/package/attributes.rb +97 -0
- data/lib/d3/package/class_methods.rb +817 -0
- data/lib/d3/package/class_variables.rb +46 -0
- data/lib/d3/package/client_actions.rb +293 -0
- data/lib/d3/package/constants.rb +58 -0
- data/lib/d3/package/constructor.rb +191 -0
- data/lib/d3/package/getters.rb +164 -0
- data/lib/d3/package/mixins.rb +39 -0
- data/lib/d3/package/private_methods.rb +227 -0
- data/lib/d3/package/questions.rb +95 -0
- data/lib/d3/package/server_actions.rb +683 -0
- data/lib/d3/package/setters.rb +326 -0
- data/lib/d3/package/validate.rb +448 -0
- data/lib/d3/package.rb +51 -0
- data/lib/d3/puppytime/pending_puppy.rb +108 -0
- data/lib/d3/puppytime/puppy_queue.rb +274 -0
- data/lib/d3/puppytime.rb +68 -0
- data/lib/d3/state.rb +105 -0
- data/lib/d3/utility.rb +325 -0
- data/lib/d3/version.rb +1 -1
- metadata +162 -9
data/lib/d3/utility.rb
ADDED
@@ -0,0 +1,325 @@
|
|
1
|
+
### Copyright 2016 Pixar
|
2
|
+
###
|
3
|
+
### Licensed under the Apache License, Version 2.0 (the "Apache License")
|
4
|
+
### with the following modification; you may not use this file except in
|
5
|
+
### compliance with the Apache License and the following modification to it:
|
6
|
+
### Section 6. Trademarks. is deleted and replaced with:
|
7
|
+
###
|
8
|
+
### 6. Trademarks. This License does not grant permission to use the trade
|
9
|
+
### names, trademarks, service marks, or product names of the Licensor
|
10
|
+
### and its affiliates, except as required to comply with Section 4(c) of
|
11
|
+
### the License and to reproduce the content of the NOTICE file.
|
12
|
+
###
|
13
|
+
### You may obtain a copy of the Apache License at
|
14
|
+
###
|
15
|
+
### http://www.apache.org/licenses/LICENSE-2.0
|
16
|
+
###
|
17
|
+
### Unless required by applicable law or agreed to in writing, software
|
18
|
+
### distributed under the Apache License with the above modification is
|
19
|
+
### distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
20
|
+
### KIND, either express or implied. See the Apache License for the specific
|
21
|
+
### language governing permissions and limitations under the Apache License.
|
22
|
+
###
|
23
|
+
###
|
24
|
+
|
25
|
+
|
26
|
+
module D3
|
27
|
+
|
28
|
+
|
29
|
+
### Is there a process running that would prevent un/installation?
|
30
|
+
###
|
31
|
+
### @return [Boolean]
|
32
|
+
###
|
33
|
+
def self.prohibited_by_process_running? (xproc)
|
34
|
+
`/bin/ps -A -c -o comm`.lines.each do |ps_line|
|
35
|
+
return true if ps_line.strip.casecmp(xproc) == 0
|
36
|
+
end
|
37
|
+
return false
|
38
|
+
end #
|
39
|
+
|
40
|
+
### Try to figure out the login name of the admin
|
41
|
+
### running this code
|
42
|
+
###
|
43
|
+
def self.admin (refresh = false)
|
44
|
+
|
45
|
+
no_good = self.badmins
|
46
|
+
|
47
|
+
# use the USER if it's valid
|
48
|
+
admin = ENV['USER']
|
49
|
+
|
50
|
+
# otherwise, try SUDO_USER
|
51
|
+
admin = ENV['SUDO_USER'] if no_good.include? admin
|
52
|
+
|
53
|
+
# otherwise, try SSH_CLIENT_USER
|
54
|
+
admin = ENV['SSH_CLIENT_USER'] if no_good.include? admin
|
55
|
+
|
56
|
+
# otherwise, use the default, which might still be bad
|
57
|
+
admin = DFT_CLI_ADMIN if no_good.include? admin
|
58
|
+
|
59
|
+
return admin
|
60
|
+
end # get admin name
|
61
|
+
|
62
|
+
### The list of names not allowed as the --admin option in
|
63
|
+
### d3 and d3admin
|
64
|
+
###
|
65
|
+
### This just combines DISALLOWED_ADMINS and
|
66
|
+
### D3::CONFIG.client_prohibited_admin_names
|
67
|
+
###
|
68
|
+
### @return [Array] list of admins not allowed.
|
69
|
+
###
|
70
|
+
def self.badmins
|
71
|
+
return D3::DISALLOWED_ADMINS unless D3::CONFIG.client_prohibited_admin_names
|
72
|
+
return D3::DISALLOWED_ADMINS + D3::CONFIG.client_prohibited_admin_names
|
73
|
+
end
|
74
|
+
|
75
|
+
### Run a Casper policy on the local machine
|
76
|
+
###
|
77
|
+
### @param policy[String,Integer] the custom-trigger, name, or id of the policy
|
78
|
+
###
|
79
|
+
### @param type[Symbol] the type of policy being run, e.g. :expiration
|
80
|
+
###
|
81
|
+
### @param verbose[Boolean] should we be verbose?
|
82
|
+
###
|
83
|
+
### @return [boolean] Did the policy run?
|
84
|
+
###
|
85
|
+
def self.run_policy (policy, type, verbose = false)
|
86
|
+
D3.log "Running #{type} policy", :info
|
87
|
+
# if numeric, and there's a policy with that id
|
88
|
+
if policy =~ /^\d+$/ and polname = JSS::Policy.map_all_ids_to(:name)[policy]
|
89
|
+
D3.log "Executing #{type} policy '#{polname}', id: #{policy}", :debug
|
90
|
+
pol_to_run = "-id #{policy}"
|
91
|
+
# if there's a policy with that name
|
92
|
+
elsif polid = JSS::Policy.map_all_ids_to(:name).invert[policy]
|
93
|
+
D3.log "Executing #{type} policy '#{policy}', id: #{polid}", :debug
|
94
|
+
pol_to_run = "-id #{polid}"
|
95
|
+
# else assume its a trigger
|
96
|
+
else
|
97
|
+
D3.log "Executing #{type} policy with trigger '#{policy}'", :debug
|
98
|
+
pol_to_run = "-event '#{policy}'"
|
99
|
+
end
|
100
|
+
|
101
|
+
output = JSS::Client.run_jamf "policy", pol_to_run, verbose
|
102
|
+
if D3::LOG.level == :debug
|
103
|
+
D3.log "Policy execution output:", :debug
|
104
|
+
output.lines.each{|l| D3.log " #{l.chomp}", :debug}
|
105
|
+
end
|
106
|
+
|
107
|
+
if output.include? "No policies were found for the"
|
108
|
+
D3.log "No policy matching '#{policy}' was found in the JSS", :warn
|
109
|
+
return false
|
110
|
+
else
|
111
|
+
D3.log "Done executing #{type} policy", :debug
|
112
|
+
return true
|
113
|
+
end
|
114
|
+
end #run policy
|
115
|
+
|
116
|
+
### Get the ids of all scripts used by all policies
|
117
|
+
### This is a hash of PolicyName => Array of Script id's
|
118
|
+
### @return [Hash{String => Array<Integer>}]
|
119
|
+
###
|
120
|
+
def self.policy_scripts
|
121
|
+
qry = <<-ENDQ
|
122
|
+
SELECT p.name, GROUP_CONCAT(ps.script_id) AS script_ids
|
123
|
+
FROM policies p
|
124
|
+
JOIN policy_scripts ps
|
125
|
+
ON p.policy_id = ps.policy_id
|
126
|
+
GROUP BY p.policy_id
|
127
|
+
ENDQ
|
128
|
+
res = JSS::DB_CNX.db.query qry
|
129
|
+
p_scripts = {}
|
130
|
+
res.each{|r| p_scripts[r[0]] = r[1].split(/,\s*/).map{|id| id.to_i} }
|
131
|
+
p_scripts
|
132
|
+
end
|
133
|
+
|
134
|
+
|
135
|
+
### Generate a report of columned data, either fixed-width or tab-delimited.
|
136
|
+
### The title line(s) are pre-pended with '# ' for easier exclusion when using
|
137
|
+
### the report as input for some other program. If the :type is :fixed, so
|
138
|
+
### will the column header line.
|
139
|
+
###
|
140
|
+
### @param lines[Array<Array>] the rows and columns of data
|
141
|
+
###
|
142
|
+
### @param type[Symbol] :fixed or :tab, defaults to :fixed
|
143
|
+
###
|
144
|
+
### @param args[Hash] the options for the report
|
145
|
+
###
|
146
|
+
### @options args :title[String] a descriptive text or title, shown above the
|
147
|
+
### column headers. Every line is pre-pended with '# '.
|
148
|
+
### Only used on :fixed reports.
|
149
|
+
###
|
150
|
+
### @option args :header_row[Array<String>,nil] the column headers. optional.
|
151
|
+
###
|
152
|
+
### @return [String] the formatted report.
|
153
|
+
###
|
154
|
+
def self.generate_report (lines, type: :fixed, header_row: [], **args)
|
155
|
+
raise JSS::InvalidDataError, "The first argument must be an Array of Arrays" unless lines.is_a? Array
|
156
|
+
raise JSS::InvalidDataError, "The header_row must be an Array" unless header_row.is_a? Array
|
157
|
+
|
158
|
+
return "" if lines.empty?
|
159
|
+
|
160
|
+
# tab delim is easy
|
161
|
+
if type== :tab
|
162
|
+
report_tab = header_row.join("\t")
|
163
|
+
lines.each{|line| report_tab += "\n#{line.join("\t")}" }
|
164
|
+
return report_tab.strip
|
165
|
+
end # if :tab
|
166
|
+
|
167
|
+
# below here, fixed width
|
168
|
+
format = ""
|
169
|
+
line_width = 0
|
170
|
+
header_row[0] = "# #{header_row[0]}"
|
171
|
+
|
172
|
+
self.col_widths(lines, header_row).each do |w|
|
173
|
+
# make sure there's a space between columns
|
174
|
+
col_width = w + 1
|
175
|
+
|
176
|
+
# add the column to the printf format
|
177
|
+
format += "%-#{col_width}s"
|
178
|
+
line_width += col_width
|
179
|
+
end
|
180
|
+
format += "\n"
|
181
|
+
|
182
|
+
# limit the total line width for the header the width of the terminal
|
183
|
+
if IO.console
|
184
|
+
height, width = IO.console.winsize
|
185
|
+
line_width = width if line_width > width
|
186
|
+
else
|
187
|
+
line_width = 80
|
188
|
+
end
|
189
|
+
|
190
|
+
# title if given
|
191
|
+
report = args[:title] ? "# #{args[:title]}\n" : ""
|
192
|
+
|
193
|
+
unless header_row.empty?
|
194
|
+
raise JSS::InvalidDataError, "Header row must have #{lines[0].count} items" unless header_row.count == lines[0].count
|
195
|
+
# then the header line if given
|
196
|
+
report += format % header_row
|
197
|
+
# add a separator
|
198
|
+
report += "#" + ("-" * (line_width -1)) + "\n"
|
199
|
+
end
|
200
|
+
# add the rows
|
201
|
+
lines.each { |line| report += format % line }
|
202
|
+
|
203
|
+
return report
|
204
|
+
end # generate report
|
205
|
+
|
206
|
+
### Given an Array of Arrays representing rows and columns of data
|
207
|
+
### figure out the widest width of each column and return an array
|
208
|
+
### of integers representing those widths
|
209
|
+
###
|
210
|
+
### @param data_array[Array<Array>] The rows and columns of data
|
211
|
+
###
|
212
|
+
### @param header_row[Array] An optional header row to include in the
|
213
|
+
### width calculation.
|
214
|
+
###
|
215
|
+
### @return [Array<Integer>] the max widths of each column of data.
|
216
|
+
###
|
217
|
+
def self.col_widths (data, header_row = [])
|
218
|
+
widths = header_row.map{|c| c.to_s.length}
|
219
|
+
data.each do |row|
|
220
|
+
row.each_index do |col|
|
221
|
+
this_width = row[col].to_s.length
|
222
|
+
widths[col] = this_width if this_width > widths[col].to_i
|
223
|
+
end # do field
|
224
|
+
end # do line
|
225
|
+
widths
|
226
|
+
end
|
227
|
+
|
228
|
+
### Send a string to the terminal, possibly piping it through 'less'
|
229
|
+
### if the number of lines is greater than the number of terminal lines
|
230
|
+
### minus 3
|
231
|
+
###
|
232
|
+
### @param text[String] the text to send to the terminal
|
233
|
+
###
|
234
|
+
### @param show_help[Boolean] should the text have a line at the top
|
235
|
+
### showing basic 'less' key commands.
|
236
|
+
###
|
237
|
+
### @result [void]
|
238
|
+
###
|
239
|
+
def self.less_text (text, show_help = true)
|
240
|
+
unless IO.console
|
241
|
+
puts text
|
242
|
+
return
|
243
|
+
end
|
244
|
+
|
245
|
+
height, width = IO.console.winsize
|
246
|
+
|
247
|
+
if text.lines.count <= (height - 3)
|
248
|
+
puts text
|
249
|
+
return
|
250
|
+
end
|
251
|
+
|
252
|
+
if show_help
|
253
|
+
help = "#------' ' next, 'b' prev, 'q' exit, 'h' help ------"
|
254
|
+
text = "#{help}\n#{text}"
|
255
|
+
end
|
256
|
+
|
257
|
+
# point stdout through less, print, then restore stdout
|
258
|
+
less = IO.popen("/usr/bin/less","w")
|
259
|
+
begin
|
260
|
+
less.puts text
|
261
|
+
|
262
|
+
# this catches the quitting of 'less' before all the output
|
263
|
+
# is displayed
|
264
|
+
rescue Errno::EPIPE => e
|
265
|
+
true
|
266
|
+
ensure
|
267
|
+
less.close
|
268
|
+
end
|
269
|
+
end
|
270
|
+
|
271
|
+
### Parse a plist into a Ruby data structure.
|
272
|
+
### This enhances Plist::parse_xml taking file paths, as well as XML Strings
|
273
|
+
### and reading the files regardless of binary/XML format.
|
274
|
+
###
|
275
|
+
### see JSS::parse_plsit
|
276
|
+
### TODO - make all calls to this go directly to JSS.parse_plist
|
277
|
+
###
|
278
|
+
### @param plist[Pathname, String] the plist XML, or the path to a plist file
|
279
|
+
###
|
280
|
+
### @return [Object] the parsed plist as a ruby hash,array, etc.
|
281
|
+
###
|
282
|
+
def self.parse_plist (plist)
|
283
|
+
JSS.parse_plist plist
|
284
|
+
end # parse_plist
|
285
|
+
|
286
|
+
### Reconnect to both the API and DB with a much larger timeout, and
|
287
|
+
### using an alternate DB server if one is defined. Should be used
|
288
|
+
### by either the D3::Client for lists, or D3::Admin for reports,
|
289
|
+
### with appropriate credentials.
|
290
|
+
###
|
291
|
+
### @param api_user[String] the user for the api connection
|
292
|
+
###
|
293
|
+
### @param api_pw[String the pw for the api user
|
294
|
+
###
|
295
|
+
### @param db_user[String] the user for the db connection
|
296
|
+
###
|
297
|
+
### @param db_pw[String the pw for the db user
|
298
|
+
###
|
299
|
+
### @return [Hash<String>] the hostnames of the connected JSS & MySQL servers
|
300
|
+
###
|
301
|
+
def self.connect_for_reports(api_user, api_pw, db_user, db_pw)
|
302
|
+
|
303
|
+
JSS::API.connect :user => api_user, :pw => api_pw, :timeout => REPORT_CONNECTION_TIMEOUT
|
304
|
+
|
305
|
+
if D3::CONFIG.report_db_server
|
306
|
+
begin
|
307
|
+
JSS::DB_CNX.connect(
|
308
|
+
:server => D3::CONFIG.report_db_server,
|
309
|
+
:user => db_user,
|
310
|
+
:pw => db_pw,
|
311
|
+
:timeout => REPORT_CONNECTION_TIMEOUT
|
312
|
+
)
|
313
|
+
return {db: D3::CONFIG.report_db_server, api: JSS::CONFIG.api_server_name}
|
314
|
+
|
315
|
+
rescue Mysql::ServerError::AccessDeniedError
|
316
|
+
raise JSS::AuthenticationError, "Authentication error on report_db_server: Credentials must match #{JSS::CONFIG.db_username} on #{JSS::CONFIG.db_server_name}"
|
317
|
+
end # begin
|
318
|
+
end # if rpt db server
|
319
|
+
|
320
|
+
JSS::DB_CNX.connect :user => db_user, :pw => db_pw, :timeout => REPORT_CONNECTION_TIMEOUT
|
321
|
+
|
322
|
+
return {db: JSS::CONFIG.db_server_name, api: JSS::CONFIG.api_server_name}
|
323
|
+
end # connect for report
|
324
|
+
|
325
|
+
end # module
|
data/lib/d3/version.rb
CHANGED
metadata
CHANGED
@@ -1,20 +1,65 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: depot3
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Lasell
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
12
|
-
dependencies:
|
13
|
-
|
14
|
-
|
15
|
-
|
11
|
+
date: 2016-04-01 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: ruby-keychain
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.2'
|
20
|
+
- - '>'
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 0.2.0
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0.2'
|
30
|
+
- - '>'
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 0.2.0
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: ruby-jss
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ~>
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '0.6'
|
40
|
+
- - '>='
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: 0.6.2
|
43
|
+
type: :runtime
|
44
|
+
prerelease: false
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - ~>
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '0.6'
|
50
|
+
- - '>='
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: 0.6.2
|
53
|
+
description: |
|
54
|
+
d3 extends the package-deployment capabilities of the Casper Suite, an enterprise/education
|
55
|
+
tool for managing Apple devices, from JAMF Software LLC.
|
56
|
+
For details, see http://pixaranimationstudios.github.io/depot3/index.html
|
16
57
|
email: d3@pixar.com
|
17
|
-
executables:
|
58
|
+
executables:
|
59
|
+
- d3
|
60
|
+
- d3admin
|
61
|
+
- d3helper
|
62
|
+
- puppytime
|
18
63
|
extensions: []
|
19
64
|
extra_rdoc_files:
|
20
65
|
- README.md
|
@@ -27,7 +72,115 @@ files:
|
|
27
72
|
- LICENSE.txt
|
28
73
|
- README.md
|
29
74
|
- THANKS.md
|
75
|
+
- bin/d3
|
76
|
+
- bin/d3admin
|
77
|
+
- bin/d3helper
|
78
|
+
- bin/puppytime
|
79
|
+
- data/d3/com.pixar.d3.RepoMan.plist
|
80
|
+
- data/d3/d3.conf.example
|
81
|
+
- data/d3/d3RepoMan.app/Contents/Frameworks/libswiftAppKit.dylib
|
82
|
+
- data/d3/d3RepoMan.app/Contents/Frameworks/libswiftCore.dylib
|
83
|
+
- data/d3/d3RepoMan.app/Contents/Frameworks/libswiftCoreData.dylib
|
84
|
+
- data/d3/d3RepoMan.app/Contents/Frameworks/libswiftCoreGraphics.dylib
|
85
|
+
- data/d3/d3RepoMan.app/Contents/Frameworks/libswiftCoreImage.dylib
|
86
|
+
- data/d3/d3RepoMan.app/Contents/Frameworks/libswiftDarwin.dylib
|
87
|
+
- data/d3/d3RepoMan.app/Contents/Frameworks/libswiftDispatch.dylib
|
88
|
+
- data/d3/d3RepoMan.app/Contents/Frameworks/libswiftFoundation.dylib
|
89
|
+
- data/d3/d3RepoMan.app/Contents/Frameworks/libswiftObjectiveC.dylib
|
90
|
+
- data/d3/d3RepoMan.app/Contents/Info.plist
|
91
|
+
- data/d3/d3RepoMan.app/Contents/MacOS/d3RepoMan
|
92
|
+
- data/d3/d3RepoMan.app/Contents/PkgInfo
|
93
|
+
- data/d3/d3RepoMan.app/Contents/Resources/Base.lproj/MainMenu.nib
|
94
|
+
- data/d3/d3RepoMan.app/Contents/Resources/last-foreground-times-template.plist
|
95
|
+
- data/d3/d3RepoMan.app/Contents/_CodeSignature/CodeResources
|
96
|
+
- data/d3/puppytime/ImageLicenses.txt
|
97
|
+
- data/d3/puppytime/notification_image
|
98
|
+
- data/d3/puppytime/opt_out_image
|
99
|
+
- data/d3/puppytime/slideshow/2008-07-11_White_German_Shepherd_pup_chilling_at_the_Coker_Arboretum.jpg
|
100
|
+
- data/d3/puppytime/slideshow/2009-04-21_APBT_pup_on_deck.jpg
|
101
|
+
- data/d3/puppytime/slideshow/A_puppy_Yorkie.jpg
|
102
|
+
- data/d3/puppytime/slideshow/Alert_Pug_Puppy.jpg
|
103
|
+
- data/d3/puppytime/slideshow/Australian_Cattle_Dog_puppies_04.JPG
|
104
|
+
- data/d3/puppytime/slideshow/Beagle_puppy_Cadet.jpg
|
105
|
+
- data/d3/puppytime/slideshow/Bernese_Mountain_Dog.jpg
|
106
|
+
- data/d3/puppytime/slideshow/Bloodhound_Puppy.jpg
|
107
|
+
- data/d3/puppytime/slideshow/Boston_terrier_with_toy.jpg
|
108
|
+
- data/d3/puppytime/slideshow/Boxer_puppy_fawn_portrai.jpg
|
109
|
+
- data/d3/puppytime/slideshow/Caracal_kitten.jpg
|
110
|
+
- data/d3/puppytime/slideshow/Chihuahua_&_Doberman_Pup.jpg
|
111
|
+
- data/d3/puppytime/slideshow/Cuccioli_di_Margot_a_35_gg_Basenjis.jpg
|
112
|
+
- data/d3/puppytime/slideshow/Dalmatian_puppy_03.jpg
|
113
|
+
- data/d3/puppytime/slideshow/GoldenRetrieverPuppyDaisyParker.JPG
|
114
|
+
- data/d3/puppytime/slideshow/Green_eyed_beige_Chihuahua.jpg
|
115
|
+
- data/d3/puppytime/slideshow/Let_Sleeping_Dogs_Lie.jpg
|
116
|
+
- data/d3/puppytime/slideshow/Meatball_-_French_Bulldog_Puppy.jpg
|
117
|
+
- data/d3/puppytime/slideshow/Oola_-_9_weeks.jpg
|
118
|
+
- data/d3/puppytime/slideshow/Pancho0008.JPG
|
119
|
+
- data/d3/puppytime/slideshow/Pomeranian_orange-sable_Coco.jpg
|
120
|
+
- data/d3/puppytime/slideshow/Pug_puppy_001.jpg
|
121
|
+
- data/d3/puppytime/slideshow/Puggle_puppy_6_weeks.JPG
|
122
|
+
- data/d3/puppytime/slideshow/Puli_kan.jpg
|
123
|
+
- data/d3/puppytime/slideshow/Puppy_French_Bulldog.jpg
|
124
|
+
- data/d3/puppytime/slideshow/Rocco_the_Bulldog.jpg
|
125
|
+
- data/d3/puppytime/slideshow/Rottweiler_Face.jpg
|
126
|
+
- data/d3/puppytime/slideshow/Saint_Bernard_puppy.jpg
|
127
|
+
- data/d3/puppytime/slideshow/Scottish_froment.jpg
|
128
|
+
- data/d3/puppytime/slideshow/Shar_pei_puppy_(age_2_months).jpg
|
129
|
+
- data/d3/puppytime/slideshow/Shiba-Inu_beim_Spielen_im_Schnee.JPG
|
130
|
+
- data/d3/puppytime/slideshow/Smooth-coat_Border_Collie_puppy..jpg
|
131
|
+
- data/d3/puppytime/slideshow/Smooth_Dachshund_puppies.jpg
|
132
|
+
- data/d3/puppytime/slideshow/Snow_dog.jpg
|
133
|
+
- data/d3/puppytime/slideshow/Taylor_the_Pembroke_Welsh_Corgi.png
|
134
|
+
- data/d3/puppytime/slideshow/Weim_Pups_001.jpg
|
135
|
+
- data/d3/puppytime/slideshow/Westie_pups.jpg
|
136
|
+
- data/d3/puppytime/slideshow/Yellow_Labrador_puppies_(4165737325).jpg
|
30
137
|
- lib/d3.rb
|
138
|
+
- lib/d3/admin.rb
|
139
|
+
- lib/d3/admin/add.rb
|
140
|
+
- lib/d3/admin/auth.rb
|
141
|
+
- lib/d3/admin/edit.rb
|
142
|
+
- lib/d3/admin/help.rb
|
143
|
+
- lib/d3/admin/interactive.rb
|
144
|
+
- lib/d3/admin/options.rb
|
145
|
+
- lib/d3/admin/prefs.rb
|
146
|
+
- lib/d3/admin/report.rb
|
147
|
+
- lib/d3/admin/state.rb
|
148
|
+
- lib/d3/admin/validate.rb
|
149
|
+
- lib/d3/basename.rb
|
150
|
+
- lib/d3/client.rb
|
151
|
+
- lib/d3/client/auth.rb
|
152
|
+
- lib/d3/client/class_methods.rb
|
153
|
+
- lib/d3/client/class_variables.rb
|
154
|
+
- lib/d3/client/cli.rb
|
155
|
+
- lib/d3/client/environment.rb
|
156
|
+
- lib/d3/client/help.rb
|
157
|
+
- lib/d3/client/lists.rb
|
158
|
+
- lib/d3/client/receipt.rb
|
159
|
+
- lib/d3/configuration.rb
|
160
|
+
- lib/d3/constants.rb
|
161
|
+
- lib/d3/database.rb
|
162
|
+
- lib/d3/exceptions.rb
|
163
|
+
- lib/d3/log.rb
|
164
|
+
- lib/d3/package.rb
|
165
|
+
- lib/d3/package/aliases.rb
|
166
|
+
- lib/d3/package/attributes.rb
|
167
|
+
- lib/d3/package/class_methods.rb
|
168
|
+
- lib/d3/package/class_variables.rb
|
169
|
+
- lib/d3/package/client_actions.rb
|
170
|
+
- lib/d3/package/constants.rb
|
171
|
+
- lib/d3/package/constructor.rb
|
172
|
+
- lib/d3/package/getters.rb
|
173
|
+
- lib/d3/package/mixins.rb
|
174
|
+
- lib/d3/package/private_methods.rb
|
175
|
+
- lib/d3/package/questions.rb
|
176
|
+
- lib/d3/package/server_actions.rb
|
177
|
+
- lib/d3/package/setters.rb
|
178
|
+
- lib/d3/package/validate.rb
|
179
|
+
- lib/d3/puppytime.rb
|
180
|
+
- lib/d3/puppytime/pending_puppy.rb
|
181
|
+
- lib/d3/puppytime/puppy_queue.rb
|
182
|
+
- lib/d3/state.rb
|
183
|
+
- lib/d3/utility.rb
|
31
184
|
- lib/d3/version.rb
|
32
185
|
- lib/depot3.rb
|
33
186
|
homepage: http://pixaranimationstudios.github.io/depot3/
|
@@ -50,9 +203,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
50
203
|
version: 2.0.0
|
51
204
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
52
205
|
requirements:
|
53
|
-
- - '
|
206
|
+
- - '>='
|
54
207
|
- !ruby/object:Gem::Version
|
55
|
-
version:
|
208
|
+
version: '0'
|
56
209
|
requirements: []
|
57
210
|
rubyforge_project:
|
58
211
|
rubygems_version: 2.6.1
|