Ansible(5)——编写 Playbook
目录
一、Play 中的远程用户和特权提升:
1、用户属性:
2、特权升级属性:
(1)启用或禁用特权升级:
(2)定义特权升级方法:
(3)定义进行特权升级的用户:
二、模块:
1、常见模块:
2、模块文档:
3、查看模块:
三、在受管主机上运行命令:
1、ansible.builtin.command 模块:
2、ansible.builtin.shell 模块:
3、ansible.builtin.raw 模块:
四、YAML 语法:
1、注释:
2、字符串:
(1)竖线( | ):
(2)大于号( > ):
3、字典:
4、列表:
五、Playbook 推荐格式:
一、Play 中的远程用户和特权提升:
每个 play 均可指定远程用户及其相应的特权提升,用户可以在与 hosts 或 tasks 关键字相同的 play 上覆盖这些设置。
1、用户属性:
playbook 中的任务通常通过网络连接对受管主机执行。与临时命令相同,用于这些任务执行的用户帐户取决于 Ansible 配置文件 /etc/ansible/ansible.cfg 中的参数,Ansible 必须以特定用户身份连接到受管主机,才能运行任务。
通过 remote_user 参数可定义执行任务的用户。不过,如果启用了特权升级,become user 等其他参数也会发生作用。如果用于任务执行的远程用户不合适,可在 play 中使用 remote_user 属性来覆盖。
2、特权升级属性:
(1)启用或禁用特权升级:
用户可以在 playbook 内定义特权升级参数,使用 become 布尔值参数可启用或禁用特权升级。
(2)定义特权升级方法:
如果启用了特权升级,可使用 become_method 属性来定义 play 要使用的特权升级方法。
(3)定义进行特权升级的用户:
启用了特权升级时,become_user 属性可定义要进行特权升级的用户帐户。
二、模块:
Ansible 随附打包的大量模块为管理员提供许多用于常⻅管理任务的工具。
1、常见模块:
类别 | 模块 |
---|---|
文件 | ansible.builtin.copy :将本地文件复制到受管主机 |
ansible.builtin.file :设置文件权限及其他属性 | |
ansible.builtin.lineinfile :确保特定行是否在文件中 | |
ansible.posix.synchronize :使用 rsync 同步内容 | |
软件 | ansible.builtin.package :使用操作系统自带的自动检测软件包管理器管理软件包 |
ansible.builtin.dnf :使用 DNF 软件包管理器管理软件包 | |
ansible.builtin.apt :使用 APT 软件包管理器管理软件包 | |
ansible.builtin.pip :从 PyPl 管理 Python 软件包 | |
系统 | ansible.posix.firewalld :使用 firewalld 管理任意端口与服务 |
ansible.builtin.reboot :重新启动计算机 | |
ansible.builtin.service :管理服务 | |
ansible.builtin.user :添加、删除与管理用户账户 | |
网络 | ansible.builtin.get_url :通过 HTTP 、HTTPS 或 FTP 下载文件 |
ansible.builtin.uri :与 Web 服务交互 |
2、模块文档:
管理员可以查阅 Ansible 文档网站 docs.ansible.com 熟悉可用的模块。
在网站上,管理员可以搜索适用于不同功能的模块。例如,适用于用户和服务管理的模块可以在 Systems Modules 下找到,而适合数据库管理的模块可以在 Database Modules 下找到。对于每一个模块,Ansible 文档网站提供了其功能摘要,以及关于如何通过模块的选项来调用各项具体功能的说明。文档还提供了实用的示例,以演示各个模块及其选项的用法。
3、查看模块:
(1)ansible-navigator doc -l 命令:
要查看当前自动化环境中可用的模块列表,可运行 ansible-navigator doc -l 命令显示模块名称列表以及其功能的概要。
注:ansible-navigator doc -l 命令会在 ansible.builtin Ansible Content Collection 中显示模块的短名称,而非 FQCN 。
(2)ansible-navigator doc module_name 命令:
使用 ansible-navigator doc module_name 命令将以交互式显示模块的详细文档。
注:1)如果指定 -m stdout 选项,终端会显示格式化文档。
2)也可以在交互模式中运行 ansible-navigator collections 命令,浏览当前 automation execution environment 中的 collections 及其模块的文档。
(3)ansible-navigator -s doc 命令:
ansible-navigator -s doc module_name 命令可查看模块可使用的所有属性的摘要。
注:可以使用 ansible-doc 命令查看控制节点上所装模块的文档,其所用选项与 ansible-navigator doc 相同。但是,控制节点上的 ansible-doc 命令不能用于检查文档中是否存在供 ansible- navigator 使用的自动化执行环境。
三、在受管主机上运行命令:
如果不存在自动化某些任务的模块,则可以通过使用特殊模块在受管主机上运行任意命令。
1、ansible.builtin.command 模块:
使用 ansible.builtin.command 模块配合 cmd 参数是运行命令最简单的方式。例如,在受管主机上运行 /111 如下图:
注:(1)ansible.builtin.command 模块不幂等,即每次在 play 中指定该任务时,即使没有需要更改的内容,该任务也会运行并报告其已更改受管主机上的某些内容。
(2)用户可将任务配置为仅在文件存在时运行,以提高任务的安全性。 creates 选项可以让任务仅在文件缺失时运行,且会创建该文件。 removes 选项可以让任务仅在文件存在时运行,且会删除该文件。
例如,在 /222 文件不存在时运行 /111 如下图:
2、ansible.builtin.shell 模块:
ansible.builtin.command 模块无法访问 shell 环境变量,也无法执行输入 / 输出重定向和管道之类的 shell 操作。若需使用上述操作,可以通过 ansible.builtin.shell 模块实现,用法与 ansible.builtin.command 模块类似。
3、ansible.builtin.raw 模块:
ansible.builtin.raw 模块可以绕过模块子系统,直接使用远程 shell 运行命令。在无法安装 Python 的系统(例如路由器等),可以使用该模块。
注:尽可能避免在 playbook 中使用 ansible.builtin.command、 ansible.builtin.shell 和 ansible.builtin.raw 模块。如果必须要使用这些模块, 则最好先尝试使用 ansible.builtin.command 模块,只有在需要 ansible.builtin.shell 或 ansible.builtin.raw 的特殊功能时才使用它们
四、YAML 语法:
1、注释:
使用注释可提高可读性,在 YAML 中,注释以一个井号字符( # )开头,可存在于任何行(空行或非空行)的末尾,如果在非空行中使用,需在井号之前加一个空格。
2、字符串:
YAML 中的字符串不要求放在引号里,即使字符串中包含空格。当然如果需要,字符串也可以使用双引号或单引号括起。
编写多行字符串有两种方式。
(1)竖线( | ):
使用竖线( | )字符可以表示保留字符串中的换行字符。
(2)大于号( > ):
使用大于号( > )字符将表示换行字符转换成空格,且行前的空白将被删除。
3、字典:
YAML 中使用的 key/value 对也称为字典、 散列或关联数组( dictionaries 、hashes ,or associative arrays )。在 key/value 对中,键与值通过冒号和空格组成的分隔符隔开。
注:字典也可使用内嵌块格式表示,其中多个 key/value 对用花括号括起,并由逗号和空格隔开。
4、列表:
在 YAML 中,列表类似于其他编程语言中的数组。一组列表项可使用一个短划线加一个空格作为每个列表项的前缀。
注:列表也可使用内嵌块格式表示,其中多个列表项用方括号括起并由逗号和空格隔开。