ansible实战应用系列教程9:管理inclusions

ansbile实战应用系列教程8:管理inclusions

Inclusions

当处理复杂或冗长的剧本时,管理员可以使用单独的文件将任务和变量列表划分为更小的部分,以便于管理。在playbook中引入外部任务文件和变量有多种方法。
方法一:tasks使用外部playbook文件-include模块。
tasks:

tasks:
  - name: include tasks to install the database server
    include: tasks/db_server.yaml

方法二:tasks中引用外部playbook文件中定义的变量-include_vars模块。
include_vars模块可以包含JSON或YAML文件中定义的变量,覆盖已经定义的主机变量和playbook变量。
tasks:

tasks:
  - name: include the variables from a yaml or json file
    include_vars: vars/variables.yaml

模块化的方式构建主要playbook,促进可复用元素跨多个playbook的简便方式是使用多个,外部文件的任务和变量

Including Tasks

考虑以下示例,在这些示例中,将一组tasks作为一个独立于playbook的文件来管理可能是有用的:
如果新服务器需要完整的配置,管理员可以创建各种tasks集,用于创建用户、安装包、配置服务、配置特权、设置对共享文件系统的访问、加强服务器、安装安全更新和安装监视代理。每一组tasks都可以通过一个独立的自包含tasks文件进行管理。
如果服务器是由开发人员、系统管理员和数据库管理员共同管理的,那么每个组织都可以编写自己的任务集,由系统管理员检查和集成这些任务。
如果服务器需要特定的配置,则可以将其集成为一组基于条件执行的任务(即,仅在满足特定条件时才包含任务)。
如果一组服务器需要运行特定任务或一组任务,这些任务可能只在属于特定主机组的服务器上运行。
include指令允许管理员将tasks文件插入到playbook的特定位置。tasks文件只是一个文件,其中包含一系列任务列表:
environment.yml代码如下:

- name: Installs the {{ package }} package 
  yum:
    name: "{{ package }}"
    state: latest
 
- name: Starts the {{ service }} service
  service:
    name: "{{ service }}"
    state: "{{ state }}" 

playbook中使用include指令来指定在playbook中的什么位置包含什么tasks文件。vars指令可以用来设置tasks文件所使用的变量,并将覆盖playbook变量、inventory变量、register变量和tasks文件中定义的facts。
假设前面示例中的tasks文件保存为environment.yml文件。一个包含变量的指令可以在playbook中使用,像这样:
play.yml代码如下:

- name: Install, start, and enable services
  hosts: servera
  tasks:
    - name: Includes the tasks file and defines the variables
      include: environment.yml
      vars:
        package: mariadb-server
        service: mariadb
        state: started
      register: output    #register针对整个playbook
    
    - name: Debugs the included tasks
      debug:
        var: output

这里的vars指定定义的变量只能在当前task中使用,后续其他任务不能引用这里定义的变量。
vars指令用于定义变量,可以在play中和task中使用
vars_files指令用于引用外部定义了变量的文件,只能在play中使用,不能作为task中指令使用。
Important
playbook中包含的task是根据它们在playbook中的顺序来评估的。
例如,一个playbook可能包含有启动软件包的任务,以及另外一个任务是外部文件,该文件是安装软件包。在playbook中声明启动包的服务的任务之前,外部文件的安装软件的任务包必须包含在playbook中。
管理员可以为tasks文件创建一个专用目录,并将所有任务文件保存在该目录中。然后,playbook引用该目录中的任务文件。这允许构建一个复杂的playbook,同时使它更容易管理其结构和组件。

Including Variables

就像tasks可以包含在playbook中一样,变量也可以从外部定义并包含在playbook中。有很多方法可以做到这一点。设置变量的一些方法包括:
 在host_vars和group_vars目录中的目录文件或外部文件中定义的inventory变量
 facts和register变量
 Playbook变量在Playbook文件中使用vars定义或在外部文件通过vars_files定义。
include_vars模块是从外部文件中设置playbook变量的另一种方法。这个方法的有趣之处在于,它是通过模块完成的,并且它会覆盖通过上述方法设置的任何值。这在组合为要覆盖的变量设置值的任务文件时很有用,或者与条件执行结合在一起仅在满足特定条件时设置特定值。
包含的变量文件可以使用JSON或YAML定义,YAML是首选语法。include_vars模块接受要导入的变量文件的路径作为参数。
Important
如果tasks需要变量文件中的变量,管理员必须在定义tasks之前在playbook中引用变量文件。
考虑下面的代码片段演示了如何定义变量,在playbook中使用include_vars引用变量。下面的YAML文件,variables.yml,包含两个定义要安装的包的变量:

variables.yml
---
packages:
  web_package: httpd
  db_package: mariadb-server

要在剧本中导入这两个变量,可以使用include_vars模块:

playbook.yml:
---
- name: Install web application packages
  hosts: all
  tasks:
  - name: Includes the tasks file and defines the variables
    include_vars: variables.yml
  
  - name: Debugs the variables imported
    debug:
      msg: >
        "{{ packages['web_package'] }} and {{ packages.db_package }}        have been imported"

Important
当决定在哪里定义变量时,尽量保持简单。
在大多数情况下,没有必要同时使用include_vars、host_vars和group_vars文件、playbook文件的vars_files指令、playbook和inventory文件中的内联变量以及命令行覆盖所有这些。事实上,如此多的复杂性可能会使您很难轻松地维护您的可执行项目。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

太极淘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值