1.Ansible概述
ansible是新出现的自动化运维工具,基于python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
ansible可以同时管理Redhat系的Linux,Debian系的Linux,以及windows主机。管理节点只在执行脚本时与远程主机连接,没有特别的同步机制,所以断电等异常一般不会影响ansible
ansible是基于模块工作的,本身没有批量部署的能力,真正具有批量部署的ansible所运行的模块,ansible只是提供一种框架,主要包括:
- 连接插件connection plugins:负责和被监控端实现通信
- host inventory:指定操作的主机,是一个配置文件里定义监控的主机
- 各种核心模块,command模块、自定义模块
- 借助于插件完成记录日志邮件等功能
- playbook:剧本执行多个任务时,非必需2可以让节点一次性运行多个任务
2.部署ansible
yum -y install epel-release
yum -y install ansible
ssh-keygen -t rsa
ssh-copy-id root@192.168.10.10
ssh-copy-id root@192.168.10.20
// 配置ssh免交互代理
ssh-agent bash
ssh-add
3.Ansible模块
command模块
一般用于执行单条linux命令
ansible 192.168.10.10 -m command -a 'date' //不指定模块则默认为command模块
cron模块
用于设置计划任务
ansible 192.168.10.10 -m cron -a 'minute="*" job="/usr/bin/echo hello >> /opt/test.txt" name="test"'
ansible 192.168.10.10 -m cron -a 'name=test state=absent'
user模块
用于管理用户
ansible 192.168.10.10 -m user -a 'name="user"'
ansible 192.168.10.10 -m user -a 'name="user" state=absent'
ansible 192.168.10.10 -m user -a 'name="user" uid=1002 group=user01' //设置uid和属组
copy模块
复制文件、目录及写入内容至文件
ansible all -m copy -a 'src=/etc/hosts dest=/opt/hosts.bak owner=root mode=640' //复制文件,设置属主及权限
ansible all -m copy -a 'content="hello" dest=/opt/test'
file模块
管理文件、目录及创建软连接
ansible all -m file -a 'path=/opt/test state=touch'
ansible all -m file -a 'path=/opt/test state=absent' //删除
ansible all -m file -a 'path=/opt/var state=directory mode=755'
ansible all -m file -a ‘path=/opt/test owner=web group=web mode=644’
shell模块
执行多条linux指令、并可以使用重定向、追加符号
特殊参数:
chdir:指定工作目录,在执行对应的命令之前,会先进入到chdir参数指定的目录中,等于cd命令
creates:指定一个文件,当指定的文件存在时,就不执行对应的命令
removes:使用此参数指定一个文件,当指定的文件不存在时,就不执行对应的命令
ansible all -m shell -a 'chdir=/opt/aa echo hello >> test.txt'
yum模块
管理软件
ansible all -m yum -a 'name=httpd' //yum安装httpd
ansible all -m yum -a 'name=httpd state-absent'
YAML语言
playbook采用YAML格式配置文件
YAML是一种非标记语言。是用来写配置文件的语言,非常简洁和强大
YAML语法和其他语言类似,也可以表达散列表、标量等数据结构
结构通过空格赖表示,序列里配置项通过-来表示,Map里键值用:来分隔,YAML的扩展名为yaml
语法和注意点
大小写敏感
使用缩进表示层级关系
缩进时不允许使用Tab建,只允许使用空格
缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
YAML支持的数据结构
1.对象:键值对的集合,又称为映射(mapping)/哈希(hashes)/字典(dictionary)
- name: http server
2.数组:一组按次序排列的值,又称为序列(sequence)/列表(list)
- nginx
- tomcat
3.纯量:单个的、不可再分的值
- number: 1,2
Playbook剧本
通过task调用ansible的模板将多个play组织在一个playbook中运行
playbook本身由以下各部分组成:
- Tasks:任务,即调用模块完成的某操作
- Variables:变量
- Templates:模板
- Handlers:处理器,当某条件满足时,触发执行的操作
- Roles:角色
一个完整的playbook主要构成:
- 主机组hosts
- 授权执行的用户remote_user
- 执行的任务tasks(调用ansible模块)
vi test.yaml
- hosts: webservers
remote_user: root
become: yes
become_user: apache
tasks:
- name: install http
yum: name=httpd
notify:
- restart httpd
- name: start httpd
service: name=httpd state=started
handlers:
- name: restart httpd
service: name=httpd state=restarted