ansible模板_ansible script模块「建议收藏」

(142) 2024-05-27 17:01:01

简介

         前面说过ansible使用过程中无非是通过ansible  AD-Hoc的指令,或者是执行ansible -playbook预先编写的配置文件,但是归根结底就是操作各个模块来实现我们想要的功能,因此了解和学习相应的ansible模块是必然的。

        根据官方的分类,将模块按功能分类为:云模块、命令模块、数据库模块、文件模块、资产模块、消息模块、监控模块、网络模块、通知模块、包管理模块、源码控制模块、系统模块、单元模块、web设施模块、windows模块 ,具体可以参看官方页面。官方文档。下面我们就说些常用的模块。

 常用模块

 1.    command模块

         在远程主机上执行shell命令,此为默认模块,可以忽略-m选项,(不支持管道 | )

参数 选项 含义
chdir chdir   /opt 执行ansible切换到指定目录
creates creates=/data/file 如果文件存在,则跳过执行
removes removes=/data/file 如果文件存在则执行删除

示例1:chdir切换目录执行shell命令;

[root@clinet test1]# ansible web -m command -a 'chdir=/home/uos  pwd'
10.10.10.134 | CHANGED | rc=0 >>
/home/uos
10.10.10.135 | CHANGED | rc=0 >>
/home/uos
[root@clinet test1]# 

 示例2:creates,如果/opt/file1 文件存在则跳过后面的命令,不执行。

##134上存在/opt/file1 文件
[root@clinet test1]# ansible web -m command -a 'creates=/opt/file1   chdir=/home/uos pwd'
10.10.10.134 | SUCCESS | rc=0 >>
skipped, since /opt/file1 exists

10.10.10.135 | CHANGED | rc=0 >>
/home/uos
[root@clinet test1]# 

示例3:removes,如果/opt/file1 文件存在,则执行后端命令

##134上存在/opt/file1 文件
[root@clinet test1]# ansible web -m command -a 'removes=/opt/file1   chdir=/home/uos pwd'
10.10.10.135 | SUCCESS | rc=0 >>
skipped, since /opt/file1 does not exist

10.10.10.134 | CHANGED | rc=0 >>
/home/uos
[root@clinet test1]# 

 2.    shell模块

         功能:在远程主机上执行shell命令,支持管道等特殊符号的操作。

参数 选项 含义
chdir chdir=/opt 执行ansible的时候切换到指定目录
creates cteates=/opt/file1 文件存在则跳过执行
removes removes=/opt/file 文件存在,则执行

示例1: 通过shell命令过滤被控端主机的ip地址

[root@clinet test1]# ansible web -m shell -a "ifconfig ens33 |awk 'NR==2'"
10.10.10.134 | CHANGED | rc=0 >>
        inet 10.10.10.134  netmask 255.255.255.0  broadcast 10.10.10.255
10.10.10.135 | CHANGED | rc=0 >>
        inet 10.10.10.135  netmask 255.255.255.0  broadcast 10.10.10.255
[root@clinet test1]# 

3.    script模块

 功能:在被控节点,运行ansible主机的脚本

示例1:在ansible主机上编写xhz.sh脚本,然后推送至被控端进行执行。

root@clinet test1]# ansible web -m script -a './xhz.sh'
10.10.10.135 | CHANGED => {
    "changed": true, 
    "rc": 0, 
    "stderr": "Shared connection to 10.10.10.135 closed.\r\n", 
    "stderr_lines": [
        "Shared connection to 10.10.10.135 closed."
    ], 
    "stdout": "total 0\r\n", 
    "stdout_lines": [
        "total 0"
    ]
}
10.10.10.134 | CHANGED => {
    "changed": true, 
    "rc": 0, 
    "stderr": "Shared connection to 10.10.10.134 closed.\r\n", 
    "stderr_lines": [
        "Shared connection to 10.10.10.134 closed."
    ], 
    "stdout": "total 0\r\n", 
    "stdout_lines": [
        "total 0"
    ]
}
[root@clinet test1]# 

4.    yum模块

         功能:管理操作系统的软件包

参数 选项 含义
name httpd,nginx.... 指定软件包的名称或URL
state present(默认,安装软件),absent(卸载软件) 指定yum对应的方法
enablerepo

epel,base....

运行从哪些仓库获取软件
diablerepo

epel,base

禁止从哪些仓库获取软件
exclude kernel 排除某些软件包
download_only yes,no 仅下载软件包,不安装

 示例1:安装当前最新的nginx软件,已经安装则不会再安装。

[root@clinet test1]# ansible web -m yum -a 'name=nginx state=present'

示例2:安装最新的apache软件,指定使用epel源安装

[root@clinet test1]# ansible web -m yum -a 'name=nginx state=present enablerepo=epel'

 示例3:通过公网URL安装rpm软件

[root@clinet test1]# ansible web -m yum -a 'name=https://xxxx.rpm  state=present'

 示例4:更新apache软件,存在新版本才会更新

[root@clinet test1]# ansible web -m yum -a 'name=httpd state=latest'

 示例5:更新所有的软件包,内核包除外。

[root@clinet test1]# ansible web -m yum -a 'name=httpd state=latest exclude=kernel'

示例6:卸载apache软件

[root@clinet test1]# ansible web -m yum -a 'name=httpd state=absent'

5.    copy模块

         功能:从ansible主控端复制文件到远程主机

参数 选项 含义
src 复制本地目下的文件到远程主机
dest 文件复制到远程主机的绝对路径
owner root(default) 文件复制到远程主机并设置属主
group root(default) 文件复制到远程主机设置属组
mode file=644,directory=755 文件复制到远程主机,并设置权限
backup yes 备份被修改前的配置文件
content 新建文件并给文件添加内容

示例1:将本地的index.html文件推送到远程主机

[root@clinet test1]# ansible web -m copy -a 'src=./index.html dest=/usr/share/nginx/html owner=root group=root mode=644'

示例2:往文件中写内容,,远程主机上有该同名文件就先备份,没有的话就直接创建(content参数不能和src同时使用,且dest不能为目录)

ansible web -m copy -a 'dest=/usr/share/nginx/html/index.html  owner=root group=root mode=644 backup=yes content="xhz123"'

 6.    file模块

 功能:为被控端创建文件或目录,设定权限属性

参数 选项 含义
path 指定远程主机的路径
recurse yes 递归方式,可以批量授权
state touch,directory,link,absent

touch:创建文件

directory:创建目录

link:软连接

absent:删除

owner root(defult) 远程主机创建文件或目录的属主
group root(default) 远程主建创建文件或目录的属组
mode file=644,directory=755 设定权限

示例1:创建文件,并设定属主,属组和权限

ansible web -m file -a 'path=/tmp/foot.txt state=touch owner=uos group=uos mode=777'

示例2:创建目录,并设定属主,属组和权限

##在多级目录下创建目录或者文件的时候,只要前几级目录不存在,就会递归创建,同时权限与设置的一样
ansible web -m file -a 'path=/tmp/xhz/ansible state=directory owner=uos group=uos mode=755'

示例3:递归修改权限。

ansible web  -m file -a 'path=/tmp/xhz state=directory owner=uos group=uos mode=777 recurse=yes'

示例4:创建连接,并设定属主,属组和权限

ansible web -m file -a 'src=/root/xhz dest=/tmp/xhz/ansible/flf  state=link owner=uos group=uos'

 7.    lineinfile模块

 功能:修改或删除文件内容,与sed命令类似。

参数 选项 含义
path 指定要操作的文件
regexp 使用正则表达式匹配对应的行
line 修改为新的内容
insertafter 将文本插入到指定行之后
insertbefore 将文本插入到指定行之前
state absent,present(default) 删除指定的文本时,state=absent
backrefs yes,no 支持后向引用,当未匹配到内容时候,则不操作文件
backup yes,no 操作文件前是否备份
create yes。no 当文件不存在时,是否创建

示例1:将selinux修改为disabled状态

ansible web -m lineinfile -a 'path=/etc/selinux/config line=SELINUX=disabled regexp="^SEKINUX=" backup=yes backrefs=yes'

示例2:删除/etc/selinux/config文件中以#开头的行

ansible web -m lineinfile -a 'path=/etc/selinux/config state=absent regexp="^#" backup=yes backrefs=yes'

示例3:替换/etc/hosts文件中以127.0.0.1的行为 127.0.0.1   route.xhz.com

ansible 10.10.10.134 -m lineinfile -a 'path=/etc/hosts regexp="^127\.0\.0\.1" line="127.0.0.1  route.xhz.com" backup=yes backrefs=yes'

示例4:在/etc/resolv.conf 文件中添加114.114.114.114的DNS

ansible web -m lineinfile -a 'path=/etc/resolv.conf insertafter="^nameserver 10.10.10.2$" line="nameserver 114.114.114.114"    backup=yes'

8.    get_url模块

功能:通过互联网下载软件至被控端本地 

参数 选项 含义
url http,https 资源文件在互联网的具体位置
dest 文件下载保存位置的绝对路径
mode 文件下载后的权限
checksum md5,sha256 对下载资源进行校验
timeout 10(default) url请求超时时间

 示例1:下载互联网的包到本地

ansible web -m get_url -a 'url="https://cdimage.uniontech.com/device/iso-tailor_2.1.6-1_all.deb" dest=/tmp mode=755 timeout=15'

示例2:下载互联网的包到本地,并进行校验

ansible web -m get_url -a 'url="https://cdimage.uniontech.com/device/iso-tailor_2.1.6-1_all.deb" dest=/tmp mode=755 timeout=15 checksum=md5:a68aa1e0eec9da42005732d354a30cf0'

9.    systemd模块

 功能:管理服务启动和停止,与service模块用法一致。

参数 选项 含义
name https,nginx.... 指定服务名称
state

started:启动

stopped:停止

restarted:重启

reloaded:重置

enabled yes,no 允许服务是否开机自启

示例1:  启动nginx服务,并设置开机自启

ansible web -m systemd -a 'name=nginx state=started enabled=yes'

 10.    group模块

功能:管理被控端的用户组

参数 选项 含义
name 指定创建的组名
gid 为组设置可选gid
state

present(default):创建组,

absent:删除组

是否在远程主机上创建组
system yes,no(default) 是否创建系统组

示例1:创建news组,组id设置为999

ansible web -m group -a 'name=news gid=9999 state=present'

示例2:删除news组

ansible web -m group -a 'name=news state=absent'

 11.    user模块

 功能:管理被控端用户

参数 选项 含义
name 创建或删除的用户名
udi 为用户设置uid
group 为用户设置属组
groups 为用户设置附加组
shell 为用户设置登录shell
create_home yes(default),no 为用户创建家目录
state

present(default):创建,

absent:删除

创建或删除用户
remove yes,no(default) 删除用户相关联的目录,只有当state=absent时才生效
generate_ssh_key yes,no(default) 为相关用户生成ssh秘钥,不会覆盖现有的ssh秘钥
ssh_key_bits 2048 指定ssh加密秘钥的位数
ssh_key_file .ssh/id_rsa(default) 指定ssh key文件名,当文件路径为相对路径时,默认为家目录,可以指定为绝对路径来指定保存位置

 示例1:创建joh用户,uid为1040,属组为adm

ansible web -m user -a 'name=joh uid=1040 group=adm'

示例2:创建lisa用户,shell为/sbin/nologin,添加两个附加组bin,sys

ansible web -m user -a 'name=lisa state=present shell=/sbin/nologin groups=bin,sys'

示例3:创建jsm用户,为其添加123作为登录密码,并创建家目录

ansible web -m user -a 'name=jsm state=present password=jsDCEOEt1Y6CQ'

 注意:

        这里的password的参数是进行加密后的,在ansible中,使用user创建用户不可以使用明文密码。

推荐加密方式:(使用python普通加密)

import   crypt

crypt.crypt('123','456')    ##123为密码,456为加盐字符串

 示例4:删除用户

ansible web -m user -a 'name=jsm state=absent remove=yes'

12.    cron模块

功能:管理被控端计划任务。

参数 选项 含义
name 定时任务基本描述
job 定时任务执行的命令
minute (Default)0-99 分,默认为*
hour (default)0-13 时,默认为*
day (default)1-31 日,默认为*
month (default)1-12 月,默认为*
weekday (default)0-6 周,默认为*

示例1:添加定时任务,每分钟执行一次   * * * * *  ls  -l  >>  /tmp/ls.txt

ansible web -m cron -a 'name=cron01 job="ls -l >> /tmp/ls.txt"'

示例2:添加定时任务,每天凌晨2点和5点执行一次 * 2,5 * * * ls  -l  >>  /tmp/ls.txt

ansible web -m cron -a 'name=cron01 job="ls -l >> /tmp/ls.txt" minute=0 hour=2,5'

 示例3:取消任务

ansible web -m cron -a 'name=cron01 job="ls -l >> /tmp/ls.txt" minute=0 hour=2,5 disabled=yes'

13.    mount模块

 功能:管理被控端的挂载设备。

参数 选项 含义
src 远程主机共享目录
path 本地挂载的路径
fstype xfs,nfs.... 文件系统类型
opts defaults,ro.... 挂参数载iazaug
state present,absent,mounted,unmounted 挂载状态

示例1:将10.10.10.136上的nfs共享目录,挂载到10.10.10.134的/data目录上,并实现开机自动挂载。

ansible 10.10.10.134  -m mount -a 'src=10.10.10.136:/data/xhz path=/data fstype=nfs opts=defaults state=mounted'
[root@route data]# 
[root@route data]# 
[root@route data]# df -hT 
Filesystem              Type      Size  Used Avail Use% Mounted on
devtmpfs                devtmpfs  899M     0  899M   0% /dev
tmpfs                   tmpfs     910M     0  910M   0% /dev/shm
tmpfs                   tmpfs     910M  9.6M  901M   2% /run
tmpfs                   tmpfs     910M     0  910M   0% /sys/fs/cgroup
/dev/mapper/centos-root xfs        39G  2.7G   36G   7% /
/dev/sda1               xfs      1014M  183M  832M  18% /boot
/dev/mapper/centos-home xfs        19G   33M   19G   1% /home
tmpfs                   tmpfs     182M     0  182M   0% /run/user/0
10.10.10.136:/data/xhz  nfs4       39G  2.6G   36G   7% /data
[root@route data]# 
[root@route data]# 
[root@route data]# cat /etc/fstab 
10.10.10.136:/data/xhz /data nfs defaults 0 0
[root@route data]# 

实例2:临时卸载nfs的共享目录,但是不清理/etc/fstab

ansible 10.10.10.135  -m mount -a 'src=10.10.10.136:/data/xhz path=/data fstype=nfs opts=defaults state=unmounted'

示例3:永久卸载nfs共享目录,清理/etc/fstab

ansible 10.10.10.135  -m mount -a 'src=10.10.10.136:/data/xhz path=/data fstype=nfs opts=defaults state=absent'

注意:

    state的几种状态:

present:不挂载,检查nfs的联通性。

mounted:挂载,并写入/etc/fstab

unmounted:临时卸载,不清理/etc/fstab

absent:永久卸载,清理/etc/fstab

 14:.    hostname模块

 功能:管理被控端的主机名

示例1:设置主机名为route.xhz.com

ansible 10.10.10.134 -m hostname -a 'name=route.xhz.com'

15.    archive模块

 功能:打包与压缩

参数 选项 含义
path 要压缩的文件或目录
dest 压缩后的文件
format bz2,gz,tar,xz,zip 指定打包压缩的格式

 示例1:将/var/log压缩为gz格式后保存在/tmp目录下

ansible 10.10.10.134 -m archive -a 'path=/var/log  dest=/tmp/log.tar.gz  format=gz'

##其他格式
ansible 10.10.10.134 -m archive -a 'path=/var/log  dest=/tmp/log.zip  format=zip'

ansible 10.10.10.134 -m archive -a 'path=/var/log  dest=/tmp/log.tar  format=tar'

ansible 10.10.10.134 -m archive -a 'path=/var/log  dest=/tmp/log.tar.bz2  format=bz2'

  16.    unarcive模块

 功能:解压缩

参数 选项 含义
src 压缩包所在的路径
dest 解压到指定位置
remote_src yes,no(默认)

yes:要解压的包在被控端

no:要解压的包在控制端

示例1: 解压被控端/tmp/log.zip文件,解压到/data目录(zip文件需要在被控端)

ansible 10.10.10.134 -m unarchive -a 'src=/tmp/log.zip dest=/data remote_src=yes'

示例2:解压控制端/data/log.tar.gz文件,解压到被控端的/data下面(tar.gz在控制端)

ansible 10.10.10.134 -m unarchive -a 'src=/data/log.tar.gz  dest=/data remote_src=no'

17.    selinux模块

 功能:管理selinux防火墙

参数 选项 含义
state enforcing,permissive,disabled

示例1:设置selinux为enforcing

ansible web -m selinux -a 'state=enforcing'

结束语:

        ansible的模块有上百个,上面我们只说了极小部分常用的模块,更多模块使用可以查看官网的详细信息。模块的理解和使用时必然的,这将为我们后面ansible-playbook的编写打下夯实的基础。

THE END

发表回复