一、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_Apache

三、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

自动化运维工具ansible_Apache_02

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