栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

ansible的常用模块

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

ansible的常用模块

ansible的常用模块
  • 一、ansible Ad-Hoc命令集
  • 二、ansible的命令参数
  • 三、ansible的常用模块
    • 1、command模块
    • 2、shell模块、script模块
    • 3、copy模块、fetch模块
    • 4、file模块
    • 5、archive模块、unarchive模块
    • 6、hostname模块、cron模块
    • 7、yum_repository模块、yum(dnf)模块
    • 8、service模块、firewalld模块
    • 9、user模块、group模块
    • 10、lineinfile模块、replace模块
    • 11、setup模块、debug模块

一、ansible Ad-Hoc命令集

1、ansible提供两种方式去完成任务,一是 Ad-Hoc 命令,一是写 ansible playbook。
2、Ad-Hoc更注重于解决一些简单或者平时工作中临时遇到的任务,相当于Linux系统命令行下的Shell命令,后者更适合于解决复杂或需固化下来的任务,相当于Linux系统的Shell scripts。
3、Ad-Hoc 使用场景:
(1)关闭所有不必要的服务器
(2)临时更新Apache或Nginx的配置文件
4、ansible的并发特性
Ansible和Ansible-playbook默认会fork 5个线程并发执行命令,如果同时操作的主机数比较多的话,可以调整到一个更大的值,用-f指定线程数。

ansible webserver -m ping -f 6

5、ansible提供了类似于man功能的help说明工具ansible-doc,ansible-doc用法:

显示所有可用模块ansible-doc -l
列出指定模块ansible-doc 模块名称
简要列出指定模块ansible-doc -s 模块名称
ansible-doc -l | grep shell
ansible-doc -l | wc -l
ansible-doc ping
ansible-doc -s shell


二、ansible的命令参数
参数功能
-i指定hosts文件路径,默认在/etc/ansible/hosts
-m指定使用的module名称,默认command模块
-a指定模块参数
-k(小写)提示输入ssh密码,并非基于ssh密钥认证
-K(大写)提示输入sudo密码
-b使用sudo执行命令
-become-user=指定sudo的用户
-f,-forks=NUMNUM默认是整数5,指定fork开启同步进程的个数
-u指定远程主机的执行用户
-v详细模式,如果执行成功,输出详细结果,-vv -vvv更详细过程
-C预执行检测
-T执行命令的超时时间,默认10s
--list显示主机列表,也可以用--list-hosts
--version显示版本

ansible的基本颜色代表

绿色执行成功但未对远程主机做任何改变
黄色执行成功并对远程主机做改变
红色执行失败
三、ansible的常用模块
  • 以下实验的配置文件如下
1、command模块

在远程主机执行命令,此模块为默认模块

常用参数功能
chdir执行命令前先进入到指定目录
cmd运行命令指定
creates如果文件存在将不运行
removes如果文件存在将运行
ansible demo -m command -a "useradd lee"
ansible demo -m command -a "chdir=/mnt touch file1 file2"
ansible demo -m command -a "chdir=/mnt creates=/mnt/file1 rm -fr file1"
ansible demo -m command -a "chdir=/mnt removes=/mnt/file2 rm -fr file2"

file1未被删除,file2被删除
Linux中的很多通配符在command模块中不支持

2、shell模块、script模块

(1)shell模块
shell模块与command模块类似

常用参数功能
chdir执行命令前先进入到指定目录
cmd运行命令指定
creates如果文件存在将不运行
removes如果文件存在将运行
executable指定执行环境,默认为sh
ansible demo -m shell -a "chdir=/mnt/ touch test{1..3}"
ansible demo -m shell -a "ps ax | grep $$"
ansible demo -m shell -a "executable=/bin/bash ps ax | grep $$"

shell模块支持通配符
echo $$:输入当前会话的进程号
(2)script模块
在ansible主机中写好的脚本在受控主机中执行

vim test.sh
ansible demo -m script -a "test.sh"

3、copy模块、fetch模块

(1)copy模块
从ansible主机复制文件到受控主机

参数功能
src源文件
dest目的地文件
owner指定目的地文件所有人
group指定目的地文件所有组
mode指定目的地文件权限
backup=yes当受控主机中存在文件时备份原文件
content指定文本内容直接在受控主机中生成文件

1> 复制当前目录的test.sh到受控主机的/mnt下,文件所有人为lee,权限为755

ansible demo -m copy -a "src=test.sh dest=/mnt/ owner=lee mode=755"

2> 在ansible主机上修改文件内容,开启备份,再次发送

ansible demo -m copy -a "src=test.sh dest=/mnt/ owner=lee mode=755 backup=yes"

3> 直接输入文件内容,在受控主机上生成文件

ansible demo -m copy -a "content='hello linuxnhello leen' dest=/mnt/testfile owner=lee mode=600"

(2)fetch模块
从受控主机把文件复制到ansible主机,但不支持目录

参数功能
src受控主机的源文件
dest本机目录
flat基本名称功能,单纯只要文件,不要路径的层层目录

查看受控主机的网卡配置文件

ansible demo -m fetch -a "src=/etc/sysconfig/network-scripts/ifcfg-eth0 dest=/home/skk/ansible/ flat=yes"

4、file模块

设置文件的属性

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

1> 建立递归目录和文件

ansible demo -m file -a "path=/mnt/westos/file state=directory"
ansible demo -m file -a "path=/mnt/westos/file/123456 state=touch"

2> 递归更改

ansible demo -m file -a " path=/mnt/westos group=devops recurse=yes"

3> 建立软连接

ansible demo -m file -a "src=/mnt/testfile dest=/mnt/link state=link"

5、archive模块、unarchive模块

(1)archive模块——压缩

参数功能
path打包目录名称
dest声称打包文件名称
format打包格式
owner指定文件所属人
mode指定文件权限
ansible demo -m archive -a "path=/mnt dest=/mnt/mnt.tar.gz format=gz owner=lee mode=700"


(2)unarchive模块——解压缩

copy默认为yes,从ansible主机复制文件到受控主机
设定为no,从受控主机中寻找src源文件
remote_src功能同copy且相反
设定为yes表示包在受控主机
设定为no表示包在ansible主机
src压缩文件的路径
dest受控主机目录
mode解压后文件的权限

1> 压缩文件在ansible主机

tar zcf etc.tar.gz /etc/
ansible demo -m unarchive -a "src=etc.tar.gz dest=/mnt owner=devops copy=yes"

2> 压缩文件在受控主机中

ansible demo -m unarchive -a "src=/mnt/mnt.tar.gz dest=/mnt/westos owner=lee remote_src=yes"

6、hostname模块、cron模块

(1)hostname模块
管理主机名称
常用参数:name:指定主机名称

ansible demo -m hostname -a "name=skk.linux.com"

(2)cron模块
计划任务

minute分钟
hour小时
day
month
weekday
name任务名称
job任务脚本或命令
disabledyes禁用计划任务
no启动计划任务
stateabsent删除计划任务

1> 创建计划任务

ansible demo -m cron -a 'job="echo hello world" name=test minute=*/2'

2> 取消计划任务

ansible demo -m cron -a 'job="echo hello world" name=test minute=*/2 disabled=yes'


3> 删除计划任务

ansible demo -m cron -a 'job="echo hello world" name=test minute=*/2 state=absent'

7、yum_repository模块、yum(dnf)模块

(1)yum_repository模块
配置系统软件仓库源文件

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

1> 删除原有网络仓库

ansible demo -m yum_repository -a "name=dvd state=absent"

2> 创建网络仓库

ansible demo -m yum_repository -a "file=skk name=skk description=yum_repo baseurl=http://172.25.36.250/rhel7.6 enabled=yes gpgcheck=0"

(2)yum(dnf)模块
管理系统中的yum(dnf)仓库及管理软件(rhrl7中为yum,rhel8中为dnf)

参数功能
name指定包
state指定动作
present:安装
latest:更新
absent:删除
list列出指定信息
httpd、installed、all、available
disable_gpg_check禁用gpgkey检测
enablerepo指定安装包来源
disablerepo禁用安装包来源
autoremoveyes:移除依赖性
no:不移除依赖性

1> 安装软件

ansible demo -m yum -a 'name="httpd,gcc" state=present'

2> 卸载时不移除依赖性

ansible demo -m yum -a 'name="httpd,gcc" state=absent autoremove=no'

8、service模块、firewalld模块

(1)service模块
管理系统服务状态

参数功能
name指定服务名称
state指定对服务的动作
started、stoped、restarted、reloaded
enabled设定开机是否启动
yes开机启动;no开机不启动
ansible demo -m service -a "name=httpd state=started enabled=yes"

但此时无法访问web页面,因为还有firewalld的限制

(2)firewalld模块

参数功能
zone火墙的域
service服务名称
permanent永久生效
stateenabled:允许
disabled:拒绝
immediate立即生效

先开启firewalld,再设定允许http服务

ansible demo -m service -a "name=firewalld state=started enabled=yes
ansible demo -m firewalld -a 'zone=public service=http permanent=yes state=enabled immediate=yes'

现在就可以访问

9、user模块、group模块

(1)group模块
管理远程主机上的组

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

建立组

ansible demo -m group -a "name=linux gid=666 state=present"


(2)user模块
管理远程主机上的用户,比如创建用户、修改用户、删除用户、为用户创建密钥对等操作

name必须参数,指定要操作的用户名称
group指定用户所在基本组
groups指定用户所在附加组
append指定添加附加组默认组为no
shell指定用户的默认shell
uid指定用户的uid号
comment指定用户的注释信息
state用于指定用户是否存在于远程主机
present:建立
absent:删除
remove当删除用户时删除用户家目录,默认值为no
password指定用户的密码,但密码为明文
用openssl password -6 '密码'生成加密字符
generate_ssh_key生成sshkey

1> 建立用户,设定gid、group、groups、注释、shell方式

ansible demo -m user -a 'name=skk group=lee groups=apache append=yes comment="测试用户" shell=/bin/sh uid=581'


2> 加密方式给予密码
openssl passwd -6只能在rhel8中使用

openssl passwd -6
ansible demo -m user -a 'name=skk uid=581 password="  "'


10、lineinfile模块、replace模块

(1)lineinfile模块
文件内容管理

path指定要操作的文件
line指定文本内容,“|+”表示格式化输入
regexp使用正则表达式匹配对应的行
替换文本时,如果有多行文本都能被匹配,则只有最后面被匹配到的文本才被替换
当删除文本时,如果有多行文本都能被匹配,那么这些行都会被删除
statestate的默认值为present
当想要删除对应的文本时需要将state参数的值设置为absent
backrefs默认值为no,当为yes时表示当内容无匹配规则时不对文件做任何更改,还有向后引用regexp变量信息的作用
insertafter将文本插入到“指定的行”之后,参数的值可以设置为EOF或者正则表达式
insertbefore将文本插入到“指定的行”之前,参数的值可以设置为BOF或者正则表达式
backup是否在修改文件之前对文件进行备份
create当要操作的文件并不存在时,是否创建对应的文件

1> 创建文件并书写内容

ansible demo -m lineinfile -a 'path=/mnt/testfile line="hello linuxnhello westos" create=yes'


2> 替换以hello开头的行,会替换最后匹配到的

ansible demo -m lineinfile -a 'path=/mnt/testfile regexp="^hello" line="1234 linux"'

3> backrefs的使用

backrefs:
当backrefs默认为no时,如果regex没有匹配到行,则添加一行(要添加的行已存在时不会添加),如果regexp匹配到行,则修改该行;
当backrefs为yes时,如果regex没有匹配到行,则保持原文件不变,如果regexp匹配到行,则修改该行

默认为no,没匹配到时会自动添加一行

ansible demo -m lineinfile -a 'path=/mnt/testfile regexp="westos" line="hello westos"'

当设定为yes时,没有匹配到时不会添加

ansible demo -m lineinfile -a 'path=/mnt/testfile regexp="skk" line="4567890" backrefs=yes'


4> 匹配更换
/2:匹配第二个()匹配到的内容

ansible demo -m lineinfile -a 'path=/mnt/testfile regexp="(h.{4}).*(l.{4})" line="2" backrefs=yes'

5> 头尾插入

ansible demo -m lineinfile -a 'path=/mnt/testfile line="==begin==" insertbefore=BOF'
ansible demo -m lineinfile -a 'path=/mnt/testfile line="++end++" insertafter=EOF'

(2)replace模块
根据指定的正则表达式替换文件中的字符串,文件中所有被匹配到的字符串都会被替换

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

将linux替换成LINUX,并将原文件备份

ansible demo -m replace -a 'path=/mnt/testfile regexp="westos" replace="WESTOS" backup=yes'

11、setup模块、debug模块

(1)setup模块
收集远程主机的一些基本信息
常用参数:
filter:用于进行条件过滤,如果设置,仅返回匹配过滤条件的信息

ansible demo -m setup  ##收集远程主机的所有信息
ansible demo -m setup -a "filter=ansible_all_ipv4_addresses"



(2)debug模块
调试模块,用于在调试中输出信息

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

设定debug的级别

ansible demo -m debug -a 'msg="hello linux"'
ansible demo -m debug -a 'msg="hello linux" verbosity=0'

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/450501.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号