Contents
  1. 1. 并行和shell
  2. 2. 文件传输
  3. 3. 包管理
  4. 4. user/group
  5. 5. GIT
  6. 6. 管理服务
  7. 7. 限时后台执行
  8. 8. 获取远程主机信息

Ad-Hoc可以理解为临时,一些临时场景只需运行一次的指令,可以用这种模式完成。

并行和shell

在特定时间重启atlanta的所有机器

1
ansible atlanta -a "/sbin/reboot" -f 10

如果想用sudo权限的话

1
ansible atlanta -a "/sbin/reboot" -f 10 -b -k

其中-k意为交互式地输入密码,-ffork出多个进程来并行

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模块在后台不会执行。

获取远程主机信息

这在之前已经提到

1
$ ansible all -m setup

该模块也可以配置参数只输出部分信息,细节自行查阅该模块文档。

Contents
  1. 1. 并行和shell
  2. 2. 文件传输
  3. 3. 包管理
  4. 4. user/group
  5. 5. GIT
  6. 6. 管理服务
  7. 7. 限时后台执行
  8. 8. 获取远程主机信息