ansible常用模块
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ansible常用模块相关的知识,希望对你有一定的参考价值。
8.模块
8.1模块的分类
8.1.1 Core Module
(1)不需要格外下载和配置就可以直接使用的
(2)常用的module
(3)都是经过严格测试的
8.1.2 Extra Module
(1)Extra Module需要下载和配置才能使用
(2)次常用的
(3)还有可能存在bug的
注意:在ansible module文档上查看单个module的时候,每一个module文档的底部都会标识,这是一个“Core Module”,或者这是一个“Extra Module”,比如yum就是一个core module,yum_repository就是一个extra module
8.2常见模块
可以使用ansible-doc -l命令查看有哪些模块
使用ansible-doc -s copy命令可以查看模块的使用方法
8.2.1 command
(1)帮助:[[email protected] ~]# ansible-doc -s command
(2)简介:Command模块,命令模块、默认模块,用于在远程执行命令
(3)选项:
free_form:要执行的linux指令
chdir:在执行指令之前,先切换到该目录
removes:对应的文件不存在就执行command
creates:对应的文件存在就执行command
executable:切换shell来执行指令,该执行路径必须是一个绝对路径
(4)案例:远程查看时间和文件
[[email protected] ansible]# ansible zhang -m command -a "date"
[[email protected] ansible]# ansible all -m command -a "date"
[[email protected] ansible]# ansible wang -m command -a "date"
[[email protected] ansible]# ansible wang -m command -a "tail -1 /etc/passwd"
[[email protected] ansible]# ansible all -a "date"
8.2.2 cron
(1)简介:用来做计划任务
(2)state:
present:安装 默认为安装
absent:移除
如果需要移除的话,只需要写上name和absent就可以了
(3)案例:写入一个计划任务,查看是否已经成功写入。
需要注意的是不写的默认都是 ,名字得写,不写就会报错,状态默认是安装
[[email protected] ansible]# ansible zhang -m cron -a ‘hour="/5" job="/bin/date" name="date test" state=present‘
[[email protected] ansible]# ansible zhang -a "crontab -l"
8.2.3 user、group
(1)简介:实现用户账号管理的
(2)案例:创建用户、创建组、创建组里边的成员
(3)注意:system 是否是系统组
[[email protected] ansible]# ansible all -m user -a ‘name="user1" state=present‘ //创建用户
[[email protected] ~]# ansible zhang -m group -a ‘name=pig gid=301 system=yes‘ //创建组
[[email protected] ~]# ansible zhang -m user -a ‘name=pig uid=301 system=yes group=pig‘ //创建组里边的成员
ansible user 的passwd参数的值需要接受加密后的值
[[email protected] test_deploy]# echo Zmc2tG1m= | openssl passwd -1 -stdin
$1$XI3TNbug$Y14rSXX7JxTtlTub9Car/0
tasks:
- name: add user tech
user: name=tech password=$1$XI3TNbug$Y14rSXX7JxTtlTub9Car/0
8.2.4 copy
(1)简介:用来操作文件,但是不能传输目录,他不会递归目录
(2)案例:复制文件、创建新文件,写入指定内容
(3)注意:
src本地源文件路径,可以相对,可以绝对
dest目标文件,必须绝对路径
content:取代src,表示指定生成内容生成文件
远端可以指定传过去的文件名称,没有指定则为默认名称,目录后边+/和不加是一样的
backup:可以备份原来的文件,前提是原来的文件必须和要推送的文件有不同的地方,默认为no
state:directory,abset,file,directory会创建目录,abset会删除,默认是file
将本地文件复制到远程主机
[[email protected] ~]# ansible wang -m copy -a ‘src=/etc/passwd dest=/tmp/ mode=750 owner=root‘
创建一个新文件,并写入指定内容
[[email protected] ~]# ansible wang -m copy -a ‘content="hello world " dest=/tmp/1.txt
如果要批量复制目录下的文件到远端某一个目录中,可以使用with_fileglob模块,使用案例如下
tasks: - name: unity build script
copy: src={{item}} dest=/data/shell/ owner=root mode=755 backup=yes
with_fileglob:- /data/conf/build/*
8.2.5 file
(1)简介:设置文件属主、属组、权限、制作软链接
(2)案例:设定远程文件 归属关系和权限
修改将远程主机/tmp/1.txt的归属关系和权限
[[email protected] ~]# ansible wang –m file -a ‘owner=user1 group=user1 mode=644 path=/tmp/1.txt‘
注意:path:指定文件路径,可以使用name或dest来替换
案例:制作软链接
[[email protected] ~]# ansible wang -m file -a ‘path=/tmp/1.txt.link src=/tmp/1.txt state=link‘
注意:
src:指定文件路径,可以使用name或dest来替换
path:指明符号链接文件路径
如果要删除,则设为state=absent
创建目录:
- /data/conf/build/*
- name: mkdir scripts in zabbix-agent
file: dest=/etc/zabbix/scripts mode=755 owner=root state=directory
8.2.6 ping
(1)简介:检测主机是否能连通
(2)案例:检测所有主机连通性
[[email protected] ~]# ansible all -m ping
8.2.7 service
(1)简介:控制服务的运行状态和开机启动状态
(2)案例:
[[email protected] ~]# ansible wang -a "chkconfig --list named"
注意:
enabled:是否开机自动启动,取值为true为false
name:服务名称
state:状态
[[email protected] ~]# ansible wang -a "chkconfig --list named" //查看named开机自启级别
[[email protected] ~]# ansible wang -m service -a ‘enabled=true name=named‘ //named开机自启
named的开机自启,并且保持运行状态
[[email protected] ~]# ansible wang -m service -a ‘enabled=true name=named state=started‘
8.2.8 shell
(1)简介:Shell模块,在远程主机上执行命令
(2)注意:如果涉及管道、变量的最好使用shell模块
(3)案例:
设置密码
[[email protected] ~]# ansible zhang -m shell -a ‘echo 123456 | passwd --stdin user1‘
8.2.9 script
(1)简介:在远程主机执行本地脚本
(2)案例:在远程主机执行本地的test.sh脚本
(3)注意:
script:将本地脚本复制到远程主机,并运行
相对绝对路径都支持
[[email protected] ~]# ansible all -m script -a ‘test.sh‘
8.2.10 yum
(1)简介:程序包的安装和卸载
(2)案例:安装zsh包,卸载zsh包
(3)注意:
name:指定要安装的程序包,可以带上版本号
state:present,latest表示安装,absent表示卸载
[[email protected] ~]# ansible wang -m yum -a "name=zsh" //安装zsh包
[[email protected] ~]# ansible wang -m yum -a ‘name=zsh state=absent‘ //卸载zsh包
8.2.11 setup
(1)简介:收集远程主机的facts,每个被管理节点在接收管理命令之前会将自己主机相关的信息,如操作系统版本,ip地址等报告给远程的ansbile主机。
(2)案例:收集wang组里边的所有远程主机信息
[[email protected] ~]# ansible wang -m setup
案例:把信息以主机名的方式存储到/tmp/facts
[[email protected] facts]# ansible jingqu -m setup --tree /tmp/facts
案例:收集网卡信息
[[email protected] facts]# ansible 172.165.0.7 -m setup -a "filter=ansible_eth[0-9]"
8.2.12 synchronize模块
(1)简介:将src目录的内容推送到远端服务器的目录之下
(2)案例1:将/home/zhang/目录下的内容推送到远端/tmp/wang/目录下,会把源目录的所有内容都推送到目标目录,内容以本地为主
[[email protected] ~]# ansible 172.165.0.6 -m synchronize -a ‘src=/home/zhang/ dest=/tmp/wang/‘
案例2:将/home/zhang/目录下的内容推送到远端/tmp/wang/目录下,会把源目录的所有内容都推送到目标目录,内容以本地为主,加delete=yes,会让两个目录保持一致,目标目录中原来的数据也会被删除
[[email protected] ~]# ansible 172.165.0.6 -m synchronize -a ‘src=/home/zhang/ dest=/tmp/wang/ delete=yes‘
案例3:将远方的文件同步到本地,使用mode选项,但是src就成为了远端服务器的目录,正好相反
[[email protected] zhang]# ansible 172.165.0.6 -m synchronize -a ‘dest=/home/zhang/ src=/tmp/wang/ delete=yes mode=pull‘
(3)参数:
delete=yes:使两边的内容一样(以推送方为主)
compress=yes:开启压缩,默认为开启
8.2.13 replace模块
这个模块可以说是相当于shell中的sed,我看了下他的光放文档中讲述的参数作用,基本和我的业务不沾边,有一个正则,但是它使用的是Python的正则,现在还不懂,等以后把这个学会了,再弯过来学习这个模块
8.2.14 raw模块
可以使用管道,sed,awk之类的
ansible 192.168.70.78 -m raw -a "chdir=/data ifconfig eth0|head -1|grep Link|awk ‘{print $1}‘"
8.2.15unarchive模块
copy:在解压文件之前,是否先将文件复制到远程主机,默认为yes。若为no,则要求目标主机上压缩包必须存在。
creates:指定一个文件名,当该文件存在时,则解压指令不执行
dest:远程主机上的一个路径,即文件解压的路径
grop:解压后的目录或文件的属组
list_files:如果为yes,则会列出压缩包里的文件,默认为no,2.0版本新增的选项
mode:解决后文件的权限
src:如果copy为yes,则需要指定压缩文件的源路径
owner:解压后文件或目录的属主
#直接传过去的
这个模块可以把压缩文件传输过去,并且传输过去之后解压的目录必须存在
- name: add docker tomcat
unarchive: src=/data/scripts/tms/tomcat.tar.gz dest=/data/docker119/ owner=root mode=755 exclude=Documentation
#需要下载的
- name: Unarchive a file that needs to be downloaded (added in 2.0)
unarchive:
src: https://example.com/example.zip
dest: /usr/local/bin
remote_src: yes
分为3种,远端目录有的就设置copy=no,默认为yes,然后如果要从网上下载在传送,写url即可
8.2.16 fetch模块
fetch模块可以把远端服务器的文件拉到本地,并且生成一个以主机名命名的
[[email protected] ~]# ansible test -m fetch -a "src=/etc/fstab dest=/tmp/"
8.2.17 jenkis_job模块
- name: Test
hosts: jenkins
tasks:- name: Test jenkins_job module
jenkins_job:
name: ‘{{project}}‘ #jenkins job的名字
password: 45ec4d09e9870fd9eea4b92787bb6068 #jenkins server的认证密码
url: http://114.55.227.11:8080 #jenkins server的访问地址
user: jenkins #认证用户
config: "{{ lookup(‘template‘, ‘config.xml‘) }}"
8.2.18 supervisor模块 - name: Start {{project}}0..3
supervisorctl: name="{{item}}" state=started
with_items:- ‘{{project}}:0‘
- ‘{{project}}:1‘
- ‘{{project}}:2‘
- ‘{{project}}:3‘
when: result | failed
ignore_errors: True
管理进程用的模块
8.2.19 pause模块
8.2.20debug
当满足条件的时候,可以输出指定的字符串,当不满足条件时,则会跳过,不会输出字符串
- name: Test jenkins_job module
-
name: test
hosts: self
vars:
bianliang: ‘‘
tasks:-
name: echo love for vars
debug: msg=‘i love you‘
when: ansible_os_family =="RedHatiiii" - name: mkdir dir
file: path=/root/etcd/{{ bianliang }} state=directory
-
[[email protected] etcd]# vim a.yml
-
name: test
hosts: self
vars:
bianliang: ‘‘
tasks:-
name: echo love for vars
debug: msg=‘i love you‘
when: ansible_os_family =="RedHat" - name: mkdir dir
file: path=/root/etcd/{{ bianliang }} state=directory
8.2.21jenkins_job模块
-
-
name: Add jenkins job
hosts: jenkins
tasks:-
name: Add jenkins job
jenkins_job:
name: ‘{{project}}‘
password: 45ec4d09e9870fd9eea4b92787bb6068
url: http://114.55.227.11:8080
user: jenkins
config: "{{ lookup(‘template‘, ‘/root/playbook/jenkins/config.xml‘) }}"
8.2.22 wait_for模块
vars:
port: [] - name: port check
wait_for: port={{item}} delay=10 timeout=20
with_items:- "{{port}}"
-
以上是关于ansible常用模块的主要内容,如果未能解决你的问题,请参考以下文章
Ansible------Ansible概述,搭建,常用模块介绍
Ansible playbooks入门和编写规范Ansible Playbooks常用模块介绍常用模块集合