Git Product home page Git Product logo

depot3's Introduction

d3 - Command line package and patch management for Jamf Pro

d3 (a.k.a. depot3) is a package deployment and patch management system for OS X that enhances Jamf Pro, an enterprise-level management system for Apple devices. It was created by Pixar Animation Studios.

d3 adds these capabilities and more to Jamf Pro's package handling:

  • Automatic software updates on clients when new versions are released on the server
  • Pre-release piloting of new packages
  • Customizable slideshow presented during logout/reboot installs
  • Installs and uninstalls are conditional on the exit status of pre-flight scripts
  • Packages can be expired (auto-uninstalled) after a period of disuse
  • Both the client and admin tools are command-line only and fully scriptable
  • Admin command-line options allow integration with developer workflows and package-retrieval tools

d3 is written in Ruby and available as a rubygem called 'depot3'. It interfaces with Jamf Pro via its REST API using ruby-jss, a ruby module that provides simple and powerful access to the API. It also uses Jamf Pro's backend MySQL database directly to provide enhanced features.

DOCUMENTATION

Full user/administrator documentation is available at the GitHub project's wiki page.

The developer documentation for the D3 ruby module is at http://www.rubydoc.info/gems/depot3.

Also check out ruby-jss, which is used by d3, but is useful for working with the Jamf Pro Classic REST API in any project.

CONTACT

Email

Macadmins Slack Channel(@glenfarclas17)

LICENSE

Copyright 2018 Pixar

Licensed under the Apache License, Version 2.0 (the "Apache License") with the following modification; you may not use d3 except in compliance with the Apache License and the following modification to it:

Section 6. Trademarks. is deleted and replaced with:

6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor and its affiliates, except as required to comply with Section 4(c) of the License and to reproduce the content of the NOTICE file.

You may obtain a copy of the Apache License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the Apache License with the above modification is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the Apache License for the specific language governing permissions and limitations under the Apache License.

depot3's People

Contributors

aurica avatar glenfarclas17 avatar homebysix avatar jminor avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

depot3's Issues

make admin access work with one username/password

Currently to use d3admin, the user must provide two usernames and three passwords, which are stored in the keychain.

API => user/passwd
SQL => user/passwd
MasterDistPoint => passwd

Devise a method for securely storing enough data in the JSS, accessible via the API, limited to the d3admin, to get the other passwords as needed.

Then store only the API username/passwd in the local keychain, possibly with one other key, for decryption.

Possible with ideas based on: https://github.com/jamfit/Encrypted-Script-Parameters

Pre-caching of pkgs

It might be useful for, esp WRT issue #3, to pre-cache packages. either just for puppy-installs, or optionally for any package, or just packages with a 'cachable' setting.

d3admin: Allow for multiple expiration paths

Currently, you can only supply one path for an expiration, which means that it's not possible to set expirations for cases when you install multiple apps with one package, such as with Microsoft Office. Being able to comma-separate paths in the expiration path field would be great, so you can still set an expiration that resets if any of the listed apps has been used.

Notes feature

It would be great if there was a per-basename, per-host notes field, where administrators could leave a short text note for other admins. This comes up, for example, when someone has frozen a basename on a host. Often another admin will wonder, "Why was this frozen 3 weeks ago? Should I unfreeze it?" Allowing a notes field would let you explain why you froze something.

Proposed usage:
% d3 -n <message> <basename>
Sets the note message for the given <basename> on this host.
If <message> is the empty string, the note is cleared.

% d3 -n <message> [other actons]
Sets the note message for the given basename on this host in addition to doing [other actions]

For example:
% d3 -n "no upgrades until Sally returns from her overseas trip" freeze some-app

The list-* actions should display the note (if any) for each basename.

d3 should exit with non-zero status on errors

Currently a failed d3 install or d3 freeze command exits with a 0 status code, which makes it hard to write a reliable shell script that uses d3.

Repro:
sudo d3 install somethingbogus && echo success
sudo d3 freeze somethingbogus && echo success

Setup config files Documentation

Documentation is incorrect for current PKG version:

Make a copy of the ruby-jss.conf.example file.

  • If you installed d3 with the .pkg it will be in /etc/

ruby-jss.conf.example was not stored in /etc/ it was stored in the gem.

Expiration: allow multiple expiration paths

Currently the expiration feature uses a single path to an executable to determine if the installed item has been "used" lately. But some d3 packages install multiple executables, any one of which count towards "use" (e.g. if you install Microsoft Office as a single package).

By storing "expiration_paths" as an array of Pathnames, rather than "expiration_path" as a single Pathname we can accomodate this.

It will require reworking all parts of d3 that deal with expiration paths to

  • handle input as comma-separated String, Single Pathname, or Array of Strings or Pathnames
  • Store the package/receipt attribute as a (possibly empty) Array of Pathnames
  • Store the pkg attribute in the DB as a comma-separated string
  • Deal with the Array when performing expiration checks.

d3admin โ€” Revision number doesn't reset with new Version number

When a new Version of a package is introduced, the Revision number keeps it's inherited value rather than resetting. For instance, if a given package was previously at Version 2, Revision 5 and it's Version number was changed from 2 to 3, it's Revision number would remain at 5 instead of resetting to 1.

ArgumentError: Unknown d3 action: list_queue

lq is parsed correctly, list-queue is not.

d3 lq
# There are no puppies in the queue

d3 list-queue
An error occurred: ArgumentError: Unknown d3 action: list_queue. Use -H for help 

d3 -H | grep list-queue
  list-queue      lq                    - Pending puppy (logout) installs

d3admin โ€” Expiration Path errors when set to 'none'

During an interactive --walkthru edit or add, when Expiration Path is changed to none, d3admin produces the following error and loops until a non-blank Expiration Path is set. "Sorry: Expiration Path must be a full path starting with /., Try again."

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.