Skip to content

Noteworthy Processors

weldon edited this page May 8, 2024 · 52 revisions

There are tasks that recipe writers have found helpful when handling management systems and specific workflows or products. As described in Processor Locations, anyone can make their own helper processors and use them across multiple recipes as needed. You therefore sometimes will not need to solve the same problem others already have to process a particular product or perform a function. This page, which is community-modifiable by anyone with a GitHub account, encourages writers of processors that would be of use to folks outside of the core autopkg recipes to list them here.

Client Management Tool Related

Client Management Tool Processor
Jamf Pro JamfUploader, NotifyPatchServer, PatchBot, UpdateTitleEditor
JumpCloud JumpCloudImporter
FileWave FileWaveImporter
LANRev LANRevImporter
BigFix AutoPkgBESEngine
SCCM CmmacCreator
Intune IntuneUploader
Kandji KAPPA

Generic Utilities

Processor Description Author
AppIconExtractor AppIconExtractor examines an app and exports its icon as a PNG image file (reading the CFBundleIconFile property from an app's Info.plist and saving that image as a PNG file. Additionally, AppIconExtractor can create icon variations by compositing a secondary image on top of the app's icon. More information here. @haircut
Archive When this post-processor detects a new download or that a new package was built it will copy it to a the directory given in archive_directory. archive_directory can be on a file server, but it is your responsibility that the share is mounted and available at that path. @scriptingosx
BinaryFileVersioner Using the /usr/bin/otool command returns the version number of a binary file that has an embedded Info.plist. @homebysix
CaseChanger Changes the case of a variable (capitalize, lower, title, or upper) @dataJAR
ChoicesXMLGenerator Generates a choices.xml file for use with an installer. A postinstall script is required to run the installer with the choices.xml. @grahampugh
DatetimeOutputter Output the current date and time, and optionally output future or past dates and times for use in other processors. @haircut
DirectoryList Returns a list of items in a subdirectory as a string, separated by commas. @nmcspadden
ExecutableFileVersioner For when the only way to reliably collect a version is to call the executable directly - ex. autopkg version. @apizz
FileAppender This processor will simply append a string on to the end of a file. This is useful if an AutoPkg recipe needs to add more variables or other data into a file that already exists (as part of a download, or something created from a previous FileCreator processor). @nmcspadden
FileTemplate This processor can be used to read a file with placeholder variables and write the result to a new file (presumably in the package being built). I use the FileTemplate processor in the FirefoxPrefs.pkg recipe to insert a javascript settings file with the proper values. @scriptingosx
FindAndReplace Searches the input variable specified and replaces instances of the "find" string with the "replace" string. @homebysix
FlatToDistPkg Converts a flat package to a distribution-style package. @davidbpirie
GoToMeetingURLProvider Provides a download URL for the latest GoToMeeting release. @thenikola
GPGSignatureVerifier Verifies GPG signatures @gerardkok
InstallsArrayFineTuning Change an installs array to allow fine-tuning of a type. @nmcspadden
JamfRecipeMaker Automates the generation of .jamf recipes from inputted .pkg or .jss recipes. @grahampugh
LastRecipeRunChecker Reads values from the JSON file generated by the LastRecipeRunResult processor, allowing re-use of existing packages and version information. @grahampugh
LastRecipeRunResult A post-processor which writes certain information from the recipe run into a JSON file in the Cache folder, which can be then read in a future autopkg run using the LastRecipeRunChecker pre-processor. This allows you pass package and version information on to another recipe so that the recipe does not have to download and recreate the package again. @grahampugh
LocalRepoUpdateChecker This processor assumes that a given folder contains sub-folders which are named after the version of their contents. The idea is that there is a single package, DMG or other installer inside the folder. The list of full paths to files in folders is generated using the SubDirectoryList processor, so this processor won't work unless SubDirectoryList is earlier in a recipe's list of processes. @grahampugh
MD5Checksum Calculate a message-digest fingerprint (checksum) for a file @n8felton
ModeChanger chmod the downloaded item - remember that munki can handle that in a pkginfo if it's a drag-drop type item. @jessepeterson
MunkiPkginfoReceiptsEditor Modifies the "optional" state of receipts in a Munki pkginfo. @keeleysam
Notification This post-processor will show a user notification when the processor detects a new download or that a new package was built. May act strangely when run with no user logged in. @scriptingosx
OptionSelector Processor can select options used by subsequent processing steps. @homebysix
PackageInfoVersioner This processor provides a way to get a version number from the PackageInfo file inside a distribution/bundle style package. This processor specifically looks for the "pkg-info" XML tag inside the PackageInfo file and uses that as the version. This is helpful for bundle packages that provide multiple components with unique / differing version numbers, and there's no single item you can reliably use for versioning. The simplest usage is to use something like FileFinder to locate the PackageInfo file inside the bundle package you've downloaded or unarchived and then call this processor. @nmcspadden
PkgInfoVersioner Finds a package given its package ID and modifies the PackageInfo version, resulting in the receipt database containing the modified version information. @n8felton
PkgSigner This processor is designed to add code signing by an Apple Developer ID: Installer to an installer package generated by AutoPkg. Certain initial setup requirements are described in the processor Description. Authored by Paul Suh. @rtrouton (host)
RevealInFinder This post-processor will open a new Finder window and select the new file. It will either use a newly archived file, a newly built package or a new download (in that order). May not work when no user is logged in. @scriptingosx
Rsync This processor calls out to a locally installed rsync (defaults to /usr/bin/rsync) to rsync between a source and destination. You can specify a path to a specific rsync binary if needed. Arguments can be passed in, and the string provided to the "rsync_arguments" processor input variable will be passed directly into the subprocess call to rsync. See the rsync man page for acceptable arguments. NOTE: The leading hyphens before your arguments are required! Please note that we have so far only used this for local source -> destination copying, and have not tested a very wide a variety of rsync arguments - so there may be some things that get passed in that don't behave properly in this context. If you do find some arguments that cause problems, please let us know! @nmcspadden
SHA1Checksum Calculate a message-digest fingerprint (checksum) for a file @n8felton
SHA256Checksum Calculate a message-digest fingerprint (checksum) for a file @n8felton
SHAChecksum This processors calls out to /usr/bin/shasum to calculate a checksum on a file. You can specify the SHA type (to be passed to the -a argument) as an input variable. @nmcspadden
SMBMounter and SMBUnmounter Processors for mounting and unmounting SMB shares. @grahampugh
SourceForgeBestReleaseURLProvider Provides URLs to the "Best Release" of a project on SourceForge. The "Best Release" is set by the project maintainer, and while one would think that should always be the "latest stable" release, that is not always the case. Always verify output. @n8felton
SourceForgeURLProvider Provides URL to the latest file that matches a pattern for a particular SourceForge project. @jessepeterson
StringReplacer This processor replaces a string within a variable with another string, rather like using sed. An example would be to remove a file suffix from a string. @grahampugh
SubDirectoryList This processor is used to generate a list of all files in folders in a path. That list is then processed by other processors such as LocalRepoUpdateChecker. It's an adaptation of Nick McSpadden's listed here with some additional filter options. @grahampugh
SubDirectoryList This is a more complex processor with more specific usage. For a given root path, this processor will walk through and create two lists: one for all files found relative to the root path, and one for all directories found relative to the root path. Both of these lists are stored as strings, with each item separated by the contents of the "suffix_string" input variable (which defaults to ", " comma). This doesn't have too much use in most AutoPkg recipes, but is the foundational key for translating packages into other management suites that require the pre-creation of subdirectories before placing files on the disk. @nmcspadden
TextSearcher Performs a regular expression match on the text passed via the text_in input variable. (Same code as URLTextSearcher, but searches arbitrary text rather than a web page. Useful for extracting info from a filename using a regular expression.) @jazzace
VersionRegexGenerator Generates a regex which encompasses the supplied version plus any realistic newer version. Useful in scoping computer groups in Jamf Pro for Munki-like patch version control. @grahampugh
VersionSplitter Splits version numbers and returns the specified index. @homebysix
VirusTotalAnalyzer Query downloaded files from the VirusTotal database. @hjuutilainen
XMLReader Read and return values from XML files. @triti
YAML Parse YAML into usable autopkg variables @n8felton

Older Commit

While these were part of an early PR from @paulsuh that has not seen activity in some time, there are many interesting processors here like the PkgSigner and (munki-specific) PkgInfoTemplateCreator processors.

Table of Contents

Clone this wiki locally