29.6 ansible 常用模块
ansible 常用模块
上一节我们对 ansible 做了一个概括性的介绍,本节我们来看看 ansible 主程序与常见模块的使用,模块是我们定义服务配置的关键。
1. ansible 核心程序
ansible 的核心程序有三个
- ansible: ad-hoc 执行命令
- ansible-doc: ansible 插件(模块)文档查看工具
- ansible-playbook: playbook 执行命令
1,1 ansible
ansible <host-pattern> [-m module_name] [-a args] options
- 作用: ansible 命令行工具
- 模块:
[-m module_name]
: 指定使用的模块[-a args]
: 传递给模块的参数
- 选项: ansible 命令行工具的选项可分为三类
- 通用选项
- 连接选项
- 权限选项
- 通用选项:
-C, --check
: 不实际执行,只显示程序执行可能的结果-D, --diff
: 当执行的命令改变了文件或模板的内容时,显示更改前后的内容比较,最好和-C, --check
一起使用-e EXTRA_VARS, --extra-vars=EXTRA_VARS
: 向 ansible 传递的额外参数,参数值必需是行如key=value
的键值对-f FORKS, --forks=FORKS
: 并发操作的最大机器数-i INVENTORY, --inventory=INVENTORY, --inventory-file=INVENTORY
: 定义 inventory 文件位置--list-hosts
: 只显示被操作的主机--syntax-check
:只对 playbook 执行语法检查, 不执行-t TREE, --tree=TREE
: 日志的输出目录--version
: 显示 ansible 的版本信息
- 连接选项:
--private-key=PRIVATE_KEY_FILE
: 指定连接的密钥文件--key-file=PRIVATE_KEY_FILE
:指定连接的密钥文件-u,--user=REMOTE_USER
: 连接到被管控主机的帐户,默认为 None-c, --connection=CONNECTION
: 连接的类型,默认为 smart-T, --timeout=TIMEOUT
: 连接超时时长
- 权限选项:
-b, --become
:--become-user=BECOME_USER
: 提权限操作切换到的用户,默认为 root--become-method=BECOME_METHOD
: 进行权限升级时使用的操作,默认为 sudo,可选值包括sudo | su
--ask-become-pass
: 使用 sudo 或 su 时,使用的密码
host-pattern
ansible 支持多种主机匹配方式,以便我们能灵活的控制要操作的主机范围。常见的方式有如下几种
|
|
1.2 ansible-doc
ansible-doc options
- 作用: ansible 文档查看工具
- 选项:
-l, --list
: 显示所有可用插件及模块-s, --snippet=module
: 显示指定插件的的帮助信息-t, --type=TYPE
: 指定被选择的插件类型,默认为 module
|
|
ansible-doc 显示的参数都是可以在 ansible
命令中 通过 -a
选项中传递给模块的参数
|
|
ansible-playbook
ansible-playbook [options] playbook.yml [playbook2 ...]
- 作用: playbook 的执行命令
- 参数:
playbook.yml...
表示 playbook 的路经 - 选项:
ansible-playbook
与ansible
命令行工具的选项基本类似--playbook-dir=BASEDIR
: playbook 的根目录,这个根目录的设置会影响roles/ group_vars/
等目录的查找路经-t TAGS, --tags=TAGS
: 运行指定标签对应的任务
2.ansible 常用模块
ansible 命令的执行是为了达到期望的状态,如果被管控主机的当前状态与命令指定的状态不一致,则执行命令,所以ansible 的命令都是通过 state 参数指定要进行的操作。
2.1 基本模块
user
ansible -m user -a "options"
- 作用: 用户管理
- 选项:
name
: 用户名uid
: 指定创建用户的 uidshell
: 设置默认shellgroup
: 设置默认组groups
: 设置附加组,默认操作是替换append
:groups
操作为追加而不是替换home
: 家目录system
: yes|no 是否为系统用户move
: 更新用户家目录时,是否将原有家目录的内容移动到新的目录中去state
: 用户操作present
: 创建用户absent
: 删除用户
|
|
group
ansible -m user -a "options"
- 作用: 用户组管理
- 选项:
name
: 组名gid
: 指定gidsystem
: yes|no 是否为系统用户state
: 目标状态present|absent
copy
ansible -m copy -a 'options'
- 作用: 文件复制和创建
- 选项:
backup
:在覆盖之前将原文件备份,备份文件包含时间信息。有两个选项:yes|nocontent
:用于替代"src",可以直接设定指定文件的值dest
:必选项。要将源文件复制到的远程主机的绝对路径,如果源文件是一个目录,那么该路径也必须是个目录directory_mode
:递归的设定目录的权限,默认为系统默认权限force
:如果目标主机包含该文件,但内容不同,如果设置为yes,则强制覆盖,如果为no,则只有当目标主机的目标位置不存在该文件时,才复制。默认为yesothers
:所有的file模块里的选项都可以在这里使用src
:要复制到远程主机的文件在本地的地址,可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将递归复制。在这种情况下,如果路径使用"/“来结尾,则只复制目录里的内容,如果没有使用”/“来结尾,则包含目录在内的整个内容全部复制,类似于rsyncremote_src
: yes|no,指定 scr 参数的源是本机还是远程的被管理主机,no 为本机owner
: 设置目标文件的属主group
: 设置目标文件的属组mode
: 设置目标文件的权限
|
|
file
ansible -m file -a "options"
- 作用: 文件属性管理
- 选项:
force
:yes|no 是否强制创建软连接- 一种是源文件不存在但之后会建立的情况下,强制创建
- 另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链
group
:定义文件/目录的属组mode
:定义文件/目录的权限owner
:定义文件/目录的属主path
:必选项,定义文件/目录的路径recurse
:递归的设置文件的属性,只对目录有效src
:要被链接的源文件的路径,只应用于state=link
的情况dest
:被链接到的路径,只应用于state=link的情况state
:directory
:如果目录不存在,创建目录file
:即使文件不存在,也不会被创建link
:创建软链接hard
:创建硬链接touch
:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间absent
:删除目录、文件或者取消链接文件
|
|
template
ansible -m template -a 'option'
- 作用: 基于 python jinja2 模板生成文件并复制到目标主机
- 选项:
backup
:在覆盖之前将原文件备份,备份文件包含时间信息。有两个选项:yes|nosrc
:要被链接的源文件的路径,只应用于state=link
的情况dest
:必选项。要将源文件复制到的远程主机的绝对路径,如果源文件是一个目录,那么该路径也必须是个目录force
:如果目标主机包含该文件,但内容不同,如果设置为yes,则强制覆盖,如果为no,则只有当目标主机的目标位置不存在该文件时,才复制。默认为yesowner
: 设置目标文件的属主group
: 设置目标文件的属组mode
: 设置目标文件的权限
2.2 命令执行
command
ansible -m command -a 'option'
- 作用: 命令执行,但是无法解析 bash 中的特殊字符,比如
|
,只能执行简单命令 - 选项:
free_form
: 非参数名称,指代任何可执行命令creates
: 文件名,2.0 后支持通配符,表示指定的文件存在时不执行命令removes
: 与creates
相反,表示文件不存在时不执行命令chdir
: 指定命令运行的当前目录
|
|
shell
ansible -m shell -a 'option'
- 作用: 命令执行,能正常解析 shell 语法
- 选项:
free_form
: 非参数名称,指代任何可执行命令creates
: 文件名,2.0 后支持通配符,表示指定的文件存在时不执行命令removes
: 与creates
相反,表示文件不存在时不执行命令chdir
: 指定命令运行的当前目录executable
: 执行运行命令的 shell 解释器,必需是绝对路经
|
|
script
ansible -m script -a 'option'
- 作用: 将脚本复制到管控主机并执行
- 选项:
free_form
: 非参数名称,指代任何可执行命令creates
: 文件名,2.0 后支持通配符,表示指定的文件存在时不执行命令removes
: 与creates
相反,表示文件不存在时不执行命令chdir
: 指定命令运行的当前目录executable
: 执行运行命令的 shell 解释器,必需是绝对路经
|
|
ping
ansible -m ping -a 'option'
- 作用: 测试主机是否是通的
- 选项:无
|
|
2.3 程序安装
yum
ansible -m yum -a 'option'
- 作用: 文件属性管理
- 选项:
config_file
:yum的配置文件disable_gpg_check
:关闭gpg_checkdisablerepo
:不启用某个源enablerepo
:启用某个源name
:要进行操作的软件包的名字,可附带版本信息,也可以传递一个url或者一个本地的rpm包的路径allow_downgrade
: 是否允许降级安装,默认为 no;默认的安装操作相当于yum -y update
,如果name
指定的版本相对于已安装的版本较低,则不会安装state
:状态(present,absent,latest)
|
|
pip
ansible -m pip -a 'option'
- 作用: 文件属性管理
- 选项:
chdir
: pip 命令运行前切换到此目录executable
: 指定运行 pip的版本,pip 的名称或绝对路经;不能与virtualenv
同时使用extra_args
: 传给pip
的额外参数name
: 安装的程序包名称,可以是一个 urlversion
: 指定的Python库的安装版本virtualenv
:virtualenv 虚拟环境目录,不能与executable
同时使用,如果虚拟环境不存在,将自动创建virtualenv_command
: 虚拟环境使用的管理命令或绝对路经,eg:pyvenv, ~/bin/virtualenv
virtualenv_python
: 虚拟环境中的 python 版本,当virtualenv_command使用pyvenv或-m venv模块时,不应使用此参数state
:present
:默认的,表示为安装lastest
: 安装为最新的版本absent
:表示删除forcereinstall
:“forcereinstall”选项仅适用于可ansible 2.1及更高版本
|
|
2.4 服务管理
cron
ansible -m cron -a 'option'
- 作用: 周期性任务管理
- 选项:
backup
:对远程主机上的原任务计划内容修改之前做备份cron_file
:如果指定该选项,则用该文件替换远程主机上的cron.d目录下的用户的任务计划day
:日hour
:小时minute
:分钟month
:月weekday
:周job
:要执行的任务,依赖于state=present
name
:该任务的描述special_time
:指定什么时候执行,参数包括reboot,yearly,annually,monthly,weekly,daily,hourly
state
:确认该任务计划是创建还是删除,present or absentuser
:以哪个用户的身份执行
|
|
service
ansible -m service -a 'option'
- 作用: 管理服务管理
- 选项:
arguments
:给命令行提供一些选项enabled
:是否开机启动 yes|noname
:必选项,服务名称pattern
:定义一个模式,如果通过status指令来查看服务的状态时,没有响应,就会通过ps指令在进程中根据该模式进行查找,如果匹配到,则认为该服务依然在运行runlevel
:运行级别sleep
:如果执行了restarted,在则stop和start之间沉睡几秒钟state
:对当前服务执行启动,停止、重启、重新加载等操作(started,stopped,restarted,reloaded)
|
|
2.5 变量获取
setup
ansible -m setup -a 'option'
- 作用: 获取被管控主机的所有系统参数信息
- 选项:
filter
: 参数过滤,支持 shell 通配语法gather_subset
: 限制返回的参数范围,可选值包括all, min, hardware, network, virtual, ohai
,值前的!
表示取反gather_timeout
: 参数收集的超时时长
|
|