先打个广告:欢迎关注我的公众号,参与 文史大挑战 趣味题目。使用方法见 这篇文章 。
正文开始:
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/ ,且不得用于商业用途。