程序员

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

作者:admin 2021-04-12 我要评论

# ansible 模块语法ansible-doc -l # 查看 ansible 模块 # wc -l 统计数量ansible eisc -m command -a df -h # ansible 执行eisc组 # -m 指定模块名称:command ...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)
# 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"
                                                                        # 将远程主机的压缩文件解压
我的博客即将同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=41b8tsrv4mry                                                       

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • 四两拨千斤——你不知道的VScode编码Ty

    四两拨千斤——你不知道的VScode编码Ty

  • 我是如何在 Vue 项目中做代码分割的

    我是如何在 Vue 项目中做代码分割的

  • position:sticky 粘性定位的几种巧妙应

    position:sticky 粘性定位的几种巧妙应

  • 从零到一搭建React组件库

    从零到一搭建React组件库

腾讯云代理商
精彩导读
海外云服务器
热门资讯
腾讯云代理商