【Ansible】 各种模块
【Ansible 模块】
就如python库一样,ansible的模块也分成了基本模块和第三方拓展模块(自定义的模块)。这些模块其实才是作为真实的逻辑载体,在帮助ansible进行作业。
ansible-doc -l 可以列出当前所有已经安装的模块名。ansible-doc xxx可以调出xxx模块的写详细文档。
每个模块多多少少都可以跟一些参数(极少数如ping之类的模块可以不要参数),具体可以有哪些参数也可以参见文档。
■ ping模块
最早用的ansible模块,顾名思义用来检查网络的联通状况。
如果对应主机存活,则返回pong。
■ 远程命令模块
广义上的远程命令模块包括了command,script,shell三个。当通过命令行的ansible执行任务时,若不指明-m参数,默认使用的就是command模块。
首先看command和shell之间的区别。command模块的执行不经过远端主机的shell处理,所以只支持一些简单的交互,稍微复杂一点的如重定向,管道命令,取环境变量的值等不支持。而shell则是在command的基础上用linux的/bin/sh进行包装之后的模块,比较好地支持所有命令。
相对的,script其实严格来说是个远程脚本/程序执行模块,它将本地的一个脚本给放到远端目录的~/.ansible/tmp/下某个位置,在远端执行。由于命令本身也是程序,所以对于远端也存在的命令,可以通过写出命令的绝对路径的办法来远程执行命令。不过这样做太非主流了。。所以我们还是把它当成远程脚本执行模块来用把。
shell模块常用的参数有chdir,creates,removes,stdin等等。具体哪个参数干什么用的可以参考文档
script模块常用的参数也差不多这些。
至于如何在playbook中设置模块的参数,给出参考如下:
- script: /some/local/create_file.sh --some-arguments 1234
args:
creates: /the/created/file.txt
可以看到,脚本名create_file.sh和脚本本身的参数--some-arguments 1234外,为了添加模块的参数,多写了一个args字段,这就很容易脑补出来了。
■ copy模块
copy模块最基本的两个参数是src和dest,此外还可以设置诸如owner,group,mode等修饰被传递过去的文件的参数。
示例如下:
- name: copy file
copy: mode={% if item == "ossutil64" %}755{% else %}644{% endif %}
args:
src: /data/ossutil/{{item}}
dest: /tmp/goodhelp/{{item}}
owner: root
group: root
with_items:
- ["ossutil64","jrydata","README.md"]
when: connected|success
可以看到两种不同的给模块添加参数的方法。一种是直接在copy:后面写xx=yy,另一种是在下面加上的args字段下写内容。把mode放在上面的原因是这里的大括号不得不放在最前面而不能加引号(之前我们说过,jinja2的部分语法不能直放在yaml的行首,要不然yaml会解析失败)
值得一提的是,copy的幂等性还蛮实用的。它会检测目标文件和待复制文件的哈希值,如果相等就不复制了。另外有一点不足的是缺少对远端目录存在的检测。如果远端本身就不存在dest给出值的某个目录的话会报错而不是自动创建。
copy模块还支持整个目录的拷贝。这个可能比单个拷贝文件更加常用一些。整个复制可行性的判断过程有点像python的shutil.copytree方法。
除了上面列出的简单的几个参数,copy模块还支持如下参数:
backup yes或者no,可以为被覆盖的文件做一个备份。备份完的文件名中带有复制时做备份的时间
force 是否强行覆盖,默认值为yes,no的话不会报错,而是只有目的主机上没有相关文件才复制
content 可以代替src参数,给出一段内容,将这段内容直接写入目标文件(w模式,不是a模式)。在这段内容中可以引用各种变量
需要注意的是copy模块在大多数情况下都是单纯的复制(除了content中带变量等少数情况),对于需要根据主机进行个性化配置之类的情景,应该考虑使用template模块。
■ user模块
user主要用来进行用户管理,具有的参数有name(用户名),password(只接受md5加密后的密文)
state 有两种选择,present或absent,当为present的时候保证用户存在,absent反之。当用户存在条件不符合要求时会自动创建or删除用户
createhome/remove (remove后面没有home)在创建/删除的时候,是否指定创建home目录/删除home目录,默认createhome是yes而remove是no
system 默认值是yes,表示创建的用户是普通系统用户
其中password的密文可以通过下面这条命令得来
echo new_password | openssl passwd - -stdin
然后给出一个简单的创建用户的实例
- name: create user [wyz]
user: name=wyz state=present password=$1$dv5PrYG7$Zxagv86RdsUG2E4WzaL8D0
■ cron模块
顾名思义,这个模块是为了管理远端主机的crontab任务而存在的。其参数包括:
state 和user模块的state一样,取值为present或者absent,用来表示希望该任务存在或不存在,以达到没有则创建or有则删除的目的。
backup 对于删除任务的场合,设置backup为yes后可以对原任务计划内容做一个备份
job 要执行的任务,具体为一个非shell的命令如/usr/bin/echo hello
user 以哪个用户的身份运行
name 任务的描述项(必须)
minute,hour,day,month,weekday 和crontab配置文件中对应的五个时间点设置类似。*可代表任意时间点。当不特别指出时默认值当然就是*了。
下面的实例,为远程主机添加一个crontab任务,使之每周一早上八点整运行一个脚本:
- name: ADD new crontab task to wyz
cron:
args:
name: every monday moring needs to send data
state: present
job: /usr/bin/python /home/wyz/scripts/senddata.py
user: wyz
minute: 0
hour: 8
weekday: 1
■ file模块
file模块主要用于远程的文件管理。具有参数如下:
owner 指定属主,保持幂等性,如果属主已经是指定值,就不改变。下面的参数也类似
mode 指定权限
group 指定所属组
path 指定文件路径
recurse 如指出的path是一个目录,设置recurse为yes可以将一些设置内容递归应用给整个目录
state 值可以有touch(相当于运行了命令touch xxx一样,若xxx不存在则可能会生成一个新文件),directory(创建一个新目录,目录已经存在时不修改),link(创建软链接,如果是link则还需要额外提供src参数),absent(若目标,可以是文件,目录,链接等存在,则删除)
下面是一个创建目录,并且拷贝一些文件,且文件内容中含有主机个性化内容的示例:
- name: CREATE directory
file:
args:
state: directory
owner: wyz
mode: 0755
group: wyz
path: /tmp/hima - name: COPY files to remote
template:
args:
backup: yes
src: template
dest: /tmp/hima/testfile
owner: wyz
group: wyz
mode: 0644
■ lineinfile模块
file模块着眼的是文件层面的操作,而lineinfile则是关注了具体的文件内容的操作。本模块的参数比较多且复杂。首先是
path path参数指出了要改的文件的路径
regexp 指出一个匹配用的正则表达式
line 要新增或者替换进文件的内容
这三个参数的逻辑是这样的:首先找到path指定的文件,然后对文件做行遍历,并且以regexp为匹配项进行匹配。对于匹配成功的行(或者压根没匹配到),根据line的值做出一些处理。具体做什么处理由下面那些参数决定:
state
absent 表示匹配到行后删除此行,这样line参数就没用了
present 表示匹配到行后用line替换此行,如果没匹配到则在文件末尾新增一行line
如果不想在state为present,且没匹配到行时,不默认地在文件末尾增加新行,可以考虑insertbefore或insertafter设置为yes,这样line可以插入到匹配行的前一行或后一行
backrefs 当state是present的时候,匹配成功会替换line,要是匹配失败,设置backrefs为yes的话也不会在文件末尾增加一行,默认值当然是no。
backup 当state是present的时候,如果指定了line则一般会对文件做出变更,指定backup为yes可将变更前的源文件备份一份。
下面这个示例是对目标文件内容进行的一个编辑
- name: CHANGE content of file
lineinfile:
args:
path: /tmp/testfile
regexp: '^c$'
line: 'new line'
state: present
backrefs: no
若远端的/tmp/testfile文件内容是'a\nb\nc\nd\ne',在第一次运行这个task之后,testfile先被备份然后新testfile中的c行变成了new line。再次运行,由于没有匹配到c行,所以在e行后面新增一行new line。
■ yum模块
远程管理Centos的yum包管理器。
参数只有
name 指出一个包名
state 可以是present,absent和latest。分别表示安装、卸载和更新到最新。
■ service模块
远程管理服务,参数如下:
enabled yes或no,表示是否设置服务的开机自启动
name 指出具体服务
state 可以是started,stopped,和restarted,用来启动,停止和重启服务。
sleep 如果执行的state是restarted,可以指出在停止到启动间sleep几秒
arguments 操作服务时向命令行传递的参数
■ unarchive模块
用于解压包(可以是主控端传送到被控端再解压,也可以是直接解压远端的包),会自动判断包属于什么类型而使用合适的方式去解压。参数包括
copy yes或no,如果是yes则表明压缩包目前不存在于远端上(比如可以在主控端,或者在第三方的地方,通过url指明等等),需要传输到远端再进行解压。
src 压缩包文件路径(包括copy的yes和no两种模式)
dest 远端解压缩到的目录,注意一定要是目录,且此目录一定要存在
owner/group/mode 将解压出来的整个目录递归地指定属主/属组/权限
creates 可以指定一个目录或文件,当这个目录或文件存在时就跳过此task
keep_newer 一个解压出来的文件已经存在,比较两者新旧,保留较新的
http://blog.51cto.com/liuzhengwei521/1895480
【Ansible】 各种模块的更多相关文章
- ansible服务模块和组模块使用
本篇文章主要是介绍ansible服务模块和组模块的使用. 主要模块为ansible service module和ansible group moudle,下面的内容均是通过实践得到,可以直接运行相关 ...
- ansible常用模块用法
ansible常用模块用法 2015-07-21 10:25 24458人阅读 评论(1) 收藏 举报 分类: Linux(44) ansible 版权声明:本文为博主原创文章,未经博主允许不得 ...
- Linux之ansible 常用模块
目的 代码发布系统 代码发布:把本地的代码通过某些方式弄到线上,可以供别人访问 部署 前戏 ansible 批量在远程主机上执行命令 puppet ruby ansible saltstack pyt ...
- Ansible常用模块介绍及使用(week5_day1_part2)--技术流ken
Ansible模块 在上一篇博客<Ansible基础认识及安装使用详解(一)--技术流ken>中以及简单的介绍了一下ansible的模块.ansible是基于模块工作的,所以我们必须掌握几 ...
- Ansible常用模块命令
Ansible常用模块命令 一.安装ansible yum install epel-release yum install ansible 二.配置文件配置 vi /etc/ansible/ansi ...
- ansible 常用模块的使用
安装 yum -y install ansible 配置文件/etc/ansible/hosts 模块介绍与使用 ping模块 [root@node1 config]# ansible k8s -m ...
- Ansible 常见模块介绍
目录 Ansible 常见模块介绍 ping 模块 command 模块 cron 模块 user 模块 group 模块 copy 模块 file 模块 service 模块 shell 模块 sc ...
- Ansible 常用模块(一)
一.Ansible简介 Ansible是新出现的自动化运维工具,基于python开发,集合了众多运维工具(puppet(ruby).cfengine.chef.func.fabric.)的优点,实现了 ...
- ansible核心模块playbook介绍
ansible的playbook采用yaml语法,它简单地实现了json格式的事件描述.yaml之于json就像markdown之于html一样,极度简化了json的书写.在学习ansible pla ...
- ansible的模块使用
转载于 https://www.cnblogs.com/franknihao/p/8631302.html [Ansible 模块] 就如python库一样,ansible的模块也分成了基本模块和 ...
随机推荐
- mysql SQLyog导入csv数据失败怎么办?
分享下mysql使用SQLyog导入csv数据失败的解决方法 给mysql导入数据,选中某个表选择导入--导入使用本地csv数据即可,单有的时候不知道什么问题导入不成功!!! 给mysql导入数据,使 ...
- [na]wireshark排查打印机问题
抓包工具排除故障 前言:上网慢,可能是内网堵了.装上wireshark,可抓到广播包,多播包,以及发给自己的包.如果想抓lan内其他人之间的通信包,那就要在sw上做端口镜像. 1.背景 调试打印机的人 ...
- android 中毛玻璃效果的实现
最近在做一款叫叽叽的App(男银懂的),其中有一个功能需要对图片处理实现毛玻璃的特效 进过一番预研,找到了3中实现方案,其中各有优缺点: 1.如果系统的api在16以上,可以使用系统提供的方法直接处理 ...
- vue-cli 本地数据模拟
方法一: 使用express搭建静态服务 mock数据写在json文件中,proxyTable 里将接口代理到具体mock数据json文件上.具体方法: 创建 mock 文件夹 build/dev-s ...
- Pycrypto与RSA密码技术笔记
密码与通信 密码技术是一门历史悠久的技术.信息传播离不开加密与解密.密码技术的用途主要源于两个方面,加密/解密和签名/验签 在信息传播中,通常有发送者,接受者和窃听者三个角色.假设发送者Master想 ...
- Redis为什么使用单进程单线程方式
Redis采用的是基于内存的采用的是单进程单线程模型的KV数据库,由C语言编写.官方提供的数据是可以达到100000+的qps.这个数据不比采用单进程多线程的同样基于内存的KV数据库Memcached ...
- android笔记---ScrollView
<!--在创建xml文件的时候选择ScrollView类型--> <?xml version="1.0" encoding="utf-8"?& ...
- OpenStack OVS GRE/VXLAN
https://www.jianshu.com/p/0b52de73a4b3 OpenStack OVS GRE/VXLAN网络 学习或者使用OpenStack普遍有这样的现象:50%的时间花费在了网 ...
- 【Redis】Redis的基本安装及使用、Jedis的基本使用、spring-data-redis的集成、主从模式、哨兵模式
在Linux上安装Redis Redis的安装很简单.基本上是下载.解压.运行安装脚本.我用的Redis版本是3.2.1. [nicchagil@localhost app]$ wget -q htt ...
- linux下配置某程序的sudo不用输密码
$ su密码: # cd /etc/# cp sudoers sudoers_bak# vi sudoers 最下面加入一行:ALL ALL = NOPASSWD:/usr/sbin/openconn ...