所在位置:

ansible的ad-hoc模式

Ansible 系统由控制主机对被管节点的操作方式可分为两类,即 ad-hocplaybookad-hoc 模式使用单个模块,支持批量执行单条命令,而 playbook 就是通过组合多条ad-hoc操作的配置文件

ad-hoc 的格式为:

ansible 主机或组 -m 模块名 -a '模块参数' ansible参数

下面来简单说一下这些格式的一些选项:

ansible 模块

显示所有 ansible 模块
ansible-doc -l
查看某个模块的帮助
ansible-doc 模块名
查看某个模块有哪些模块参数
ansible-doc -s 模块名
模块的分类
  • command 模块,如果不写,默认是这个模块

  • shell 模块,shell 模块和 command 模块都可以执行命令,但 command 模块不能带 参数

  • 文件管理模块,比如 copy、file、stat 等命令

  • 软件包管理模块,比如 apt、yum 、pacman、homebrew 、pip、npm、bower 等命令

  • 服务管理模块,比如 service、iptables、mount 等命令

  • 用户管理,比如 user 等命令

  • 版本控制管理模块,比如 git、hg、subversion 等命令

  • 监控管理模块,比如 monit、nagios等命令

ansible参数

指定资源清单,默认 /etc/ansible/hosts,使用 -i 参数
ansible 主机或组 -m 模块名 -a '模块参数' -i 资源清单路径
并发线程数,默认5个线程,使用 -f 参数
ansible 主机或组 -m 模块名 -a '模块参数' -f 进程数
指定使用的模块,使用 -m 参数
ansible 主机或组 -m 模块名 -a '模块参数'
输出信息指定目录下,结果文件以远程主机名命名,使用 -t 参数
ansible 主机或组 -m 模块名 -a '模块参数' -t 目录
标准输出至一行,使用 -o 参数
ansible 主机或组 -m 模块名 -a '模块参数' -o
模块参数,使用 -a 参数
ansible 主机或组 -m 模块名 -a '模块参数'
输出详细的执行过程信息,使用 -v 参数,-vvv可得到所有执行过程信息
ansible 主机或组 -m 模块名 -a '模块参数' -v
指定远程主机以哪个用户运行命令,使用 -u 参数
ansible 主机或组 -m 模块名 -a '模块参数' -u 远程用户名
列出符合条件的主机列表,不执行任何其他命令,使用 --list-hosts
ansible 主机或组 -m 模块名 -a '模块参数' --list-hosts
指定连接远程主机的最大超时,使用 -T 参数
ansible 主机或组 -m 模块名 -a '模块参数' -T 超时时间
后台执行命令,超多少秒后杀掉正在执行的任务,使用 -B 参数
ansible 主机或组 -m 模块名 -a '模块参数' -B 时间
指定密钥文件,使用 --private-key
ansible 主机或组 -m 模块名 -a '模块参数' --private-key=密钥文件
Linux系统下的sudo命令,使用 -s参数
ansible 主机或组 -m 模块名 -a '模块参数' -s
用户的密码(与 -s 一起使用)
ansible 主机或组 -m 模块名 -a '模块参数' -K

举例

/etc/ansible/hosts 的内容
[test_group1]
11.11.11.11 ansible_ssh_user=user1 ansible_ssh_pass=password

[test_group2]
22.22.22.22

[dbserver:children]
test_group1
test_group2
查看 server1 的主机是否ping得通
ansible server1 -m ping
使用 test 用户查看 dbserver 的所有主机的 home 目录
ansible dbserver -m shell -a 'ls /home' -u test
使用 test 用户复制当前的 hosts 文件到 dbserver 组中
ansible dbserver -m copy -a "src=hosts dest=/home/test owner=test group=test" -f 5 -u test
使用普通的 test 用户在 dbserver 组中安装 nginx, -s 和 -K 就是暂时切换到 root 来操作
ansible dbserver -m yum -a 'name=nginx state=present' -f 5 -o -u test -s -K
在 dbserver 组中,启动 nginx
ansible dbserver -m service -a 'name=nginx state=started' -f 5 -o -u test -s -K
在 dbserver 组中添中一个用 user1

使用 openssl 加密 user1

echo user1 | openssl passwd -1 -stdin # 输出 $1$nznZlfwK$y6ZNpebMGXSXsmeW7Qb1Q.

添加用户 user1

ansible dbserver -m user -a 'name=user1 password="$1$nznZlfwK$y6ZNpebMGXSXsmeW7Qb1Q."' -f 5 -o -u test -s -K

注意: password的内容要双引号

【上一篇】ansible的安装和基本用法

【下一篇】ansible的playbook模式