Ansible 指定 playbook 运行的主机

原创 2022年 5月 30日
标签: ANSIBLE

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 的主机或者主机组上执行。

如果您对本文有疑问或者寻求合作,欢迎 联系邮箱邮箱已到剪贴板

标签: ANSIBLE
给个免费的赞吧~

精彩评论

本站 是个人网站,采用 署名协议 CC-BY-NC 授权。
欢迎转载,请保留原文链接 https://www.lfhacks.com/tech/ansible-playbook-host/ ,且不得用于商业用途。