运维之道 | Ansible Module
Ansible Ad-hoc 模式常用模块
Ansible 自动运维工具管理客户端案例操作,由于 Ansible 管理远程服务器基于 SSH,在登录远程服务器执行命令时需要远程服务器的用户名和密码,也可以加入参数手动输入密码或者基于 ssh keygen 生成免秘钥
Ansible 自动化批量管理工具主要参数详解如下:
-v -verbose:打印详细模式
-i PATH ,-inventory= PATH:指定 host 文件路径
-f NUM,-forks=NUM:指定 fork 开启同步进程的个数,默认为5
-m NAME, -module-name=NAME:指定 module 名称,默认模块为 command
-a MODULE_ARGS: module 模块的参数或者命令
-k ,-ask-pass:输入远程被管理端密码
-sudo:基于 sudo 用户执行
-K, -ask-sudo-pass:提示输入 sudo 密码与 sudo 起使用
-u USERNAME, -user=USERNAME: 指定执行用户
-C ,--check:测试执行过程,不改变真实内容,相当于预演
-T TIMEOUT:执行命令超时时间,默认为 10s
--version:查看 Ansible 软件版本信息
ansible-doc 常用命令:
[root@localhost ~]# ansible-doc -h
Usage: ansible-doc [-l|-F|-s] [options] [-t <plugin type> ] [plugin]
-j 以json格式显示所有模块信息
-l 列出所有的模块
-s 查看模块常用参数
# 直接跟模块名,显示模块所有信息[root@localhost ~]# ansible-doc -j
[root@localhost ~]# ansible-doc -l
[root@localhost ~]# ansible-doc -l |wc -l #统计所有模块个数,ansible2.8共计2834个模块
2834
一、命令相关的模块
1、command
ansible默认的模块,执行命令,注意:shell中的"<", ">", "|", ";", "&","$"
等特殊字符不能在command模块中使用,如果需要使用,则用shell模块
- 查看模块参数
[root@localhost ~]# ansible-doc -s command
- 在192.168.182.11服务器上面执行ls命令,默认是在当前用户的家目录/root
[root@localhost ~]# ansible 192.168.182.11 -a 'ls'
- chdir 先切换工作目录,再执行后面的命令,一般情况下在编译时候使用
[root@localhost ~]# ansible 192.168.182.11 -a 'chdir=/tmp pwd'
- creates 创建文件,如果creates的文件存在,则执行后面的操作
[root@localhost ~]# ansible 192.168.182.11 -a 'creates=/tmp ls /etc/passwd' ///tmp目录存在,不执行后面命令
192.168.182.11 | SUCCESS | rc=0 >>
skipped, since /tmp exists[root@localhost ~]# ansible 192.168.182.11 -a 'creates=/tmp-test ls /etc/passwd' ///tmp-test目录不存在,执行完后,且执行后面命令
192.168.182.11 | CHANGED | rc=0 >>
/etc/passwd
- removes 和creates相反,如果removes的文件存在,才执行后面的操作
[root@localhost ~]# ansible 192.168.182.11 -a 'removes=/tmp/villian ls' ///存在,则执行后面命令
192.168.182.11 | CHANGED | rc=0 >>[root@localhost ~]# ansible 192.168.182.11 -a 'removes=/tmp/villian ls' ///不存在,则不执行后面命令
192.168.182.11 | SUCCESS | rc=0 >>
skipped, since /tmp11 does not exist
2、shell
专门用来执行shell命令的模块,和command模块一样,参数基本一样,都有chdir、creates、removes
等参数
- 使用方法
# 查看模块参数
[root@localhost ~]# ansible-doc -s shell[root@localhost ~]# ansible 192.168.182.11 -m shell -a 'mkdir /tmp/test'
[root@localhost ~]# ansible 192.168.182.11 -m shell -a 'ls /tmp' # 执行下面这条命令,每次执行都会更新文件的时间戳
[root@localhost ~]# ansible 192.168.182.11 -m shell -a 'cd /tmp/test && touch 1.txt && ls'
192.168.182.11 | CHANGED | rc=0 >>
1.txt# 由于有时候不想更新文件的创建时间戳,则如果存在就不执行creates
[root@localhost ~]# ansible 192.168.182.11 -m shell -a 'creates=/tmp/test/1.txt cd /tmp/test && touch 1.txt && ls'
192.168.182.11 | SUCCESS | rc=0 >>
skipped, since /tmp/test/1.txt exists
3、script
用于在被管理机器上面执行shell脚本的模块,脚本无需在被管理机器上面存在
# 查看模块参数
[root@localhost ~]# ansible-doc -s script# 编写shell脚本
[root@localhost ~]# vim ansible_test.sh
#!/bin/bash
echo `hostname`# 在所有被管理机器上执行该脚本
[root@localhost ~]# ansible 192.168.182.11 -m script -a '/root/ansible_test.sh'
192.168.182.11 | CHANGED => {"changed": true, "rc": 0, "stderr": "Shared connection to 192.168.182.11 closed.\r\n", "stderr_lines": ["Shared connection to 192.168.182.11 closed."], "stdout": "hostname\r\n", "stdout_lines": ["hostname"]
}
二、文件相关的模块
1、file
用于对文件的处理,创建,删除,权限控制等
# 查看模块参数
[root@localhost ~]# ansible-doc -s file
path #要管理的文件路径
recurse #递归
state:directory #创建目录,如果目标不存在则创建目录及其子目录touch #创建文件,如果文件存在,则修改文件 属性 absent #删除文件或目录mode #设置文件或目录权限owner #设置文件或目录属主信息group #设置文件或目录属组信息link #创建软连接,需要和src配合使用hard #创建硬连接,需要和src配合使用# 创建目录
[root@localhost ~]# ansible 192.168.182.11 -m file -a 'path=/tmp/test1 state=directory'# 创建文件
[root@localhost ~]# ansible 192.168.182.11 -m file -a 'path=/tmp/test2 state=touch'# 建立软链接(src表示源文件,path表示目标文件)
[root@localhost ~]# ansible 192.168.182.11 -m file -a 'src=/tmp/test1 path=/tmp/test3 state=link'# 删除文件
[root@localhost ~]# ansible 192.168.182.11 -m file -a 'path=/tmp/test2 state=absent'# 创建文件时同时设置权限等信息
[root@localhost ~]# ansible 192.168.182.11 -m file -a 'path=/tmp/test4 state=directory mode=775 owner=root group=root'
2、copy
用于管理端复制文件到远程主机,并可以设置权限,属组,属主等
# 查看模块参数
[root@localhost ~]# ansible-doc -s copy
src #需要copy的文件的源路径
dest #需要copy的文件的目标路径
backup #对copy的文件进行备份
content #直接在远程主机被管理文件中添加内容,会覆盖原文件内容
mode #对copy到远端的文件设置权限
owner #对copy到远端的文件设置属主
group #对copy到远端文件设置属组# 复制文件到远程主机并改名
[root@localhost ~]# ansible 192.168.182.11 -m copy -a 'dest=/tmp/a.sh src=/root/ansible_test.sh'# 复制文件到远程主机,并备份远程文件,安装时间信息备份文件(当更新文件内容后,重新copy时用到)
[root@localhost ~]# ansible 192.168.182.11 -m copy -a 'dest=/tmp/a.sh src=/root/ansible_test.sh backup=yes'# 直接在远程主机a.sh中添加内容
[root@localhost ~]# ansible 192.168.182.11 -m copy -a 'dest=/tmp/a.sh content="#!/bin/bash\n echo `uptime`"'# 复制文件到远程主机,并设置权限及属主与属组
[root@localhost ~]# ansible 192.168.182.11 -m copy -a 'dest=/tmp/passwd src=/etc/passwd mode=700 owner=root group=root'
3、fetch
用于从被管理机器上面拉取文件,拉取下来的内容会保留目录结构,一般情况用在收集被管理机器的日志文件等
# 查看模块参数
[root@localhost ~]# ansible-doc -s fetch
src #指定需要从远端机器拉取的文件路径
dest #指定从远端机器拉取下来的文件存放路径# 从被管理机器上拉取cron日志文件,默认会已管理节点地址创建一个目录,并存放在内
[root@localhost ~]# ansible 192.168.182.11 -m fetch -a 'dest=/tmp src=/var/log/cron'[root@localhost ~]# tree /tmp/192.168.182.11/
/tmp/192.168.182.11/
└── var└── log└── cron2 directories, 1 file
三、用户相关的模块
1、user
用于对系统用户的管理,用户的创建、删除、家目录、属组等设置
# 查看模块参数
[root@localhost ~]# ansible-doc -s user
name #指定用户的名字
home #指定用户的家目录
uid #指定用户的uid
group #指定用户的用户组
groups #指定用户的附加组
password #指定用户的密码
shell #指定用户的登录shell
create_home #是否创建用户家目录,默认是yes
remove #删除用户时,指定是否删除家目录
state:absent #删除用户# 创建用户名指定家目录,指定uid及组
[root@localhost ~]# ansible 192.168.182.11 -m user -a 'name=mysql home=/opt/mysql uid=1002 group=root'
[root@localhost ~]# ansible 192.168.182.11 -m shell -a 'id mysql && ls -l /opt'
192.168.182.11 | CHANGED | rc=0 >>
uid=1002(mysql) gid=0(root) 组=0(root)
总用量 0
drwx------ 3 mysql root 78 5月 27 18:13 mysql# 创建用户,不创建家目录,并且不能登录
[root@localhost ~]# ansible 192.168.182.11 -m user -a 'name=apache shell=/bin/nologin uid=1003 create_home=no'
[root@localhost ~]# ansible 192.168.182.11 -m shell -a 'id apache && tail -1 /etc/passwd'
192.168.182.11 | CHANGED | rc=0 >>
uid=1003(apache) gid=1003(apache) 组=1003(apache)
apache:x:1003:1003::/home/apache:/bin/nologin# 删除用户
[root@localhost ~]# ansible 192.168.182.11 -m user -a 'name=apache state=absent'# 删除用户并删除家目录
[root@localhost ~]# ansible 192.168.182.11 -m user -a 'name=mysql state=absent remove=yes'
2、group
用于创建组,当创建用户时如果需要指定组,组不存在的话就可以通过group先创建组
# 查看模块参数
[root@localhost ~]# ansible-doc -s group
name #指定组的名字
gid #指定组的gid
state:absent #删除组present #创建组(默认的状态)# 创建组
[root@localhost ~]# ansible 192.168.182.11 -m group -a 'name=www'# 创建组并指定gid
[root@localhost ~]# ansible 192.168.182.11 -m group -a 'name=www1 gid=1005'# 删除组
[root@localhost ~]# ansible 192.168.182.11 -m group -a 'name=www1 state=absent'
四、软件包相关的模块
1、yum
用于对软件包的管理,下载、安装、卸载、升级等操作
# 查看模块参数
[root@localhost ~]# ansible-doc -s yum
name #指定要操作的软件包名字
download_dir #指定下载软件包的存放路径,需要配合download_only一起使用
download_only #只下载软件包,而不进行安装,和yum --downloadonly一样
list:installed #列出所有已安装的软件包updates #列出所有可以更新的软件包repos #列出所有的yum仓库
state: installed, present #安装软件包(两者任选其一都可以)removed, absent #卸载软件包latest #安装最新软件包# 列出所有已安装的软件包
[root@localhost ~]# ansible 192.168.182.11 -m yum -a 'list=installed'# 列出所有可更新的软件包
[root@localhost ~]# ansible 192.168.182.11 -m yum -a 'list=updates'#列出所有的yum仓库
[root@localhost ~]# ansible 192.168.182.11 -m yum -a 'list=repos'#只下载软件包并到指定目录下
[root@localhost ~]# ansible 192.168.182.11 -m yum -a 'name=httpd download_only=yes download_dir=/tmp'#安装软件包
[root@localhost ~]# ansible 192.168.182.11 -m yum -a 'name=httpd state=installed'#卸载软件包
[root@localhost ~]# ansible 192.168.182.11 -m yum -a 'name=httpd state=removed'#安装包组,类似yum groupinstall 'Development Tools'
[root@localhost ~]# ansible 192.168.182.11 -m yum -a 'name="@Development Tools" state=installed'
2、pip
用于安装python中的包
# 查看模块参数
[root@localhost ~]# ansible-doc -s pip# 使用pip时,需要保证被管理机器上有python-pip软件包
[root@localhost ~]# ansible 192.168.182.11 -m yum -a 'name=python-pip'# 安装pip包
[root@localhost ~]# ansible 192.168.182.11 -m pip -a 'name=flask'
3、service
服务模块,用于对服务进行管理,服务的启动、关闭、开机自启等
# 查看模块参数
[root@localhost ~]# ansible-doc -s service
name #指定需要管理的服务名
enabled #指定是否开机自启动
state: #指定服务状态started #启动服务stopped #停止服务restarted #重启服务reloaded #重载服务# 启动服务,并设置开机自启动
[root@localhost ~]# ansible 192.168.182.11 -m service -a 'name=crond state=started enabled=yes'
五、计划任务相关的模块
1、cron
用于指定计划任务,和crontab -e
一样
# 查看模块参数
[root@localhost ~]# ansible-doc -s cron
job #指定需要执行的任务
minute #分钟
hour #小时
day #天
month #月
weekday #周
name #对计划任务进行描述
state:absetn #删除计划任务# 创建一个计划任务,并描述是干嘛用的
[root@localhost ~]# ansible 192.168.182.11 -m cron -a "name='这是一个测试的计划任务' minute=* hour=* day=* month=* weekday=* job='/bin/bash /root/test.sh'"
[root@localhost ~]# ansible 192.168.182.11 -m shell -a 'crontab -l'
192.168.182.11 | CHANGED | rc=0 >>
#Ansible: 这是一个测试的计划任务
* * * * * /bin/bash /root/test.sh# 创建一个没有带描述的计划任务
[root@localhost ~]# ansible 192.168.182.11 -m cron -a "job='/bin/sh /root/test.sh'"# 删除计划任务
[root@localhost ~]# ansible 192.168.182.11 -m cron -a "name='None' job='/bin/sh /root/test.sh' state=absent"
六、系统信息相关的模块
setup: 用于获取系统信息的一个模块
# 查看模块参数
[root@localhost ~]# ansible-doc -s setup# 查看系统所有信息
[root@localhost ~]# ansible 192.168.182.11 -m setup# filter 对系统信息进行过滤
[root@localhost ~]# ansible 192.168.182.11 -m setup -a 'filter=ansible_all_ipv4_addresses'# 常用的过滤选项
ansible_all_ipv4_addresses 所有的ipv4地址
ansible_all_ipv6_addresses 所有的ipv6地址
ansible_architecture 系统的架构
ansible_date_time 系统时间
ansible_default_ipv4 系统的默认ipv4地址
ansible_distribution 系统名称
ansible_distribution_file_variety 系统的家族
ansible_distribution_major_version 系统的版本
ansible_domain 系统所在的域
ansible_fqdn 系统的主机名
ansible_hostname 系统的主机名,简写
ansible_os_family 系统的家族
ansible_processor_cores cpu的核数
ansible_processor_count cpu的颗数
ansible_processor_vcpus cpu的个数
https://www.cnblogs.com/yanjieli/p/10969143.html
运维之道 | Ansible Module相关推荐
- 运维之道 | Ansible 安装使用
前言 Ansible是一款简单的运维自动化工具,只需要使用ssh协议连接就可以来进行系统管理,自动化执行命令,部署等任务 Ansible的特点 ansible不需要单独安装客户端,也不需要启动任何服务 ...
- 运维自动化之ANSIBLE
成功不易,加倍努力! 运维自动化之ANSIBLE 本章内容 1 自动化运维应用场景 1.1 云计算运维工程师核心职能 1.2 运维职业发展路线 1.3 企业实际应用场景分析 1.3.1 Dev开发环境 ...
- 第20章,运维自动化之ansible
更多内容请点击: Linux学习从入门到打死也不放弃,完全笔记整理(持续更新,求收藏,求点赞~~~~) https://blog.51cto.com/13683480/2095439 第20章,运维自 ...
- 从扁鹊医术看华为数据中心智能化运维之道
根据典记,魏文王曾求教于名医扁鹊:"你们家兄弟三人,都精于医术,谁医术最好呢?"扁鹊:"大哥最好,二哥差些,我是三人中最差的一个."文王又问:"那为什 ...
- 力作推荐!!!! 防线:企业Linux安全运维理念和实战(向世界500强企业学习Linux安全管理与运维之道)...
防线:企业Linux安全运维理念和实战(向世界500强企业学习Linux安全管理与运维之道) 新书发售 http://product.dangdang.com/product.aspx?pr ...
- 【大型网站运维之道 天道 人道 运维之道】
大型网站运维之道漫谈 网站运维绝不是某些人眼中安装系统.做几根网线那么简单: 除去应用开发和业务运营之外的保障网站能运转的事儿都可能是运维工作的职责范围.本系列是冯大辉(Fenng)的一个系列博文,从 ...
- Linux运维之道-基础命令
基础命令 参照 linux运维之道(丁明一) 文章目录 基础命令 一.目录以及文件的基本操作 1. pwd 2.cd 3.ls 4.touch 5.mkdir 6.cp 7.rm 8.mv 9.fin ...
- 【Ansible自动化运维工具】Ansible变量之lookup生成变量方法
[Ansible自动化运维工具]Ansible变量之lookup生成变量方法 一.lookup插件介绍 1.lookup简介 2.lookup使用场景 3.lookup获取的数据源 4.lookup的 ...
- 运维之道 | 基于 LAMP 环境部署 Discuz 论坛
基于 LAMP 环境部署 Discuz 论坛 LAMP环境部署 一.基于VMware虚拟机部署Centos系统 [root@localhost ~]# cat /etc/redhat-release ...
最新文章
- python3 替换字符串中指定位置字符
- PowerShell2.0之维护网络(一)查看网络设置
- BPM助力先声药业优化流程管理
- 一个免费的网站长链接转短链接的工具
- jquery.cookie中的操作之与换肤
- mongodb常用命令脚本化-自动化运维
- WebView加载网页不显示图片解决办法
- 电脑可以连接手机热点,却无法连路由器无线wifi
- (Xposed)编写第一个Xposed模块
- Java笔试面试(社招版)
- 史上最全的大数据开发八股文【自己的吐血总结】
- 华为云位居IDC中国大数据平台市场研究报告第一
- java生成短信验证码_Java随机生成手机短信验证码的方法
- Java编程练习之:转换罗马数字
- 建模simulink - xpc调试手段
- 4g网络设置dns地址_如果你的手机WiFi信号差?输入这串DNS地址,网络瞬间变流畅...
- python爬虫防屏蔽_Python爬虫防封杀方法集合
- 【Go编程语言】 Go语言基础语法
- html怎么把字做成动画效果,如何使用HTML5 css3实现粒子效果文字动画特效(附完整代码)...
- Linux 基础命令入门 文件压缩