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/virtualenvvirtualenv_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=presentname:该任务的描述special_time:指定什么时候执行,参数包括reboot,yearly,annually,monthly,weekly,daily,hourlystate:确认该任务计划是创建还是删除,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: 参数收集的超时时长
|
|