Linux——Ansible(安装/配置/常用模块)

Ansible 简介

Ansible 是一个极其简单的 IT 自动化引擎,可自动执行云供应、配置管理、应用程序部署、服务内编排和许多其他 IT 需求。

  • Ansible主要功能是帮助运维实现IT工作的自动化、降低人为操作失误、提高业务自动化率、提升运维工作效率。常用于软件部署自动化、配置自动化、管理自动化、系统化系统任务、持续集成、零宕机平滑升级等。

  • Ansible完全基于Python开发,而DevOps在国内已然是一种趋势,Python被逐步普及,运维人员自己开发工具的门槛逐步降低,得益于此,方便对Ansible二次开发。

  • Ansible丰富的内置模块,甚至还有专门为商业平台开发的功能模块,完全可以满足日常功能所需。

ansible命令实现方式

  • Ad-Hoc
    利用ansible命令直接完成管理,主要用于临时命令使用场景

  • playbook
    ansible脚本,主要用于大型项目场景,需要前期的规划

ansible特点与saltstack对比

  • ansible是基于模块工作的,本身没有批量部署的能力,真正具有批量部署的是ansible所运行的模块

  • ansible只是提供一种框架。ansible不需要在远程主机上安装client/agents,因为它们是基于ssh来和远程主机通讯的

  • Ansible没有客户端,因此底层通信依赖于系统软件,Linux系统下基于OpenSSH通信,Windows系统下基于PowerShell,管理端必须是Linux系统。
    其与saltstack各有千秋,由于使用ssh通信,其安全性非常高,但其部署速度也相应较慢。

在这里插入图片描述

Ansible 安装与配置

安装 & 配置文件

rhel镜像中默认不包含ansible的安装包,安装需要使用epel源。

  • rhel8:
dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm -y
dnf install ansible.noarch -y

在这里插入图片描述

  • rhel7:
dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm -y
dnf install ansible.noarch -y

ansible的相关文件存放在以下路径

配置文件: /etc/ansible/
执行文件目录: /usr/bin/
lib依赖库: /usr/lib/python2.7/site-packages/ansible/
help文件: /usr/lib/python2.7/site-packages/ansible

配置文件优先级

Ansible配置文件的优先级

  • 1、首先找执行ansible命令的当前目录中,是否有ansible.cfg文件
  • 2、如果找不到,再找当前用户的家目录下是否有ansible.cfg
  • 3、如果还找不到,就使用全局配置文件/etc/ansible/ansible.cfg
    若要检查当前使用的是哪个配置文件可以使用ansible --version 命令,会显示配置文件路径
#	常用配置参数			含义

#[default]			基本信息设定

inventory=			指定清单路径,支持多个文件、逗号分隔
remote_user=		在受管主机上登陆的用户名称,未指定使用当前用户
ask_pass=			是否提示输入SSH密码,如果公钥登陆设定为false
library=			库文件存放目录
local_tmp=			本机临时命令执行目录
remote_tmp=			远程主机临时py命令文件存放目录
forks=				默认并发数量
host_key_checking=	第一次连接受管主机时是否要输入yes建立host_key
sudo_user=			默认sudo用户
ask_sudo_pass=		每次在受控主机执行ansible命令时是否询问sudo密码
module_name=		默认模块,默认使用command,可以修改为shell
log_path=			日志文件路径

[privilege_escalation]	身份信息设定

become=				连接后是否自动切换用户
become_method=		设定切换用户的方式,通常用sudo
become_user=		在受管主机中切换到的用户,通常为root
become_ask_pass		是否需要为become_method提示输入密码,默认为false

主机清单配置

默认清单是用hosts文件,如果自己创建一个清单文件,无法读取,需要使用-i参数指定清单文件查看清单。

  • 全局清单
    编辑/etc/ansible/hosts全局清单文件,加入受控主机清单列表。可以直接书写受控主机名或ip,每行一个。 也可以将主机放置进组内,组支持嵌套。支持规范化主机名,如 [1:10]表示1-10的缺省。

单主机名:
在这里插入图片描述
组:在这里插入图片描述
嵌套组:
在这里插入图片描述规范化主机名:
在这里插入图片描述

  • 指定配置文件的清单
    在ansible.cfg文件内inventory项指定的路径下编写清单文件,书写格式与全局清单相同。

  • 清单查看

ansible 清单中组名称 [-i 清单文件] - -list-hosts	
#查看某个组列表中的清单,加上中括号的内容表示列出某个文件中的所有主机

ansible ungrouped - -list-hosts	
#查看全局清单文件中,不属于任何组的主机

ansible all - -list-hosts	
#查看全局清单文件中的全部主机列表
  • 清单正则匹配
符号含义
*所有
:逻辑或
:&逻辑与
:!逻辑非
以关键字开头
~(str1 |str2)以条件1或条件2开头

运行环境配置

ansible是以ssh的方式远程登录受控主机进行操作的。因此为了便于操作,可以配置当前用户到受控节点的指定用户(在ansible.cfg中的remote_user项指定)的ssh免密。
通常情况下不允许以root用户的方式直接进行连接,这是为了避免root用户的密码在网络中传输。
指定用户登录后,权限不足,需要配置受控节点的sudo,来实现到root用户的切换及权限。

ansilbe控制端,用户级配置文件内容为:

在这里插入图片描述生成密钥对,配置ssh免密

ssh-keygen
ssh-copy-id -i ~/.ssh/id_rsa.pub devops@node1

在受控节点配置devops用户的sudo:

vim /etc/sudoers
#visudo

在这里插入图片描述测试: 查看登录后的用户,默认切换至root
在这里插入图片描述

常用模块(Ad-Hoc)

ansible-doc #显示模块帮助的指令
语法格式: ansible-doc [参数] [模块]
常用参数
    -l 列出可用模块
    -s 显示指定模块的playbook片段

命令行运行常用参数

命令用法

ansible list -m 模块 -a 模块参数 

常用参数

参数含义
- -version显示版本
-m module指定模块,默认为command模块
-v详细过程,-vv、-vvv更详细过程
- - list显示主机列表,也可以用- - list-hosts
-k提示输入ssh连接密码,默认key认证
-C预执行检测
-T执行命令的超时时间,默认10s
-u指定远程执行的用户
-b执行sudo切换身份操作
-become-user=USERNAME指定sudo用户
-K提示输入sudo密码

在运行完成之后,返回结果为绿色代表执行成功但并未对远程主机做出任何改变。黄色代表执行成功且对远程主机有一定更改。红色代表执行失败。

- command

功能: 在远程主机执行命令,此模块为默认模块
chdir		执行命令前先进入到指定目录
cmd			运行命令指定
creates		如果文件存在将不运行
removes		如果文件存在在将运行
free_form	在远程主机中执行的命令,此参数不需要加

- shell

功能:和command功能类似,但并不完全相同
shell中支持通配符* ,command不支持通配符*
默认使用的执行环境为sh,加入executable模块,可以指定执行环境为bash


chdir	执行命令前先进入到指定目录
cmd	运行命令指定
creates	如果文件存在将不运行
removes	如果文件存在在将运行
free_form	在远程主机中执行的命令,此参数不需要加
executable	指定执行环境,默认为sh  executable	= /bin/bash

- script

功能:在ansible主机中写好的脚本在受控主机中执行,在参数指定脚本位置,也支持多个参数模块。

在这里插入图片描述
示例:

ansible list -m script -a "test.sh"

- copy

功能:从ansible主机复制文件到受控主机,也可以直接根据内容生成指定文件
参数含义
src源文件
dest目的地文件
owner指定目的地文件所有人
group指定目的地文件的所有组
mode指定目的地文件权限
backup=yes当受控主机中存在文件时备份源文件
content指定文本内容直接在受控主机中生成文件

- fetch

功能:从受控主机把文件复制到ansible主机,但不支持目录

参数含义
src受控主机的源文件
dest本机目录
flat基本名称功能,开启时只复制单独文件不复制目录

- file

功能:设置文件的属性

参数含义
path指定文件名称
state指定操作状态
touch建立
absent删除
directory递归
link建立链接
mode设定权限
owner设定文件用户
group设定文件组
src源文件
dest目标文件
recurse=yes递归更改

关于软硬连接的知识点
在这里插入图片描述

- archive

作用:			压缩
常用参数			含义
path			打包目录名称
dest			声称打包文件名称
format			打包格式
owner			指定文件所属人
mode			指定文件权限

在这里插入图片描述

- unarchive

功能:解压缩
常用参数	含义
copy			默认为yes,从ansible主机复制文件到受控主机,设定为no时从受控主机中寻找src源文件
remote_src		功能同copy且相反,设定为yes表示包在受控主机,设定为no表示包在	ansible主机
src				包路径,可以使ansible主机也可以使受控主机
dest			受控主机目录
mode			加压后文件权限 <copy=yes>

在这里插入图片描述

- hostname

功能:	管理主机名称
常用参数
name	 指定主机名称

示例:

ansible list -m hostname -a "name=node1"

- cron

作用:计划任务

minute			分钟
hour			小时
day				天
month			月
weekday			周
name			任务名称
job				任务脚本或命令
disabled		yes 禁用计划任务,no 启动计划任务 # 禁用时,会注释命令文件的对应内容
state			absent 删除计划任务

在这里插入图片描述

- yum_repository

作用:配置系统软件仓库源文件

name			指定仓库名称
baseurl			指定源路径
description		指定仓库描述
file			指定仓库文件名称
enabled			仓库是否启用
gpgcheck		仓库是否检测gpgkey
state			默认值present 建立,absent 为删除

- dnf/yum

作用:管理系统中的dnf仓库及管理软件

name				指定包
state				指定动作,present:安装;latest:更新;absent:删除,默认不删除依赖
list				列出指定信息
autoremove			删除时是否移除依赖性
disable_gpg_check	禁用gpgkey检测
enablerepo			指定安装包来源
disablerepo			禁用安装包来源

- service

作用:管理系统服务状态

name		指定服务名称
state		指定对服务的动作
enabled		设定服务开机是否启动,yes开启启动,no开机不启动

- firewalld

作用:管理防火墙

zone				防火墙的域
service			服务名称
permanent		永久生效
state			enabled允许;disabled拒绝
immediate		立即生效

- user

作用:模块可以帮助我们管理远程主机上的用户,比如创建用户、修改用户、删除用户、为	用户创建密钥对等操作

name		必须参数,用于指定要操作的用户名称
group		指定用户所在的基本组
gourps		指定用户所在的附加组
append		指定添加附加组默认值为no
shell		指定用户的默认 shell
uid			指定用户的 uid 号
comment		指定用户的注释信息
state		用于指定用户是否存在于远程主机;present:建立;absent:删除 
			#删除时添加remove参数,删除用户时删除用户家目录
password 	指定密码,默认为明文,可使用openssl 生成加密字符串
openssl passwd -1 'testpasswd'
$1$C/3TWSA5$b4LuO9WQEDpF.ItZ8hLI01

- group

作用:group 模块可以帮助我们管理远程主机上的组。

name		用于指定要操作的组名称
state		用于指定组的状态,present:建立;absent:删除
gid			用于指定组的gid

- lineinfile

作用:此模块确保文件中存在特定行,或使用反向引用的正则表达式替换现有行。

path			指定要操作的文件
line			指定文本内容 直接使用时 追加在文件最后
regexp			使用正则表达式匹配对应的行。替换文本时如果有多行文本都能被匹配,则只有最后面被匹配到的那行文本才会被替换;
				当删除文本时,如果有多行文本都能被匹配,那么这些行都会被删除
									
state			state的默认值为present,当想要删除对应的文本时需要将state参数的值设置为absent
backrefs		默认值为no,如果该为yes,表示当内容无匹配规则时不对文件做任何更改,还有向后引用regexp变量信息的作用

insertafter		借助insertafter参数可以将文本插入到“指定的行”之后,insertafter参数的值可以设置为EOF或者正则表达式
insertbefore	借助insertbefore参数可以将文本插入到“指定的行”之前,insertbefore参数的值可以设置为BOF或者正则表达式
backup			否在修改文件之前对文件进行备份。
create			当要操作的文件并不存在时,是否创建对应的文件

在这里插入图片描述

- replace

作用:replace 模块可以根据我们指定的正则表达式替换文件中的字符串,文件中所有被匹配到的字符串都会被替换。

path		指定要操作的文件
regexp		指定一个正则表达式,文件中与正则匹配的字符串将会被替换
replace		指定最终要替换成的字符串
backup		是否在修改文件之前对文件进行备份,最好设置为yes

在这里插入图片描述

- setup

作用:setup模块用于收集远程主机的一些基本信息

filter	用于进行条件过滤。如果设置,仅返回匹配过滤条件的信息

ansible主机使用setup模块,ansible all -m setup可以看到受控主机的所有的信息,也可以指定查看某个信息

在这里插入图片描述

- debug

作用:调试模块,用于在调试中输出信息
msg	调试输出的消息
var	将某个任务执行的输出作为变量传递给debug模块,debug会直接将其打印输出
verbosity	debug的级别(默认是0级,全部显示)

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值