自动化运维Ansible

文章目录


一、Ansible功能简介

Ansible功能

  • 批量执行远程命令,可以对远程的多台主机同时进行命令的执行。
  • 批量安装和配置软件服务,可以对远程的多台主机进行自动化的方式配置和管理各种服务。
  • 编排高级的企业级复杂的IT架构任务, Ansible的Playbook和role可以轻松实现大型的IT复杂架构。
  • 提供自动化运维工具的开发API, 有很多运维工具,如jumpserver(堡垒机)就是基于 ansible 实现自动化管理功能。

Ansible特性

  • 模块化:调用特定的模块完成特定任务,支持自定义模块,可使用任何编程语言写模块(账号,软件等)
  • Paramiko(python对ssh的实现),PyYAML,Jinja2(模板语言)三个关键模块。
  • 基于Python语言实现。
  • 部署简单,基于python和SSH(默认已安装),agentless,无需代理不依赖PKI(无需ssl)。
  • 安全,基于OpenSSH。
  • 幂等性:一个任务执行1遍和执行n遍效果一样,不因重复执行带来意外情况,此特性非绝对。
  • 支持playbook编排任务,YAML格式,编排任务,支持丰富的数据结构 剧本演员要按照 系统按照你规定的方式去执行命令。
  • 较强大的多层解决方案 role。

Ansible架构

Ansible组成

  • INVENTORY:Ansible管理主机的清单,在/etc/anaible/hosts下。 需要管理的服务清单。
  • MODULES:Ansible执行命令的功能模块,多数为内置核心模块,也可自定义。
  • PLUGINS:模块功能的补充,如连接类型插件、循环插件、变量插件、过滤插件等,该功能不常用。
  • API:供第三方程序调用的应用程序编程接口。

Ansible命令执行来源

  • USER 普通用户,即SYSTEM ADMINISTRATOR
  • PLAYBOOKS:任务剧本(任务集),编排定义Ansible任务集的配置文件,由Ansible顺序依次执行,通常是JSON格式的YML文件。
  • CMDB(配置管理数据库) API 调用。
  • PUBLIC/PRIVATE CLOUD API调用。

二、Ansible安装和入门

安装Ansible

yum源安装

Ansible在额外源中,需要先安装额外源,如果安装较慢,请更换DNS重试。

bash 复制代码
yum install epel-release.noarch -y
yum install ansible -y

安装成功。
编译安装

先安装依赖环境,然后去官网下载源码包,然后根据如下操作安装。

bash 复制代码
yum -y install python-jinja2 PyYAML python-paramiko python-babel python-crypto
wget https://releases.ansible.com/ansible/ansible-1.5.4.tar.gz
tar xf ansible-1.5.4.tar.gz
cd ansible-1.5.4
python setup.py build
python setup.py install
mkdir /etc/ansible
cp -r examples/* /etc/ansible

查看基本信息

Ansible相关文件

  • /etc/ansible/ansible.cfg 主配置文件,配置ansible工作特性,也可以在项目的目录中创建此文件,当前目录下如果也有ansible.cfg,则此文件优先生效,建议每个项目目录下,创建独有的ansible.cfg文件。
  • /etc/ansible/hosts 主机清单
  • /etc/ansible/roles/ 存放角色的目录

    主配置文件
    Ansible的配置文件可以放在多个不同的地方,优先级从高到低顺序如下。
bash 复制代码
ANSIBLE_CONFIG #环境变量,注意此项用 ansible --version 看不到,但可以生效
./ansible.cfg   #当前目录下的ansible.cfg
~/.ansible.cfg #当前用户家目录下的.ansible.cfg
/etc/ansible/ansible.cfg  #系统默认配置文件

Ansible 的默认配置文件 /etc/ansible/ansible.cfg。

bash 复制代码
[defaults]
#inventory     = /etc/ansible/hosts 	#主机列表配置文件
#library = /usr/share/my_modules/ 		#库文件存放目录
#remote_tmp = $HOME/.ansible/tmp 		#临时py命令文件存放在远程主机目录
#local_tmp     = $HOME/.ansible/tmp 	#本机的临时命令执行目录
#forks         = 5   					#默认并发数
#sudo_user     = root 					#默认sudo 用户
#ask_sudo_pass = True 					#每次执行ansible命令是否询问ssh密码
#ask_pass     = True   
#remote_port   = 22
#host_key_checking = False     			#检查对应服务器的host_key,建议取消此行注释,实现第一次连接自动信任目标主机
#log_path=/var/log/ansible.log 			#日志文件,建议启用
#module_name = command mod		        #默认模块,可以修改为shell模块
[privilege_escalation] 					#普通用户提权配置
#become=True
#become_method=sudo
#become_user=root
#become_ask_pass=False

主机清单文件

Ansible的主要功能用在于批量主机操作,为了便捷地使用其中的部分主机,可以在inventory主机清单文件中,将其分组组织。

参数说明

  • ansible_ssh_host#将要连接的远程主机名.与你想要设定的主机的别名不同的话,可通过此变量设置。
  • ansible_ssh_port#ssh端口号.如果不是默认的端口号,通过此变量设置.这种可以使用 ip:端口。
    192.168.1.100:2222
  • ansible_ssh_user#默认的 ssh 用户名
  • ansible_ssh_pass#ssh 密码(这种方式并不安全,我们强烈建议使用 --ask-pass 或 SSH 密钥)
  • ansible_sudo_pass#sudo 密码(这种方式并不安全,我们强烈建议使用 --ask-sudo-pass)
  • ansible_sudo_exe (new in version 1.8)#sudo 命令路径(适用于1.8及以上版本)
  • ansible_connection #与主机的连接类型.比如:local, ssh 或者 paramiko. Ansible
    1.2 以前默认使用 paramiko.1.2 以后默认使用 'smart','smart' 方式会根据是否支持 ControlPersist, 来判断'ssh' 方式是否可行。
  • ansible_ssh_private_key_file #ssh 使用的私钥文件.适用于有多个密钥,而你不想使用 SSH
    代理的情。
  • ansible_shell_type
    #目标系统的shell类型.默认情况下,命令的执行使用 'sh' 语法,可设置为'csh' 或 'fish'。
bash 复制代码
ansible 192.168.232.20 -m ping

m代表使用模块 ping代表ping模块 命令探测下,需要输入 yes 或no。

bash 复制代码
ansible web -m ping -k

-k输入密码,只有一次机会,如果密码不同无法一起管理,建议ssh免密登录。

如何管理免密登录?

有两种办法。

1.修改ssh配置

bash 复制代码
vim /etc/ssh/ssh_config 
StrictHostKeyChecking ask
修改35行 StrictHostKeyChecking  no

2.修改ansible

bash 复制代码
vim /etc/ansible/ansible.cfg 
71 #host_key_checking = False
开启71行的ansible的不验证即可

免密登录脚本

bash 复制代码
#!/bin/bash
PASS=123123
#设置网段最后的地址,4-255之间,越小扫描越快
END=254
 
IP=`ip a s ens33 | awk -F'[ /]+' 'NR==3{print $3}'`
NET=${IP%.*}.
 
rm -f /root/.ssh/id_rsa
[ -e ./SCANIP.log ] && rm -f SCANIP.log
for((i=3;i<="$END";i++));do
ping -c 1 -w 1  ${NET}$i &> /dev/null  && echo "${NET}$i" >> SCANIP.log &
done
wait
 
ssh-keygen -P "" -f /root/.ssh/id_rsa
rpm -q sshpass || yum -y install sshpass
sshpass -p $PASS ssh-copy-id -o StrictHostKeyChecking=no $IP
 
AliveIP=(`cat SCANIP.log`)
for n in ${AliveIP[*]};do
sshpass -p $PASS scp -o StrictHostKeyChecking=no -r /root/.ssh root@${n}:
done

Ansible相关工具

  • /usr/bin/ansible 主程序,临时命令执行工具
  • /usr/bin/ansible-doc 查看配置文档,模块功能查看工具,相当于man ansible-doc -l |grep 关键字 具体模块名字
  • /usr/bin/ansible-playbook 定制自动化任务,编排剧本工具,相当于脚本
  • /usr/bin/ansible-pull 远程执行命令的工具
  • /usr/bin/ansible-vault 文件加密工具
  • /usr/bin/ansible-console 基于Console界面与用户交互的执行工具
  • /usr/bin/ansible-galaxy 下载/上传优秀代码或Roles模块的官网平台

Ansible

作用:执行临时任务,一次性任务。

用法:ansible < host-pattern> [-m module_name] [-a args] ;命令 主机或者清单中的组 -m 指定模块 -a 执行的任务。

选项 含义
--version 显示版本
-m module 指定模块,默认为command
-v 详细过程 -vv -vvv更详细
--list-hosts 显示主机列表,可简写 --list
-C, --check 检查,并不执行
-T, --timeout=TIMEOUT 执行命令的超时时间,默认10s
-k, --ask-pass 提示输入ssh连接密码,默认Key验证
-u, --user=REMOTE_USER 执行远程执行的用户,默认root
-b, --become 代替旧版的sudo 切换
--become-user=USERNAME 指定sudo的runas用户,默认为root vim /etc/sudoers 用户权限
-K, --ask-become-pass 提示输入sudo时的口令
-f FORKS, --forks FORKS 指定并发同时执行ansible任务的主机数

提权操作

首先需要在被控制的主机(目标主机)进行sudo授权。特别注意是在目标主机!!!

bash 复制代码
grep lisi /etc/sudoers

以lisi的用户连接用户,并利用sudo代表执行whoami命令。

bash 复制代码
ansible 192.168.232.30 -m shell -a 'whoami' -u lisi -k -b --become-user=lisi


主机列表

支持通配符

与或非的关系

bash 复制代码
ansible 'web:cxk' --list-hosts 或关系
ansible "web:&accp" --list-hosts与关系
ansible 'web:!accp' --list-hosts逻辑非关系
正则表达式ansible "~(k|a).*" -m ping 波浪符代表开启正则表达式

Ansible命令执行过程

1.加载自己的配置文件,默认/etc/ansible/ansible.cfg

2.加载自己对应的模块文件,如:command

3.通过ansible 将模块或命令生成对应的临时py文件,并将该文件传输至远程服务器的对应执行用户$HOME/.ansible/tmp/ansible-tmp-数字/XXX.PY文件。

4.给文件+x执行

  1. 执行并返回结果

  2. 删除临时py文件,退出

执行返回结果

  • 绿色:执行成功并且不需要做改变的操作
  • 黄色:执行成功并且对目标主机做变更
  • 红色:执行失败

ansible-doc

查看所有支持的模块

三、Ansible模块

Ansible模块众多,截止目前,共有3000多个模块,但针对特定业务的模块只有十几个。常用模块帮助文档

bash 复制代码
https://docs.ansible.com/ansible/2.9/modules/list_of_all_modules.html

Command模块

功能:在远程主机执行命令,此为默认模块,可以忽略-m选项

注意:此命令不支持 $VARNAME < > | ; & 等,可能用shell模块实现;此模块不具有幂等性。

在主配置文件中可以修改默认模块

修改主配置文件114行即可。

shell模块

功能:和command相似,用shell执行命令,支持符号

注意:此模块不具备幂等性。

bash 复制代码
ansible web -m shell -a "echo hello > /opt/hello.txt"


Scipt模块

功能:在远程主机上运行ansible服务器上的脚本(无需执行权限)

注意:此模块不具有幂等性

bash 复制代码
[root@node1 ~]#vim test.sh
#!/bin/bash
hostname
[root@node1 ~]#ansible web -m script -a '/root/test.sh'

copy模块

功能:从ansible服务器主控端复制文件到远程主机

注意: src=file 如果是没指明路径,则为当前目录或当前目录下的files目录下的file文件

关键字 含义
src 代表源文件路径
dest 代表文件落地路径
owner 属主
group 属组
mode 代表权限
backup 如果复制时有同名文件会先备份再复制 ;backup=true
bash 复制代码
ansible web -m copy -a " src=/etc/passwd dest=/opt owner=lisi group=lisi mode=644"

代码含义:调用copy模块复制本地文件passwd到web组内主机的opt文件夹下,属主是lisi,属组是lisi,权限是644。

bash 复制代码
ansible web -m copy -a "src=/etc dest=/backup"
ansible web -m copy -a "src=/etc/ dest=/backup"

etc  	不加  	/   	连etc  一起复制
etc   	加  	/	   	只复制etc下的文件

Get_url模块

功能: 用于将文件从http、https或ftp下载到被管理机节点上。

bash 复制代码
ansible web -m get_url -a "url=https://nginx.org/download/nginx-1.18.0.tar.gz dest=/opt"

代码含义:下载nginx文件到opt下。

常见参数 含义
url 下载文件的URL,支持HTTP,HTTPS或FTP协议
dest 下载到目标路径(绝对路径),如果目标是一个目录,就用服务器上面文件的名称,如果目标设置了名称就用目标设置的名称
owner 指定属主
group 指定属组
mode 指定权限
force 如果yes,dest不是目录,将每次下载文件,如果内容改变,替换文件。如果否,则只有在目标不存在时才会下载该文件
checksum 对目标文件在下载后计算摘要,以确保其完整性(利用MD5算法加密)
url_username 用于HTTP基本认证的用户名。对于允许空密码的站点,此参数可以不使用`url_password'
url_password 用于HTTP基本认证的密码。如果未指定url_username'参数,则不会使用url_password'参数
validate_certs 如果"no",SSL证书将不会被验证。适用于自签名证书在私有网站上使用
timeout URL请求的超时时间,秒为单位
bash 复制代码
ansible web -m get_url -a 'url=https://nginx.org/download/nginx-1.18.0.tar.gz dest=/opt checksum="md5:3ca4a37931e9fa301964b8ce889da8cb"'注意checksum后面不要忘记加md5

Fetch模块

功能:从远程主机提取文件至ansible的主控端,copy相反,目前不支持目录。

File

功能:设置文件属性,创建软链接等。

path:指定文件路径

state: 文件状态

文件状态 含义
touch 新建
absent 删除
directory 文件夹
link 链接文件

src:源文件

mode:权限

owner:属主

group:属组

recurse:递归

stat模块

功能:检查文件或文件系统的状态

注意:对于Windows目标,请改用win_stat模块

选项

path:文件/对象的完整路径(必须是绝对路径)

常见的返回值判断:

exists:判断是否存在。

isuid:调用用户的ID与所有者ID是否匹配。

bash 复制代码
ansible web -m stat -a 'path=/mnt/test.txt'

Unarchive模块

功能:解压缩

实现两种用法:

1、将ansible主机上的压缩包传到远程主机后解压缩至特定目录,设置copy=yes,此为默认值,可省略。

2、将远程主机上的某个压缩包解压缩到指定路径下,设置copy=no。

常见参数:

copy:默认为yes,当copy=yes,拷贝的文件是从ansible主机复制到远程主机上,如果设置copy为no,会在远程主机上寻找src源文件。

remote_src:和copy功能一样且互斥,yes表示在远程主机,不在ansible主机,no表示文件在ansible主机上。

src:源路径,可以是ansible主机上的路径,也可以是远程主机(被管理端或者第三方主机)上的路径,如果是远程主机上的路径,则需要设置copy=no。

dest:远程主机上的目标路径。

mode:设置解压后的文件路径。

bash 复制代码
 ansible web -m unarchive -a 'src=/data/hebing.gz dest=/mnt'

代码解释:使用unarchive模块,解压ansible主机上的压缩包传到远程主机解压缩至特定目录。这边省略了copy=yes,默认的也是yes。

Archive模块

功能:打包压缩保存在被管理节点。

常用参数

参数 说明
path 远程主机上需要打包/压缩的源文件(可以是文件夹)
dest 压缩后的包文件路径(包文件的父目录必须存在);如果包文件已经存在,则会被覆盖。
format 指定压缩类型,包括:bz2、gz(默认)、tar、xz、zip
owner 指定属主
group 指定属组
mode 指定权限
remove yes/no ,默认为no,在打包后,不删除源文件。

此模块常常用于打包该主句的日志文件,并通过fetch模块上载到主文件中去。

bash 复制代码
ansible web -m archive -a 'path=/var/log dest=/opt/rizhi.gz mode=644 '


Hostname模块

功能:管理主机名

bash 复制代码
ansible 192.168.91.102 -m hostname -a 'name=node3 '

一般不会使用此模块,主机名会一致,不好管理。

Cron模块

功能:计划任务

支持时间:minute,hour,day,month,weekday

关键字:name 会生成一行注释,显示标题如下显示。

job 执行的命令。

模块参数:
special_time: 可用值有 reboot(重启后)、yearly(每年)、annually(每年,与yearly相同)、monthly(每月)、weekly(每周)、daily(每天)、hourly(每时)。

注意:当上述时间单位设定参数都未指定时,计划任务的时间设定默认会被设定为"* * * * *",这样表示每秒都会执行一次计划任务,所以,在使用cron模块时,我们应该确定对应的时间参数设置正确。
user: 设置当前计划任务属于哪个用户。
job: 指定计划的任务中需要实际执行的命令或者脚本。
name: 设置计划任务的名称。

state:当计划任务有名称时,修改或删除对应的任务,当删除计划任务时,需要将 state 的值设置为 absent。
disabled: 当计划任务有名称时,我们可以根据名称使对应的任务"失效"(注释掉对应的任务)。
backup: 如果此参数的值设置为 yes,那么当修改或者删除对应的计划任务时,会先对计划任务进行备份,然后再对计划任务进行修改或者删除,cron 模块会在远程主机的 /tmp 目录下创建备份文件,以 crontab 开头并且随机加入一些字符,具体的备份文件名称会在返回信息的 backup_file 字段中看到,推荐将此此参数设置为 yes。

bash 复制代码
ansible web -m cron -a 'hour=2 minute=30 weekday=1-5 name="backup mysql" job=/root/mysql_back.sh'

每日凌晨两点半,执行脚本文件。

删除任务

bash 复制代码
ansible web -m cron -a "name='backup mysql' state=absent"

注意:这个报错是Python 脚本需要与启用了 SELinux 的目标系统进行交互,但是缺少了必要的 Python 库,无法正常工作。需要在目标系统上安装 SELinux 的 Python 绑定,才能让你的脚本正常运行。但实际上该条命令执行成功。

Yum和Apt模块

功能:yum 管理软件包,只支持RHEL,CentOS,fedora,不支持Ubuntu其它版本apt 模块管理 Debian 相关版本的软件包。

关键字

参数 用处
name 必须参数,用于指定需要管理的软件包。
state 用于指定软件包的状态,默认值为present,表示确保软件包已经安装,除了present,其他可用值有 installed、 latest、absent、removed,其中 installed 与present 等效,latest 表示安装 yum 中最新的版本,absent和removed 等效,表示删除对应的软件包。
disable_gpg_check 用于禁用对 rpm 包的公钥 gpg 验证。默认值为 no,表示不禁用验证,设置为 yes 表示禁用验证,即不验证包,直接安装。在 对应的 yum 源没有开启 gpg 验证的情况下,需要将此参数的值设置为 yes,否则会报错而无法进行安装。
enablerepo 用于指定安装软件包时临时启用的 yum 源。假如你想要从A源中安装软件,但是你不确定A源是否启用了,你可以在安装软件包时 将此参数的值设置为 yes,即使A源的设置是未启用,也可以在安装软件包时临时启用A源。
disablerepo 用于指定安装软件包时临时禁用的 yum 源。某些场景下需要此参数,比如,当多个 yum 源中同时存在要安装的软件包时,你可 以使用此参数临时禁用某个源,这样设置后,在安装软件包时则不会从对应的源中选择安装包。

注意:enablerepo 参数和 disablerepo 参数可以同时使用

bash 复制代码
ansible web -m yum -a 'name=httpd state=present'


bash 复制代码
ansible web -m yum -a 'name=httpd state=absent'

卸载httpd

yum_repository模块

功能:建立yum仓库模块

关键字

参数 含义
name 必须参数,用于指定要操作的唯一的仓库ID,也就是".repo"配置文件中每个仓库对应的"中括号"内的仓库ID。
baseurl 此参数用于设置 yum 仓库的 baseurl
description 此参数用于设置仓库的注释信息,也就是".repo"配置文件中每个仓库对应的"name字段"对应的内容。
file 此参数用于设置仓库的配置文件名称,即设置".repo"配置文件的文件名前缀,在不使用此参数的情况下,默认以 name 参数的仓库ID作 为".repo"配置文件的文件名前缀,同一个".repo" 配置文件中 可以存在多个 yum 源。
enabled 此参数用于设置是否激活对应的 yum 源,此参数默认值为 yes,表示启用对应的 yum 源,设置为 no 表示不启用对应的 yum 源。
gpgcheck 此参数用于设置是否开启 rpm 包验证功能,默认值为 no,表示不启用包验证,设置为 yes 表示开启包验证功能。
gpgcakey 当 gpgcheck 参数设置为 yes 时,需要使用此参数指定验证包所需的公钥。
state 默认值为 present,当值设置为 absent 时,表示删除对应的 yum 源。
bash 复制代码
 ansible web -m yum_repository -a 'name=epel description=epel baseurl=https://download.fedoraproject.org/pub/epel/$releasever/$basearch/ gpgcheck=no file=epel'
bash 复制代码
 ansible web -m yum_repository -a 'name=epel description=epel baseurl=https://download.fedoraproject.org/pub/epel/$releasever/$basearch/ gpgcheck=no file=epel state=absent'

删除这个repo源。

Service模块

功能:管理服务

关键字

关键字 含义
name 用于指定需要操作的服务名称,比如 nginx
state 用于指定服务的状态,比如,我们想要启动远程主机中的 nginx,则可以将 state 的值设置为 started;如果想要停止远程主机中的服 务,则可以将 state 的值设置为 stopped。此参数的可用值有 started、stopped、restarted、reloaded。
enabled 此参数用于指定是否将服务设置为开机 启动项,设置为 yes 表示将对应服务设置为开机启动,设置为 no 表示不会开机启动。
bash 复制代码
ansible web -m service -a 'name=httpd state=started enabled=yes'

启动httpd并配置开机自启。

mount挂载与解挂载

功能:挂载和解挂载文件系统

参数:

参数 含义
backup 创建一个包含时间戳信息的备份文件,以便在您以某种方式错误地抓取原始文件时取回原始文件。
fstype 文件系统类型。
path 挂载点的路径(例如/mnt/files)。
src 要被挂载设备的路径。
state 1.如果 mounted,设备将被主动安装,并在fstab中适当配置。如果挂载点不存在,则将创建挂载点。2.如果 unmounted,设备将卸载而不更改fstab。3.present 仅指定设备将在fstab中配置,不会触发或要求挂载。4.absent 表示设备支架的条目将从fstab中删除,还将卸载设备并删除挂载点。5.remounted 指定当您想强制刷新挂载本身时。
bash 复制代码
# 在2.3之前,使用了选项"name"而不是"path"
# 挂载DVD只读
- name: Mount DVD read-only
  mount:
    path: /mnt/dvd
    src: /dev/sr0
    fstype: iso9660
    opts: ro,noauto
    state: present

# 按标签安装设备
- name: Mount up device by label
  mount:
    path: /srv/disk
    src: LABEL=SOME_LABEL
    fstype: ext4
    state: present

# 通过UUID安装设备
- name: Mount up device by UUID
  mount:
    path: /home
    src: UUID=b3e48f45-f933-4c8e-a700-22a159ec9077
    fstype: xfs
    opts: noatime
    state: present

# 卸载装载的宗卷
- name: Unmount a mounted volume
  mount:
    path: /tmp/mnt-pnt
    state: unmounted

# 装载并装订卷
- name: Mount and bind a volume
  mount:
    path: /system/new_volume/boot
    src: /boot
    opts: bind
    state: mounted
    fstype: none

User模块

功能:管理用户

关键字:

关键字 含义
comment 用户的描述信息
createhome 是否创建家目录
force 在使用state=absent时, 行为与userdel --force一致。
group 指定基本组
groups 指定附加组,如果指定为(groups=)表示删除所有组
home 指定用户家目录
move_home 如果设置为home=时, 试图将用户主目录移动到指定的目录
name 指定用户名
non_unique 该选项允许改变非唯一的用户ID值
password 指定用户密码,使用 SHA512 hash
remove 在使用state=absent时, 行为是与userdel --remove一致
shell 指定默认shell
state 设置帐号状态,不指定为创建,指定值为absent表示删除
system 当创建一个用户,设置这个用户是系统用户。这个设置不能更改现有用户
uid 指定用户的uid
update_ password always 如果password参数设置的值与用户当前的加密过的密码字符串不一致,则直接更新用户的密码,默认值即为always ;on_create 如果password参数设置的值与用户当前的加密过的密码字符串不一致,则不会更新用户的密码字符串,保持之前的密码设定


Group模块

功能:管理组

bash 复制代码
#创建组
ansible websrvs -m group  -a 'name=nginx gid=88 system=yes'
#删除组
ansible websrvs -m group  -a 'name=nginx state=absent'

reboot

功能:全部重启

bash 复制代码
ansible web -m reboot

Lineinfile模块

ansible在使用sed进行替换时,经常会遇到需要转义的问题,而且ansible在遇到特殊符号进行替换时,存在问题,无法正常进行替换 。

ansible自身提供了两个模块:lineinfile模块和replace模块,可以方便的进行替换一般在ansible当中去修改某个文件的单行进行替换的时候需要使用lineinfile模块。
regexp 参数 :使用正则表达式匹配对应的行,当替换文本时,如果有多行文本都能被匹配,则只有最后面被匹配到的那行文本才会被替换,当删除文本时,如果有多行文本都能被匹配,这么这些行都会被删除。
如果想要进行多行匹配进行替换需要使用replace模块。

功能:相当于sed,可以修改文件内容。

关键字

关键字 含义
path 指定要操作的文件
regexp 使用正则表达式匹配对应的行
line 修改为新的内容
insertafter 将文本插入到"指定的行"之后
insertbefore 将文本插入到"指定的行"之前
state 删除对应的文本时,需要state=absent
backrefs 1.支持后向引用2.当未匹配到内容则不操作文件
backup 是否在修改文件之前对文件进行备份
create 当要操作的文件并不存在时,是否创建对应的文件
bash 复制代码
ansible web -m lineinfile -a 'path=/etc/httpd/conf/httpd.conf regexp="^Listen " line="linsten 80" '

将大写的Listen替换成listen

bash 复制代码
ansible all -m   lineinfile -a "path=/etc/selinux/config regexp='^SELINUX=' line='SELINUX=disabled'"

ansible all -m lineinfile  -a 'dest=/etc/fstab state=absent regexp="^#"'

replace模块

该模块类似于lineinfile模块,两者最大不同是replace替换全部。

bash 复制代码
ansible web -m replace -a "path=/etc/httpd/conf/httpd.conf regexp='^Listen.*' line='Listen 80'"

setup模块

功能: setup 模块来收集主机的系统信息,这些 facts 信息可以直接以变量的形式使用,但是如果主机较多,会影响执行速度,可以使用 gather_facts: no 来禁止 Ansible 收集 facts 信息。

bash 复制代码
ansible all -m setup -a "filter=ansible_nodename"
ansible all -m setup -a "filter=ansible_hostname"
ansible all -m setup -a "filter=ansible_domain"
ansible all -m setup -a "filter=ansible_memtotal_mb"
ansible all -m setup -a "filter=ansible_memory_mb"
ansible all -m setup -a "filter=ansible_memfree_mb"
ansible all -m setup -a "filter=ansible_os_family"
ansible all -m setup -a "filter=ansible_distribution_major_version"
ansible all -m setup -a "filter=ansible_distribution_version"
ansible all -m setup -a "filter=ansible_processor_vcpus"
ansible all -m setup -a "filter=ansible_all_ipv4_addresses"
ansible all -m setup -a "filter=ansible_architecture"
ansible all -m setup -a "filter=ansible_uptime_seconds"
ansible all -m setup -a "filter=ansible_processor*"
ansible all -m setup -a 'filter=ansible_env'
相关推荐
大霞上仙14 分钟前
Ubuntu系统电脑没有WiFi适配器
linux·运维·电脑
Karoku0661 小时前
【企业级分布式系统】Zabbix监控系统与部署安装
运维·服务器·数据库·redis·mysql·zabbix
为什么这亚子1 小时前
九、Go语言快速入门之map
运维·开发语言·后端·算法·云原生·golang·云计算
布值倒区什么name1 小时前
bug日常记录responded with a status of 413 (Request Entity Too Large)
运维·服务器·bug
。puppy2 小时前
HCIP--3实验- 链路聚合,VLAN间通讯,Super VLAN,MSTP,VRRPip配置,OSPF(静态路由,环回,缺省,空接口),NAT
运维·服务器
颇有几分姿色2 小时前
深入理解 Linux 内存管理:free 命令详解
linux·运维·服务器
光芒再现dev2 小时前
已解决,部署GPTSoVITS报错‘AsyncRequest‘ object has no attribute ‘_json_response_data‘
运维·python·gpt·语言模型·自然语言处理
AndyFrank3 小时前
mac crontab 不能使用问题简记
linux·运维·macos
成都古河云4 小时前
智慧场馆:安全、节能与智能化管理的未来
大数据·运维·人工智能·安全·智慧城市
算法与编程之美4 小时前
文件的写入与读取
linux·运维·服务器