ansible史上最全常见企业级应用模块详解
ansible常见企业级应用模块详解
查看模块帮助文档
ansible-doc -l #查看所有模块
ansible-doc -s MODULE_NAME #查看指定模块的详细帮助
ansible命令应用基础使用
ansible: (host-pattern)
#语法说明:
ansible <host-pattern> [-f forks] [-m module_name] [-a args]
#参数说明:
-f forks #启动的并发线程数
-m module_name #要使用的模块
-a args #模块特有的参数
ansible-galaxy
连接galaxy.ansible.com下载相应的roles(角色)
- 列出所有已经安装的galaxy
ansible-galaxy list
- 安装galaxy,角色包
ansible-galaxy install geerlingguy.redis
- 删除galaxy角色包
ansible-galaxy remove geerlingguy.redis
ansible模块详解
ping模块
- 一个简单的测试模块,这个模块总是返回‘pong’在成功连接时,这个模块在剧本中时没有意义的,但是能够使用ansible命令验证登陆能力和用于pyth的配置,
- 这个并不是传统的ICMP ping,而是先检查能否通过SSH登陆节点,在检查python版本是否满足要求,能满足返回pong,
[[email protected] /server/scripts 20:37:43]# ansible shuai -m ping
172.16.1.31 | SUCCESS => {
"changed": false,
"ping": "pong"
}
172.16.1.41 | SUCCESS => {
"changed": false,
"ping": "pong"
}
copy模块
使用说明
ansible 主机组模块名 -m 模块名称-a “src=源 dest=目标”
ansible 主机组模块名 -m 模块名称 -a “src=源 dest=目标 backup=yes”
说明:backup选项在分发文件前,对以后源文件进行备份
ansible 主机组模块名-m 模块名称 -a “src=源 dest=目标 mode=600 owner=shuai
group=shuai backup=yes”
说明:更改用户权限
ansible 主机组模块名 -m 模块名称 -a “content='shuai NB\n' dest=目标/zhang.txt mode=600 owner=shuai group=shuai backup=yes”
ansible 主机组模块名-m 模块名称 -a “src=源 dest=目标/a/b/c/d/e/f mode=600 owner=shuiai group=shuai backup=yes
说明:可以递归创建目录,但是不能跟文件名!
小技巧可以把主控端的某个服务的配置文件复制一份直接copy到被控端,直接覆盖/变动文件
fetch: (从客户端取单个文件)
从被控端取文件到主控端,与copy模块相反
注意!只能抓取被控端的单个
!文件
!,不能是目录
!
# 演示
ansible app -m fetch -a 'src=/ansible/1.sh dest=/data/'
src : 源
dest : 目标,在抓取文件到主控端后,会生成一个被控端主机IP,及抓取时的文件的路径!
因为只能抓取一个文件,可以先行打包文件,然后在抓取压缩包
shell模块:(万能模块、可以操作特殊符号)
ansible 主机组模块名 -m 模块名称 -a “脚本/server/scripts/ceshi.sh”
ansible 主机组模块名 -m 模块名称 -a “命令tree /tmp”
ansible 主机组模块名 -m 模块名称script -a "脚本" # 利用script模块执行脚本
说明:script模块与shell模块的区别
(1)shell:需要将脚本文件复制到远程服务器,然后执行远程服务器上的脚本
(2)script:不需要将脚本文件复制到远程服务器上,实质是将脚本执行过程在远程服务器上进行执行
script模块: (运行脚本)
(1)script模块的作用是在运行脚本的是,无需
在被控端运行脚本
,直接在主控端写好脚本
后,直接运行,会在所有被控端主机上执行
主控端里的脚本内容
(2)相当于scp+shell组合
# 格式
ansible 172.16.1.21 -m script -a
'/PATH/TO/SCRIPT_FILE'
#演示
ansible 172.16.1.21 -m script -a ceshi.sh
"changed": true,
"rc": 0,
"stderr": "Shared connection to 172.16.1.21 closed.\r\n",
"stderr_lines": [
"Shared connection to 172.16.1.21 closed."
],
"stdout": "node1\r\nnode1\r\n",
"stdout_lines": [
"node1",
"node1"
]
}
command模块 :(最通用的功能、默认模块)
因为是默认模块可以不写command
ansible app -a 'df -h'
ansible shuai -m command -a "free -m"
ansible shuai -m command -a "cat /etc/redhat-release"
# 说明:执行一个命令在远程节点上
特殊点
:不支持的字符,例如 > < | &等 $HOME,替代方案利用用shell模块
ansible shuai -m shell -a "ps -ef|grep ssh"
ansible shuai -m shell -a "echo oldboy >/tmp/a.log"
yum模块:通过yum模块安装软件
依赖于机器里的yum源,如果yum源不匹配会安装失败
# 安装nmap包
ansible shuai -m yum -a “name=nmap state=installed”
#多个包一起安装方法
name=vsftp,nmap,nginx,mysql
#卸载包
ansible shuai -m yum -a "name=nmap state=removed"
#更新yum缓存
ansible shuai -m yum -a “name=nmap update_cache=yes”
小技巧:
如果是在互联网上下载下来的rpm包
,可以先从主控端使用copy模块
复制到被控端,然后在使用yum模块
进行安装!
service模块:管理软件服务
ansible 主机 -m service -a “name=服务名 state=状态
ansible app -m service -a "name=vsftp state=started"
ansible app -m service -a "name=vsftp state=started enabled=yes"
都是过去式(stoped/restarted/started)
enabled=是否开机启动<===>yes/no”
file模块:设置文件属性
说明:设置文件属性信息/链接/目录或者移动文件/链接/目录,很多相同的模块有(copy/template/assemble)
- file模块参数使用说明:
ansible 主机 -m 模块 -a src= dest= state=
# 创建硬连接
ansible shuai -m file -a "src=源,远程主机信息 dest=目标 state=hard"
# 创建软连接,于copy的src不同的是copy是指本地源,file的src是指远端
ansible shuai -m file -a "src=源,远程主机信息 dest=目标 state=link"
# 创建目录
ansible shuai -m file -a “dest=目标 state=directory”
# 创建文件,类似于touch命令的工作方式
ansible shuai -m file -a “dest=目标 state=touch”
#或
ansible app -m file -a 'name=/ansible/f2 state=touch'
# 递归删除,如果文件链接会取消链接
ansible shuai -m file -a “dest=目标 state=absent”
# 更改用户权限
ansible app -m file -a 'path=/ansible/1.sh owner=root mode=777'
上面用到的:
path/name/dest
都是相同的作用
state : 状态,指定一个操作命令
cron模块:计划任务管理模块
- 参数:
minute: # Minute when the job should run ( 0-59, *, */etc )
hour: # Hour when the job should run ( 0-23, *, */2, etc )
day: # Day of the month the job should run ( 1-31, */2, etc )
month: # Month of the year the job should run ( 1-12, */2, etc )
weekday: # Day of the week that the job should run ( 0- for Sunday-Saturday, *, etc )
job: # The command to execute or, if env is set, the value of environment variable. The command should not contain line breaks. Required if state=present(指定要干什么事/添加,默认参数,如果不等于会出错).
- 正常写法:
* * * * * /bin/sh /server/scripts/test.sh &>/dev/null
- 模块写法:
# 例一:
ansible shuai -m cron -a "name=alicron minute=*/5 job='/usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1'"
# 例二:删除任务/慎用
ansible shuai -m cron -a "name=alicron minute=*/5 job='/usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1' state=absent"
# 例三:注释定时任务信息
ansible shuai -m cron -a "name=alicron minute=*/5 job='/usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1'disabled=yes/no“
name=alicron #给计划任务起名,可以防止多重添加一样的定时任务
hostname: (管理主机名)
修改主机名,并且连带修改掉
/etc/hostname
文件内容
ansible app -m hostname -a 'name=appserver'
user : (管理用户)
Ansible user模块主要用于操作系统用户、组、权限、密码等操作
- user模块使用详解:
system:默认创建为普通用户,为
yes
则创建系统用户
append:添加一个新的组
comment:添加描述信息
createhome:给用户创建家目录
force:强制删除用户
group:创建用户主组
groups:将用户加入组或者附属组添加
home:指定用户的家目录
name:表示状态,是否create、remove、modify
password:指定用户的密码,为加密密码
remove:删除用户
shell:设置用户的shell登录环境
uid:设置用户ID
update_password:修改用户密码
state:用户状态,默认为present,表示新建用户
- 模块使用演示
# 创建用户
nsible app -m user -a 'name=nginx shell=/sbin/nologin system=yes home=/var/nginx groups=root,bin uid=504 comment="nginx service"'
# 删除用户并删除家目录
ansible app -m user -a 'name=nginx state=absent remove=yes'
mount模块:挂载模块
- 配置挂载点
参数说明:
dump
fstype:必选项,挂载文件的类型
name:必选项,挂载点
opts:传递给mount命令的参数
src:必选项,要挂载的文件
state:必选项
present:只处理fstab中的配置
absent:删除挂载点
mounted:自动创建挂载点并挂载之
umounted:卸载
- 模块演示说明:
ansible test -m mount -a 'name=/mnt/dvd src=/dev/sr0 fstype=iso9660 opts=ro state=present'
ansible test -m mount -a 'name=/srv/disk src='LABEL=SOME_LABEL' state=present'
ansible test -m mount -a 'name=/home src='UUID=b3e48f45-f933-4c8e-a700-22a159ec9077' opts=noatime state=present'
ansible test -m mount -a 'dd if=/dev/zero of=/disk.img bs=4k count=1024'
ansible test -m mount -a 'losetup /dev/loop0 /disk.img'
ansible test -m filesystem 'fstype=ext4 force=yes opts=-F dev=/dev/loop0'
ansible test -m mount 'name=/mnt src=/dev/loop0 fstype=ext4 state=mounted opts=rw'
synchronize模块:使用rsync同步文件模块
- 使用rsync同步文件,其参数如下:
(1)archive: 归档,相当于同时开启recursive(递归)、links、perms、times、owner、group、-D选项都为yes ,默认该项为开启
(2)checksum: 跳过检测sum值,默认关闭
(3)compress:是否开启压缩
(4)copy_links:复制链接文件,默认为no ,注意后面还有一个links参数
(5)delete: 删除不存在的文件,默认no
(6)dest:目录路径
(7)dest_port:默认目录主机上的端口 ,默认是22,走的ssh协议
(8)dirs:传速目录不进行递归,默认为no,即进行目录递归
(9)rsync_opts:rsync参数部分
(10)set_remote_user:主要用于/etc/ansible/hosts中定义或默认使用的用户与rsync使用的用户不同的情况
(11)mode: push或pull 模块,push模的话,一般用于从本机向远程主机上传文件,pull 模式用于从远程主机上取文件
- 模块使用演示
ansible app -m synchronize -a 'src=some/relative/path dest=/some/absolute/path rsync_path="sudo rsync"'
# 复制链接文件
ansible app -m synchronize -a 'src=some/relative/path dest=/some/absolute/path archive=no links=yes'
ansible app -m synchronize -a 'src=some/relative/path dest=/some/absolute/path checksum=yes times=no'
ansible app -m synchronize -a 'src=/tmp/helloworld dest=/var/www/helloword rsync_opts=--no-motd,--exclude=.git mode=pull