安装 Ansible
Ansible 能够安装到 Linux、BSD、Mac OS X 等平台,Python 版本最低要求为 2.6。 常用 Linux 发行一般可以通过其自带的包管理器安装 Ansible:
yum install ansible # RHEL/CentOS/Fedora,需要配置 EPEL apt-get install ansible # Debian/Ubuntu emerge -avt ansible # Gentoo/Funtoo
如果你在所用 Linux 发行版的包仓库中找不到 Ansible,那么也可以通过 pip
来安装 Ansible,同时也会安装 paramiko、PyYAML、jinja2 等 Python 依赖库。
pip install ansible
准备 Inventory
Inventory 文件用来定义你要管理的主机。其默认位置在 /etc/ansible/hosts
,如果不保存在默认位置,也可通过 -i
选项指定。
被管理的机器可以通过其 IP 或域名指定。未分组的机器需保留在 hosts 的顶部,分组 可以使用 []
指定,如:
[web] linuxtoy.org
同时,分组也能嵌套:
[vps:children] web db
此外,也可以通过数字和字母模式来指定一系列连续主机,如:
[1:3].linuxtoy.org # 等价于 1.linuxtoy.org、2.linuxtoy.org、3.linuxtoy.org [a:c].linuxtoy.org # 等价于 a.linuxtoy.org、b.linuxtoy.org、c.linuxtoy.org
小试牛刀
现在,我们执行以下命令来看看 Ansible 是否能正常工作:
ansible -i hosts all -m ping -u www
该命令选项的作用分别为:
-i
:指定 inventory 文件,使用当前目录下的 hostsall
:针对 hosts 定义的所有主机执行,这里也可以指定组名或模式-m
:指定所用的模块,我们使用 Ansible 内置的 ping 模块来检查能否正常管理远端机器-u
:指定远端机器的用户
如果返回如下结果:
linuxtoy.org | success >> { "changed": false, "ping": "pong" }
则说明一切正常。
下面我们再看看远端机器的 uptime:
ansible vps -a 'uptime'
这将输出:
linuxtoy.org | success | rc=0 >> 11:23:16 up 177 days, 21:19, 0 users, load average: 0.55, 0.45, 0.39
此处我们省略了 -m
,Ansible 默认使用 command 模块;-a
指定模块的参数,即执行 uptime
命令。
使用 Ad-Hoc 管理简单任务
执行 Ad-Hoc 就跟我们在 Linux 下执行单行命令差不多,用来快速完成简单的任务十分 方便。比如:如果被管理端的 Python 为 2.4,那么需要 python-simplejson 这个包。我们可以通过以下命令在所有 CentOS 主机上安装它:
ansible all -m raw -a 'yum -y install python-simplejson'
花时间看看 Ansible 的模块非常值得,你将明白它能干什么。创建用户及组、安装 软件包、分发配置文件、管理服务等等不一而足。在命令行下,可通过 ansible-doc
查询模块文档,如:
ansible-doc raw
使用 Playbook 管理复杂任务
对于需反复执行的、较为复杂的任务,我们可以通过定义 Playbook 来搞定。Playbook 是 Ansible 真正强大的地方,它允许使用变量、条件、循环、以及模板,也能通过角色 及包含指令来重用既有内容。我们来看一个简单的例子,该例子在远端机器上创建一个 新的用户:
--- - name: create user hosts: vps user: root gather_facts: false vars: - user: "toy" tasks: - name: create {{ user }} on vps user: name="{{ user }}"
首先,我们给 Playbook 指定了一个名称;接着,通过 hosts
让该 Playbook 仅作用于 vps 组;user
指定以 root 帐号执行,Ansible 也支持普通用户以 sudo
方式执行;gather_facts
的作用是搜集远端机器的相关信息,稍后可通过变量形式在 Playbook 中使用;vars
定义变量,也可单独放在文件中;tasks
指定要执行的任务。
要执行 Playbook,可以敲入:
ansible-playbook user.yml
执行结果为:
PLAY [create user] ************************************************************ TASK: [create toy on vps] ***************************************************** changed: [linuxtoy.org] PLAY RECAP ******************************************************************** linuxtoy.org : ok=1 changed=1 unreachable=0 failed=0
关于 Playbook 的详细用法,推荐阅读 Ansible 的官方文档,并参考官方示例。