自动化运维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重试。

yum install epel-release.noarch -y
yum install ansible -y

在这里插入图片描述
安装成功。
编译安装
先安装依赖环境,然后去官网下载源码包,然后根据如下操作安装。

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

Ansible 的默认配置文件 /etc/ansible/ansible.cfg。
在这里插入图片描述

[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’。
    在这里插入图片描述
ansible 192.168.232.20 -m ping

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

ansible web -m ping -k

-k输入密码,只有一次机会,如果密码不同无法一起管理,建议ssh免密登录。
在这里插入图片描述
如何管理免密登录?
有两种办法。
1.修改ssh配置

vim /etc/ssh/ssh_config 
StrictHostKeyChecking ask
修改35行 StrictHostKeyChecking  no

2.修改ansible

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

免密登录脚本

#!/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授权。特别注意是在目标主机!!!

grep lisi /etc/sudoers

在这里插入图片描述

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

ansible 192.168.232.30 -m shell -a 'whoami' -u lisi -k -b --become-user=lisi

在这里插入图片描述
主机列表
支持通配符
在这里插入图片描述
与或非的关系

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执行
5. 执行并返回结果
6. 删除临时py文件,退出

执行返回结果

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

ansible-doc
查看所有支持的模块
在这里插入图片描述

三、Ansible模块

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

https://docs.ansible.com/ansible/2.9/modules/list_of_all_modules.html

Command模块

功能:在远程主机执行命令,此为默认模块,可以忽略-m选项
注意:此命令不支持 $VARNAME < > | ; & 等,可能用shell模块实现;此模块不具有幂等性。
在这里插入图片描述

在这里插入图片描述
在主配置文件中可以修改默认模块
在这里插入图片描述
修改主配置文件114行即可。

shell模块

功能:和command相似,用shell执行命令,支持符号
注意:此模块不具备幂等性。

ansible web -m shell -a "echo hello > /opt/hello.txt"

在这里插入图片描述
在这里插入图片描述

Scipt模块

功能:在远程主机上运行ansible服务器上的脚本(无需执行权限)
注意:此模块不具有幂等性

[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
ansible web -m copy -a " src=/etc/passwd dest=/opt owner=lisi group=lisi mode=644"

代码含义:调用copy模块复制本地文件passwd到web组内主机的opt文件夹下,属主是lisi,属组是lisi,权限是644。
在这里插入图片描述

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下载到被管理机节点上。

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证书将不会被验证。适用于自签名证书在私有网站上使用
timeoutURL请求的超时时间,秒为单位
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是否匹配。

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:设置解压后的文件路径。

 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指定权限
removeyes/no ,默认为no,在打包后,不删除源文件。

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

ansible web -m archive -a 'path=/var/log dest=/opt/rizhi.gz mode=644 '

在这里插入图片描述
在这里插入图片描述

Hostname模块

功能:管理主机名

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。

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

每日凌晨两点半,执行脚本文件。
在这里插入图片描述

在这里插入图片描述
删除任务

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 参数可以同时使用

ansible web -m yum -a 'name=httpd state=present'

在这里插入图片描述
在这里插入图片描述

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 源。

在这里插入图片描述

 ansible web -m yum_repository -a 'name=epel description=epel baseurl=https://download.fedoraproject.org/pub/epel/$releasever/$basearch/ gpgcheck=no file=epel'

在这里插入图片描述

 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 表示不会开机启动。
ansible web -m service -a 'name=httpd state=started enabled=yes'

启动httpd并配置开机自启。
在这里插入图片描述

mount挂载与解挂载

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

参数含义
backup创建一个包含时间戳信息的备份文件,以便在您以某种方式错误地抓取原始文件时取回原始文件。
fstype文件系统类型。
path挂载点的路径(例如/mnt/files)。
src要被挂载设备的路径。
state1.如果 mounted,设备将被主动安装,并在fstab中适当配置。如果挂载点不存在,则将创建挂载点。2.如果 unmounted,设备将卸载而不更改fstab。3.present 仅指定设备将在fstab中配置,不会触发或要求挂载。4.absent 表示设备支架的条目将从fstab中删除,还将卸载设备并删除挂载点。5.remounted 指定当您想强制刷新挂载本身时。
# 在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_ passwordalways 如果password参数设置的值与用户当前的加密过的密码字符串不一致,则直接更新用户的密码,默认值即为always ;on_create 如果password参数设置的值与用户当前的加密过的密码字符串不一致,则不会更新用户的密码字符串,保持之前的密码设定

在这里插入图片描述
在这里插入图片描述

Group模块

功能:管理组

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

reboot

功能:全部重启

ansible web -m reboot

Lineinfile模块

ansible在使用sed进行替换时,经常会遇到需要转义的问题,而且ansible在遇到特殊符号进行替换时,存在问题,无法正常进行替换 。
ansible自身提供了两个模块:lineinfile模块和replace模块,可以方便的进行替换一般在ansible当中去修改某个文件的单行进行替换的时候需要使用lineinfile模块。
regexp参数 :使用正则表达式匹配对应的行,当替换文本时,如果有多行文本都能被匹配,则只有最后面被匹配到的那行文本才会被替换,当删除文本时,如果有多行文本都能被匹配,这么这些行都会被删除。
如果想要进行多行匹配进行替换需要使用replace模块。
功能:相当于sed,可以修改文件内容。
关键字

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

将大写的Listen替换成listen
在这里插入图片描述

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替换全部。

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

setup模块

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

在这里插入图片描述

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'
  • 40
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值