收藏文章 楼主

ansible常用模块详解-包含重点:scripts 脚本模块-自动化运维

版块:ansible.playbook.yml   类型:普通   作者:小绿叶技术博客   查看:2244   回复:1   获赞:0   时间:2021-04-06 19:01:21

 a

# ansible 模块语法

ansible-doc -l # 查看 ansible 模块

# wc -l 统计数量


ansible eisc -m command -a "df -h"

# ansible 执行eisc组 

# -m 指定模块名称:command (命令)

# -a 参数 : 执行linux 命令

# -f :定义每次输出内容的数量


#------ 使用 ansiable-vault 加密playbook -----# 

ansible-vault encrypt hello.yml  # 加密playbook

# 加密过的文件无法直接执行和查看


ansible-vault view hello.yml  # 查看加密后的文件

ansible-vault edit hello.yml  # 查看加密后的文件

ansible-vault decrypt hello.yml  # 解密 playbook


#----- Ansible注意事项颜色信息 --------# 

绿色 # 只查看,不修改远程节点

红色 # 操作执行命令有异常

黄色 # 修改远程节点

深紫色 # 表示对命令执行发出警告信息(可能存在的问题,给你提示建议)

FAQ # 当在远端执行shell命令或script脚本报错”找不到对应路径,或文件,即环境变量”时

# 需先加载(source)远端环境变量文件,再执行。例如:

# ansible ALL-SEE -m shell -a "source /home/see/.cshrc" -v -u see -k


# 模块命令

命令模块 # command 适合使用简单的命令, 不支持"<",">","|",";","&"等符号(shell模块支持)


chdir # 进入指定目录,在执行命令前

creates # 判断指定文件是否存在,如果存在,不执行后面的操作

removes # 判断指定文件是否存在,如果存在,执行后面的操作

free_form # 必须要输入一个合理的命令


#------- command -------#

ansible eisc -m command -a "df -h"

# ansible 执行eisc组 

# -m 指定模块名称:command (命令)

# -a 参数 : 执行linux 命令


ansible eisc -m command -a "chdir=/root ls -l"

# chdir 进入目录,列出文件 ,支持空格,但是不支持特殊符号


#----------- shell ----------#


ansible eisc -m shell -a "df -h; ps -u root" 

# 指定模块为 shell 就可以支持 "<",">","|",";","&"等符号


# 脚本模块


#---------  scripts 脚本模块 ---------#

scripts 模块作用 # 在本地执行脚本,  产生所有的动作都在远端主机上执行

# 编写脚本里面添加 yum install -y keepalived  否则远程主机无法接收本地脚本动作


#---------  setup 模块 ---------#

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

# playbook.yml 中 gather_facts: True 的含义就是在远程主机运行setup模块,并将收集的信息记录起来。

这样在后面的playbook里面可以调用并进行一些判断和对照。


模块常用的信息(后续可以直接引用变量)

ansible_all_ipv4_addresses: # 仅显示ipv4的信息

ansible_devices: # 仅显示磁盘设备信息

ansible_distribution: # 显示是什么系统,例:centos,suse等

ansible_distribution_major_version: # 显示是系统主版本

ansible_distribution_version: # 仅显示系统版本

ansible_machine: # 显示系统类型,例:32位,还是64位

ansible_eth0: # 仅显示eth0的信息

ansible_hostname: # 仅显示主机名

ansible_kernel: # 仅显示内核版本

ansible_lvm: # 显示lvm相关信息

ansible_memtotal_mb: # 显示系统总内存

ansible_memfree_mb: # 显示可用系统内存

ansible_memory_mb: # 详细显示内存情况

ansible_swaptotal_mb: # 显示总的swap内存

ansible_swapfree_mb: # 显示swap内存的可用内存

ansible_mounts: # 显示系统磁盘挂载情况

ansible_processor: # 显示cpu个数(具体显示每个cpu的型号)

ansible_processor_vcpus: # 显示cpu个数(只显示总的个数)

ansible_python_version: # 显示python版本


# 文件操作

#----- copy -----#

# 将管理主机上的数据传送给远程主机


src 指定将本地文件

backup no* yes yes 将源文件进行备份

content 在文件中添加信息

dest(required) 复制到目的主机目录

group 文件数据复制到远程主机,设置文件属组用户信息

mode 文件数据复制到远程主机,设置数据的权限 eg 0644 0755

owner 文件数据复制到远程主机,设置文件属主用户信息

remote_src no* yes 如果设置为yes,表示将远程主机上的数据进行移动操作

如果设置为no, 表示将管理主机上的数据进行分发操作


force yes 如果设置为no,表示当远程主机已经存在复制的文件时,不会执行任何操作

如果设置为yes,执行操作覆盖之前的文件


# 案例:

ansible eisc -m copy -a "src=/root/1.txt dest=/root backup=yes "

# 选择 eisc 组,-m 指定copy模块,-a跟上内容: src 本地目录,dest 目的地目录

# backup=yes   将原文件进行备份


ansible eisc -m copy -a "content=测试添加文档  dest=/root/1.txt "

# content 在文件中添加信息


#----- fetch -----#

# 抓取远程文件到管理(本地)上

src(required) # 要获取的远程系统上的文件,必须是文件,而不是目录

dest # 用于保存文件的目录


ansible eisc -m fetch -a "src=/root/222.txt dest=/root"


#----- file -----#

dest/path/name(required) 将数据复制到远程节点的路径信息

group 文件数据复制到远程主机,设置文件属组用户信息

mode 文件数据复制到远程主机,设置数据的权限 eg 0644 0755

owner 文件数据复制到远程主机,设置文件属主用户信息

src 指定将本地管理主机的什么数据信息进行远程复制

recurse no *yes 当要操作的文件为目录,将recurse设置为yes,可以递归的修改目录中文件的属性

state # absent 将数据进行删除

# directory 创建一个空目录信息

# file 查看指定目录信息是否存在

# touch 创建一个空文件信息

# hard/link 创建链接文件


ansible eisc -m file -a "dest=/root/tttttt.txt state=touch" 

# eisc 组,-m 指定模块 file

# -a 内容; dest目的文件,state 文件操作,touch创建,absent 删除


#----  synchronize  ----#

主要用于目录、文件的同步,主要基于rsync命令工具同步目录和文

yum install -y rsync # 需要在所有主机上安装同步工具

# 才能进行同步



compress 开启压缩,默认为开启

archive 是否采用归档模式同步,保证源文件和目标文件属性一致

checksum 是否校验

dirs 以非递归的方式传送目录

links 同步链接文件

recursive 是否递归yes/no

rsync_opts 使用rsync的参数

copy_links 同步的时候是否复制链接

delete 删除源中没有但目标存在的文件,使两边内容一样,以推送方为主

src 源目录及文件

dest 目的文件及目录

dest_port 目标接收的端口

rsync_path 服务的路径,指定rsync在远程服务器上执行

rsync_remote_user 设置远程用户名

–exclude=.log 忽略同步以.log结尾的文件,这个可以自定义忽略什么格式的文件,或者.txt等等都可以,但是由于这个是rsync命令的参数,所以必须和rsync_opts一起使用,比如rsync_opts=--exclude=.txt这种模式

mode push 同步的模式,rsync同步的方式push、pull,默认是推送push,从本机推送给远程主机,pull表示从远程主机上拿文件



# 案例:

ansible eisc -m synchronize -a "src=/www dest=/"

# ansible 选择eisc 组 ; 也可以将eisc改为目的地服务器 IP  ,单独控制指定服务器IP

# -m 指定模块 synchronize 同步模块

# -a 指定内容, src 本地目录。dest同步到目的地

# 注意:是本地的 www 文件夹及其内容整体同步复制过去


ansible 172.25.70.2 -m synchronize -a "src=/tmp dest=/mnt compress=yes delete=yes archive=yes rsync_opts=--exclude=*.txt" 

# 指定服务器 IP 进行同步

# compress=yes表示开启压缩

# delete 表示数据一致

# rsync_opts 同步参数文件权限属性

# exclude  排除文件:删除本地没有但远程主机有的文件

#  排除 .txt结尾文件


#-------- find --------#

#实现在远程主机中查找符合条件的文件,就像find命令一样


paths # 指定目录,paths 可以被 name, path 替代

recurse no/yes # 递归功能,展开子文件夹进行查找

hidden no/yes # 是否查找隐藏文件

file_type file/any/directory/link # 文件类型:文件,文件夹,连接

patterns #  [ˈpætnz] 模式:指定文件名称,支持shell

use_regex no/yes # 是否使用python正则表达式去解析 patterns ,否则使用glob通配符

contains # 根据文章内容查找文件

age # 根据时间范围查找文件:age=3d 为3天前,-3d 三天内,s m h d w : 秒 分 时 天 星期

age_stamp # 文件时间属性三个时间种类:atime、ctime、mtime

size # 根据文件大小查找:size=3M 大于3M    size=-50k 小于50k

get_checksum # 生成校检码


ansible eisc -m find -a 'path=/root contains=".*222.*" '

# ansible eisc 选择eisc组下的主机,-m 指定模块为 find 查找文件;-a 内容

# contains 包含;根据文章的内容包含222字符查找文件


ansible eisc -m find -a 'paths=/root patterns="*.sh" hidden=yes  '

# 查找指定文件,包括隐藏yes


ansible eisc -m find -a "path=/root age=-4d recurse=yes"

# 在查找/root 目录下;  age   -4d 为4天内  ; recurse 展开子文件夹进行查找


ansible eisc -m find -a "path=/root age=-2w age_stamp=atime recurse=yes"

# -2w 为:两个星期内

# age_stamp=atime 时间属性

# recurse 递归


 ansible eisc -m find -a "paths=/root size=2g recurse=yes"

# 查找 大于两G文件


ansible eisc -m find -a "paths=/root patterns=*.sh get_checksum=yes  hidden=yes recurse=yes"

# 模式shell;生成校验码;显示隐藏;展开子文件夹


#------- replace --------#

# 正则表达式替换所有文件中的字符串

path # 指定要操作的文件

regexp # python正则表达式,匹配字符

replace # 替换后的字符

backup no/yes # 修改前备份


 ansible eisc -m replace -a 'path=/root/cs/13.txt regexp="eisc" replace="eisc.cn66666666666" backup=yes'

# 将指定文件匹配字符 eisc 替换为:eisc.cn66666666666

# 并且备份原文件


# 文件内容修改模块


#------- block infile --------#

# blcok Supported parameters include: attributes, backup, block, content, create, delimiter, directory_mode, follow, force, group, insertafter, insertbefore, marker, marker_begin, marker_end, mode, owner, path, regexp, remote_src, selevel, serole, setype, seuser, src, state, unsafe_writes, validate

# 支持的参数包括:属性、备份、块、内容、创建、分隔符、目录模式、跟随、强制、分组、插入后、插入前、标记、标记开始、标记结束、模式、所有者、路径、regexp、remote_src、selevel、serole、setype、seuser、src、state、unsafe_writes、validate "


ansible eisc -m blockinfile -a 'path=/root/cs/11.txt block="service restart sshd\nservice restart httpd"  marker="#{mark} 重启sshd服务" create=yes '

# path指定文件 11.txt 

# block 插入引用的 两行字符串 \n 换行

# marker 自定义注释字符串块标记(开始和结束包围插入的字符串)

# 当标签存在时,不会去新增插入字符串块

# #{mark}  与 marker 成对出现,为固定格式

# #{mark} 与 字符串之间有空格

# create=yes 当文件不存在的时候就创建


ansible eisc -m blockinfile -a 'path=/root/cs/11.txt marker="#{mark} 重启sshd服务" state=absent backup=yes'

# 选择  "重启sshd服务" 块,

# state=absent  并删除块

# 删除标签块之前备份 backup 文件


ansible eisc -m blockinfile -a 'path=/root/cs/11.txt block=" eisc 插入内容可以换行" marker="#{mark} eisc" insertbefore="^touch /root/cs/11.txt" '

# 正则表达式插入字符串,到文件11.txt

# marker 标签块为:eisc


# 安装模块

#------- yum --------#

name(required) # 指定软件名称信息

state # absent/removed 将软件进行卸载(慎用)

# present/installed 将软件进行安装

latest # 安装最新的软件 yum update

 ansible eisc -m yum -a "name=httpd-tools state=installed"



# 服务模块

#------- service -------#

enabled no yes # 设置服务是否开机自启动 如果参数不指定,原有服务开机自启动状态进行保留

name (required) # 设置要启动/停止服务名称

state= # reloaded 平滑重启

# restarted 重启

# started 启动

# stopped 停止


ansible web01 -m service -a "name=crond state=started enabled=yes"


# 挂载模块

fstype 指定挂载的文件系统类型

opts 指定挂载的参数信息

path 定义一个挂载点信息

src 定义设备文件信息

state= absent 会进行卸载,也会修改fstab文件信息

unmounted 会进行卸载,不会修改fstab文件

present 不会挂载,只会修改fstab文件

mounted 会进行挂载,会修改fstab文件


 ansible web01 -m mount -a "src=172.16.1.31:/data/  path=/mnt fstype=nfs state=mounted"



# 定时任务

minute/hour/day/month/weekday 和设置时间信息相关参数

job 和设置定时任务相关参数

name(required) 设置定时任务注释信息

state absent 删除指定定时任务

disabled yes 将指定定时任务进行注释

no 取消注释


ansible eisc -m cron -a "name='ntpdate time' minute=*/5 job='/usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null' "

# 每五分钟同步一次时间


crontab -l # 查看计划任务


ansible eisc -m cron -a "name='ntpdate time' minute=*/5 job='/usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null' disabled=yes"

# 注释计划任务

ansible eisc -m cron -a "name='ntpdate time' minute=*/5 job='/usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null' disabled=no"

# 取消注释


ansible eisc -m cron -a "name='ntpdate time' state=absent"

# 删除计划任务



# 用户模块

# 远程批量创建用户组信息


#-------- group ---------#

gid # 指创建的组ID信息

name # 指创建组名称信息

state= # absent 删除指定的用户组

# present 创建指定的用户组


ansible web01 -m group -a "name=dkaiyun gid=1055"

# 创建一个指定的用户组dkaiyun gid=1055

ansible web01 -m group -a "dkaiyun gid=1055 state=absent"

# 删除一个指定的用户组dkaiyun gid=1055


#-------- user ---------#

# password设置密码时不能使用明文方式,只能使用密文方式

password 请输入密码信息

name 指定用户名信息

uid 指定用户uid信息

group 指定用户主要属于哪个组

groups 指定用户属于哪个附加组信息

shell /bin/bash或/sbin/nologin 指定是否能够登录

create_home yes/no 是否创建家目录信息

home 指定家目录创建在什么路径 默认/home


ansible 172.25.70.1 -m user -a "name=lcl home=/tmp/"

ansible 172.25.70.1 -m user -a "name=lcl home=/tmp/ shell=/sbin/nologin"


ansible 172.25.70.1 -m user -a "name=lcl state=absent force=yes"

# state=absent表示删除用户



# 压缩模块

src 源压缩包路径

dest 压缩包解压后存放路径

copy yes yes:本地压缩,no:远程压缩

mode 解压后的目录/文件权限

creates 指定一个文件名,当该文件存在时,则解压指令不执行

group 解压后的目录或文件的属组

owner 解压后文件或目录的属主



该模块有两种用法:

将ansible主机上的压缩包在本地解压缩后传到远程主机上,这种情况下,copy=yes. 本地解压缩,解压缩位置不是默认的目录,没找到或传完删了 后传到远程主机

将远程主机上的某个压缩包解压缩到指定路径下。这种情况下,需要设置copy=no 远程主机上面的操作,不涉及ansible服务端


ansible  webservers -m unarchive -a ‘src=/root/nginx.tar.gz  dest=/opt/ group=www ower=www mode=777 ’



ansible 10.4.7.7 -m unarchive -a "src=/opt/src/apache-tomcat-8.5.53.tar.gz dest=/opt copy=yes mode=0755"

# 将本地的压缩文件解压后传到远程主机


ansible 10.4.7.7 -m unarchive -a "src=/opt/src/apache-tomcat-8.5.53.tar.gz dest=/opt copy=no mode=0755"

# 将远程主机的压缩文件解压









#


提供企业建站服务,免费网防系统,提交信息登录 http://yundun.ddoss.cn 邮箱: proposal@ddoss.cn 
回复列表
默认   热门   正序   倒序

回复:ansible常用模块详解-包含重点:scripts 脚本模块-自动化运维

头像

用户名:

粉丝数:

签名:

资料 关注 好友 消息