# 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
程序员
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元/年,点击进去看看吧>>>)
版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除