1. include任务复用

有时,我们发现大量的 Playbook 内容需要重复编写,各 Tasks 之间功能需相互调用才能完成各自功能, Playbook 庞大到维护困难,这时我们需要使用 include

include支持在tasks阶段和handles阶段调用,调用多个include时可以使用loop循环的方式,还可以向includeplaybook中传递变量。

比如:A项目需要用到重启 httpd ,B项目需要用到重启 httpd ,那么我们可以使用 Include 来减少重复编写。

1.1 多个项目调用相同task

  • 编写 restart_httpd.yml 文件:

    #注意这是一个tasks所有没有play的任何信息
    [root@ansible project1]# cat restart_httpd.yml
    - name: Restart Httpd Server
    service:
    name: httpd
    state: restarted
  • A Projectplaybook 如下:

    [root@ansible project1]# cat a_project.yml
    - hosts: webserver
    tasks:
    - name: A Project command
    command: echo "A" - name: Restart httpd
    include: restart_httpd.yml
  • B Projectplaybook 如下:

    [root@ansible project1]# cat b_project.yml
    - hosts: webserver
    tasks:
    - name: B Project command
    command: echo "B" - name: Restart httpd
    include: restart_httpd.yml
  • playbook运行如下:

    [root@ansible project1]# ansible-playbook a_project.yml
    [root@ansible project1]# ansible-playbook b_project.yml

1.2 Inlcude结合tags应用

”include”不仅能够引用任务列表,还能够引用playbook,比如,在一个playbook中引用另一个playbook

示例:通过指定标签 tags ,来说明是安装 tomcat8 还是 tomcat9

1.准备入口 main.yml 文件,然后包含 install_tomcat8.yml 以及install_tomcat9.yml

2.在执行 main.yml 时,需要通过 --tags 指明要安装的版本

3.还可以在主playbook文件中向引用的playbook传递变量。

  • 编写main.yml入口文件:

    #注意:引用playbook时建议使用import_playbook参数:官方提示:[DEPRECATION WARNING]: 'include' for playbook includes. You should use 'import_playbook' instead. This feature will be removed in version 2.12. 
    
    [root@xuzhichao playbook]# cat tomcat_main.yml
    - name: Install Tomcat8
    import_playbook: install_tomcat8.yml
    tags: tomcat8
    vars:
    tomcat_version: 8.5.69
    tomcat_install_path: /usr/local - name: Install Tomcat9
    import_playbook: install_tomcat9.yml
    tags: tomcat9
    vars:
    tomcat_version: 9.0.50
    tomcat_install_path: /usr/local
  • 编写install_tomcat8.yml文件:

    [root@xuzhichao playbook]# cat install_tomcat8.yml
    ---
    - hosts: localhost tasks:
    - name: Install JDK
    yum:
    name: java-1.8.0-openjdk
    state: present - name: Download Tomacat
    get_url:
    url: https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v{{ tomcat_version }}/bin/apache-tomcat-{{ tomcat_version }}.tar.gz
    dest: /root - name: Unarchive Tomcat
    unarchive:
    src: /root/apache-tomcat-{{ tomcat_version }}.tar.gz
    dest: "{{ tomcat_install_path }}" - name: Create Link File
    file:
    src: "{{ tomcat_install_path }}/apache-tomcat-{{ tomcat_version }}"
    dest: "{{ tomcat_install_path }}/tomcat8"
    state: link - name: Start Tomcat
    shell: cd "{{ tomcat_install_path }}"/tomcat8/bin && nohup ./startup.sh &
  • 编写install_tomcat9.yml文件:

    [root@xuzhichao playbook]# cat install_tomcat9.yml
    ---
    - hosts: localhost tasks:
    - name: Install JDK
    yum:
    name: java-1.8.0-openjdk
    state: present - name: Download Tomacat
    get_url:
    url: https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v{{ tomcat_version }}/bin/apache-tomcat-{{ tomcat_version }}.tar.gz
    dest: /root - name: Unarchive Tomcat
    unarchive:
    src: /root/apache-tomcat-{{ tomcat_version }}.tar.gz
    dest: "{{ tomcat_install_path }}" - name: Create Link File
    file:
    src: "{{ tomcat_install_path }}/apache-tomcat-{{ tomcat_version }}"
    dest: "{{ tomcat_install_path }}/tomcat9"
    state: link - name: Start Tomcat
    shell: cd "{{ tomcat_install_path }}"/tomcat9/bin && nohup ./startup.sh &
  • 运行playbook文件:

    #安装tomcat9
    [root@xuzhichao playbook]# ansible-playbook -t tomcat9 tomcat_main.yml #安装tomcat8
    [root@xuzhichao playbook]# ansible-playbook -t tomcat8 tomcat_main.yml

ansible系列(27)--ansible的include任务复用的更多相关文章

  1. Ansible系列(五):playbook应用和roles自动化批量安装示例

    html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,h ...

  2. Ansible系列(四):playbook应用和roles自动化批量安装示例

    Ansible系列文章:http://www.cnblogs.com/f-ck-need-u/p/7576137.html playbook是ansible实现批量自动化最重要的手段.在其中可以使用变 ...

  3. Ansible系列(三):YAML语法和playbook写法

    html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,h ...

  4. Ansible系列(二):选项和常用模块

    html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,h ...

  5. Ansible系列(一):基本配置和使用

    本文目录:1.1 安装Ansible1.2 配置Ansible 1.2.1 环境配置 1.2.2 SSH互信配置 1.2.3 简单测试1.3 inventory Ansible是一种批量.自动部署工具 ...

  6. Ansible系列(六):各种变量定义方式和变量引用

    本文目录:1.1 ansible facts1.2 变量引用json数据的方式 1.2.1 引用json字典数据的方式 1.2.2 引用json数组数据的方式 1.2.3 引用facts数据1.3 设 ...

  7. Ansible系列(六):循环和条件判断

    本文目录:1. 循环 1.1 with_items迭代列表 1.2 with_dict迭代字典项 1.3 with_fileglob迭代文件 1.4 with_lines迭代行 1.5 with_ne ...

  8. Ansible系列(七):执行过程分析、异步模式和速度优化

    本文目录:1.1 ansible执行过程分析1.2 ansible并发和异步1.3 ansible的-t选项妙用1.4 优化ansible速度 1.4.1 设置ansible开启ssh长连接 1.4. ...

  9. Ansible系列(五):各种变量定义方式和变量引用

    Ansible系列文章:http://www.cnblogs.com/f-ck-need-u/p/7576137.html 1.1 ansible facts facts组件是用来收集被管理节点信息的 ...

  10. 自动化运维工具ansible学习+使用ansible批量推送公钥到远程主机

    目录: 一.ansible简介 1.1.ansible是什么 1.2.ansible如何工作 1.3.ansible优缺点 1.4.ansible安装方式 1.5.ansible文件简单介绍 1.6. ...

随机推荐

  1. java:寻找两个字符串的最长公共子串

    java:寻找两个字符串的最长公共子串 // 找一个字符串的所有子串 public static List<String> findAllStr(String s) { List<S ...

  2. 【Java】多线程之实现Runnable接口

    1 /** 2 * 3 */ 4 package com.raliable.chapter_0; 5 /** 6 * @author : Administrator 7 * @date :2022年4 ...

  3. 使用sbt对Scala程序进行打包并运行(Spark单机运行)

    十.使用sbt对Scala程序进行打包并运行(Spark单机运行) 在./sparkapp 中新建文件 simple.sbt(vim ./sparkapp/simple.sbt),添加内容如下,声明该 ...

  4. [Android开发学iOS系列] 删除storyboard需要几步

    删除iOS项目中的storyboard 删除项目中的storyboard, (变成一个纯代码的iOS UIKit项目), 需要几步? 找到storyboard, 删掉它. 直接用ViewControl ...

  5. #树状数组,dp#SGU 521 North-East

    题目 在平面上有 \(n\) 个点,现在有一个人要从某个点出发, 每次只能到达横纵坐标都超过原坐标的点,也就是 \(x_j<x_i,y_j<y_i\) 如果他要经过最多的点,那么哪些点是可 ...

  6. #差分约束系统,最长路,线段树优化建边#洛谷 3588 [POI2015] PUS

    题目 给定一个长度为\(n\)的正整数序列 \(a\) ,每个数都在 \(1\) 到 \(10^9\) 范围内, 告诉你其中 \(s\) 个数,并给出 \(m\) 条信息,每条信息包含三个数 \(l, ...

  7. #最大流#WOJ 124 Football Coach

    题目 有\(n\)支球队,互相之间已经进行了一些比赛.现在还有\(m\)场比赛未进行, 每场比赛胜者得2分,平局各得1分,负者不得分. 问是否存在一种方法使得球队\(n\)的得分比其他\(n-1\)支 ...

  8. C# 项目打包详解--赞

    项目打包流程如下: 第一步:项目必须先安装 Microsoft Visual Studio Installer Projects  安装步骤:打开VS-->工具-->扩展和更新--> ...

  9. HarmonyOS音视频开发概述

      在音视频开发指导中,将介绍各种涉及音频.视频播放或录制功能场景的开发方式,指导开发者如何使用系统提供的音视频API实现对应功能.比如使用TonePlayer实现简单的提示音,当设备接收到新消息时, ...

  10. Linux之驱动管理

    一.相关概念 驱动概念 驱动与底层硬件直接打交道,充当了硬件与应用软件中间的桥梁. 将驱动程序载入内核,应用程序可以通过系统调用接口来访问(驱动)底层的硬件设备. 驱动功能 对设备初始化和释放 把数据 ...