{"id":14965321,"url":"https://github.com/eon01/saltstackcheatsheet","last_synced_at":"2026-01-20T22:36:22.029Z","repository":{"id":74328604,"uuid":"45348324","full_name":"eon01/SaltStackCheatSheet","owner":"eon01","description":"SaltStack Cheat Sheet","archived":false,"fork":false,"pushed_at":"2022-02-20T17:40:41.000Z","size":507,"stargazers_count":87,"open_issues_count":0,"forks_count":29,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-04-09T15:13:54.685Z","etag":null,"topics":["devops","salt","salt-master","salt-minion","salt-states","saltstack"],"latest_commit_sha":null,"homepage":"http://saltstackfordevops.com","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/eon01.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2015-11-01T16:38:08.000Z","updated_at":"2024-10-15T09:13:55.000Z","dependencies_parsed_at":null,"dependency_job_id":"3ee4c9cf-f7d9-4935-8f9f-646cd78ece83","html_url":"https://github.com/eon01/SaltStackCheatSheet","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eon01%2FSaltStackCheatSheet","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eon01%2FSaltStackCheatSheet/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eon01%2FSaltStackCheatSheet/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eon01%2FSaltStackCheatSheet/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eon01","download_url":"https://codeload.github.com/eon01/SaltStackCheatSheet/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248055275,"owners_count":21040157,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["devops","salt","salt-master","salt-minion","salt-states","saltstack"],"created_at":"2024-09-24T13:34:34.991Z","updated_at":"2026-01-20T22:36:22.003Z","avatar_url":"https://github.com/eon01.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# SaltStack Cheat Sheet\n\n\n\nThis cheat sheet was first published in \"[SaltStack For DevOps](http://saltstackfordevops.com)\" course.\n\n![](images/sfd.png)\n\n\n## Installing SaltStack - Ubuntu 12, 14, 16, 18 and 20\n\nUpdate your key base and source lists from [this page](https://repo.saltstack.com/#ubuntu) according to your distribution.\n\nExample: Ubuntu 18 - Python3\n\n```\nwget -O - https://repo.saltstack.com/py3/ubuntu/18.04/amd64/latest/SALTSTACK-GPG-KEY.pub | sudo apt-key add -\n\necho 'http://repo.saltstack.com/py3/ubuntu/18.04/amd64/latest bionic main' | sudo tee -a /etc/apt/sources.list\n\nsudo apt-get update\n\n# Master installation\napt-get install salt-master\n\n# Minion installation\napt-get install salt-minion\n\n# Salt ssh installation\napt-get install salt-ssh\n\n# Salt syndic installation\napt-get install salt-syndic\n\n# Salt API installation\napt-get install salt-api\n```\n\n## Multi-Platform Installation\n\nSalt Master:\n\n```\ncurl -L https://bootstrap.saltstack.com -o install_salt.sh\nsudo sh install_salt.sh -P -M\n```\n\nSalt Minion:\n\n```\ncurl -L https://bootstrap.saltstack.com -o install_salt.sh\nsudo sh install_salt.sh -P\n```\n\n## Salt Key Management\n\n```\n# Listing Salt requests\nsalt-key -L\n\n# Accepting all requests\nsalt-key -A\n\n# Accepting a single request (from myNode)\nsalt-key -a myNode\n\n# Removing the key of a Salt 'myNode' Minion\nsalt-key -d minion_id\n\n# Delete salt key and register it\nsalt-key -d 'minion' \u0026\u0026 yes | salt-key -a 'minion'\n```\n\n## Debugging\n\n```\n# Debugging the master\nsalt-master -l debug\n\n# Debugging the minion\nsalt-minion -l debug\n\n# Restarting the minion without cache\nstop master/minion\nrm -rf /var/cache/salt\nstart master/minion\n```\n\n## Clearing Cache\n\n```\n# Clearing cache on the minion by removing the cache directory\nsalt '*' cmd.run 'rm -rf /var/cache/salt/minion/files/base/*'\n\n# Clearing cache the Salt way (using saltutil module)\nsalt '*' saltutil.clear_cache\n\n# Synchronizes custom modules, states, beacons, grains, returners, output modules, renderers, and utils.\nsalt '*' saltutil.sync_all\n```\n\n## SaltStack Documentation\n\n```\n# Viewing all the documentation\nsalt '*' sys.doc\n\n# Viewing a module documentation\nsalt '*' sys.doc module_name\n\n#Examples:\nsalt '*' sys.doc status\nsalt '*' sys.doc pkg     \nsalt '*' sys.doc network\nsalt '*' sys.doc system\nsalt '*' sys.doc cloud\n\n# Viewing a function documentation\nsalt '*' sys.doc module_name function_name\n\n# Examples:\nsalt '*' sys.doc  auth django\nsalt '*' sys.doc sdb sqlite3\n```\n\n## SaltStack Versions\n\n```\n# Salt components report\nsalt --versions-report\nsalt --versions\n\n# Master version\nsalt-master --version\n\n# Minion version\nsalt-minion --version\n```\n\n## SaltStack Modules And Functions\n\n```\n# list modules\nsalt '*' sys.list_modules\n\n# list functions\nsalt '*' sys.list_functions\n\n# synchronising modules on the minion\nsalt-call saltutil.sync_modules\n```\n\n## Compound Matchers\n\n| Letter | Match Type        | Example                                                    | Alt Delimiter?] |\n| ------ | ----------------- | ---------------------------------------------------------- | --------------- |\n| G      | Grains glob       | G@os:Ubuntu                                                | Yes             |\n| E      | PCRE Minion ID    | E@web\\d+\\.(dev\\|qa\\|prod)\\.loc                             | No              |\n| P      | Grains PCRE       | P@os:(RedHat\\|Fedora\\|CentOS)                              | Yes             |\n| L      | List of minions   | L@minion1.example.com,minion3.domain.com or bl*.domain.com | No              |\n| I      | Pillar glob       | I@pdata:foobar                                             | Yes             |\n| J      | Pillar PCRE       | J@pdata:^(foo\\|bar)$                                       | Yes             |\n| S      | Subnet/IP address | S@192.168.1.0/24 or S@192.168.1.100                        | No              |\n| R      | Range cluster     | R@%foo.bar                                                 | No              |\n\nOther examples:\n\n```\n# Examples are taken from https://docs.saltstack.com/en/latest/topics/targeting/compound.html\n\n# Joining\nsalt -C 'webserv* and G@os:Debian or E@web-dc1-srv.*' test.ping\nsalt -C '( ms-1 or G@id:ms-3 ) and G@id:ms-3' test.ping\n\n# Excluding\nsalt -C 'not web-dc1-srv' test.ping\n```\n\n## Upgrades \u0026 Versions of System Packages\n\n```\n# Listing upgrades\nsalt '*' pkg.list_upgrades\n\n# Upgrading\nsalt '*' pkg.upgrade\n\n# List the packages currently installed as a dict\nsalt '*' pkg.list_pkgs versions_as_list=True\n\n# Refresh the pkgutil repo database\nsalt '*' pkgutil.refresh_db\n\n# Check the version of a package\nsalt '*' pkgutil.version mongodb\n```\n\n## Packages \n\n```\n# Installation\nsalt '*' pkg.install apache2\n\n# Latest version installation\nsalt '*' pkgutil.latest_version mysql-common\n\n# Removing package(s)\nsalt '*' pkg.remove vim\n\n# Purging package(s)\nsalt '*' pkg.purge apache2 mysql-server\n\n```\n\n## Reboot \u0026 Uptime\n\n```\n# Reboot\nsalt '*' system.reboot\n\n#Uptime\nsalt '*' status.uptime\n```\n\n## Using Grains\n\n```\n# Syncing grains\nsalt '*' saltutil.sync_grains\n\n# Available grains can be listed by using the ‘grains.ls’ module:\nsalt '*' grains.ls\n\n# Grains data can be listed by using the ‘grains.items’ module:\nsalt '*' grains.items\n\n# Grains have values that could be called via ‘grains.get \u003cgrain_name\u003e’ (path is the name of a grain)\nsalt '*' grains.get path\n```\n\n## Syncing Data\n\n```\n# Syncing grains\nsalt '*' saltutil.sync_grains\n\n# Syncing everything from grains to modules, outputters, renderers, returners, states, and utils.\nsalt '*' saltutil.sync_all\n```\n\n## Running System Commands\n\n```\nsalt \"*\" cmd.run \"ls -lrth /data\"\nsalt \"*\" cmd.run \"df -kh /data\"\nsalt \"*\" cmd.run \"du -sh /data\"\n```\n\n## Working With Services\n\n```\n# Apache example\n\n# Checking if service is available\nsalt '*' service.available apache2\n\n# Manipulating Apache2 service\nsalt '*' service.status apache2\nsalt '*' service.start apache2\nsalt '*' service.restart apache2\nsalt '*' service.stop apache2\n```\n\n## Network Management\n\n```\n# Get IP of your minion\nsalt '*' network.ip_addrs          \n\n# Ping a host from your minion\nsalt '*' network.ping localhost   \n\n# Traceroute a host from your minion\nsalt '*' network.traceroute localhost   \n\n# Get hostname\nsalt '*' network.get_hostname      \n\n# Modify hostname to 'myNode'\nsalt '*' network.mod_hostname myNode\n\n# Information on all of the running TCP connections\nsalt '*' network.active_tcp\n\n# Return the arp table from the minion\nsalt '*' network.arp\n\n# Test connectivity\nsalt '*' network.connect google-public-dns-a.google.com port=53 proto=udp timeout=3\n\n# Get default route\nsalt '*' network.default_route\n\n# Execute dig\nsalt '*' network.dig eon01.com\n\n# Get the MAC address of eth0 interface\nsalt '*' network.hw_addr eth0\n\n# Get the inet address of eth1 interface\nsalt '*' network.interface eth1\n\n# Get the IP address of tun interface\nsalt '*' network.interface_ip tun\n```\n\n## Working With HTTP Requests\n\n```\n# Get the HTML source code of a page\nsalt-run http.query https://faun.dev text=true\n\n# Get the header of a page\nsalt-run http.query https://faun.dev headers=true\n\n# Get the response code from a web server\nsalt-run http.query https://faun.dev status=true\n\n# Sending a post request\nsalt '*' http.query http://domain.com/ method=POST params='key1=val1\u0026key2=val2'\n\n```\n\n## Job Management\n\n```\n# List active jobs\nsalt-run jobs.active\n\n# List all jobs with the id and other information\nsalt-run jobs.list_jobs\n\n# List multiple information about the job with the id:20151101225221651308 like the resulting output\nsalt-run jobs.lookup_jid 20151101225221651308\n\n# Kill the job with the id:20151101225221651308\nsalt 'server' saltutil.kill_job 20151101225221651308\n```\n\n## Scheduling Features\n\n```\n# Schedule a job called \"scheduled_job\"\nsalt '*' schedule.add scheduled_job function='cmd.run' job_args=\"['']\" seconds=10\n\n# Enable the job\nsalt '*' schedule.enable_job scheduled_job\n\n# Disable the job\nsalt '*' schedule.disable_job scheduled_job\n\n# List schedules\nsalt '*' schedule.list\n```\n\n## Working With SLS\n\n```\n# Show SLS\nsalt '*' state.show_sls\n\n# listing states modules on the minion\nsalt-call sys.list_state_modules\n```\n\n## Testing States\n\n```\n# Test a highstate using the highstate module\nsalt '*' state.highstate test=True\n\n# Test a highstate using the SLS module\nsalt '*' state.sls test=True\n\n# Test a single state\nsalt '*' state.single test=True\n```\n\n## Asynchronous execution\n\n```\n# Run the command in the async mode\nsalt '*' test.version --async\n\n# List recent jobs\nsalt-run jobs.list_jobs\n# or\nsalt-run jobs.active\n\n# Get the returned result:\nsalt-run jobs.lookup_jid \u003cjob_id\u003e\n```\n\n## Load testing\n\n```\n# Starting 20 minions\nwget https://raw.githubusercontent.com/saltstack/salt/develop/tests/minionswarm.py; python minionswarm.py -m 20 --master salt-master;\n```\n\n## State Declaration Structure\n\n```\n# Source: https://docs.saltstack.com/en/latest/ref/states/highstate.html#state-declaration\n\n# Standard declaration\n\u003cID Declaration\u003e:\n  \u003cState Module\u003e:\n    - \u003cFunction\u003e\n    - \u003cFunction Arg\u003e\n    - \u003cFunction Arg\u003e\n    - \u003cFunction Arg\u003e\n    - \u003cName\u003e: \u003cname\u003e\n    - \u003cRequisite Declaration\u003e:\n      - \u003cRequisite Reference\u003e\n      - \u003cRequisite Reference\u003e\n\n\n# Inline function and names\n\u003cID Declaration\u003e:\n  \u003cState Module\u003e.\u003cFunction\u003e:\n    - \u003cFunction Arg\u003e\n    - \u003cFunction Arg\u003e\n    - \u003cFunction Arg\u003e\n    - \u003cNames\u003e:\n      - \u003cname\u003e\n      - \u003cname\u003e\n      - \u003cname\u003e\n    - \u003cRequisite Declaration\u003e:\n      - \u003cRequisite Reference\u003e\n      - \u003cRequisite Reference\u003e\n\n\n# Multiple states for single id\n\u003cID Declaration\u003e:\n  \u003cState Module\u003e:\n    - \u003cFunction\u003e\n    - \u003cFunction Arg\u003e\n    - \u003cName\u003e: \u003cname\u003e\n    - \u003cRequisite Declaration\u003e:\n      - \u003cRequisite Reference\u003e\n  \u003cState Module\u003e:\n    - \u003cFunction\u003e\n    - \u003cFunction Arg\u003e\n    - \u003cNames\u003e:\n      - \u003cname\u003e\n      - \u003cname\u003e\n    - \u003cRequisite Declaration\u003e:\n      - \u003cRequisite Reference\u003e\n```\n\n## Events\n\n\n```bash\n# Listening to Salt events on the master\nsalt-run state.event pretty=True\n\n# Sending events from the minion\nsalt-call event.send 'my/custom/tag' '{success: True, message: \"It works!\"'\n\n# run an event locally on the minion\nsalt-call event.fire '{\"data\": \"my message\"}' 'my/custom/tag'\n\n```\n\n```bash\n# Instruct minions to sends events to the master when a state completes its execution.\ncat \u003c\u003c EOF \u003e\u003e /etc/salt/master\nstate_events: True\nEOF\n\n# Firing an event after state execution\ncat \u003c\u003c EOF \u003e /srv/salt/webserver/init.sls\napache2:\n  pkg.installed:\n    - fire_event: apache2/installed\nEOF\n```\n\n## Reactor\n\n```bash\n# map a event tag to a reactor\ncat \u003c\u003c EOF \u003e /etc/salt/master.d/reactor.conf\nreactor:\n  - 'salt/minion/minion01/start':\n    - /srv/reactor/start.sls\nEOF\n\n# execute a state as a reaction to an event tag\ncat \u003c\u003c EOF \u003e /srv/reactor/start.sls\n\u003cid\u003e:\n  local.state.single:\n    - tgt: \u003ctarget\u003e\n    - tgt_type: \u003ctargeting_type\u003e\n    - args:\n      - fun: \u003cmodule.function\u003e\n      - name: \u003c\u003e\nEOF\n\n# targeting the minion which sent the event\ncat \u003c\u003c EOF \u003e /srv/reactor/start.sls\n\u003cid\u003e:\n  local.state.single:\n    - tgt: {{ data['id'] }} \n    - args:\n      - fun: \u003cmodule.function\u003e\n      - name: \u003c\u003e\nEOF\n```\n\n## Salt beacons\n\n```bash\n# watching files using beacons\ncat \u003c\u003c EOF \u003e /srv/pillar/beacons/init.sls\nbeacons:\n  inotify:\n    - files:\n        \u003cfile_path\u003e:\n          mask:\n            - modify\nEOF\n\n# using load.averages\ncat \u003c\u003c EOF \u003e /srv/pillar/beacons/init.sls\nbeacons:\n  load:\n    - averages:\n        1m:\n          - 0.0\n          - 2.0\n        5m:\n          - 0.0\n          - 1.0\n        15m:\n          - 0.0\n          - 1.0\nEOF\n\n# Using memusage\ncat \u003c\u003c EOF \u003e /srv/pillar/beacons/init.sls  \nbeacons:        \n  memusage:\n    - percent: 50%        \nEOF\n```\n\n## Salt mine\n\n```yaml\n# Using mine functions\ncat \u003c\u003c EOF \u003e\u003e /srv/pillar/miner.sls\nmine_functions:\n  network.get_hostname: []\nEOF\n\ncat \u003c\u003c EOF \u003e\u003e /srv/pillar/miner.sls\nmine_functions:\n  network.ip_addrs: [eth1]\nEOF\n\n# refresh pillars if you configure mine as a pillar\nsalt '*' saltutil.refresh_pillar\n\n# updating mine\nsalt '*' mine.update\n# get mine data\nsalt '*' mine.get '*' network.get_hostname\n\n# Using alias\ncat \u003c\u003c EOF \u003e /srv/pillar/mine.sls\nmine_functions:\n  get_hostname:\n    mine_function: network.get_hostname\n  get_eth1:\n    mine_function: network.ip_addrs\n    interface: eth1\nEOF\n```  \n\n\n## Orchestration\n\n```bash\nsalt-run state.orchestrate orch.\u003cSLS\u003e\nsalt-run state.orchestrate orch.\u003cSLS\u003e test=\u003ctrue|false\u003e\nsalt-run state.orchestrate orch.\u003cSLS\u003e saltenv=\u003cenv\u003e\n```\n\n\n```yaml\n# Orchestration without highstate:\n\u003cid\u003e:\n  salt.state:\n    - tgt: \u003ctarget\u003e\n    - sls: \u003csls\u003e\n\n# Orchestration with highstate:\n\u003cid\u003e:\n  salt.state:\n    - tgt: \u003ctarget\u003e\n    - sls: \u003csls\u003e\n    - highstate: True\n\n# Orchestration with highstate and SLS requirements:\n\u003cid\u003e:\n  salt.state:\n    - tgt: \u003ctarget\u003e\n    - sls: \u003csls\u003e\n    - highstate: True\n    - require:\n      - salt: \u003c\u003e    \n```\n\n## Salted Github Repositories\n\n- [Django with SaltStack](https://github.com/wunki/django-salted)\n- [Salt GUI pad](https://github.com/tinyclues/saltpad)\n- [Openstack automation with SaltStack](https://github.com/CSSCorp/openstack-automation)\n- [A curated collection of working salt *states* and configurations for use in your SaltStack setup.]( https://github.com/saltops/saltmine)\n- [These are all of the configuration files needed to built a Wordpress development environment with Vagrant, Virtual Box and SaltStack](https://github.com/paulehr/saltstack-wordpress)\n- [Java bindings for the SaltStack API]( https://github.com/SUSE/saltstack-netapi-client-java)\n- [Vim snippets for SaltStack *states* files]( https://github.com/StephenPCG/vim-snippets-salt)\n- [Metrics for SaltStack](https://github.com/pengyao/salt-metrics)\n- [Salt GUI](https://github.com/saltstack/halite)\n- [cmdb saltstack](https://github.com/voilet/cmdb)\n- [GUI For SaltStack](https://github.com/yueyongyue/saltshaker)\n- [A collaborative curated list of awesome SaltStack resources, tutorials and other salted stuff.](https://github.com/hbokh/awesome-saltstack)\n- [SaltStack provisioner for test-kitchen](https://github.com/saltstack/kitchen-salt)\n- [Dashboard for saltstack](https://github.com/halfss/salt-dashboard)\n- [Recipe to deploy production Kubernetes cluster](https://github.com/valentin2105/Kubernetes-Saltstack)\n- [A gui and cli to manage saltstack deployments](https://github.com/Lothiraldan/saltpad)\n- [Docker Compose setup to spin up a salt master and minions for easy testing, learning, and prototyping](https://github.com/cyface/docker-saltstack)  \n- [Testinfra test your infrastructures](https://github.com/pytest-dev/pytest-testinfra)\n- [Jenkins Salt API Plugin](https://plugins.jenkins.io/saltstack/)\n- [ISalt - IPython-based command shell for interactive Salt programming.](https://github.com/mirceaulinic/isalt)\n- [Alcali - A web based tool for monitoring and administrating Saltstack Salt.](https://alcali.dev/)\n- [salt-lint - Checks Salt state files (SLS) for practices and behavior that could potentially be improved.](https://github.com/warpnet/salt-lint/)\n- [salt-sproxy - Salt plugin to automate the management and configuration of devices and applications, without running (Proxy) Minions.](https://github.com/mirceaulinic/salt-sproxy)\n- [salt-pepper - A CLI Frontend to the salt-api systems.](https://pypi.org/project/salt-pepper/)\n- [Molten - Molten is a WebUI for the REST API exposed by Saltstack.](https://github.com/martinhoefling/molten)\n- [Silica - A Flask-based lightweight Salt web console.](https://gitlab.com/perfecto25/silica)\n\n\n## Interesting Reads\n\n- [SaltStack for Flexible and Scalable Configuration Management](https://www.infoq.com/articles/saltstack-configuration-management/)\n- [Lyft Replaces Puppet with SaltStack](https://www.infoq.com/news/2014/08/lyft-moves-to-saltstack/)\n- [SaltStack’s “Big” Role in Google Kubernetes and Why Immutable Infrastructure Makes The Cloud a Giant Computer](https://thenewstack.io/saltstacks-big-role-in-google-kubernetes-and-why-immutable-infrastructure-makes-the-cloud-a-giant-computer/)\n- [Every Day Is Monday In Operations](https://engineering.linkedin.com/blog/2016/11/every-day-is-monday-in-operations)\n- [SaltStack as an Alternative to Terraform for AWS Orchestration](https://eng.lyft.com/saltstack-as-an-alternative-to-terraform-for-aws-orchestration-cd2ceb06bf8c)\n- [One week of Salt: frustrations and reflections](https://stevebennett.me/2014/02/17/one-week-of-salt-frustrations-and-reflections/)\n- [Overcoming AWS Complexity with SaltStack patterns](https://eng.lyft.com/overcoming-aws-complexity-with-saltstack-patterns-1472981f43c6)\n- [How To Use Salt Cloud Map Files to Deploy App Servers and an Nginx Reverse Proxy](https://www.digitalocean.com/community/tutorials/how-to-use-salt-cloud-map-files-to-deploy-app-servers-and-an-nginx-reverse-proxy)\n- [SaltStack Infrastructure: Creating Salt States for HAProxy Load Balancers](https://www.digitalocean.com/community/tutorials/saltstack-infrastructure-creating-salt-states-for-haproxy-load-balancers)\n- [Salt-API, A Crash Course](https://thereluctanttecchie.blogspot.com/2014/01/salt-api-crash-course.html)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feon01%2Fsaltstackcheatsheet","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feon01%2Fsaltstackcheatsheet","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feon01%2Fsaltstackcheatsheet/lists"}