Ansible——包含、导入、角色

包含、导入文件

包含或导入文件

Ansible可以使用两种操作将内容带入playbook。可以包含内容,也可以导入内容。

  • 包含内容是一个动态操作。在playbook运行期间,Ansible会在内容到达时处理所包含的内容。

  • 导入内容是一个静态操作。在运行开始之前,Ansible在最初解析playbook时预处理导入的内容

导入Playbook

import_playbook指令允许将包含play列表的外部文件导入playbook。换句话说,可以把一个或多个额外playbook导入到主playbook中。

由于导入的内容是一个完整的playbook,因此import_playbook功能只能在playbook的顶层使用,不能在play内使用。如果导入多个playbook,则将按顺序导入并运行它们。

- name: test
  import_playbook: apache.yml

- name: test2
  import_playbook: mysql.yml

- name: test3
  import_playbook: php.yml

导入和包含任务

导入任务文件

  1. 可以使import_tasks功能将任务文件静态导入playbook内的play中。
  2. 导入任务文件时,在解析该playbook时将直接插入该文件中的任务。
  3. playbook中的import_tasks的位置控制插入任务的位置以及运行多个导入的顺序。
#需要导入的文件
[root@client test2]# cat httpd.yml 
- name: install httpd
  dnf:
    name: httpd
    state: latest
[root@client test2]# cat httpd_start.yml 
- hosts: all
  tasks:
    - name: start httpd
      service:
        name: httpd
        state: started

#执行文件
[root@client test2]# cat one.yml 
---
- hosts: 192.168.8.133
  tasks:
    - name: install httpd
      import_tasks: httpd.yml

    - name: start httpd
      import_tasks: httpd_start.yml

导入任务文件时,在解析该playbook时将直接插入该文件中的任务。由于import_tasks在解析playbook时静态导入任务,因此对其工作方式有一些影响。

  • 使用import_tasks功能时,导入时设置的when等条件语句将应用于导入的每个任务
  • 无法将循环用于import_tasks功能
  • 如果使用变量来指定要导入的文件的名称,则将无法使用主机或组清单变量

包含任务文件

  1. 可以使用include_tasks功能任务动态导入playbook内的play中
[root@client test2]# cat one.yml 
---
- hosts: 192.168.8.133
  tasks:
    - name: install httpd
      import_tasks: httpd.yml

    - name: start httpd
      include_tasks: httpd_start.yml
  1. 在play运行并且这部分play到达前,include_tasks功能不会处理playbook中的内容
  2. Playbook内容的处理顺序会影响包含任务功能的工作方式
  • 使用include_tasks功能时,包含时设置的when等条件语句将确定任务是否包含在play中
  • 如果运行ansible-playbook --list-tasks以列出playbook中的任务,则不会显示已包含任务文件
  • 相比之下,import_tasks功能不会列出导入任务文件的任务,而列出已导入任务文件中的各个任务
  • 不能使用ansible-playbook --start-at-task从已包含任务文件中的任务开始执行playbook
  • 不能使用notify语句触发已包含任务文件中的处理程序名称。可以在包含整个任务文件的主playbook中处理程序,在这种情况下,已包含文件中的所有任务都将运行

为外部play和任务定义变量

使用Ansible的导入和包含功能将外部文件中的play或任务合并到playbook中极大地增强了在Ansible环境中重用任务和playbook的能力。为了最大限度地提高重用可能性,这些任务和play文件应尽可能通用。变量可用于参数化play和任务元素,以扩大任务和play的应用范围。

#需导入的外部任务文件
[root@client test2]# cat var2/vars2_file.yml 
package: httpd

service: httpd
[root@client test2]# cat httpd.yml 
- name: install httpd
  dnf:
    name: "{
   { package }}"
    state: latest
[root@client test2]# cat httpd_start.yml 
- hosts: all
  tasks:
    - name: start httpd
      service:
        name: "{
   { service }}"
        state: started

#变量文件
[root@client test2]# cat var2/vars2_file.yml 
package: httpd

service: httpd

#执行文件
[root@client test2]# cat one.yml 
---
- hosts: 192.168.8.133
  vars_files:
    var2/vars2_file.yml
  tasks:
    - name: install httpd
      import_tasks: httpd.yml

    - name: start httpd
      include_tasks: httpd_start.yml

角色的结构

roles介绍

Ansible角色提供了一种方法,让用户能以通用的方式更加轻松地重复利用Ansible代码。我们可以在标准化目录结构中打包所有任务、变量、文件、模板,以及调配基础架构或部署应用所需的其他资源。只需通过复制相关的目录,将角色从一个项目复制到另一个项目。然后,只需从一个play调用该角色就能执行它。

借助编写良好的角色,可以从playbook中向角色传递调整其行为的变量,设置所有站点相关的主机名、IP地址、用户名,或其他在本地需要的具体详细信息。例如,部署数据库服务器的角色可能已编写为支持多个变量,这些变量用于设置主机名、数据库管理员用户和密码,以及需要为安装进行自定义的其他参数。角色的作者也可以确保在选择不在play中设置变量值时,为这些变量设定

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值