代码语言:javascript复制
# 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 sshdnservice 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