设为首页 收藏本站
查看: 1376|回复: 1

[经验分享] ansible的常用模块的介绍和使用

[复制链接]
累计签到:67 天
连续签到:1 天
发表于 2019-11-28 19:57:18 | 显示全部楼层 |阅读模式
常用模块介绍

一)ping模块

测试主机是否是通的,用法简单,不涉及参数;

ansible -i /etc/ansible/hosts web  -m ping

-i : 指定Inventory (清单) 文件,一般是指ansible的hosts文件

二)setup模块

setup模块,主要用于获取主机信息,在playbooks里经常会用到,gather_facts就与该模块相关,setup模块下经常使用的一个参数是filter参数,具体示下:

查看主机内存信息



查看接口为ens33的网卡信息:




将主机的信息输出到指定的目录下,每台主机的信息输入到主机文件中(/etc/ansible/hosts里的主机名)


结果是在/tmp/facts目录下有/etc/ansible/hosts文件中的主机信息,可以是用cat查看文件内容;


三)file模块

file模块主要用于远程主机上的文件操作,具体使用如下:
创建一个软连接
管理节点的命令:



受控节点的结果:



删除文件:

管理节点的命令:

受控节点的结果:


创建文件:
管理节点的命令:


受控节点的结果:



file模块常用的参数:
force:需要在两种情况下强制创建软连接,一种是源文件不存在但之后会建立的情况下;另一种是目标软连接已经存在,需要先取消之前的软连接,然后创建新的软连接,有两个选项:yes|no;
group:定义文件/目录的属组;
mode:定义文件/目录的权限;
owner:定义文件/目录的属主;
path:必选项,定义文件/目录的路径,required;
recurse:递归的设置文件的属性,只对目录有效;
src:要被链接的源文件的路径,只应用于state=like的情况;
dest:被链接到的路径,只应用于state=link的情况;
state:
    directory:如果目录不存在,创建目录;
    file:即使文件不存在,也不会被创建;
    link:创建软连接;
    hard:创建 硬链接;
    touch:如果文件不存在,则会创建 一个新的文件,如果文件或目录已存在,则更新其左后修改时间;
    absent:删除目录、文件或者取消连接文件;

四)copy模块

复制文件到远程主机,如下示例:

管理节点:
拷贝文件并修改属组属主和权限

受控节点:


$ ansible test -m copy -a "src=/mine/ntp.conf dest=/etc/ntp.conf owner=root group=root mode=644 backup=yes"        #拷贝文件到远程主机并保留备份文件
控制节点

被控节点



$ ansible test -m copy -a "src=/mine/sudoers dest=/etc/sudoers validate='visudo -cf %s'"        有待验证

常用参数:
backup          #在覆盖之前将原文件备份,备份文件包含时间信息。有两个选项:yes|no;
content         #用于替代"src",可以直接设定指定文件的值;
directory_mode  #递归的设定目录的权限,默认为系统默认权限;
force           #如果目标主机包含该文件,但内容不同,如果设置为yes,则强制覆盖,如果为no,则只有当目标主机的目标位置不存在该文件时,才复制。默认为yes;
others          #所有的file模块里的选项都可以在这里使用;
dest            #必选项,要将源文件复制到的远程主机的绝对路径,如果源文件是一个目录,那么该路径也必须是个目录, required;
src             #要复制到远程主机的文件在本地的地址,可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将递归复制。在这种情况下,#如果路径使用"/"来结尾,则只复制目录里的内容,如果没有使用"/"来结尾,则包含目录在内的整个内容全部复制,类似于rsync;
validate        #复制文件前进行验证,文件的路径的验证是通过"%s";

五)service模块

用于管理主机服务,能够同时管理centos6和7,不区分centos6的service和centos7的systemctl,实例如下:



网卡重启:



nginx服务启动:



结果:


常用参数:
name        #必选项,服务名称;
state       #对当前服务执行启动,停止、重启、重新加载等操作(started, stopped, restarted, reloaded);
enabled     #是否开机启动yes|no;
pattern     #定义一个模式,如果通过status指令来查看服务的状态时,没有响应,就会通过ps指令在进程中根据该模式进行查找,如果匹配到,则认为该服务依然在运行;
runlevel    #运行级别;
arguments   #给命令行提供一些选项;
sleep       #如果执行了restarted,在则stop和start之间沉睡几秒钟;



六)cron模块

用于管理计划任务,实例如下:

管理节点:

受控节点:


管理节点:

受控节点:



管理节点:

受控节点:


管理节点:

受控节点:


管理节点:


常用参数:
name          #该任务的描述;
backup        #对远程主机上的原任务计划内容修改之前做备份;
cron_file     #如果指定该选项,则用该文件替换远程主机上的cron.d目录下的用户的任务计划;
day           #日(1-31,,/2,……);
hour          #小时(0-23,,/2,……);
minute        #分钟(0-59,,/2,……);
month         #月(1-12,,/2,……);
weekday       #周(0-7,*,……);
job           #要执行的任务,依赖于state=present;
special_time  #指定什么时候执行,参数:reboot(重启时),yearly(每年),annually,monthly,weekly,daily,hourly;
state         #确认该任务计划是创建还是删除;
user          #以哪个用户的身份执行;

七)yum模块

使用yum包管理器来管理软件包,实例如下:

1.安装最新版本的apache



2. 移除apache



3. 升级所有的软件包



4. 安装整个Development tools 相关的软件包



5. 从本地仓库安装

ansible test -m yum -a 'name=/usr/local/src/nginx-release-centos-6-0.el6.ngx.noarch.rpm state=present'

6. 从远程仓库安装


ansible test -m yum -a 'name=http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm state=present'











常用参数:
name               #要进行操作的软件包的名字,也可以传递一个url或者一个本地的rpm包的路径;
config_file        #yum的配置文件;
disable_gpg_check  #关闭gpg_check;
disablerepo        #不启用某个源;
enablerepo         #启用某个源;
state              #用于描述安装包最终状态,<em>present/latest</em>用于安装包,<em>absent</em>用于卸载安装包。

八)、user模块

用户管理模块,使用实例:



结果:


常用参数:
home        #指定用户的家目录,需要与createhome配合使用;
comment     #此参数用于指定用户的注释信息
groups      #指定用户的属组;
uid         #指定用的uid;
password    #指定用户的密码;
name        #指定用户名;
createhome  #是否创建家目录yes|no;
system      #是否为系统用户;
remove      #当state=absent时,remove=yes则表示连同家目录一起删除,等价于userdel -r;
state       #是创建还是删除;
shell       #指定用户的shell环境;
state       #此参数用于指定用户是否存在于远程主机中,可选值有present、absent,默认值为present,表示用户需要存在,当设置为absent时表示删除用户



注:指定password参数时,不能使用明文密码,因为后面这一串密码会被直接传送到被管理主机的/erc/shadow文件中,所以需要先将密码字符串进行加密处理,然后将得到的字符串放到password中即可。

生成密码:
echo "123456" | openssl passwd -1 -salt $(< /dev/urandom tr -dc '[:alnum:]' | head -c 32) -stdin


发行版本不同使用的加密方法可能不同,具体查看/etc/login.defs文件确认

九) group模块

组管理模块,使用实例如下:



常用参数:

gid     #指定gid;
name    #指定组名称;
state   #操作状态,present,absent;
system  #是否为系统组;



十) filesystem模块

在块设备上创建文件系统,实例如下:

$ ansible test -m filesystem -a 'fstype=ext2 dev=/dev/sdb1 force=yes'
$ ansible test -m filesystem -a 'fstype=ext4 dev=/dev/sdb1 opts="-cc"'


常用参数:

dev     #目标块设备;
force   #在一个已有文件系统的设备上强制创建;
fstype  #文件系统的类型;
opts    #传递给mkfs命令的选项;

十一) mount模块

配置挂载点:

$ ansible test -m mount 'name=/mnt/dvd src=/dev/sr0 fstype=iso9660 opts=ro state=present'
$ ansible test -m mount 'name=/srv/disk src='LABEL=SOME_LABEL' state=present'
$ ansible test -m mount 'name=/home src='UUID=b3e48f45-f933-4c8e-a700-22a159ec9077' opts=noatime state=present'



$ ansible test -a 'dd if=/dev/zero of=/disk.img bs=4k count=1024'
$ ansible test -a 'losetup /dev/loop0 /disk.img'
$ ansible test -m filesystem -a 'fstype=ext4 force=yes opts=-F dev=/dev/loop0'
$ ansible test -m mount 'name=/mnt src=/dev/loop0 fstype=ext4 state=mounted opts=rw'


常用参数:

fstype    #必选项,挂载文件的类型;
name      #必选项,挂载点;
opts      #传递给mount命令的参数;
src       #必选项,要挂载的文件;
state     #必选项;
present   #只处理fstab中的配置;
absent    #删除挂载点;
mounted   #自动创建挂载点并挂载之;
umounted  #卸载;

十二) get_url模块

该模块主要用于从http https ftp 服务器上下载文件(类似于wget)



常用参数:

sha256sum                   #下载完成后进行sha256 check;
timeout                     #下载超时时间,默认10s;
url                         #下载的URL;
url_password、url_username  #主要用于需要用户名密码进行验证的情况;
use_proxy                   #使用代理,代理需事先在环境变更中定义;


十三)unarchive模块

用于解压文件的模块:
管理节点:



受控节点



解压文件不拷贝压缩包到地址目录中:

控制节点:



受控节点:



从网上下载压缩包并解压至指定的目录:

管理节点



受控节点 :




常用参数:

copy        #在解压文件之前,是否先将文件复制到远程主机,默认为yes。若为no,则要求目标主机上压缩包必须存在;
creates     #指定一个文件名,当该文件存在时,则解压指令不执行;
dest        #远程主机上的一个路径,即文件解压的路径;
group       #解压后的目录或文件的属组;
list_files  #如果为yes,则会列出压缩包里的文件,默认为no,2.0版本新增的选项;
mode        #解决后文件的权限;
src         #如果copy为yes,则需要指定压缩文件的源路径;
owner       #解压后文件或目录的属主;



十四) script模块

在指定的节点上执行shell/python脚本(注意,该脚本是在ansible控制节点上的)

ansible web -m script -a '/root/src.sh'

十五) shell模块

在指定的节点上执行shell/python脚本(注意,该脚本在远程节点上)shell模块支持' “|”,变量“$”,以及重定向'

ansible web -m shell -a '/bin/bash /root/dest.sh'

十六)command 模块

用于执行远程系统命令,此模块为ansible默认执行的模块,也是常用的模块之一;command模块不支持' “|”,变量“$”,以及重定向'



十七)raw 模块

类似于command模块,区别在于raw模块支持管道传递:



十八)Template模块

template 使用了Jinja2格式作为文件模块,进行文档内变量的替换模块,它的每次使用都会被ansible标记为"changed"状态。

十九)git模块
- accept_hostkey:接受key,默认是no
- key_file:指定私钥的位置和名称
- repo:指定git代码仓库的地址
- dest:指定代码克隆的地址
- version:指定版本
二十)git_conf模块
list_all:yes or no 列出所有设置范围
name:设置的名称。如果未提供任何值,则将从配置中读取该值(如果已设置)查看git config help中的core字段的值
repo:git存储库的路径,用于从特定存储库读取和写入值
scope:local or global、system 指定从哪个范围读取/设置值。设置配置值时,这是必需的。如果将其设置为local,则还必须指定repo参数。仅在不使用list_all = yes时默认为system
value:指定单个设置的名称时,请提供一个值以将该设置设置为给定值,此值也是查看git config help中的values字段的值
二十一)synchronize模块
使用rsync同步文件,将主控方目录推送到指定节点的目录下,其参数如下:
- delete:删除不存在的文件,delete=yes 使两边的内容一样(即以推送方为主),默认是no
- src:要同步到目的地的源主机上的路径;路径可以是绝对的或相对的,如果路径使用"/"来结尾,则只复制目录里的内容,如果没有使用"/"来结尾,则包含目录在内的整个内容全部复制。
- dest:目的地主机上将与源同步的路径;路径可以是绝对路径或相对路径。
- dest_port:默认目录主机上的端口,默认是22,走的是ssh协议。
- mode:push或pull,默认push
,一般用于从本机向远程主机上传文件,pull 模式用于从远程主机上拉去文件。
- rsyn_opts:通过传递参数组来指定其他rsyn选项。
- archive:镜像rsync存档标志,启用递归、链接、排列、时间、所有者、组标志。
- recursive:递归式同步
- checksum:校验文件的属性。
例子:
EXAMPLES:
# Synchronization of src on the control machine to dest on the remote hosts
- synchronize:
    src: some/relative/path
    dest: /some/absolute/path

# Synchronization using rsync protocol (push)
- synchronize:
    src: some/relative/path/
    dest: rsync://somehost.com/path/

# Synchronization using rsync protocol (pull)
- synchronize:
    mode: pull
    src: rsync://somehost.com/path/
    dest: /some/absolute/path/

# Synchronization using rsync protocol on delegate host (push)
- synchronize:
    src: /some/absolute/path/
    dest: rsync://somehost.com/path/
  delegate_to: delegate.host

# Synchronization using rsync protocol on delegate host (pull)
- synchronize:
    mode: pull
    src: rsync://somehost.com/path/
    dest: /some/absolute/path/
  delegate_to: delegate.host

# Synchronization without any --archive options enabled
- synchronize:
    src: some/relative/path
    dest: /some/absolute/path
    archive: no

# Synchronization with --archive options enabled except for --recursive
- synchronize:
    src: some/relative/path
    dest: /some/absolute/path
    recursive: no

# Synchronization with --archive options enabled except for --times, with --checksum option enabled
- synchronize:
    src: some/relative/path
    dest: /some/absolute/path
    checksum: yes
    times: no

# Synchronization without --archive options enabled except use --links
- synchronize:
    src: some/relative/path
    dest: /some/absolute/path
    archive: no
    links: yes

# Synchronization of two paths both on the control machine
- synchronize:
    src: some/relative/path
    dest: /some/absolute/path
  delegate_to: localhost

# Synchronization of src on the inventory host to the dest on the localhost in pull mode
- synchronize:
    mode: pull
    src: some/relative/path
    dest: /some/absolute/path

# Synchronization of src on delegate host to dest on the current inventory host.
- synchronize:
    src: /first/absolute/path
    dest: /second/absolute/path
  delegate_to: delegate.host

# Synchronize two directories on one remote host.
- synchronize:
    src: /first/absolute/path
    dest: /second/absolute/path
  delegate_to: "{{ inventory_hostname }}"

# Synchronize and delete files in dest on the remote host that are not found in src of localhost.
- synchronize:
    src: some/relative/path
    dest: /some/absolute/path
    delete: yes
    recursive: yes

# Synchronize using an alternate rsync command
# This specific command is granted su privileges on the destination
- synchronize:
    src: some/relative/path
    dest: /some/absolute/path
    rsync_path: "su -c rsync"

# Example .rsync-filter file in the source directory
# - var       # exclude any path whose last part is 'var'
# - /var      # exclude any path starting with 'var' starting at the source directory
# + /var/conf # include /var/conf even though it was previously excluded

# Synchronize passing in extra rsync options
- synchronize:
    src: /tmp/helloworld
    dest: /var/www/helloworld
    rsync_opts:
      - "--no-motd"
      - "--exclude=.git"

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-989045-1-1.html 上篇帖子: ansible企业级应用与实战 下篇帖子: Ansible自定义模块开发
累计签到:1689 天
连续签到:6 天
发表于 2020-8-3 16:13:55 | 显示全部楼层
我爱玉女I Yu nv,但我更爱运维I Yun V.请记住我们www.iyunv.com

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则  允许回帖邮件提醒楼主

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 在线客服QQ:点击这里给我发消息


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud bjyun

快速回复 返回顶部 返回列表