It took longer to get this working than we thought. We have spent the time between when we recorded the presentation and now (October 14, 2021) getting GitHub actions working so that it will test and publish to. Since we recorded our session over a month ago, some of the information in our presentation is out of date already. If you have additional questions, or need more help getting started, post a question on the MacAdmin's Slack jctl channel. Then on the search results page select the "Wiki" option or click here and search. To search this wiki use the "Search" field in the GitHub navigation bar above.
To upgrade python-jamf run the following command: sudo pip3 install -upgrade python-jamfįor further in-depth details please check out the wiki. Upgrading python-jamf is easy if you installed it via pip. To uninstall python-jamf run the following command: sudo pip3 uninstall python-jamf Uninstalling python-jamf is easy if you installed it via pip. Install Module & Requirements: sudo pip3 install python-jamf.Quick Start Installingįor those that want to try python-jamf quickly here are some general steps: You can replace jamf.Computers() with jamf.Policies() or any supported record type. Print(computers.recordWithName("Jimmy's Mac").data)įor computer in computers.recordsWithRegex("Jm's? Mac"): # Matches Jimmy's, James', and James'sĬomputer = computers.recordWithName("James's Mac)Ĭomputer.refresh() # Re-download the record from the serverĬomputer.data = "James' Mac"Ī few notes. Print(computer.data)Ĭomputers = jamf.Computers() # Use the data retrieved above, don't re-downloadĬomputers.refresh() # Re-download the records from the server import jamfįor computer in jamf.Computers(): # Retreive the data from the server
Lastly, it shows how to delete and create records.
Then, it searches for a computer by name and if it exists then it changes the name.
The following code prints the last_contact_time from all computer records, from a computer record with the ID of 1, a computer record named "Jimmy's Mac", and computer records that match a regex. This is just a quick example of the power and ease-of-use of python-jamf. Note, python-jamf can work with unsupported Jamf records, it just isn't as easy as the next section shows. All changes you make are local until you save or refresh the object. This prevents multiple fetches for the same object. All lists of records are singleton subclasses of the Records class.īy being singleton classes, you perform one fetch to the server for each list or record. All Jamf Pro data is stored as a Python dictionary that is accessed with the data() method. Objects do not have member variables for Jamf data. Supported Jamf RecordsĬurrently, the python-jamf supports about 50 Jamf records like Buildings, Categories, Computers, OSXConfigurationProfiles, and Policies for example.Įach record is a singleton Python object, but they are generic and most functionality comes from the parent Record class. Please check out the jctl github page for more information. And recently added PyPi to support pip installation. It is similar to SQL statements, but far less complex. It allows performing Jamf Pro repetitive tasks quickly and provides options not available in the web GUI. The second project, jctl, is a command-line tool that uses the python-jamf library to select objects to create, delete, print and update. Later, it was split into two projects, python-jamf, which is a python library that connects to a Jamf Pro server using Jamf Pro Classic API, including keychain support for Jamf Pro credentials via keyring python project, support for PyPi to support pip installation and currently supports 56 Jamf Pro record types which will expand in number as the project continues. development, testing, production), and scripting and automation.
Originally, it was a "patch" project that was focused on patch management including installer package management, patch management, including assigning package to patch definition, updating versions, version release branching (i.e. The python-jamf module also provides undocumented access to Jamf Admin functionality used for uploading items to Jamf Distribution Points. It handles the URL requests, authentication, and converts between XML/JSON to Python dictionaries/lists. The python-jamf API class doesn't hide anything from you. The concept behind it is to have a class or simply a collection of data (variables) and methods (functions) that maps directly to the API ( ).
The Classic API is the primary tool for programmatic access to data on a Jamf Pro server to allow integrations with other utilities or systems. Python-jamf is a Python 3 module to access the Jamf Pro Classic API. Programmatic Automation, Access & Control of Jamf Pro