自动化运维Ansible之常用模块
0、Ansible模块语法
在ansible中是指需要快速执行一条命令,并且不需要保存的命令,对于复杂的命令则为playbook
查看模块帮助:ansible-doc -l
// 统计模块数量
$ ansible-doc -l |wc -l
3387 // ansible有大量的模块
Ansible模块语法:
ansible [管理主机信息或者主机组信息] -m [模块名称] -a [相关模块参数]
主机信息:远程主机IP地址;远程主机组名称;远程所有主机all
-m:指定相应模块
-a:利用模块中某些参数功能
-f :定义每次输出内容的数量
Ansible注意事项颜色信息:
绿色:对远程节点不进行相应修改,或者只是对远程节点信息进行查看
红色:操作执行命令有异常
黄色:对远程节点进行相应修改
深紫色:表示对命令执行发出警告信息(可能存在的问题,给你提示建议)
1、Command模块
command模块的作用:默认模块,在远程主机执行命令
;默认模块,可忽略-m选项
// chaidr 先切换到特定的目录,然后在执行命令
[root@m01 ~]# ansible 10.4.7.8 -m command -a "chdir=/tmp/ pwd"
// creates 判断一个文件是否存在。文件如果存在,后面命令则不会执行;如果不存在,则执行
[root@m01 /]# ansible 10.4.7.8 -m command -a "creates=/etc/rsyncd.conf hostname"
// removes 判断一个文件是否存在。文件如果存在,后面命令执行;如果不存在,则不执行
[root@m01 /]# ansible 10.4.7.8 -m command -a "removes=/etc/exports hostname"
// fress_form 使用command模块批量获取执行hostname命令
[root@m01 /]# ansible sa -m command -a "hostname"
该command模块无法和shell一样,像$HOME变量,和一些像 "<", ">", "|", ";" and "&" 这样的操作是没有办法执行(如果要支持这些特殊符号就必须要使用shell模块)错误的演示:
[root@m01 /]# ansible sa -m command -a "hostname;date"
2、Shell模块
shell模块作用:shell模块是万能模块
,可以满足command模块所有功能,并且可以支持识别特殊字符
。
// 在10.4.7.8的机器的当前目录下执行ls和pwd命令
[root@m01 /]# ansible 10.4.7.8 -m shell -a "ls;pwd"
3、Scripts模块
scripts模块作用:专门运行脚本模块
,在本地执行脚本,脚本产生所有的动作都在远端主机上执行
// 编写脚本,里面添加yum安装keepalived命令,将脚本执行命令放入到受控端执行
[root@m01 ~]# cat /server/scripts/yum.sh
#!/bin/bash
yum install -y keepalived
[root@m01 ~]# ansible 10.4.7.8 -m script -a "/server/scripts/yum.sh"
[root@m01 ~]# ansible 10.4.7.8 -m shell -a "rpm -qa keepalived"
注意:我们在管理机器上执行的脚本,远端(受控端)是不需要存在该脚本
4、Copy模块
copy模块作用:将文件从本地或远程机器复制到远程机器上
的某个位置
// 将本端的/etc/hosts文件推送到远端,并且重命名为test.txt
[root@m01 ~]# ansible sa -m copy -a "src=/etc/hosts dest=/tmp/test.txt"
// 本端在/tmp/下创建文件file01.txt,推送到远端
[root@m01 ~]# touch /tmp/file01.txt
[root@m01 ~]# ansible 10.4.7.7 -m copy -a "src=/tmp/file01.txt dest=/tmp/"
// 为本端的/tmp/file01.txt文件追加内容,并推送到远端,覆盖时备份原文件
[root@m01 ~]# cat /tmp/file01.txt
[root@m01 ~]# echo 123456 >/tmp/file01.txt
[root@m01 ~]# cat /tmp/file01.txt
123456
[root@m01 ~]# ansible 10.4.7.7 -m copy -a "src=/tmp/file01.txt dest=/tmp/ backup=yes"
// 在/root/下创建test.txt文件,在复制的时候修改属主和属组为root,权限644
[root@m01 ~]# ansible 10.4.7.7 -m copy -a "src=/root/test.txt dest=/test/oldboy/ owner=root group=root mode=644"
// 为对端的/tmp/test.txt文件写入内容“1”
[root@m01 ~]# ansible 10.4.7.7 -m copy -a "content='1' dest=/tmp/test.txt"
参数
- backup # 对推送传输过去的文件,进行备份
- src # 推送数据的源文件信息
- dest # 推送数据的目标路径
- content # 直接批量在被管理端文件中添加内容
- owner # 将本地文件推送到远端,指定文件属主权限
- group # 将本地文件推送到远端,指定文件属组权限
- mode # 将本地文件推送到远端,指定文件权限信息
5、File模块
file模块作用:对受控端的文件属性修改/目录创建/文件创建
// 为远端主机修改/tmp/file01.txt文件的属主和属组为root,权限为600
[root@m01 ~]# ansible 10.4.7.7 -m file -a "path=/tmp/file01.txt owner=root group=root mode=600"
// 为远端主机创建文件和目录,远程创建文件/tmp/file01.txt
[root@m01 ~]# ansible 10.4.7.7 -m file -a " path =/tmp/file01.txt state=touch"
// 远程创建目录/tmp/dir01
[root@m01 ~]# ansible 10.4.7.7 -m file -a "path =/tmp/dir01 state=directory"
// 递归修改远端主机的/data目录及目录下的所有文件的属主和属组都为root
[root@m01 /]# ansible 10.4.7.7 -m file -a "path=/data state=directory owner=root group=root recurse=yes"
模块参数
- path # 指定远程主机目录或文件信息
- recurse # 递归授权:
yes # 递归修改权限
no # 不递归修改权限(默认)
- state # 指定需要执行的动作:
directory # 在远端创建目录
touch # 在远端创建文件
hard # 硬链接
link #软链接
6、Yum模块
yum模块作用:可以对受控端执行yum安装
,卸载和查看软件包
等
// yum安装iftop软件包
[root@m01 ~]# ansible 10.4.7.7 -m yum -a "name=iftop state=installed"
// 移除iftop软件
[root@m01 ~]# ansible 10.4.7.7 -m yum -a "name=iftop state=absent"
// 查看指定软件包名的列表
[root@m01 ~]# ansible 10.4.7.7 -m yum -a "list=iftop"
模块参数
- name # 执行要安装软件的名称,以及软件的版本
- state # 指定需要执行的动作:
installed、present # 安装软件包
latest # 安装最新软件包
removed、absent # 移除软件包
- list # 指定软件名称,查看软件是否已经安装了
7、Service模块
service模块作用:管理服务状态模块
,对受控端进行服务的管理
// 将远端的crond服务关闭,并且开机不启动
[root@m01 ~]# ansible 10.4.7.7 -m service -a "name=crond state=stopped enabled=no"
// 将远端的crond服务开启,并且开机自启动
[root@m01 ~]# ansible 10.4.7.7 -m service -a "name=crond state=started enabled=yes"
模块参数
- name # 指定需要管理的服务名称(管理的服务一定在chkconfig中可以看到)
- state # 指定需要执行的动作:
started # 启动服务
reloaded # 平滑重启
restarted # 重启服务
stopped # 停止服务
running # 运行(启动)服务
- enable # 设置服务是否开机自启动:
yes # 服务开机自启动
no # 服务开机不启动
8、Cron模块
cron模块作用:为受控端添加定时任务
x x x x x /bin/sh /server/scripts/test.sh >/dev/null 2>&1
将系统命令行的定时任务变成ansilbe的语法
传统的写法
"minute=0 hour=0 daay=* month=* weekday=* job='/bin/sh /server/scripts/test.sh >/dev/null 2>&1'"
ansible的写法(* 号是可以省略的)
ansible 10.4.7.7 -m cron -a "minute=0 hour=0 job='/bin/sh /server/scripts/test.sh >/dev/null 2>&1'"
定时任务示例
// 添加一条定时任务
[root@m01 ~]# ansible 10.4.7.7 -m cron -a "minute=0 hour=0 job='/bin/sh /server/scripts/test.sh >/dev/null 2>&1'"
// 设置定时任务注释信息,防止重复设置
[root@m01 ~]# ansible 10.4.7.7 -m cron -a "name='cron01' minute=0 hour=0 job='/bin/sh /server/scripts/test.sh >/dev/null 2>&1'"
// 删除指定的name
[root@m01 ~]# ansible 10.4.7.7 -m cron -a "name='cron01' minute=0 hour=0 job='/bin/sh /server/scripts/test.sh >/dev/null 2>&1' state=absent"
// 也可以直接指定定时任务项的名称,进行定时任务的删除
[root@m01 ~]# ansible 10.4.7.7 -m cron -a "name='cron02' state=absent"
// 使用 disabled 参数来注释定时任务
[root@m01 ~]# ansible 10.4.7.7 -m cron -a "name='cron01' minute=0 hour=0 job='/bin/sh /server/scripts/test.sh >/dev/null 2>&1' disabled=yes"
// 取消注释
[root@m01 ~]# ansible 10.4.7.7 -m cron -a "name='cron01' minute=0 hour=0 job='/bin/sh /server/scripts/test.sh >/dev/null 2>&1' disabled=no"
模块参数
- name # 为新的定时任务条目设置名称(防止定时任务项的重复)
- state # 需要指定的动作:
absent # 添加定时任务
preset # 删除定时任务
- disabled # 是否禁用定时任务(是否注释):
yes # 禁用定时任务项(注释掉)
no # 开启定时任务项(取消注释)
# 该参数需要和job一起使用
- minute # 分钟 0-59
- hour # 小时 0-23
- day # 天数 1-31
- month # 月份 1-12
- weekday # 周 0-6
9、Group模块
group模块作用:可以为远端创建用户组
// 创建组,组名为demo,组id为1012
[root@m01 ~]# ansible 10.4.7.7 -m group -a "name=demo gid=1012"
模块参数
- name # 必须参数,指定创建的组名
- gid # 指定用户的gid
- state
absent # 移除远端主机的组
present # 创建远端主机的组(默认)
10、User模块
user模块作用:可以为远端进行创建用户
、修改用户
、删除用户
等
// 创建用户名test,uid为999,组为test,shell为/sbin/nologin,并且不创建家目录
[root@m01 ~]# ansible 10.4.7.7 -m user -a "name=test uid=1010 shell=/sbin/nologin createhome=no"
// 创建普通用户alx,并配置对应的用户密码(-1 使用MD5加密)
[root@m01 /]# echo '123456' | openssl passwd -1 -stdin
$1$yGnjv/n3$J.tO.qSIyLy5q547tSisz/
[root@m01 /]# ansible 10.4.7.7 -m user -a 'name=alx password="$1$yGnjv/n3$J.tO.qSIyLy5q547tSisz/"'
模块参数
- name # 必须参数,指定用户名
- group # 指定用户组名称
- groups # 指定附加组名称,多个组之间用逗号","分隔
- shell # 指定用户登录的shell
- uid # 指定用户的uid
- comment # 指定用户的注释信息
- password # 给用户添加密码
- state # 指定用户是否存在于受控主机中:
preset # 创建用户(默认)
absent # 删除用户
- createhome # 是否创建家目录:
yes # 创建家目录(默认)
no # 不创建家目录
- home # 指定家目录,需要和createhome互相配合使用
密码设置:必须要将预先设置的密码做openssl加密处理后输出的一串数值,然后还数值就作为新创建用户的密码,如果添加的是明文密码的话是无效的。
11、Mount模块
mount模块作用:可以将挂载参数写入到/etc/fastb文件
中
// 仅将挂载的配置写入到/etc/fastb,并不会执行挂载
[root@m01 ~]# ansible sa -m mount -a "src=172.16.1.31:/data path=/tmp fstype=nfs opts=defaults state=present"
// 临时挂载设备,并将挂载的配置写入到/etc/fastb
[root@m01 ~]# ansible sa -m mount -a "src=172.16.1.31:/data path=/tmp fstype=nfs opts=defaults state=mounted"
// 临时卸载,不会清理/etc/fstab
[root@m01 ~]# ansible sa -m mount -a "src=172.16.1.31:/data path=/tmp fstype=nfs opts=defaults state=unmounted"
// 卸载,不仅临时卸载,同时会清理/etc/fstab
[root@m01 ~]# ansible sa -m mount -a "src=172.16.1.31:/data path=/tmp fstype=nfs opts=defaults state=absent"
模块参数
- present # 开机挂载,不会执行挂载指令,仅将挂载的配置写入到/etc/fastb
- mounted # 挂载设备,并将挂载的配置写入到/etc/fastb
- unmounted # 卸载设备,不会清除/etc/fastb写入的配置
- absent #卸载设备,会清理/etc/fastb写入的配置
注意:path 所指定的挂载目录不需要手动创建,当执行挂载命令的时候,会自动的创建并挂载
12、Unarchive模块
Unarchive模块作用:解压缩
该模块有两种用法:
将ansible主机上的压缩包在本地解压缩后传到远程主机上,这种情况下,copy=yes. 本地解压缩,解压缩位置不是默认的目录,没找到或传完删了 后传到远程主机
将远程主机上的某个压缩包解压缩到指定路径下。这种情况下,需要设置copy=no 远程主机上面的操作,不涉及ansible服务端
// 将本地的压缩文件解压后传到远程主机
[root@m01 ~]# ansible 10.4.7.7 -m unarchive -a "src=/opt/src/apache-tomcat-8.5.53.tar.gz dest=/opt copy=yes mode=0755"
// 将远程主机的压缩文件解压
[root@m01 ~]# ansible 10.4.7.7 -m unarchive -a "src=/opt/src/apache-tomcat-8.5.53.tar.gz dest=/opt copy=no mode=0755"
模块参数
- src # 源压缩包路径
- dest # 压缩包解压后存放路径
- copy # yes:本地压缩,no:远程压缩
yes
no
- mode # 解压后的目录/文件权限
13、Git模块
Git模块作用:管理git仓库的git checkout以部署文件或软件。
// 拉取git仓库commit id 为78d5d96的代码到指定目录
[root@m01 ~]# ansible 10.4.7.7 -m git -a "repo=https://gitee.com/jasonminghao/dubbo-demo-service.git dest=/data/git_repo/dubbo-demo-service version=78d5d96 accept_hostkey=yes"
模块参数
- repo # git仓库地址(https/ssh)
- dest # 将代码克隆到指定路径
- version # 克隆指定版本分支/commit id
- accept_hostkey # 类似于-o StrictHostKeyChecking=no
yes
no
14、Systemd模块
systemd模块作用:如果使用systemctl 管理程序的话,可以使用systemd模块,systemctl 可以控制程序,reload,start,status,restart等
// 拉取git仓库commit id 为78d5d96的代码到指定目录
[root@m01 ~]# ansible 10.4.7.7 -m systemd -a "name=nfs state=started enabled=yes daemon_reload=true"
模块参数
- name # 需要管理的服务名称
- state # 执行动作
reloaded # 平滑重启
restarted # 重启
started # 启动
stopped # 停止
- enabled # 是否开机启动
- daemon_reload # 在执行任何其他操作之前运行daemon-reload,以确保systemd已经读取了任何更改。
yes
no
自动化运维Ansible之常用模块的更多相关文章
- Ansible自动化运维工具及其常用模块
Ansible自动化运维工具及其常用模块 目录 Ansible自动化运维工具及其常用模块 一.Ansible简介 1. Ansible概述 2. Ansible作用 3. Ansible的工作模块 4 ...
- 自动化运维 Ansible
自动化运维 Ansible 特性 (1).no agents:不需要在被管控主机上安装任何客户端: (2).no server:无服务器端,使用时直接运行命令即可: (3).modules in an ...
- 自动化运维Ansible安装篇
Ansible自动化工具之--部署篇 ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了 ...
- 服务器/网络/虚拟化/云平台自动化运维-ansible
ansible与netconf的对比 首先明确一个概念,netconf是协议,ansible是python编写的工具 netconf 使用YANG建模,XML进行数据填充,使用netconf协议进行传 ...
- 自动化运维—Ansible(上)
一:为什么选择Ansible 相对于puppet和saltstack,ansible无需客户端,更轻量级 ansible甚至都不用启动服务,仅仅只是一个工具,可以很轻松的实现分布式扩展 更强的远程命令 ...
- 自动化运维--ansible(1)
前戏 ansible 批量在远程主机上执行命令 openpyxl 操作excel表格 puppet ansible slatstack ansible epel源 第一步: 下载epel源 wget ...
- 自动化运维-ansible入门篇
1.ansible配置 什么是Ansible IT自动化工具 依赖于现有的操作系统凭证来访问控制远程机器 简单易用.安全可靠 Ansible可以完成哪些任务 配置系统 开发软件 编排高级的IT任务 A ...
- Python自动化运维之9、模块之sys、os、hashlib、random、time&datetime、logging、subprocess
python模块 用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需 ...
- 自动化运维--ansible(2)
问题一:如何在多台服务器中配置Web项目上线的所有环境 解答: 1.使用ansible配置nginx服务 在安装前了解rpm与yum的区别 rpm是压缩包安装依赖包需要自己手动安装,yum安装解决依 ...
随机推荐
- py基础之无序列表
'''dic是一个可以将两个相关变量关联起来的集合,格式是dd={key1:value1,key2:value2,key3:value3}'''d = { 'adam':95, 'lisa':85, ...
- 分享到微信,QQ等各大网络媒体网站代码
http://www.jiathis.com/ 打开此网站,如果没有账号,请注册一下,然后登陆账号,进入网页以后直接可以复制代码到页面的标签,进行css样式布局,直接可以在页面测试,如果方便的话直接百 ...
- Immer.js简析
开始 在函数式编程中,Immutable这个特性是相当重要的,但是在Javascript中很明显是没办法从语言层面提供支持,但是还有其他库(例如:Immutable.js)可以提供给开发者用上这样的特 ...
- 基于Modelsim的直方图统计算法仿真
一.前言 本篇主要针对牟新刚编著<基于FPGA的数字图像处理及应用>第六章第五节中直方图统计相关类容进行总结,包括代码实现及 基于Modelsim的仿真.书读百遍,其意自现. 2020-0 ...
- C++ 动态链接库 dll的加载
//首先生成一个my.dll项目,在cpp中添加如下代码 //导出函数 _declspec(dllexport) int test(int a, int b) { return a + b; } // ...
- flask连接数据库的URI书写格式
1. MySQL mysql://username:password@hostname/database 2. PostgreSQL postgresql://username:password@ho ...
- webpack学习(一):webpack的安装和命令行
本教程可以学习到如下内容: 1.webpack的安装 2.利用webpack命令打包js文件 3.如何在js文件里面引用css并将css文件在页面里面生效 4.学习webpack相关的高级的一些参数, ...
- ASP.NET MVC5实现芒果分销后台管理系统(二):Code First快速集成EntityFramework
在上一篇文章中,我们已经搭建了整个芒果后台管理系统整个工程架构,并集成了AutoMapper,日志组件等,接下来我们将使用Entity Framework完善系统的持久化存储部分.这篇EF的构造,我将 ...
- [Linux][C][gcc][tips] 在头文件中定义变量引发的讨论
概述 本人的原创文章,最先发表在github-Dramalife-note中.转载请注明出处. Define variable(s) in header file referenced by mult ...
- Linux下安装Python3.4
PS:如果本机安装了python2,尽量不要管他,使用python3运行python脚本就好,因为可能有程序依赖目前的python2环境, 比如yum!!!!! 不要动现有的python2环境! 1. ...