[root@localhost~]# ansible
Usage: ansible <host-pattern> [options]
ansible <host-pattern> [-f forks] [-m module_name][-a args] [options]
#常用格式
ansible <host-pattern> [-f forks] [-m module] [-aargs]
host-pattern # 可以是all,或者配置文件中的主机组名
-f forks # 指定并行处理的进程数
-m module # 指定使用的模块,默认模块为command
-a args # 指定模块的参数
#查看各模块
ansible-doc [options] [modules]
# 主要选项有:
-l或--list # 列出可用的模块
-s或--snippet #显示指定模块的简略使用方法
//all所有/etc/ansible/hosts定义主机“/”目录下bin并且统计多少行
[root@HA2 tmp]# ansible all -a 'ls / ' | grep -o "^bin" |wc -l
[root@node110 ansible]# ansible all -mcommand -a 'date'
192.168.2.120 | SUCCESS | rc=0 >> #SUCCESS执行成功,rc=0返回值是0
Fri Apr 14 11:05:11 CST 2017
批量执行:
[root@node110ansible]# ansible all -m ping
以bruce身份ping所有主机:
ansible all -m ping-u bruce
用bruce用户以root身份ping:
ansible all -m ping-u bruce --sudo
用 bruce 用户 sudo 到 batman 用户 ping
ansible all -m ping-u bruce --sudo --sudo-user batman
在所有节点上执行命令
ansible all -a"/bin/echo hello"
Options:
-a MODULE_ARGS, --args=MODULE_ARGS 模块的参数,如果执行默认COMMAND的模块,即是命令参数,如:“date”,"pwd"等等
module arguments 模块参数
-k, --ask-pass ask for SSH password 登录密码,提示输入SSH密码而不是假设基于密钥的验证
--ask-su-pass ask for supassword su切换密码
-K, --ask-sudo-pass ask for sudopassword 提示密码使用sudo,sudo表示提权操作
--ask-vault-pass ask for vaultpassword
-B SECONDS, --background=SECONDS 后台运行超时时间
run asynchronously,failing after X seconds
(default=N/A)
-C, --check don't make any changes; instead, try topredict some 只是测试一下会改变什么内容,不会真正去执行;相反,试图预测一些可能发生的变化
of the changes that mayoccur
-c CONNECTION, --connection=CONNECTION 连接类型使用。可能的选项是paramiko(SSH),SSH和地方。当地主要是用于crontab或启动。
connection type to use(default=smart)
-f FORKS, --forks=FORKS 并行任务数。NUM被指定为一个整数,默认是5
specify number ofparallel processes to use
(default=5)
-h, --help show this help message and exit 打开帮助文档API
-i INVENTORY,--inventory-file=INVENTORY 指定库存主机文件的路径,默认为/etc/ansible/hosts
specify inventory hostfile
(default=/etc/ansible/hosts)
-l SUBSET, --limit=SUBSET 进一步限制所选主机/组模式 --limit=192.168.91.135 只对这个ip执行
further limit selectedhosts to an additional pattern
--list-hosts outputs a list ofmatching hosts; does not execute
anything else
-m MODULE_NAME,--module-name=MODULE_NAME 执行模块的名字,默认使用command 模块,所以如果是只执行单一命令可以不用 -m参数
module name to execute(default=command)
-M MODULE_PATH,--module-path=MODULE_PATH 要执行的模块的路径,默认为/usr/share/ansible/
specify path(s) tomodule library
(default=/usr/share/ansible/)
-o, --one-line condenseoutput 压缩输出,摘要输出.尝试一切都在一行上输出。
-P POLL_INTERVAL,--poll=POLL_INTERVAL 调查背景工作每隔数秒。需要- b
set the pollinterval if using-B (default=15)
--private-key=PRIVATE_KEY_FILE 私钥路径,使用这个文件来验证连接
use this file to authenticate the connection
-S, --su run operations with su 用 su 命令
-R SU_USER, --su-user=SU_USER 指定SU的用户,默认是root用户
run operations with su as this user (default=root)
-s, --sudo run operations with sudo(nopasswd)
-U SUDO_USER, --sudo-user=SUDO_USER sudo到哪个用户,默认为root
desired sudo user (default=root)
-T TIMEOUT, --timeout=TIMEOUT 指定SSH默认超时时间, 默认是10S
override the SSHtimeout in seconds (default=10)
-t TREE, --tree=TREE log output to this directory 将日志内容保存在该输出目录,结果保存在一个文件中在每台主机上。
-u REMOTE_USER, --user=REMOTE_USER 远程用户, 默认是root用户
connect as this user (default=root)
--vault-password-file=VAULT_PASSWORD_FILE
vault password file
-v, --verbose verbose mode (-vvv for more, -vvvv toenable 详细信息
connection debugging)
--version show program's version number and exit 输出ansible的版本
特殊说明:
1.ansible是指令核心部分,其主要用于执行ad-hoc(点对点)命令,即单条命令。默认后面需要跟主机和选项部分,默认不指定模块时,使用的是command模块。
2. 默认使用的模块是可以在ansible.cfg 中进行修改的。/etc/ansible/ansible.cfg
举例:
[root@localhost ~]# ansible 192.168.91.137 -a 'pwd'
192.168.91.137 | success | rc=0 >>
/root
[root@361way.com ~]# ansible 192.168.0.102 -a'date'
.168.0.102 | success | rc=0 >>
Tue May 12 22:57:24 CST 2015
不过默认使用的模块是可以在ansible.cfg 中进行修改的。ansible命令下的参数部分解释如下:
参数:
-a 'Arguments', --args='Arguments' 命令行参数
-m NAME, --module-name=NAME 执行模块的名字,默认使用command 模块,所以如果是只执行单一命令可以不用 -m参数
-i PATH, --inventory=PATH 指定库存主机文件的路径,默认为/etc/ansible/hosts.
-u Username, --user=Username 执行用户,使用这个远程用户名而不是当前用户
-U --sud-user=SUDO_User sudo到哪个用户,默认为 root
-k --ask-pass 登录密码,提示输入SSH密码而不是假设基于密钥的验证
-K --ask-sudo-pass 提示密码使用sudo
-s --sudo sudo运行
-S --su 用 su 命令
-l --list 显示所支持的所有模块
-s --snippet 指定模块显示剧本片段
-f --forks=NUM 并行任务数。NUM被指定为一个整数,默认是5。 #ansible testhosts -a"/sbin/reboot" -f 10 重启testhosts组的所有机器,每次重启10台
--private-key=PRIVATE_KEY_FILE 私钥路径,使用这个文件来验证连接
-v --verbose 详细信息
all 针对hosts定义的所有主机执行
-M MODULE_PATH, --module-path=MODULE_PATH 要执行的模块的路径,默认为/usr/share/ansible/
--list-hosts 只打印有哪些主机会执行这个 playbook 文件,不是实际执行该playbook 文件
-o --one-line 压缩输出,摘要输出.尝试一切都在一行上输出。
-t Directory, --tree=Directory 将内容保存在该输出目录,结果保存在一个文件中在每台主机上。
-B 后台运行超时时间
-P 调查后台程序时间
-T Seconds, --timeout=Seconds 时间,单位秒s
-P NUM, --poll=NUM 调查背景工作每隔数秒。需要- b
-c Connection, --connection=Connection 连接类型使用。可能的选项是paramiko(SSH),SSH和地方。当地主要是用于crontab或启动。
--tags=TAGS 只执行指定标签的任务 例子:ansible-playbook test.yml--tags=copy 只执行标签为copy的那个任务
--list-hosts 只打印有哪些主机会执行这个 playbook 文件,不是实际执行该playbook 文件
--list-tasks 列出所有将被执行的任务
-C, --check 只是测试一下会改变什么内容,不会真正去执行;相反,试图预测一些可能发生的变化
--syntax-check 执行语法检查的剧本,但不执行它
-l SUBSET, --limit=SUBSET 进一步限制所选主机/组模式 --limit=192.168.0.15 只对这个ip执行
--skip-tags=SKIP_TAGS 只运行戏剧和任务不匹配这些值的标签 --skip-tags=copy_start
-e EXTRA_VARS, --extra-vars=EXTRA_VARS 额外的变量设置为键=值或YAML / JSON
#cat update.yml
---
- hosts: {{ hosts }}
remote_user: {{ user }}
..............
#ansible-playbook update.yml--extra-vars "hosts=vipers user=admin" 传递{{hosts}}、{{user}}变量,hosts可以是 ip或组名
-l,--limit 对指定的主机/组 执行任务 --limit=192.168.0.10,192.168.0.11或 -l 192.168.0.10,192.168.0.11 只对这个2个ip执行任务