Ansible 指定 playbook 运行的主机

2022-05-30

Ansible 使用 ansible-playbook 命令来运行指定的 playbook,但是如何指定个别主机运行一个 playbook?

命令

本文使用的是 2.9 版的 ansible:

$ ansible-playbook --version
ansible-playbook 2.9.16

ansible-playbook 命令来运行指定的 playbook,参数帮助如下:

$ ansible-playbook
usage: ansible-playbook [-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] [--force-handlers]
                        [--flush-cache] [-b] [--become-method BECOME_METHOD]
                        [--become-user BECOME_USER] [-K] [-t TAGS]
                        [--skip-tags SKIP_TAGS] [-C] [--syntax-check] [-D]
                        [-i INVENTORY] [--list-hosts] [-l SUBSET]
                        [-e EXTRA_VARS] [--vault-id VAULT_IDS]
                        [--ask-vault-pass | --vault-password-file VAULT_PASSWORD_FILES]
                        [-f FORKS] [-M MODULE_PATH] [--list-tasks]
                        [--list-tags] [--step] [--start-at-task START_AT_TASK]
                        playbook [playbook ...]
ansible-playbook: error: too few arguments

唯一一个和 inventory 文件相关的参数:-i INVENTORY 的解释是这样的:

-i INVENTORY
specify inventory host path or comma separated host list.

用于指定 hosts 文件。

但是如果我们希望从命令行上临时指定主机名称,就没有对应的参数。

解决方法

我们只能通过最终万能方案:[-e EXTRA_VARS] 来解决问题。首先我们在 playbook 中规定 hosts 为变量:

---
# playbook.yaml
- name: do something
  hosts: "{{ variable_host }}"
  roles: 
    - do_something
...

主机 hosts 用 variable_host 变量规定,然后在 EXTRA_VARS 里指定变量:

$ ansible-playbook -e variable_host=web playbook.yaml

这样就临时指定了 playbook.yaml 在名叫 web 的主机或者主机组上执行。

捐助本站

为了保证阅读体验,本站不安放广告。但是,租用服务器和编写文章需要个人资金和时间的投入。

如果您觉得文章对您有用,请考虑捐助小站(金额不限),以期待更多原创文章。捐助记录

本站是个人网站,若无特别说明,文章均为原创,并采用 署名协议 CC-BY-NC 授权。
欢迎转载,惟请保留原文链接,且不得用于商业用途。

相关文章