自动化运维——ansible搭建

一、环境准备
master:centos7
node1:centos7
node2:centos7
网络yum源
二、搭建配置ansible
yum -y install ansible
查看版本信息
测试node节点的存活性,这里面的ping是ansible的ping模块;
node主机不在主机清单列表里,清单列表不包括本机;
把node节点添加到主机列表
可以对主机清单做分组
测试存活性是基于ssh服务的,基于密码和key验证,通常是基于key验证;部署是把ssh的可以验证做好

测试分组
关闭key验证检查,建议启用
开启记录日志,建议启用
添加主机组
常用模块
ping模块
ansible [主机ip、主机组] -m ping
测试主机的存活性
command模块
ansible [主机ip、主机组] -m command -a '具体命令'
命令模式,属于默认模块,可忽略-m选项(不支持通配符、正则、及|、<、>等)

红色表示执行错误
shell模块
ansible [主机ip、主机组] -m shell -a '命令'
shell模式,类似command模块但是支持通配符、正则、及特殊符号
ansible一如既往的没有让你们失望, 不支持别名
绿色表示执行正确但不更改(不太准确,有时会被更改,见仁见智)
script模块
ansible [主机ip、主机组] -m script -a 脚本名
脚本模式、用于批量执行脚本
黄色表示被更改
copy模块
ansible [主机ip、主机组] -m copy -a "src=源文件 dest=目标路径 owner=所有者 mode=权限 backup=yes/no是否备份"
复制模块、批量复制

fetch模块
ansible [主机ip、主机组] -m fetch -a 'src=源文件 dest=目标路径'
抓取模块,从节点中抓取文件到ansible主机

cron模块
ansible [主机ip、主机组] -m cron -a 'name=任务名 minute=分钟 hour=小时 day=天 month=月 weekday=工作日 user=执行用户 job="任务内容"'
批量部署计划任务

禁用
删除
hostname模块
ansible [主机ip、主机组] -m hostname -a "name=名称"
更改主机名,直接写入到文件

yum模块
ansible [主机ip、主机组] -m yum -a 'name=包组 state=latest\absent安装或删除'
yum搭建好才能使用,安装单个包时可以不依赖于yum库

service模块
ansible [主机ip、主机组] -m service -a 'name=服务名 state=started/restarted/stopped enabled=yes/no'
批量开机服务
user模块
ansible [主机ip、主机组] -m user -a 'name=用户名 comment="描述" uid=UID home=家目录
group=主组'
批量创建用户
group模块
ansible [主机ip、主机组] -m group -a "name=组名 system=yes/no是否为管理组 state=latest/absent新增或删除组"
批量创建组
setup模块
ansible all -m setup
显示所有ansible内置变量
查看内存相关内置变量
查看CPU相关内置变量
ansible-galaxy
了解一下就行
ansible-playbook
脚本格式
严格的缩进格式
定义变量库
在配置清单中定义变量,变量名相同,不同主机会调用各自的变量,也可定义普通变量
调用变量库
变量可以写到变量库中,也可以写到主机组的配置清单中
命令行 -e的变量优先级最高,playbook定义的次之、配置清单更次之(普通变量比公共变量优先级高)
模板templates
文本文件,嵌套有脚本(使用模板编程语言编写)
Jinja2语言,使用字面量,有下面形式
字符串:使用单引号或双引号
数字:整数,浮点数
列表:[item1, item2, ...]
元组:(item1, item2, ...)
字典:{key1:value1, key2:value2, ...}
布尔型:true/false
算术运算:+, -, *, /, //, %, **
比较操作:==, !=, >, >=, <, <=
逻辑运算:and, or, not
流表达式:For If When
templates功能:根据模块文件动态生成对应的配置文件
templates文件必须存放于templates目录下,且命名为 .j2 结尾
yaml/yml 文件需和templates目录平级,目录结构如下:
./
├── temnginx.yml
└── templates
└── nginx.conf.j2
templates不能当单独命令来使用只能在剧本中调用
template复制文件时可以在源文件中调用变量
更改配置文件后
ansible-playbook yml脚本 -C
测试执行,会显示结果但不会执行
条件判断when
判断系统发行版本ansible_distribution_major_version(系统发行版本变量)
测试执行结果
迭代:执行重复性任务时的迭代机制
迭代嵌套子变量

Playbook中template for if
template模块调用for
字典的方式写:和以上结果一致
列表下嵌套列表

for嵌套if
比较灵活
roles:角色实现函数式的调用,灵活便捷。
部署Nginx的roles
执行结果
roles中掉用其他role的任务,目前有两个可用角色
同时执行两个角色
Nginx需要调用httpd的copy任务,直接在Nginx的main.yml中添加copy任务脚本就行,需要注意路径
再把copy任务的路径改为绝对路径
验证
再次提醒:shell模块不能使用别名!!
八、
添加标签,执行时可以添加标签只执行该标签任务,目前有三个角色,我只执行两个

验证
ansible-playbook -t web some_role1.yml(-t 后跟标签名)
http和Nginx的都执行了,只有APP的没有执行
还可以加判断语句,判断一下系统为7时安装,为6时Nginx不安装

猜你喜欢

转载自blog.csdn.net/qq_35242906/article/details/80522929