ansible常用模块的介绍和使用

常用模块介绍

 

一)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"

posted @ 2019-11-28 20:14  迷路的大雁  阅读(554)  评论(0编辑  收藏  举报