ansile作为去除安装agent的自动化工具,通过ssh协议的简单功能强大的自动化工作。
在ansile使用的过程中,有三种使用方式,个有特点。
1、ansible自行一次性任务,即执行命令如:
ansible 10.59.87.11 -m ping
ansible 10.59.87.11 -m copy -a "src=/etc/issue dest=/tmp/"
执行的方式是:
anbile + 执行的主机可以多种方式匹配(默认在./etc/ansible/hosts中)+ -m 模块 -a "模块的属性"
2、ansible-playbook 执行方式,将任务都写在一个yml文件中,yaml文件可简单可复杂
如执行:ansible-playbook /tmp/scp.yml
等于 ansible 10.59.87.11 -m copy -a "src=/etc/issue dest=/tmp/" 这个效果,yml文件内容如下
- hosts: 10.59.87.11
remote_user: root
vars:
var_has: none
tasks:
- name: scp issue file
copy:
src: /etc/issue
dest: /tmp/
注意:
1、hosts 指定的主机或者主机组一定要在/etc/ansible/hosts中或者通过-i 指定的inventory 文件中
2、如果里面用到template模块,则模块的路径需要在执行的$(dirname /tmp/scp.yml ) 目录下的templates 目录下
3、如果是有notify的使用,handlers可以是目录也可以是直接 handlers关键字指定
ansible-playbook 常用的选项
-C, --check
--verbose 执行显示详情
--syntax-check 语法检查
-D 打印更改的diff
--list-hosts
--list-tags
--list-tasks
-i INVENTORY, --inventory-file=INVENTORY 默认在 /etc/ansible/hosts 文件中
来一个httpd的安装的yml文件
- hosts: 10.59.87.11
remote_user: root
vars:
httpd_port: 80
tasks:
- name: ensure apache is at the latest version
yum:
name: httpd
state: latest
- name: install configure file
template: src=httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf
notify: reload httpd
- name: stop httpd servcie
service: name=httpd state=stopped
tags:
- stop
handlers:
- name: reload httpd
service: name=httpd state=reloaded
cat templates/httpd.conf.j2 (查看jinjia2文件)
3、ansible-playbook + roles 方式
如果使用ansible管理公司服务器的配置初始化服务,这种模式是必须的,是分模块管理的。
标红的是常用的。
roles的目录是通过 /etc/ansible/ansible.cfg 文件决定的,默认是在roles_path = /etc/ansible/roles
如:
- hosts: web-group
tags:
- hosts
roles:
- hosts
如执行:
ansible-playbook /etc/ansible/top.yml
会对web-group的主机执行roles问hosts下的yml文件。 hosts roles目录下默认会找tasks目录下的main.yml文件。
main.yml文件中通过include,导入tasks目录下的其他.yml文件。
关于ansile的变量的优先级。
ansible变量优先级高低(从高往低):
ansible-playbook 执行yml任务的时候-e 参数指定的变量
ansible-playbook yml文件中vars: 中定义的变量
inventory 中host后面跟的变量定义的变量
inventory 中[:vars]中全局组定义的变量