执行的诀窍

下面这些技巧适用于使用 Ansible,而不是使用 Ansible 的工件。

要使用执行环境

要使用称为 “执行环境” 的可迁移容器映像,降低复杂性。

先在暂存环境中尝试

在生产环境中推出变更前,在暂存环境中测试变更,始终是个好主意。两种环境的规模无需一样,且咱们可使用组变量,控制环境之间的差异。咱们还可以在暂存环境中使用 --syntax-check 命令行开关,检查任何的语法错误,比如在下面的示例中:

ansible-playbook --syntax-check

以批次模式更新

使用 serial 关键字控制在该批次中一次更新多少台机器。请参阅 控制任务于何处运行:委派及本地操作

处理操作系统及发行版的差异

组变量文件会与 group_by 模组一起工作,帮助 Ansible 在需要不同设置、软件包和工具的一系列操作系统和发行版中执行。group_by 模组会创建出匹配特定条件的动态主机组。该组无需在仓库文件中定义。这种方法可让咱们在不同操作系统或发行版上,执行不同任务。

比如,下面这个 play 会根据操作系统名称,将所有系统分类为一些动态分组:

- name: Talk to all hosts just so we can learn about them
  hosts: all
  tasks:

    - name: Classify hosts depending on their OS distribution
      ansible.builtin.group_by:
        key: os_{{ ansible_facts['distribution'] }}

后续 play 就可以使用这些组,作为 hosts 行上的模式了,如下所示:

- hosts: os_CentOS
  gather_facts: False
  tasks:

    # Tasks for CentOS hosts only go in this play.
    - name: Ping my CentOS hosts
      ansible.builtin.ping:

咱们还可以在组变量文件中,添加一个特定于组的设置。在下面的示例中,CentOS 机器获得的 asdf 值为 '42',而别的机器则得到的是 '10'。咱们还可以使用组变量文件,将一些角色应用到这些系统,以及为这些系统设置一些变量。

---
# file: group_vars/all
asdf: 10

---
# file: group_vars/os_CentOS.yml
asdf: 42

注意:这三个名称都必须匹配:由 group_by 任务创建的名字、后续 play 中模式的名字,以及组变量文件的名字。

若咱们只需要特定于操作系统的一些变量,而不需要任务,咱们也可通过 include_vars 运用这样同样的设置:

- name: Use include_vars to include OS-specific variables and print them
  hosts: all
  tasks:

    - name: Set OS distribution dependent variables
      ansible.builtin.include_vars: "os_{{ ansible_facts['distribution'] }}.yml"

    - name: Print the variable
      ansible.builtin.debug:
        var: asdf

这会从 group_vars/os_CentOS.yml 文件拉取变量。

(End)

Last change: 2025-03-08, commit: c71777b

小额打赏,赞助 xfoss.com 长存......

微信 | 支付宝

若这里内容有帮助到你,请选择上述方式向 xfoss.com 捐赠。