Ansible 简介

一般会把自动化运维工具划分为两类:一类是是需要使用代理工具的,也是就基于专用的Agent程序来王朝管理功能,如: Puppet、Func、Zabbix 等:另外一类是不需要代理工具的,可以直接基于SSH 服务来完成管理功能,如Ansible、Fabric 等···

Ansible作为一个python写的自动化部署更有自己的一些优势, 首先就是agentless, 无需在Linux client安装任何服务即可无缝连接Linux default ssh端口进行部署(windows需要安装winrm 开启ssh服务)。

ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。主要包括:

(1)、连接插件connection plugins:负责和被监控端实现通信;

(2)、host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;

(3)、各种模块核心模块、command模块、自定义模块;

(4)、借助于插件完成记录日志邮件等功能;

(5)、playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。

模块

  • Core modules 合兴模块:是Absible 自带的模块,使用这也模块将资源分配发送到被管理主机,是其执行的顶任务。或匹配特定的状态
  • Custom modules 自定义模块:用于完成模块功能的补充。可借助相关插件完成记录发送邮件功能

    安装部署

角色 IP 组名 软件
控制主机 192.168.100.20 epel-release //安装epel源ansible
被控制主机 192.168.100.21 webaervers
被控制主机 192.168.100.22 mysql
1. 安装epel-release  //安装epel源            
yum install -y epel-release  //安装epel源
yum install ansible -y

2. 在所有服务器上关闭防火和增强型安全功能

systemctl stop firewalld.service  # 关闭防火墙
setenforce 0  #关闭增强型安全功能

3. 配置主机清单

cd /etc/ansible
vi hosts       #配置主机清单 可自行定义 
[webserver]
192.168.100.21
[mysql]
192.168.100.22

4. 产生公钥个私钥实现免交互代理

ssh-keygen -t rsa  #使用 ssh-keygen -t rsa命令,生成密钥文件
ssh-copy-id [email protected]  #将公钥文件传输的远程机器,并生效
ssh-copy-id [email protected]
免交互代理--------------
ssh-agent bash  #来保存公钥身份验证所使用的私钥的程序
ssh-add         #ssh-add命令是把专用密钥添加到ssh-agent的高速缓存中。

自动化运维之Ansible模块篇_第1张图片
自动化运维之Ansible模块篇_第2张图片

自动化运维之Ansible模块篇_第3张图片
自动化运维之Ansible模块篇_第4张图片

command模块

command模块   #Ansibler 管理工具使用-m 选项来指定使用模块,默认使用command 模块,即-m省略时会运行此模块,用于被管理主机上运行命令
命令格式:ansible [主机] [-m 模块] [-a args]
ansible-doc -l     //列出所有已安装的模块 注:按q退出
ansible-doc -s yum   //-s列出yum模块描述信息和操作动作

(1) 使用IP地址指定运行主机

ansible 192.168.100.21 -m command -a 'date' #查看指定主机当前时间

(2) 使用被管理主机的分类运行

ansible webservers -m command -a 'date' #查询分类中所有的IP地址主机当前时间

(3) 在所有主机清单中的所有主机

ansible all -m command -a 'date'  #所有hosts主机执行date命令

(4) 若省略-m 选项,默认运行command模块

ansible all -a 'tail-1 /etc/passwd' #显示所有主机中/etc/passed/最后一行

自动化运维之Ansible模块篇_第5张图片

2. cron 模块

Ansible中的cron模块用于定义任务计划。
其中有两种状态(state):present表示天机(省略状态时默认使用),absent表示移除

(1) 添加任务计划

ansible mysql -m cron -a 'minute="*/1" job="/bin/echo heihei" name="test cron job"' #一分钟显示一次heihei

(2) 移除计划性任务

ansible webserver -m cron -a 'name="test cron job" state=absent'

自动化运维之Ansible模块篇_第6张图片
自动化运维之Ansible模块篇_第7张图片

use 模块

  • Ansible 中的user模块用于创建新用户和更改,删除已存在的用户。体重name选项用来指明创建用户名称
创建用户 ,删除用户,
ansible mysql -m user -a 'name="wangwu"'  #指定别名主机(组)创建'wangwu'
ansible mysql -m command -a 'tail /etc/passwd' #显示末尾10行
ansible mysql -m user -a 'name="wangwu" state=absent'    #删除用户wangwu

group 模块

  • Ansible中group模块用于对用户组进行管理
    创建mysql 组 将mysql用户添加到mysql组中
ansible mysql -m group -a 'name=mysql gid=306 system=yes'
#添加mysql组并且qid=306 添加到系统组中

ansible mysql -a 'tail /etc/group'
#查看mysql服务器中组
ansible mysql -m user -a 'name=ccc uid=306 system=yes group=mysql'
#创建一个用户为ccc并且指定uid号 添加到mysql组中
ansible mysql -a 'tail /etc/passwd'

自动化运维之Ansible模块篇_第8张图片

copy模块

  • Ansible 中的copy 模块用于实现文件复制和批量下发文件,其中使用src来定义本地源文件路径,使用dest敌营别管理主机文件路径,使用content 则是通过指定信息内容来生成目标文件
    将本地文件/etc/fstab 复制到被管理主机上,将所有这设为root 权限设置为640.
    ansible mysql -m copy -a 'src=/etc/fstab dest=/opt/fstab.back owner=root mode=640'
    #复制自动自动挂在主配置文件 复制到opt/目录小并给与640权限
    ansible mysql -a 'ls -l /opt'
    #查看目录
    ansible mysql -a 'cat /opt/fstab.back'
    #查看etc下有关于系统管理员多用户管理文件
    ansible mysql -m copy -a 'content="hello heihei!"
    dest=/opt/fstab.back'  //将hello heihei!写入/opt/fstab.back
    ansible mysql -a 'cat /opt/fstab.back' 

    自动化运维之Ansible模块篇_第9张图片
    自动化运维之Ansible模块篇_第10张图片
    自动化运维之Ansible模块篇_第11张图片

    file模块

  • Ansible 中使用file 模块来设置文件属性。其中是使用path指定文件路径,使用src 定义原味鸡路径,使用name或dest 来替换创建文件的符号连接
    将文件的属主为mysql 所属为mysql 权限为644 并创建软连接文件
    ansible mysql -m user -a 'name=mysql system=yes' #属主
    ansible mysql -m group -a 'name=mysql system=yes'#属组
    ansible mysql -m file -a 'owner=mysql group=mysql mode=644 path=/opt/fstab.back'    #修改文件的属主属组权限等
    ansible mysql -m file -a 'path=/opt/fstab.link src=/opt/fstab.back state=link'      #设置/opt/fstab.link为/opt/fstab.back的链接文件
    ansible mysql -m file -a "path=/opt/fstab.back state=absent"               #删除一个文件
    ansible mysql -m file -a "path=/opt/test state=touch"             #创建一个文件

    自动化运维之Ansible模块篇_第12张图片
    自动化运维之Ansible模块篇_第13张图片

    ping模块

  • 在Ansible 中使用ping 模块来检测指定主机的连通性
    ansible all -m ping  #ping

    自动化运维之Ansible模块篇_第14张图片

    yum 模块

  • Ansible 中模块负责在被管理主机上安装与卸载软件包,但是需要提前在每个节点配置YUM仓库,其中使用name指定要安装软件包,还需要带上软件的版本号,否则安装最新的软件包;使用state指定安装包的状态,present,latest 用来表示安装,absentb并表示卸载。
  • 安装httpd 卸载httpd
    ansible mysql -m yum -a 'name=httpd'           #yum安装httpd
    ansible mysql -m yum -a 'name=httpd state=absent'     #卸载httpd

    自动化运维之Ansible模块篇_第15张图片
    自动化运维之Ansible模块篇_第16张图片

    service模块

  • 在Ansible 中使用service 模块来控制管理服务的运行状态,其中,使用enadled表示是否开机自动启动,取值为true或者false;使用name定义服务名称;使用state指定服务状态,取值分别为 started stoped restarted
    ansible webservers -m yum -a 'name=httpd' #指定组安装 httpd 服务
    ansible webservers -a 'systemctl status httpd' #擦看服务
    ansible mysql -m service -a'name=httpd enabled=true state=started'  //开机自启动
    systemctl list-unit-files | grep httpd   检测httpd是否开机自启动  enabled  为启动 disabled是开机不启动

    自动化运维之Ansible模块篇_第17张图片
    自动化运维之Ansible模块篇_第18张图片

    shell模块

  • Ansible 中的shell模块可以在被管理主机上运行命令,并支持像管道符号复杂命令
    ------shell模块-----
    ansible ccc -m shell -a 'echo abc123|passwd --stdin ccc'       #创建用户使用无交互模式给用户设置密码

    自动化运维之Ansible模块篇_第19张图片

    script模块

  • Ansible 中的script 模块可以将本地脚本复制到被管理主机上运行,需要只要的是使用绝对路径
ansible-doc -s script
vi test.sh
#!/bin/bash
echo "hello ansible from script"> /opt/script.txt

chmod +x test.sh
ansible mysql -m script -a 'test.sh'
mysql主机上查看 cat /opt/script.txt

自动化运维之Ansible模块篇_第20张图片

setup模块

  • 在Ancible 中使用setup模块收集、产看被管理主机的facts(facts 是Ansible 采集被管理主机设备信息的一个功能)。每个被管理主机接受并运行管理命令之前,都会将自己相关信息(操作信息版本IP地址等)发送给主机
    ansible mysql -m setup           //获取mysql组主机的facts信息

    自动化运维之Ansible模块篇_第21张图片