Ad-Hoc
可以理解为临时,一些临时场景只需运行一次的指令,可以用这种模式完成。
并行和shell
在特定时间重启atlanta
的所有机器
1
| ansible atlanta -a "/sbin/reboot" -f 10
|
如果想用sudo
权限的话
1
| ansible atlanta -a "/sbin/reboot" -f 10 -b -k
|
其中-k
意为交互式地输入密码,-f
指fork
出多个进程来并行
command
模块(缺省)并不支持pipe
,如果要用命重定向,请使用shell
模块。
1
| ansible raleigh -m shell -a 'echo $TERM'
|
当命令中含有引号时一定要特别注意,以免命令在本地被吃掉,比如以上命令如果不使用'
而使用双引"
,那么变量变会在本地取值。
实际上大部分ansible
模块都与简单地命令不同,它们都是指定状态而过过程,以达到“幂等”的效果,这是ansible
的一个重要设计理念。
文件传输
SCP
的一个应用。将文件传输到远程主机
1
| ansible atlanta -m copy -a "src=/path/src dest=/path/dest"
|
file
模块可以改变文件的拥有者和权限,copy
也有同样的参数
1
| $ ansible webservers -m file -a "dest=/srv/foo/b.txt mode=600 owner=mdehaan group=mdehaan"
|
file
模块可以创建目录,类似mkdir -p
1
| $ ansible webservers -m file -a "dest=/path/to/c mode=755 owner=mdehaan group=mdehaan state=directory"
|
或者删除目录(rm -r
)
1
| $ ansible webservers -m file -a "dest=/path/to/c state=absent"
|
包管理
支持yum apt, 以下用yum举例
“安装”但不升级
1
| $ ansible webservers -m yum -a "name=acme state=present"
|
安装特定版本
1
| $ ansible webservers -m yum -a "name=acme-1.5 state=present"
|
确保最新版本
1
| $ ansible webservers -m yum -a "name=acme state=latest"
|
删除(不安装)
1
| $ ansible webservers -m yum -a "name=acme state=absent"
|
user/group
用于增删改用户与群组
1 2 3
| $ ansible all -m user -a "name=foo password=<crypted password here>" $ ansible all -m user -a "name=foo state=absent"
|
GIT
从git上部署项目
1
| $ ansible webservers -m git -a "repo=git://foo.example.org/repo.git dest=/srv/myapp version=HEAD"
|
ansible可以通过notify
handler
来在代码有更新时执行特定操作。
管理服务
运行服务
1
| $ ansible webservers -m service -a "name=httpd state=started"
|
其它restarted stopped
类似
限时后台执行
任务可以后台执行,状态可查。如果不想查询,则如下
1
| $ ansible all -B 3600 -P 0 -a "/usr/bin/long_running_operation --do-stuff"
|
如果想查询后台任务状态,可以使用async_status模块,将上一命令中的返回值传递进去。
1
| $ ansible web1.example.com -m async_status -a "jid=488359678239.2844"
|
也可以一次到位
1
| ansible all -B 1800 -P 60 -a "/usr/bin/long_running_operation --do-stuff"
|
限时-B 1800
秒,每-P 60
秒轮询一次状态
不用担心轮询发生在任务启动前,可配合-f
使用以提升执行速度。
一般来说该模块用于执行费时长或者升级任务,copy
模块在后台不会执行。
获取远程主机信息
这在之前已经提到
该模块也可以配置参数只输出部分信息,细节自行查阅该模块文档。