ansible系列(27)--ansible的include任务复用
1. include任务复用
有时,我们发现大量的 Playbook 内容需要重复编写,各 Tasks 之间功能需相互调用才能完成各自功能, Playbook 庞大到维护困难,这时我们需要使用 include。
include支持在tasks阶段和handles阶段调用,调用多个include时可以使用loop循环的方式,还可以向include的playbook中传递变量。
比如: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 Project的playbook如下:[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 Project的playbook如下:[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任务复用的更多相关文章
- Ansible系列(五):playbook应用和roles自动化批量安装示例
html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,h ...
- Ansible系列(四):playbook应用和roles自动化批量安装示例
Ansible系列文章:http://www.cnblogs.com/f-ck-need-u/p/7576137.html playbook是ansible实现批量自动化最重要的手段.在其中可以使用变 ...
- Ansible系列(三):YAML语法和playbook写法
html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,h ...
- Ansible系列(二):选项和常用模块
html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,h ...
- Ansible系列(一):基本配置和使用
本文目录:1.1 安装Ansible1.2 配置Ansible 1.2.1 环境配置 1.2.2 SSH互信配置 1.2.3 简单测试1.3 inventory Ansible是一种批量.自动部署工具 ...
- Ansible系列(六):各种变量定义方式和变量引用
本文目录:1.1 ansible facts1.2 变量引用json数据的方式 1.2.1 引用json字典数据的方式 1.2.2 引用json数组数据的方式 1.2.3 引用facts数据1.3 设 ...
- Ansible系列(六):循环和条件判断
本文目录:1. 循环 1.1 with_items迭代列表 1.2 with_dict迭代字典项 1.3 with_fileglob迭代文件 1.4 with_lines迭代行 1.5 with_ne ...
- Ansible系列(七):执行过程分析、异步模式和速度优化
本文目录:1.1 ansible执行过程分析1.2 ansible并发和异步1.3 ansible的-t选项妙用1.4 优化ansible速度 1.4.1 设置ansible开启ssh长连接 1.4. ...
- Ansible系列(五):各种变量定义方式和变量引用
Ansible系列文章:http://www.cnblogs.com/f-ck-need-u/p/7576137.html 1.1 ansible facts facts组件是用来收集被管理节点信息的 ...
- 自动化运维工具ansible学习+使用ansible批量推送公钥到远程主机
目录: 一.ansible简介 1.1.ansible是什么 1.2.ansible如何工作 1.3.ansible优缺点 1.4.ansible安装方式 1.5.ansible文件简单介绍 1.6. ...
随机推荐
- 网页实现串口TCP数据通讯的两种方案
概述 串口和TCP数据通讯客户端的形式比较多,但是网页中用的比较少. 其实最大的是网页无法访问本地资源造成的,可能是出于安全方面考虑吧. 解决方案也不是没有,这里介绍几种供大家参考. 方案一:专用 ...
- 在DAYU200上实现OpenHarmony视频播放器
内容简介 本文介绍了如何使用ArkUI框架提供的video组件,实现一个具有简易播放器.通过VideoController控制器来控制倍速.全屏.进度调节等功能. 由于使用本地视频文件会影响App的包 ...
- 探索基于WebRTC的有感录屏技术开发流程
第一章:技术原理 WebRTC(Web Real-Time Communication)是一种开放源代码项目,旨在通过浏览器之间的点对点通信实现实时音视频通信.WebRTC利用JavaScript A ...
- JS 取Json中对象特定属性值
解析JSON JSON 数据 var str = '[{"a": "1","b": "2"}, {"a&quo ...
- spring boot 手动value和自动注入配置的区别[五]
前言 前面两篇中,写道我们注入配置的方式,是通过是注解的方式完成,如下: @ConfigurationProperties(prefix ="person") 这意味着: 我们写一 ...
- Oracle 将字符中含有的字母或特殊字符去除并将字符串置换成数字
将字符中含有的字母或特殊字符去除并将字符串置换成数字 将字符中含有的字母或特殊字符去除并将字符串置换成数字 to_number(nvl(TRANSLATE(u.scsqrbzl, 'qwertyuio ...
- 【笔记】Oracle使用笔记 0-sql injection&&&result of string concatenation is too long
报错:数据库操作错误."27,34006/v1:0-sql injection(SQL注入) 出现这个报错的情况背景是使用后端函数进行前端SQL语句组合进行数据插入的时候的提示 不太清楚是因 ...
- 力扣38(java)-外观数列(中等)
题目: 给定一个正整数 n ,输出外观数列的第 n 项. 「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述. 你可以将其视作是由递归公式定义的数字字符串序列: count ...
- 为什么我要迁移 SpringBoot 到函数计算
简介: 面对流量洪峰,我们再也不会手忙脚乱了,函数计算自动会帮我们扩容!很好的解决了我们的 API 场景和不定时执行各种不同任务的场景. 作者:榴莲 为什么要迁移? 我们的业务有很多对外提供服务的 ...
- 3分钟创建Serverless Job 定时获取新闻热搜
简介: 7月25号-8月2号工作日期间,完成场景搭建,即可获得夏日清凉小风扇(每日限量)和阿里云代金券! 云起实验室,由阿里云提供的零门槛云上实践平台.一键预置实验环境,提供详细的实验手册指导,快速体 ...