ansible-pull(1)
π NAME
ansible-pull β okay so picture this: it pulls playbooks from a VCS repo and executes them on the target host. That's the whole vibe. π
This page is from the ansible-pull(1) manual, filed under System administration commands. Yes bestie, you're in the right place.
β¨ SYNOPSIS
usage: ansible-pull [-h] [--version] [-v] [--private-key
PRIVATE_KEY_FILE]
[-u REMOTE_USER] [-c CONNECTION] [-T TIMEOUT] [--ssh-common-args
SSH_COMMON_ARGS] [--sftp-extra-args SFTP_EXTRA_ARGS]
[--scp-extra-args SCP_EXTRA_ARGS] [--ssh-extra-args
SSH_EXTRA_ARGS] [-k | --connection-password-file
CONNECTION_PASSWORD_FILE] [--vault-id VAULT_IDS] [-J |
--vault-password-file VAULT_PASSWORD_FILES] [-e EXTRA_VARS] [-t
TAGS] [--skip-tags SKIP_TAGS] [-i INVENTORY] [--list-hosts] [-l
SUBSET] [--flush-cache] [-M MODULE_PATH] [-K |
--become-password-file BECOME_PASSWORD_FILE] [--purge] [-o] [-s
SLEEP] [-f] [-d DEST] [-U URL] [--full] [-C CHECKOUT]
[--accept-host-key] [-m MODULE_NAME] [--verify-commit] [--clean]
[--track-subs] [--check] [--diff] [playbook.yml ...]
πΈ DESCRIPTION
Okay so here's the tea β β ansible-pull is used to pull a remote copy of ansible on each managed node, each one set to run via cron, and update playbook source via a source repository. It literally inverts the default push architecture of ansible into a pull architecture, which honestly has near-limitless scaling potential. It's giving main character energy for real. π
β οΈ None of the CLI tools are designed to run concurrently with themselves, so you should use an external scheduler and/or locking to make sure there are no clashing operations. No cap β don't let them collide.
The setup playbook can be tuned to change the cron frequency, logging locations, and parameters to ansible-pull. This is useful both for extreme scale-out and periodic remediation. And using the fetch module to retrieve logs from ansible-pull runs? That would be an excellent way to gather and analyze remote logs from ansible-pull. Obsessed. π¦
π COMMON OPTIONS
- Playbook(s) β yep, that's the entry, right there at the top, iconic.
--accept-host-keyβ adds the hostkey for the repo url if it's not already added π--become-password-file 'BECOME_PASSWORD_FILE',--become-pass-file 'BECOME_PASSWORD_FILE'β Become password file--checkβ don't make any changes; instead, try to predict some of the changes that may occur π--cleanβ modified files in the working repository will be discarded ποΈ--connection-password-file 'CONNECTION_PASSWORD_FILE',--conn-pass-file 'CONNECTION_PASSWORD_FILE'β Connection password file--diffβ when changing (small) files and templates, show the differences in those files; works great with--checkβ¨--flush-cacheβ clear the fact cache for every host in inventory--fullβ Do a full clone, instead of a shallow one.--list-hostsβ outputs a list of matching hosts; does not execute anything else--private-key 'PRIVATE_KEY_FILE',--key-file 'PRIVATE_KEY_FILE'β use this file to authenticate the connection π--purgeβ purge checkout after playbook run--scp-extra-args 'SCP_EXTRA_ARGS'β specify extra arguments to pass to scp only (e.g.-l)--sftp-extra-args 'SFTP_EXTRA_ARGS'β specify extra arguments to pass to sftp only (e.g.-f,-l)--skip-tagsβ only run plays and tasks whose tags do not match these values. This argument may be specified multiple times.--ssh-common-args 'SSH_COMMON_ARGS'β specify common arguments to pass to sftp/scp/ssh (e.g.ProxyCommand)--ssh-extra-args 'SSH_EXTRA_ARGS'β specify extra arguments to pass to ssh only (e.g.-R)--track-subsβ submodules will track the latest changes. This is equivalent to specifying the--remoteflag togit submodule update--vault-idβ the vault identity to use. This argument may be specified multiple times.--vault-password-file,--vault-pass-fileβ vault password file--verify-commitβ verify GPG signature of checked out commit, if it fails abort running the playbook. This needs the corresponding VCS module to support such an operation π«Ά--versionβ show program's version number, config file location, configured module search path, module location, executable location and exit-C 'CHECKOUT',--checkout 'CHECKOUT'β branch/tag/commit to checkout. Defaults to behavior of repository module.-J,--ask-vault-password,--ask-vault-passβ ask for vault password-K,--ask-become-passβ ask for privilege escalation password-M,--module-pathβ prepend colon-separated path(s) to module library (default={{ ANSIBLE_HOME ~ "/plugins/modules:/usr/share/ansible/plugins/modules" }}). This argument may be specified multiple times.-T 'TIMEOUT',--timeout 'TIMEOUT'β override the connection timeout in seconds (default depends on connection) β±οΈ-U 'URL',--url 'URL'β URL of the playbook repository-c 'CONNECTION',--connection 'CONNECTION'β connection type to use (default=ssh)-d 'DEST',--directory 'DEST'β path to the directory to which Ansible will checkout the repository.-e,--extra-varsβ set additional variables as key=value or YAML/JSON, if filename prepend with@. This argument may be specified multiple times.-f,--forceβ run the playbook even if the repository could not be updated πͺ-h,--helpβ show this help message and exit-i,--inventory,--inventory-fileβ specify inventory host path or comma separated host list. This argument may be specified multiple times.-k,--ask-passβ ask for connection password-l 'SUBSET',--limit 'SUBSET'β further limit selected hosts to an additional pattern-m 'MODULE_NAME',--module-name 'MODULE_NAME'β Repository module name, which ansible will use to check out the repo. Choices are ('git','subversion','hg','bzr'). Default is git.-o,--only-if-changedβ only run the playbook if the repository has been updated-s 'SLEEP',--sleep 'SLEEP'β sleep for random interval (between 0 and n number of seconds) before starting. This is a useful way to disperse git requests π΄-t,--tagsβ only run plays and tasks tagged with these values. This argument may be specified multiple times.-u 'REMOTE_USER',--user 'REMOTE_USER'β connect as this user (default=None)-v,--verboseβ Causes Ansible to print more debug messages. Adding multiple-vwill increase the verbosity, the builtin plugins currently evaluate up to-vvvvvv. A reasonable level to start is-vvv, connection debugging might require-vvvv. This argument may be specified multiple times. π£οΈ
π¦ ARGUMENTS
playbook.yml
The name of one the YAML format files to run as an Ansible playbook. This can be a relative path within the checkout. By default, Ansible will look for a playbook based on the host's fully-qualified domain name, on the host hostname and finally a playbook named local.yml. Slay, it literally hunts for it three different ways. π₯
π INVENTORY
Ansible stores the hosts it can potentially operate on in an inventory. This can be an YAML file, ini-like file, a script, directory, list, etc. For additional options, see the documentation on <https://docs.ansible.com/>. π
β ENVIRONMENT
The following environment variables may be specified. π
ANSIBLE_INVENTORY-- Override the default ansible inventory sourcesANSIBLE_LIBRARY-- Override the default ansible module library pathANSIBLE_CONFIG-- Specify override location for the ansible config file
Many more are available for most options in ansible.cfg.
For a full list check <https://docs.ansible.com/>. or use the ansible-config command.
π FILES
/etc/ansible/hosts-- Default inventory file/etc/ansible/ansible.cfg-- Config file, used if present~/.ansible.cfg-- User config file, overrides the default config if present./ansible.cfg-- Local config file (in current working directory) assumed to be 'project specific' and overrides the rest if present.
As mentioned above, the ANSIBLE_CONFIG environment variable will override all others. Like, all of them. She said what she said. π
π AUTHOR
Ansible was originally written by Michael DeHaan. Legend behavior, honestly. π
π COPYRIGHT
Copyright Β© 2018 Red Hat, Inc | Ansible. Ansible is released under the terms of the GPLv3 license.
π§ SEE ALSO
ansible (1), ansible-config (1), ansible-console (1), ansible-doc (1), ansible-galaxy (1), ansible-inventory (1), ansible-playbook (1), ansible-vault (1)
Extensive documentation is available in the documentation site: <<https://docs.ansible.com>>. IRC and mailing list info can be found in file CONTRIBUTING.md, available in: <<https://github.com/ansible/ansible>>
And that's a wrap bestie!! π«Ά This lil icon is from Ansible 2.22.0, and yep, that's the ansible-pull(1) manual page you just read top to bottom. Go pull some playbooks, you absolute genius. πβ¨π
π¦ where this page comes from
- arch rolling: ansible-core 2.22.0-1 Β· GPL-3.0-or-later AND BSD-2-Clause AND PSF-2.0 AND MIT AND Apache-2.0
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms