一、Ansible介绍
Ansible 是一款开源自动化平台。是一种简单的自动化语言,能够在 Ansible Playbook 中完美地描述 IT 应用基础架构。ansible控制节点需要安装Python3.5及以上或者Python2.7及以上,被控制节点需要安装Python3.5及以上或者Python2.6及以上。
操作方式分为两类:
(1)ad-hoc点对点模式:使用单个模块,通过Ad-Hoc命令集调用Ansible工具集来完成任务。
(2)playbook剧本模式:通过执行Playbooks 中预先编排好的任务集,按序执行任务。
二、Ansible安装
yum install epel-release -y
yum install ansible -y
#ansible批量管理远程主机有两种方式
方式一:/etc/ansible/hosts里面定义
[webhosts]
192.168.142.130 ansible_ssh_user=root ansible_ssh_pass=123456
192.168.142.131 ansible_ssh_user=root ansible_ssh_pass=123456
方式二:秘钥认证
ssh-keygen -t rsa #生成秘钥
ssh-copy-id root@192.168.142.130 #向远程主机发送秘钥
三、Ansible使用
1.命令选项
命令选项 | 选项说明 |
--version | 显示版本 |
--list | 显示主机列表 |
-C,--check | 检查,并不执行 |
-T,--timeout= | 超时时间,默认10s |
-v,-vv,-vvv | 输出详细的执行过程信息 |
-k,--ask-pass | 提示输入ssh连接密码,默认key验证 |
-b,--become | 代替旧版sudo切换 |
-K,--ask-become-pass | 提示输入sudo时的口令 |
-u,--user= | 执行远程操作的用户,默认root |
-i ,--inventory= | 指定inventory信息,默认为/etc/ansible/hosts |
-f ,-forks | 并发线程数,默认为5个线程 |
-m module | 指定使用的模块,默认command |
-M ,--module-path= | 指定模块存放路径,默认为/usr/share/ansible |
-a ,--args= | 指定模块参数 |
-l,--limit= | 限制运行主机 |
2.模块介绍
command模块:在远程主机执行命令,不支持管道、重定向等shell的特性。
shell模块:调用远程主机的Shell进程运行命令,支持管道、重定向,变量扩展等。
copy模块:复制指定主机文件到远程主机的指定位置。
hostname模块:用于管理远程主机上的主机名。
yum模块:基于yum机制,对远程主机管理程序包。
service模块:用来管理远程主机上的服务。
user模块:主要用于管理远程主机上的用户账号。
ping模块:测试主机连通性。
file模块:用于管理和操作远程主机的文件系统对象。
fetch模块:从远程主机获取文件到本地。
cron模块:用于管理远程主机上的定时任务。
group模块:管理远程主机组账号。
script模块:远程主机上执行服务器端脚本。
setup模块:查询远程主机设备信息。
3.常用模块使用实例
(1)测试主机连通性
ansible webhosts -m ping
(2)查看主机群的时间
ansible webhosts -m shell -a 'date' 或者
ansible webhosts -m command -a 'date'
(3)切换目录到opt中,然后创建文件kel.conf
ansible webhosts -a "touch kel.conf chdir=/opt"
(4)切换到opt后执行ls ./命令查看
ansible webhosts -a "chdir=/opt ls ./"
(5)执行主控端脚本
ansible webhosts -m script -a '/home/optimize.sh'
(6)执行client端脚本
ansible webhosts -m shell -a 'sh /home/optimize.sh'
(7)复制文件到远程服务器
ansible webhosts -m copy -a 'src=/home/nginx-1.7.3.tar.gz dest=/home/nginx-1.7.3.tar.gz owner=root group=root mode=0644'
(8)安装服务
ansible webhosts -m yum -a 'name=httpd state=present' (自启动 enabled=yes)
(9)查看安装的httpd包
ansible webhosts -m shell -a "rpm -qa | grep httpd"
(10)重启httpd服务和设置开机自启动
ansible webhosts -m service -a "name=httpd enabled=yes state=restarted"
(11)卸载安装包vsftpd
ansible webhosts -m yum -a 'name=vsftpd state=absent'
(11)新建一个系统用户,UID为502,属组是root,名字是user01,密码是password123
ansible webhosts -m user -a "name=user01 system=yes uid=502 group=root groups=root shell=/etc/nologin home=/home/user01 password=password123"
(12)创建目录test
ansible webhosts -m file -a "path=/opt/test state=directory"
(13)筛选内存信息
ansible webhosts -m setup -a "filter='*mem*'"
四、Ansible playbook使用
1.定义安装httpd并启动服务的playbook
vim /etc/ansible/playbook.yml
---
- hosts: all
tasks:
- name: 安装Apache
yum: name={{ item }} state=present
with_items:
- httpd
- httpd-devel
- name: 检查Apache运行状态,并设置开机启动
service: name=httpd state=started enabled=yes
#执行管理远程机安装服务
ansible-playbook /etc/ansible/playbook.yml
2.设置变量和触发任务playbook
---
- hosts: all
vars:
- servername: httpd
tasks:
- name: 安装{{ servername }}
yum: name={{ servername }} state=latest
with_items:
- httpd
- httpd-devel
- name: 复制管理主机配置文件到其他主机
copy: src=/opt/{{ servername }}/{{ servername }}.conf dest=/etc/{{ servername }}/conf/{{ servername }}.conf backup=yes
tags: reload {{ servername }}
notify: reload
- name: 检查{{ servername }}运行状态,并设置开机启动
service: name={{ servername }} state=started enabled=yes
tags: start {{ servername }}
handlers:
- name: reload
service: name={{ servername }} state=restarted