RedHat Linux 8 中ansible程序 part1

ansible简介

什么是ansible
ansible是一款开源自动化平台,是一个配置管理工具,自动化运维工具,
操作方式是通过ssh服务去连接受管主机
ansible的优点
1.跨平台支持
2.人类可读自动化: ansible提供linux,Windows,unix和网络设备的无代理支持,适用于物理、虚拟、云和容器环

3.完美描述应用:playbook
4.轻松管理版本控制:playbook是纯文本,可视作源代码
5.支持动态清单
6.编排可与其他系统轻松集成:puppet、jenkins
7.基础架构即代码
8.减少人为错误
任务、play和playbook设计为具有幂等性,所以在运行playbook时,
如果目标主机处于正确状态,则不会进行任何更改


ansible安装

首先,安装ansible程序的时候,直接yum去安装会出现软件依赖性,所以我们需要同时下载它的依赖性软件,搭建第三方软件仓库,将rpm安装包全部放入然后再使用yum命令安装。
ansible软件包需要在官网直接去下载,其他的两个依赖性python和sshpass可以在pkgs.org网站里下载,
在这里插入图片描述
下载完成后搭建好第三方软件仓库,yum -y install ansible 就可以直接完成安装了
在这里插入图片描述
查看ansible版本信息
ansible --version
在这里插入图片描述
使用setup模块验证python
ansible -m setup localhost | grep ansible_python_version
在这里插入图片描述


ansible的部署

构建ansible清单
什么是清单? --> 定义了ansible将要管理的一批主机

如何定义清单
1.静态清单
清单可以定义单个主机或定义主机组,一台主机可以存在于多个主机组

pc1.hehe.com
192.168.31.40

[websever]
sever1.hehe.com
sever.hehe.com

还可以定义嵌套组,来管理多个组

[usersever]
pc1.hehe.com

[websever]
sever1.hehe.com
sever.hehe.com

[severs:children]
usersever
websever

2.通过范围简化主机规格
可以指定主机名称或ip范围或者数字和字母范围
写法:[START:END]

192.168.31.[0:200]	#匹配192.168.31.0到192.168.31.200的所有主机
sever[01:10].example.com	#匹配sever01.example.com到sever10.example.com的所有主机,此方式不匹配server1,之匹配server01
[a:e].example.com	#匹配a.example.com到e.example.com的所有主机

3.默认清单位置:/etc/ansible/hosts #一般不使用,而是自己新建
可以在当前用户家目录中新建一个清单目录如:testlist-inventory ,然后在此目录中建立清单 inventory
在这里插入图片描述

4.验证清单
ansible all -i inventory --list-hosts,查看清单中所有主机列表
在这里插入图片描述
参数 -i 表示指定需要读取的列表文件,–list-hosts表示列出主机

其他查看命令: ansible ungrouped -i inventory --list-hosts ,列出不在组里的主机名称

ansible usersevers -i inventory --list-hosts ,列出指定组中的主机名称,或者列出指定嵌套组里所有的主机名称

5.动态清单–> 可以从开源社区的脚本中获取

管理ansible配置文件
ansible 的主配置文件的是 /etc/ansible/ansible.cfg 文件,但是在我们的工作中,存在使用不同的清单目录,所以配置文件也会是个人自己配置的,其中会有 “工作目录下的 .ansible.cfg” 和 “工作目录下的ansible.cfg” 这两个文件存在,而当你在工作目录下时,系统对于你的配置文件的检索顺序是,
首先看工作目录下的ansible.cfg;
然后看工作目录下的 .ansible.cfg;
最后看/etc/ansible/ansible.cfg。是这样的一个优先顺序,推荐使用的是工作目录下的ansible.cfg这个配置文件

测试:在当前目录中创建ansible.cfg文件,使用命令:ansible --version查看
在这里插入图片描述
退出当前目录再查看
在这里插入图片描述

常用设置的配置内容参考 /etc/ansible/ansible.cfg 这个文件中的内容我们来写,常用设置的模块 [defaults] 和 [privilege_escalation] 这两个配置块。
[defaults] 的配置是通用的不需要做什么更改;
[privilege_escalation] 中的配置我们用到的时候可能需要进行一些更改参数。

[privilege_escalation] 	#权限提升
#become=True	#是否开启权限
#become_method=sudo 	#用身份方式开启权限提升
#become_user=root	#权限提升的身份
#become_ask_pass=False	#是否开启密码认证

简单的配置内容我们自定义时可以用如下方式写

[defaults]
inventory = ./inventory	#配置管理的列表
remote_user = redhat	#连接时用到的用户身份
ask_pass = false	#是否询问密码,false表示否定,ture表示需要,如果要跳过密码认证需要提前作ssh服务的免密登录

[privilege_escalation]
become = True
become_method = sudo
become_user = root
become_ask_pass = False	#是否需要为become_method提示输入密码,默认为false,这里如果需要实现取消密码,需要设置登录用户权限下放

用户的权限下放我们可以写在/etc/sudores.d 目录下,建立对应名称的文件去写权限下放的配置
在这里插入图片描述


运行临时命令

ansible的命令运行方式有两种,一种是临时命令 ad_hoc ,不需要编写类似脚本的文件;
另一种是 playbook 方式,编写ansible脚本去运行命令。

临时命令的格式:

ansible host-pattern -m module [-a 'module arguments'] [-i inventory]
host-pattern 表示受管主机或主机组
-m module 表示需要允许的模块,如ping、copy等
[-a 'module arguments'] 表示运行模块需要的参数
[-i inventory]	指定名单列表

测试临时命令运行
使用默认配置我们测试命令:ansible localhost -m ping,查看本机是否运行python模块
在这里插入图片描述

临时命令通过模块
命令:ansible-doc -l,#列出所有模块
ansible-doc ping,#查看ping模块帮助文档

模块种类说明:

文件模块说明
copy将本地文件复制到受管主机
file设置文件的权限和其他属性
lineinfile确保特定行是否在文件中
synchronize使用rsync同步内容
系统模块:说明
firewalld使用firewalld管理任意端口和服务
reboot重启
service管理服务
user添加、删除和管理用户账户
Net Tools模块说明
get_url通过http、https、或者ftp下载文件
nmcli管理网络
uri与web服务交互

使用user模块检测 pc1.xxx.com 主机中是否存在 redhat 用户 ,uid为1000,状态是存在的
在这里插入图片描述

ansible userservers -m command -a /usr/bin/hostname,执行命令模块hostname在usersevers组中
在这里插入图片描述
显示出的内容看到是两行,第一行的内容是受管主机的状态,第二行是命令结果,如果想要执行结果输出为一行,加上参数 -o
在这里插入图片描述
注意: command模块允许执行远程命令,但这些命令不是shell处理,所以无法访问shell环境变量,所以不能执行重定向、传送等操作

如果想使用环境变量等功能就需要使用 shell 模块
可以做个对比来比较一下这两个模块
在这里插入图片描述

command模块使用:
使用自己设置的用户列表和配置,还需要给受管主机做免密登录设置
ansible all -m command -a ‘id’
在这里插入图片描述
-u参数可以指定登录用户
在这里插入图片描述

copy模块使用
在使用普通用户时因为没有相应的权限所以会失败,所以我们在需要在受管主机中对需要操作的用户进行权限下放

[root@pc1]# cat /etc/sudoers.d/student
student ALL=(ALL) NOPASSWD: ALL

然后再使用命令去操作:ansible pc1.xxx.com -m copy -a ‘content=“hello world\n” dest=/etc/motd’ -u redhat --become,复制hello world 到/etc/motd 并且提升redhat用户身份
在这里插入图片描述
更改显示的会是黄色,查询成功时绿色,出现错误是红色字体
复制内容成功后去检测
在这里插入图片描述
如果再次使用copy模块去更改,会出现SUCCESS,因为已经是正确的内容了,不会再次更改
在这里插入图片描述
可以使用 ansible all -m copy -a ‘content=“hello world\n” dest=/etc/motd’ -u redhat --become 对所有受管主机进行统一更改,并且使用的是redhat用户的提升后的身份。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Howei__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值