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