Linux基础15-Ansible自动化运维

安装Ansible软件包

yum -y install wget #下载wget工具

wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo #下载阿里Base源

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo #下载阿里epel源

ansible --version  #查看ansible版本信息

定义Ansible主机清单

ansible主配置文件:/etc/ansible/ansible.cfg

ansible默认清单文件:/etc/ansible/hosts

列出指定组内主机列表:ansible 组名 --list-host

ansible-doc命令介绍

ansible-doc  #模块文档命令

常用选项:

-l  #列出所有模块列表

-s  #查看模块帮助信息

Ansible命令返回值的颜色表示:

绿色:代表对远程节点不进行相应修改,没有发生改变,命令执行成功了

黄色:代表对远程节点进行了相应修改,命令执行成功了

红色:代表你的命令执行失败或者是有异常

粉色:代表命令执行后发出的警告信息,可忽略

Ansible执行命令的方式

ad-doc:在命令行执行的命令(临时命令)

Playbook:将命令写入到Playbook剧本中

Ansible命令格式介绍

ansible 组名/主机 [-m 模块名] [-a 模块参数]

Ansible常用模块介绍

command模块

默认模块,用于远程执行命令

注意:特殊符号功能会失效

常用参数

chdir:此参数表示执行命令之前,会先进入到指定的目录中

creates:此参数表示文件如果存在于远程主机中,则不执行对应命令,如果不存在,才执行

removes:此参数表示文件如果存在于远程主机中,则执行对应命令,如果不存在,则不执行

shell模块

远程执行命令,通过/bin/bash程序处理命令

常用参数

cmd:此参数指定用于执行的命令(用于Playbook剧本中)

chdir、creates、removes与command模块作用一致

script模块

用于远程执行脚本,脚本存放在ansible主机本地,不需要拷贝至远程主机

常用参数:

chdir、creates、removes:与command作用一致

执行脚本举例:ansible 组名/主机 -m script -a '脚本'

yum模块

用于远程主机通过yum源管理软件包

常用参数

name:必须参数,用于指定需要管理的软件包名字

state:用于指定软件包的状态

  present:此状态为默认值,表示安装软件包

  installed:此状态表示安装软件包

  latest:此状态表示安装最新版本软件包

  removed:此状态表示删除对应软件包

  absent:此状态表示删除对应软件包

service模块

用于管理远程主机的服务

常用参数:

name:此参数用于指定需要操作的服务名称

state:此参数用于指定服务的状态

  started:此状态用于启动服务

  restarted:此状态用于重启服务

  stopped:此状态用于停止服务

  enabled:此参数用于指定是否将服务设置为开机启动项,yes开机启动,no不会开机启动

copy模块

用于将文件复制到远程主机

常用参数:

src:此参数用于指定需要拷贝的文件或目录

dest:此参数用于指定文件将拷贝到远程主机的哪个目录中,dest为必须参数

将本地/tmp/test.txt文件拷贝至ftp组内主机的/avr/ftp目录下

ansible ftp -m copy -a 'src=/tmp/test.txt dest=/var/ftp/'

content:此参数当不使用src指定拷贝的文件时,可使用content直接指定文件内容,src与content必有其一,否则会报错

使用content参数在远程主机直接创建文件并写入内容

ansible ftp -m copy -a 'content=hello dest=/var/ftp/test1'

force:此参数当远程主机的目标路径中已存在同名文件,并且与ansible主机中的文件内容不同时,是否强制覆盖,yes覆盖,no不覆盖

ansible ftp -m copy -a 'src=/tmp/test1 dest=/var/ftp/test1 force=no'

backup:此参数当远程主机的目标路径中已存在同名文件,并与ansible主机中文件内容不同时是否对远程主机的文件进行备份,yes备份

 ansible ftp -m copy -a 'src=/root/test1 dest=/var/ftp backup=yes'

owner:此参数指定文件拷贝到远程主机后的属主

ansible ftp -m copy -a 'src=/root/test2 dest=/var/ftp/ owner=ftp'

group:此参数指定文件拷贝到远程主机后的属组

ansible ftp -m copy -a 'src=/root/test3 dest=/var/ftp/ owner=ftp group=ftp'

mode:此参数指定文件拷贝到远程主机后的权限

拷贝test4文件到远程主机,并指定属主为ftp用户,所属组为ftp用户基本组,并指定权限为0744

ansible ftp -m copy -a 'src=/root/test4 dest=/var/ftp/ owner=ftp group=ftp mode=0744'

Ansible剧本Playbook

需遵循YAML语法格式编写,文件名以.yaml或.yml作为文件名后缀

核心元素

hosts:执行的远程主机列表

tasks:任务集

variables:内置变量或自定义变量在playbook中调用

tempaltes模板,可替换文件中的变量并实现一些简单逻辑的文件

handles和notify结合使用,由特定条件触发的操作,满足条件才执行

tags标签,指定某条任务执行,用于选择运行playbook中的部分代码

使用ping模块测试远程主机联通性,并在远程主机创建目录

vim ping_websrvs.yml

---  #第一行:playbook剧本以---开头表明yaml格式文件

- hosts: websrvs  #第二行:使用”- “作为开头,”- “表示一个列表项,”- “后面使用hosts关键字指定要操作的主机组名,(注意:横杠后面有空格)表示我要在websrvs这组主机上进行操作,在YAML语法中,键值对需要使用冒号作为分隔,而且冒号后边必须还要有一个空格作为分隔

  remote_user: root  #第三行:remote_user关键字可以指定在进行远程操作时使用哪个用户进行操作

  tasks:  #第四行:tasks关键字是用来指定要执行哪些操作任务,之后的行都属于tasks任务列表中的任务,每个任务都以”- “开头,每个任务都有自己的名字,任务名使用name关键字进行指定

  - name:ping websrvs

    ping:

  -name: mkdir dir test

    shell:

      cmd: mkdir /test

 运行剧本需要使用'ansible-palybook'命令

ansible-playbook ping_websrvs.yml

--syntax-check 用于检测playbook语法是否正确,如果正确只返回playbook名称

ansible-playbook --syntax-check ping_websrvs.yml

--check 用于模拟执行playbook

ansible-playbook --check ping_websrvs.yml