Ansible是一个简单,强大的自动化配置管理工具,
对于Ansible而言,自动化所需要的一切就是在控制机上安装一个python的package.就和Fabric一样简单
安装Ansible
For python user
1 | pip install ansible |
For mac user
1 | brew install ansible |
SSH远程登录授权
在这里我们使用Vagrant模拟一个远程服务器 vagrant init 创建一个vagrant实例
1 | ssh-copy-id -i ~/.ssh/id_rsa.pub vagrant@127.0.0.1:2222 |
for mac user need install ssh-copy-id tools first “brew install ssh-copy-id”
ansible Ad-hot
Ad-hot简单来说就是利用ansible来执行一些简单的零时的服务器远程操作。
example1 初识:
1 | echo "127.0.0.1:2222" | tee hosts |
上面的命令首先在当前目录创建了一个hosts文件,然后调用ansible的ping模块来对hosts文件中定义的服务器调用ping操作
console output:
1 | > { |
- all: 指定该命令对hosts中的所有主机生效
- -i hosts: 指定hosts配置文件,默认使用/etc/ansible/hosts
- -u vagrant: 指定远程用户vagrant
- -m ping: 指定ansible模块ping
example2 运行echo语句:
1 | ansible all -a 'echo hello' -i hosts -u vagrant |
- -a: 模块参数,当未使用-m 指定模块时,默认模块为command
example3 使用ansible copy模块远程拷贝文件:
1 | ansible all -m copy -a "src=hosts dest=~/hosts" -i hosts -u vagrant |
ansible-doc 查看模块信息
ansible的百科全书
显示ansible所有可用模块
1 | ansible- -l |
查看特定模块的相关信息
1 | ansible-doc ping |
ansible-playbook 剧本
做自己的导演
hosts
1 | [webserver] |
示例:playbook.xml
1 |
|
执行shell:
1 | ansible-playbook playbook.yml -i hosts |
Hosts & Users
在playbook中使用hosts和remote_user指定全局主机和远程服务器的用户
1 |
|
使用sudo指定任务是否使用sudo权限执行
1 |
|
我们也可以给每一个tasks单独指定remote_user和sudo,如下:
1 | - name: ensure apache is at the latest version |
Tasks
在playbook的描述文件中会包含一个tasks的列表,这些就是我们实际需要在服务器上所做的操作,
在ansible中这些任务都是按照顺序依次执行,如果其中的一个任务发生了异常或者错误,ansible将会自动退出,并显示错误信息
在playbook中我们可以使用ignore_errors忽略单个task的发生的错误
1 | - name: ensure apache is at the latest version ignore the errors |
在ansible中我们可以使用shell模块直接执行shell语句,所以熟悉shell的同学可以直接利用shell完成所有的task如:
1 | - name: execute shell by ansible |
但是ansible还提供了很多有用的模块,例如apt, yum, mysql, openstack等
ansible模块列表:http://docs.ansible.com/list_of_all_modules.html
Handlers
一般来说当我们更新了服务器的配置文件,都需要对相应的服务器进行重启或者做一些其他的关联操作。这个时候就会使用到handlers。
简单来说handlers就是ansible中定义好的一组事件,默认并不会执行。 只有当task中使用了notify触发了相应事件,在所有task执行完成后
相应的handler才会执行。
1 | handlers: |
我们可能在多个task中都使用了notify,但是handler只会执行一次
1 | - name: write the apache config file |
Demo源码:https://github.com/yunlzheng/ansible-examples/tree/master/webserver