1. 主页
  2. Ansible 教程
  3. Ansible 相关工具
  4. ansible-pull

ansible-pull

该指令的使用需要谈到 Ansible 的另一种工作模式:pull 模式(Ansible 默认使用 push 模式)。

这和通常使用的 push 模式工作机理刚好相反,其适用于以下场景:

  • 你有数量巨大的机器需要配置,即使使用高并发线程依旧要花费很多时间;
  • 你要在刚启动的没有网络连接的主机上运行 Anisble。

通过 ansible-pull 结合 git 和 crontab 一并实现,其原理如下:通过crontab定期拉取指定的 Git 版本到本地, 并以指定模式自动运行预先制订好的指令。

具体示例参考如下:

*/20 * * * * root /usr/local/bin/ansible-pull -o -C 2.1.0 -d /srv/www/king-gw/ -i /etc/ansible/hosts -U git://git.kingifa.com/king-gw-ansiblepull >> /var/log/ansible-pull.log 2>&1

ansible-pull 通常在大批量机器场景下会使用,灵活性稍有欠缺,但效率几乎可以无限提升,对运维人员的技术和前瞻性规划有较高要求。

命令格式

usage: ansible-pull [-h] [--version] [-v] [-k]
                    [--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] [--vault-id VAULT_IDS]
                    [--ask-vault-pass | --vault-password-file VAULT_PASSWORD_FILES]
                    [-e EXTRA_VARS] [-t TAGS] [--skip-tags SKIP_TAGS]
                    [-i INVENTORY] [--list-hosts] [-l SUBSET] [-M MODULE_PATH]
                    [-K] [--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 [playbook.yml ...]]

参数详解

位置参数:
  playbook.yml          # playbook 文件

optional arguments:
  --accept-host-key     # 为repo url添加hostkey(如果尚未添加)
  --ask-vault-pass      # 加密playbook文件时提示输入密码
  --check               # 模拟执行,不会真正在机器上执行(查看执行会产生什么变化)
  --clean               # 工作存储库中已修改的文件将被丢弃
  --diff                # 当更新的文件数及内容较少时,该选项可显示这些文件不同的地方,该选项结合-C用会有较好的效果
  --full                # 做一个完整的克隆,而不是一个浅的克隆。
  --list-hosts          # 列出执行匹配到的主机,但并不会执行
  --purge               # playbook 执行完成后,进行清洗
  --skip-tags SKIP_TAGS # 跳过指定的 tags 任务
  --track-subs          # 子模块将跟踪最新的更改。这相当于为git子模块update指定--remote标志
  --vault-id VAULT_IDS  # vault id
  --vault-password-file VAULT_PASSWORD_FILES    # vault 密码文件
  --verify-commit       # 验证签出提交的GPG签名,如果失败,则中止运行剧本。这就需要相应的VCS模块来支持这样的操作
  --version             # 显示程序的版本号,配置文件位置,配置的模块搜索路径,模块位置,可执行文件位置
  -C CHECKOUT, --checkout CHECKOUT    # 切换 playbook 存放仓库的分支
  -M MODULE_PATH, --module-path MODULE_PATH    # 要执行的模块的路径
  -U URL, --url URL     # playbook 存储库的 URL
  -d DEST, --directory DEST    # 将 playbook 拉取到指定的目录
  -e EXTRA_VARS, --extra-vars EXTRA_VARS    # 在 playbook 中引入外部变量
  -f, --force           # 即使无法更新存储库,也要运行playbook
  -h, --help            # 帮助文档
  -i INVENTORY, --inventory INVENTORY, --inventory-file INVENTORY    # 指定要读取的Inventory文件
  -l SUBSET, --limit SUBSET    # 限定执行的主机范围
  -m MODULE_NAME, --module-name MODULE_NAME    # 指定执行使用的模块,默认使用 command 模块
  -o, --only-if-changed    # 仅当存储库已更新时才运行playbook
  -s SLEEP, --sleep SLEEP    # 在开始之前,随机睡眠一段时间(0到n秒之间)。这是分散git请求的有用方法
  -t TAGS, --tags TAGS  # 只执行指定的标记有 tags 任务
  -v, --verbose         # 执行详细输出 (-vvv for more, -vvvv to enable connection debugging)

连接参数:

  --private-key PRIVATE_KEY_FILE, --key-file PRIVATE_KEY_FILE    # 使用此文件的连接进行验证
  --scp-extra-args SCP_EXTRA_ARGS    # 指定仅传递给 scp 的额外参数(例如 -l)
  --sftp-extra-args SFTP_EXTRA_ARGS    # 指定仅传递给 sftp 的额外参数(例如 -f、-l)
  --ssh-common-args SSH_COMMON_ARGS    # 指定要传递给 sftp/scp/ssh 的通用参数
  --ssh-extra-args SSH_EXTRA_ARGS    # 指定仅传递给 ssh 的额外参数(例如 -R)
  -T TIMEOUT, --timeout TIMEOUT    # 连接超时时间,单位:秒,默认 10 秒
  -c CONNECTION, --connection CONNECTION    # 要使用的连接类型,默认是 smart
  -k, --ask-pass        # 询问连接密码,也就说,使用密码访问的话,需要加此参数
  -u REMOTE_USER, --user REMOTE_USER    # 以此用户身份连接,默认为 None

权限提升参数:

  -K, --ask-become-pass    # 要求提权的密码

我们要如何帮助您?

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注