Ansible中常用模块

目录

一、Ansible实现管理的方式

二、Ad-Hoc执行方式中如何获得帮助​​​​​​​

三、Ansible命令运行方式及常用参数

四、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 利用ansible命令直接完成管理,主要用于临时命令使用场景

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

二、Ad-Hoc执行方式中如何获得帮助

复制代码
ansible-doc 显示模块帮助的指令
格式
ansible-doc [参数] [模块...]

常用参数
-l   列出可用模块
-s   显示指定模块的playbook片段

vim test.yml
cat test.yml
ansible-playbook test.yml

复制代码
ansible-doc
ansible-doc -l | wc -l
ansible-doc -l | grrep shell

三、Ansible命令运行方式及常用参数

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

四、Ansible的基本颜色代表信

| |
|----|------------------|
| 绿色 | 执行成功但未对远程主机做任何改变 |
| 黄色 | 执行成功并对远程主机做改变 |
| 红色 | 执行失败 |

五、Ansible中的常用模块

1、command模块

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

常用参数 功能
chdir 执行命令前先进入到指定目录
cmd 运行命令指定
creates 如果文件存在将不运行
removes 如果文件存在将运行
复制代码
ansible all -m command -a 'chdir=/mnt pwd'
ansible all -m command -a 'chdir=/mnt cmd=pwd'
ansible all -m command -a 'chdir=/mnt  creates=/etc/passwd cat passwd'
ansible all -m command -a 'chdir=/mnt  removes=/etc/passwd cat passwd'
ansible all -m command -a 'chdir=/mnt  removes=/mnt/file cat passwd'

ansible all -m command -a 'chdir=/mnt touch file'
ansible all -m command -a 'chdir=/mnt  creates=/mnt/file pwd'
ansible all -m command -a 'chdir=/mnt  removes=/mnt/file pwd'

注意

Linux中的很多通配符在command模块中不支持

复制代码
ansible all -m command -a "chdir=/mnt touch file{1..10}"

2、shell模块、script模块

(1)shell模块

shell模块与command模块类似

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

(2)script模块

在ansible主机中写好的脚本在受控主机中执行

复制代码
vim test.sh
cat test.sh
ansible all -m script -a "test.sh"
ansible all -m shell -a 'chdir=/mnt/ ls -lR /mnt'

3、copy模块、fetch模块

(1)copy模块

从ansible主机复制文件到受控主机

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

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

复制代码
ansible all -m copy -a 'src=test.sh dest=/mnt/ owner=yyl mode=755'
ansible all -m shell -a 'chdir=/mnt/ ls -lR /mnt'

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

复制代码
ansible all -m copy -a 'src=test.sh dest=/mnt/ owner=yyl mode=755 backup=yes'
ansible all -m shell -a 'chdir=/mnt/ ls -lR /mnt'

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

复制代码
ansible all -m copy -a "content='hello westos\nhello linux\n' dest=/mnt/test.sh owner=yyl mode=755"
ansible all -m shell -a 'chdir=/mnt/ ls -lR /mnt '

(2)fetch模块

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

参数 功能
src 受控主机的源文件
dest 本机目录
flat 基本名称功能,单纯只要文件,不要路径的层层目录
复制代码
ansible all -m fetch -a "src=/mnt/test.sh dest=/home/ale/.ansible"
复制代码
ansible all -m fetch -a "src=/mnt/test.sh dest=/home/ale/.ansible/ flat=yes"

4、file模块

设置文件的属性

参数 功能
path 指定文件名称
state 指定操作状态 touch:建立 absent:删除 directory:递归目录 link:建立软链接 hard:建立硬链接
mode 设定权限
owner 设定文件用户
group 设定文件组
src 源文件
dest 目标文件
recurse=yes 递归更改
复制代码
ansible all -m shell -a 'rm -fr /mnt/*'
ansible all -m shell -a 'chdir=/mnt/ ls -lR /mnt '

创建test.sh文件

复制代码
ansible all -m file -a 'path=/mnt/test.sh state=touch'
ansible all -m shell -a 'chdir=/mnt/ ls -lR /mnt '

删除

复制代码
ansible all -m file -a 'path=/mnt/test.sh state=absent'
ansible all -m shell -a 'chdir=/mnt/ ls -lR /mnt '

创建目录

复制代码
ansible all -m file -a 'path=/mnt/westos state=directory'
ansible all -m shell -a 'chdir=/mnt/ ls -lR /mnt '
复制代码
ansible all -m file -a 'path=/mnt/westos/file1 state=touch'
ansible all -m shell -a 'chdir=/mnt/ ls -lR /mnt '

递归更改目录权限

复制代码
ansible all -m file -a 'path=/mnt/westos state=directory mode=777 recurse=yes'
ansible all -m shell -a 'chdir=/mnt/ ls -lR /mnt '

软连接

复制代码
ansible all -m file -a 'src=/mnt/file dest=/mnt/yyl state=link'
ansible all -m shell -a 'chdir=/mnt/ ls -lR /mnt '

硬链接

复制代码
ansible all -m file -a 'src=/mnt/file dest=/mnt/yyl1 state=hard'
ansible all -m shell -a 'chdir=/mnt/ ls -lR /mnt '

5、archive模块、unarchive模块

(1)archive模块------压缩

参数 功能
path 打包目录名称
dest 声称打包文件名称
format 打包格式
owner 指定文件所属人
mode 指定文件权限
复制代码
ansible all -m archive -a "path=/mnt dest=/mnt/mnt.tar.gz format=gz owner=yyl mode=700"
ansible all -m shell -a 'chdir=/mnt/ ls -lR /mnt '

(2)unarchive模块------解压缩

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

复制代码
tar zcf ansible.tar.gz  .
ls
ansible all -m unarchive -a 'src=./ansible.tar.gz dest=/mnt copy=yes'
ansible all -m shell -a 'chdir=/mnt/ ls -lR /mnt '

提前在vm1,2上压缩一个不被限制的gz包

复制代码
ansible all -m unarchive -a 'src=/mnt/file.tar.gz  dest=/mnt copy=no'
ansible all -m shell -a 'chdir=/mnt/ ls -lR /mnt '

6、hostname模块、cron模块

(1)hostname模块

管理主机名称

常用参数:name:指定主机名称

复制代码
ansible 192.168.67.112 -m hostname -a 'name=vm22'
ansible 192.168.67.112 -m shell -a 'hostname'
ansible 192.168.67.112 -m hostname -a 'name=vm1'
ansible 192.168.67.112 -m shell -a 'hostname'

(2)cron模块

计划任务

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

创建计划任务

复制代码
ansible all -m cron -a 'job="echo hello world" name=test hour=0  minute=0'
cd /var/spool/cron/  ls
cat root 
crontab -l

取消计划任务

复制代码
ansible all -m cron -a 'job="echo hello world" name=test hour=0  minute=0 disabled=yes'
crontab -l

删除计划任务

复制代码
ansible all -m cron -a 'job="echo hello world" name=test hour=0  minute=0 state=absent'
crontab -l

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

(1)yum_repository模块

配置系统软件仓库源文件

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

创建网络仓库

复制代码
ansible all -m yum_repository -a 'file=test name=test description=test baseurl=file:///test gpgcheck=0 '
ansible all -m shell -a 'cat /etc/yum.repos.d/test.repo'

删除网络仓库

复制代码
ansible all -m yum_repository -a 'name=test state=absent'
ansible all -m shell -a 'cat /etc/yum.repos.d/test.repo'
ansible all -m shell -a 'ls /etc/yum.repos.d/'

(2)yum(dnf)模块

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

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

安装软件

复制代码
ansible all -m yum -a 'list=vsftpd'
ansible all -m yum -a 'name=vsftpd state=present'
ansible all -m yum -a 'name=vsftpd state=absent'
rpm -aq | grep   vsftpd

8、service模块、firewalld模块

(1)service模块

管理系统服务状态

参数 功能
name 指定服务名称
state 指定对服务的动作 startedstopedrestartedreloaded
enabled 设定开机是否启动 yes开机启动;no开机不启动
复制代码
ansible all -m service -a 'name=firewalld state=started enabled=yes'
ansible all -m shell -a 'systemctl status firewalld.service'
ansible all -m service -a 'name=firewalld state=stopped enabled=no'

(2)firewalld模块

参数 功能
zone 火墙的域
service 服务名称
permanent 永久生效
state enabled:允许 disabled:拒绝
immediate 立即生效
复制代码
ansible all -m firewalld -a 'zone=public service=ftp permanent=yes state=enabled immediate=yes'
firewall-cmd --list-all

9、user模块、group模块

(1)group模块

管理远程主机上的组

name 指定要操作的组名称
state 指定组的状态 present:建立 absent:删除
gid 指定组的gid
复制代码
ansible all -m group -a 'name=test state=present gid=8888'
ansible all -m shell -a 'tail -n 3 /etc/group'
复制代码
ansible all -m group -a 'name=test state=absent'
ansible all -m shell -a 'tail -n 3 /etc/group'

(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
复制代码
ansible all -m user -a 'name=test state=present group=1000 groups=yyl'
ansible all -m shell -a 'id test'

复制代码
ansible all -m user -a 'name=test password=$1$XkdUyGyt$Mj8pk2V5kTs9M7Xoa42Hk/'
tail -n 3 /etc/shadow
ssh test@localhost

复制代码
ansible all -m user -a 'name=test state=absent remove=yes'
ansible all -m shell -a 'id test'

10、lineinfile模块、replace模块

(1)lineinfile模块

文件内容管理

path 指定要操作的文件
line 指定文本内容,`"
regexp 使用正则表达式匹配对应的行 替换文本时,如果有多行文本都能被匹配,则只有最后面被匹配到的文本才被替换 当删除文本时,如果有多行文本都能被匹配,那么这些行都会被删除
state state的默认值为present 当想要删除对应的文本时需要将state参数的值设置为absent
backrefs 默认值为no,当为yes时表示当内容无匹配规则时不对文件做任何更改,还有向后引用regexp变量信息的作用
insertafter 将文本插入到"指定的行"之后,参数的值可以设置为EOF或者正则表达式
insertbefore 将文本插入到"指定的行"之前,参数的值可以设置为BOF或者正则表达式
backup 是否在修改文件之前对文件进行备份
create 当要操作的文件并不存在时,是否创建对应的文件
复制代码
ansible all -m lineinfile -a 'path=/mnt/file line="hello yyl\nhello linux\nhello ale" create=yes'
ansible all -m shell -a 'cat /mnt/file'
复制代码
ansible all -m lineinfile -a 'path=/mnt/file line="haha ale" regexp="ale"'
ansible all -m shell -a 'cat /mnt/file'
复制代码
ansible all -m lineinfile -a 'path=/mnt/file  regexp="ale" state=absent'
ansible all -m shell -a 'cat /mnt/file'
复制代码
ansible all -m lineinfile -a 'path=/mnt/file  regexp="haha" line="haha ale"'
ansible all -m shell -a 'cat /mnt/file'
复制代码
ansible all -m lineinfile -a 'path=/mnt/file  regexp="haha" line="haha ale" backrefs=yes'
ansible all -m shell -a 'cat /mnt/file'
复制代码
ansible all -m lineinfile -a 'path=/mnt/file regexp="(h.{4}).*(l.{4})" line="\1" backrefs=yes'
ansible all -m shell -a 'cat /mnt/file'
复制代码
ansible all -m lineinfile -a 'path=/mnt/file line="####begin####" insertbefore=BOF'
ansible all -m lineinfile -a 'path=/mnt/file line="#####end#####" insertbefore=EOF'
ansible all -m shell -a 'cat /mnt/file'

(2)replace模块

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

path 指定要操作的文件
regexp 指定一个正则表达式,文件中与正则匹配的字符串将会被替换
replace 指定最终要替换成的字符串
backup 是否在修改文件之前对文件进行备份
复制代码
ansible all -m replace -a 'path=/mnt/file regexp="yyl" replace="YYL"'
ansible all -m shell -a 'cat /mnt/file'

11、setup模块、debug模块

(1)setup模块

收集远程主机的一些基本信息

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

复制代码
ansible all -m setup -a "filter='ansible_all_ipv4_addresses'"

(2)debug模块

调试模块,用于在调试中输出信息

msg 调试输出的消息
var 将某个任务执行的输出作为变量传递给debug模块,debug会直接将其打印输出
verbosity debug的级别(默认是0级,全部显示)
复制代码
ansible all -m debug -a 'msg="hello yyl"'
ansible all -m debug -a 'msg="hello yyl" verbosity=0'
相关推荐
草莓熊Lotso5 小时前
Linux 文件描述符与重定向实战:从原理到 minishell 实现
android·linux·运维·服务器·数据库·c++·人工智能
历程里程碑5 小时前
Linux22 文件系统
linux·运维·c语言·开发语言·数据结构·c++·算法
七夜zippoe13 小时前
CANN Runtime任务描述序列化与持久化源码深度解码
大数据·运维·服务器·cann
Fcy64815 小时前
Linux下 进程(一)(冯诺依曼体系、操作系统、进程基本概念与基本操作)
linux·运维·服务器·进程
袁袁袁袁满15 小时前
Linux怎么查看最新下载的文件
linux·运维·服务器
代码游侠15 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
Harvey90315 小时前
通过 Helm 部署 Nginx 应用的完整标准化步骤
linux·运维·nginx·k8s
珠海西格电力科技17 小时前
微电网能量平衡理论的实现条件在不同场景下有哪些差异?
运维·服务器·网络·人工智能·云计算·智慧城市
释怀不想释怀17 小时前
Linux环境变量
linux·运维·服务器
zzzsde17 小时前
【Linux】进程(4):进程优先级&&调度队列
linux·运维·服务器