查看“RHCE8.0讲义:实施多个PLAYBOOK”的源代码
←
RHCE8.0讲义:实施多个PLAYBOOK
跳转至:
导航
,
搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
==培训目标== *编写一个使用多个play和各play特权升级的playbook。 *有效使用ansible-doc学习如何使用新模块来实施play任务。 ==编写多个PLAY== Playbook是一个YAML文件,含有由一个或多个play组成的列表。记住一个play按顺序列出了要 对清单中的选定主机执行的任务。因此,如果一个playbook中含有多个play,每个play可以将其 任务应用到单独的一组主机。 在编排可能涉及对不同主机执行不同任务的复杂部署时,这会大有帮助。您可以这样编写 playbook:对一组主机运行一个play,完成后再对另一组主机运行另一个play。 编写包含多个play的playbook非常简单。Playbook中的各个play编写为playbook中的顶级列表 项。各个play是含有常用play关键字的列表项。 以下示例显示了含有两个play的简单playbook。 <nowiki> # This is a simple playbook with two plays - name: first play hosts: slave tasks: - name: first task yum: name: httpd state: present - name: second task service: name: httpd enabled: true - name: second play hosts: slave tasks: - name: first task service: name: mariadb enabled: true</nowiki> ==PLAY中的远程用户和特权升级== Play可以将不同的远程用户或特权升级设置用于play,取代配置文件中指定的默认设置。这些都在 play本身中与hosts或tasks关键字相同的级别上设置。 ===用户属性=== Playbook中的任务通常通过与受管主机的网络连接来执行。与临时命令相同,用于任务执行的用户 怅户取决于Ansible配置文件/etc/ansible/ansible. cfg中的不同关键字。运行任务的用户可 以通过remote_user关键字来定义。不过,如果启用了特权升级,become_user等其他关键字 也会发生作用。 如果用于任务执行的Ansible配置中定义的远程用户不合适,可以通过在play中使用 remote_user关键字来覆盖。 remote_user: remoteuser ===特权升级属性=== 也提供额外的关键字,从而在playbook内定义特权升级参数。become布尔值关键字可用于启用或 禁用特权升级,无论它在Ansible配置文件中的定义为何。它可以取yes或true值来启用特权升 级,或者取no或false值来禁用它。 become: true 如果启用了特权升级,则可以使用become_method关键字来定义特定play期间要使用的特权升级 方法。以下示例中指定sudo用于特权升级。 become_method: sudo 此外,启用了特权升级时,become_user关键字可定义特定play上下文内要用于特权升级的用户 帐户。 become_user: privileged_user 以下示例演示了如何在play中使用这些关键字: <nowiki> - name: /etc/hosts is up to date hosts: datacenter-west remote_user: automation become: yes become_method: sudo tasks: - name: server.example.com in /etc/hosts lineinfile: path: /etc/hosts line: '192.0.2.42 server.example.com server' state: present</nowiki> 补充: *become:设置为yes激活权限提升。 *become_user :设置为具有所需权限的用户 - 您成为的用户,而不是您登录的用户。并不意味着,允许将其设置为主机级别。必须跟become: yes 一起使用。 *become_method :在播放或任务级别)覆盖ansible.cfg中设置的默认方法,设置为sudo / su / pbrun / pfexec / doas / dzdo / ksu / runas / machinectl 使用前提:在hosts中配置的登录账号在受控端机器上需要有sudo的权限 <nowiki>在/etc/sudoers ubuntu ALL=(ALL) NOPASSWD:ALL</nowiki> ———————————————— 原文链接:https://blog.csdn.net/icanflyingg/article/details/123138117 ==查找用于任务的模块== ===模块文档=== ====官网查询模块==== Ansible随附打包的大量模块为管理员提供了许多用于常见管理任务的工具。本课程前面介绍了 Ansible文档网站http://docs.ansible.com通过该网站上的模块索引,可以轻松浏览Ansible随附 的模块列表。例如,适于用户和服务管理的模块可以在Systems Modules T找到,而适合数据库管 理的模块则可在Database Modules下找到。 对于每一个模块,Ansible文档网站提供了其功能摘要,以及关于如何通过模块的选项来调用各项具 体功能的说明。文档还提供了实用的示例,演示各个模块的用法,以及任务中关键字的设置方法。 ====本地查询模块==== 您已使用过ansible-doc命令来查找关于本地系统上安装的模块的信息。作为复习,要査看控制 节点上可用模块的列表,可运行ansible-doc -1命令。这将显示模块名称列表以及其功能的概 要。 ansible-doc -l 使用ansible-doc [module name]命令来显示模块的详细文档。与Ansible文档网站一样,该 命令提供模块功能的概要、其不同选项的详细信息,以及示例。以下示例演示了为yum模块显示的 文档。 [root@localhost ~]# ansible-doc yum <nowiki>> ANSIBLE.BUILTIN.YUM (/usr/local/Python3/lib/python3.7/site-packages/ansible/modules/yum.py) Installs, upgrade, downgrades, removes, and lists packages and groups with the `yum' package manager. This module only works on Python 2. If you require Python 3 support see the [ansible.builtin.dnf] module. * note: This module has a corresponding action plugin. OPTIONS (= is mandatory): </nowiki> ====模块示例输出==== ansible-doc命令还提供-s选项,它会生成示例输出,可以充当如何在playbook中使用特定模块的示范。此输出可以作为起步模板,包含在实施该模块以执行任务的playbook中。输出中包含的 注释,提醒管理员各个选项的用法。下例演示了 yum模块的这种输出。 [root@localhost ~]# ansible-doc -s yum <nowiki>- name: Manages packages with the `yum' package manager yum: allow_downgrade: # Specify if the named package and version is allowed to downgrade a maybe already installed higher version of that package. Note that setting allow_downgrade=True can make this module behave in a non- idempotent way. The task could end up with a set of packages that does not match the complete list of specified packages to install (because dependencies between the downgraded package and others can cause changes to the package </nowiki> ==模块维护== Ansible随附了大量模块,它们可用于执行许多任务。上游社区非常活跃,这些模块也可能处于不同 的幵发阶段。模块的ansible-doc文档应该会指定上游Ansible社区中维护该模块的人,以及该 模块的幵发状态。这在该模块的ansible-doc输出末尾的METADATA部分中指明。 ===模块开发状态=== status字段记录模块的幵发状态: *stableinterface:模块的关键字稳定,将尽力确保不删除关键字或更改其含义。 *preview:模块处于技术预览阶段,可能不稳定,其关键字可能会更改,或者它可能需要本身会 受到不兼容更改的库或Web服务。 *deprecated:模块已被弃用,未来某一发行版中将不再提供。 *removed:模块已从发行版中移除,但因文档需要存在存根,以帮助之前的用户迁移到新的模 块。 注意: stableinterface状态仅表明模块界面稳定,并不评价模块的代码质量。 ===模块维护人=== supported_by字段记录上游Ansible社区中维护该模块的人。可能的值包括: *core:由上游“核心” Ansible开发人员维护,始终随Ansible提供。 *curated:模块由社区中的合作伙伴或公司提交并维护。这些模块的维护者必须留意报告的任何 问题,或者调取针对该模块提出的请求。在社区维护人员批准了更改后,上游“核心”开发人员 审核对策划模块提岀的更改。核心提交者也确保因为Ansible引擎中的变化而对这些模块造成的 任何问题得到修正。这些模块目前随Ansible提供,但是可能会在未来某个时候另外打包。 *community:模块不受到核心上游开发人员、合作伙伴或公司的支持,完全由一般开源社区维 护。此类别中的模块仍然完全可用,但对问题的响应速度完全取决于社区。这些模块目前也随 Ansible提供,但是可能会在未来某个时候另外打包。 上游Ansible社区有用于Ansible的问题跟踪器及其集成模块,网址为:https://github.com/ansible/ ansible/issueso ===编写自定义模块=== 有时候,没有现成的模块可以用于达成您的目标。作为最终用户,您也可以自己编写私有的模块, 或者从第三方获取模块。Ansible会在ANSIBLE_LIBRARY环境变量指定的位置査找自定义模块; 或者,如果未设置此变量,则由当前Ansible配置文件中的library关键字指定。Ansible也在相 对于当前运行的playbook的./library目录中搜索自定义模块。 library = /usr/share/my_modules 与编写模块相关的信息已超出本课程的范畴。有关编写方法的文档位于https://docs.ansible.com/ ansible/latest/dev_guide/developing_modules.html ==幂等地使用模块== 使用ansible-doc命令可以查找和了解如何为您的任务使用模块。 尽管command, shell和raw模块的用法可能看似简单,但在可能时,应尽量避免 在playbook中使用它们因为它们可以取用任意命令,因此使用这些模块时很容易写 出非幂等的playbook。 例如,以下使用shell模块的任务为非幂等。每次运行play时,它都会重写/etc/ resolv.conf,即使它已经包含了行 nameserver 192.0.2.1。 <nowiki> - name: Non-idempotent approach with shell module shell: echo "nameserver 192.0.2.1" > /etc/resolv.conf</nowiki> 可以通过多种方式编写以幕等方式使用shell模块的任务,而且有时候进行这些更 改并使用shell是最佳的做法。但更快的方案或许是使用ansible-doc发现copy 模块,再使用它获得所需的效果。 在以下示例中,如果/etc/resolv.conf文件已包含正确的内容,则不会重写该文 件: <nowiki> - name: Idempotent approach with copy module copy: dest: /etc/resolv.conf content: "nameserver 192.0.2.l\n"</nowiki> copy模块可以测试来了解是否达到了需要的状态,如果已达到,则不进行任何更 改。shell模块容许非常大的灵活性,但需要格外小心,从而确保它以幂等方式运 行。 幂等的playbook可以重复运行,确保系统处于特定的状态,而不会破坏状态已经正 确的系统。 ==PLAYBOOK语法变化== 本章的最后一个部分将探讨您可能遇到的YAML或Ansible Playbook语法的一些变化。 ===YAML注释=== 注释也可以用于提高可读性。在YAML中,编号或#号符号右侧的所有内容都是注释。如果注释 的左侧有内容,请在该编号符号的前面加一个空格。 <nowiki># This is a YAML comment some data # This is also a YAML comment</nowiki> ===YAML字符串=== YAML中的字符串通常不需要放在引号里,即使字符串中包含空格。字符串可以用双引号或单引号括 起。 <nowiki>this is a string 'this is another string' "this is yet another a string"</nowiki> 编写多行字符串有两种方式。可以使用竖线(I)字符表示要保留字符串中的换行字符。 <nowiki> include_newlines: | Example Company 123 Main Street Atlanta, GA 30303</nowiki> 要编写多行字符串,您也可以使用大于号(>)字符来表示换行字符转换成空格并且行内的引导空白将 被删除。这种方法通常用于将很长的字符串在空格字符处断行,使它们跨占多行来提高可读性。 <nowiki> fold_newlines: > This is an example of a long string, that will become a single sentence once folded.</nowiki> ===YAML字典=== 您已看到过以缩进块的形式编写的键值对集合,如下方所示: <nowiki>name: svcrole svcservice: httpd svcport: 80</nowiki> 字典也可以使用以花括号括起的内联块格式编写,如下方所示: <nowiki>(name: svcrole, svcservice: httpd, svcport: 80)</nowiki> 大多数情形中应避免内联块格式,因为其可读性较差。不过,至少有一种情形中会较常使用它。角 色的使用将在本课程后面进行讨论。当playbook中包含角色列表时,较常使用这种语法,从而更加 容易区分play中包含的角色和传递给角色的变量。 ===YAML列表=== 您也已见到过使用普通单破折号语法编写的列表: <nowiki>hosts: - servera - serverb - serverc </nowiki> 列表也有以方括号括起的内联格式,如下方所示: <nowiki>hosts: [servera, serverb, serverc]</nowiki> 您应该避免使用此语法,因为它通常更难阅读。 ===过时的“键=值” Playbook简写=== 某些playbook可能使用较旧的简写方法,通过将模块的键值对放在与模块名称相同的行上来定义任 务。例如,您可能会看到这种语法: <nowiki> tasks: - name: shorthand form service: name=httpd enabled=true state=started</nowiki> 通常,您会将相同的任务编写为如下所示: <nowiki> tasks: - name: normal form service: name: httpd enabled: true state: started</nowiki> 通常您应避免简写形式,而使用普通形式。 普通形式的行数较多,但更容易操作。任务的关键字垂直堆叠,更容易区分。 阅读play时,您的眼 睛直接向下扫视,左右运动较少。而且,普通语法是原生的YAML;简写形式不是。如果您使用普通 格式而非简写格式,现代文本编辑器中的语法突出显示工具可以更有效地为您提供帮助。 您可能会在文档和他人提供的旧playbook中看到这种语法,而且这种语法仍然可以发挥作用。 ==参考文献== ansible-playbook⑴ 和 ansible-doc⑴帮助手册 Playbook 简介 — Ansible 文档 https://docs.ansible.com/ansible/latest/user_guide/playbooks_intro.html Playbook — Ansible 文档 https://docs.ansible.com/ansible/latest/user_guide/playbooks.html 开发模块— Ansible文档 https://docs.ansible.com/ansible/latest/dev_guide/developing_modules.html 模块支持— Ansible文档 https://docs.ansible.com/ansible/latest/user_guide/modules_supporthtml YAML 语法 — Ansible 文档 https://docs.ansible.com/ansible/latest/reference_appendicesAAMLSyntax.html
返回至
RHCE8.0讲义:实施多个PLAYBOOK
。
导航菜单
个人工具
登录
命名空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
随机页面
帮助
工具
链入页面
相关更改
特殊页面
页面信息