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. ...
随机推荐
- 双向循环链表(DoubleLoopLinkList)
双向循环链表 关于双向循环链表可以先阅读这篇文章这里就不再赘述:双向链表(DoubleLinkList) Node template<typename T> class Node { pu ...
- #树状数组,离散#洛谷 3586 [POI2015]LOG
题目 分析 考虑\(\geq s\)的部分最多取到\(s\), 设\(<s\)的总和为\(p\),个数为\(t\), 那么\(p+(n-t)*s\geq c*s\)就一定能取到 代码 #incl ...
- 开发人员使用HANA交付业务的学习路径
本文于2019年7月22日完成,发布在个人博客网站上. 考虑个人博客因某种原因无法修复,于是在博客园安家,之前发布的文章逐步搬迁过来. 入门 编程规范. 开发环境使用方法. 基本语法,与其它同类软件的 ...
- OpenHarmony Meetup 2023北京站圆满举办
"OpenHarmony正当时"OpenHarmony Meetup 2023城市巡回活动,旨在通过meetup线下交流形式,解读OpenHarmony作为下一代智能终端操作系 ...
- C# Winform Socket点对点通信
前言 Socket的英文原义是"孔"或"插座",其实在网络编程中Socket就是这个意思,就像我们打电话,要首先知道对方的手机号一样,这个手机号就相当于一个So ...
- Ez_pycode_dis qsnctfwp
Python字节码基础 下载相关文件并打开,其中为 Python 字节码. 字节码格式为 源码行号 | 指令在函数中的偏移 | 指令符号 | 指令参数 | 实际参数值 根据上述字节码格式以及文件内容开 ...
- 重新点亮linux 命令树————screen 命令和系统日志[二十四]
前言 简单介绍一下screen 正文 因为我们终端关闭后,终端就消失了,故而希望有终端保持. 1.yum install screen 进行安装. 2.使用screen 进行进入 3.然后打开tail ...
- jenkins 持续集成和交付 —— 触发器(六)
前言 什么是触发器呢?当某种条件达到的时候将会触发某个机关. 正文 jenkins 内置4种触发器: 1.触发远程构建 2.其他工程构建后触发 3.定时触发 4.轮询SCM 那么就来介绍一下这几种吧. ...
- 浅析Golang map的实现原理
Golang中的map底层使用的数据结构是hash table,基本原理就和基础的散列表一致,重点是Golang在设计中采用了分桶(Bucket),每个桶里面支持多个key-value元素的这种思路, ...
- CF1857G Counting Graphs 题解
题目描述 给定一棵最小生成树,求有多少张图的最小生成树是给定的树,并且这张图的所有边边权不超过 \(S\). 思路 考虑在最小生成树中加边. 我们回顾一下 Kruskal 的过程: 找到没被用过的,最 ...