Ansible 2 -- 6 playbook 管理
时间:2022-06-26
本文章向大家介绍Ansible 2 -- 6 playbook 管理,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
可以为playbook中的任务打tag标签,方便在ansible-playbook中设置只执行哪些被打上tag的任务或忽略被打上tag的任务。
使用 tag 为 task 分类
tasks:
- name: make sure apache is running
service: name=httpd state=started
tags: apache
- name: make sure mysql is running
service: name=mysqld state=started
tags: mysql
以下是ansible-playbook命令关于tag的选项。
--list-tags # list all available tags
-t TAGS, --tags=TAGS # only run plays and tasks tagged with these values
--skip-tags=SKIP_TAGS # only run plays and tasks whose tags do not match these values
使用 include,import 和 roles 提高 playbook 的复用性
如果playbook很大,task很多,或者某task要经常使用,可以考虑拆分位独立文件。
Ansible 2.4 起引入 include 和 import 的概念
- import 是静态导入,会在playbooks解析阶段将父和子task变量全部读取并加载 import_playbook, import_tasks 等
- include 是动态导入,执行play之前才加载变量 include_tasks, include_role 等
导入 task
导入task可以使用 import_tasks: include_tasks
# playbook.yaml
# -- task/ntupdate.yml
---
- hosts: centos7
tasks:
- import_tasks: task/ntupdate.yaml
# ntupdate.yml
---
- name: execute ntpdate
shell: /usr/sbin/ntpdate ntp1.aliyun.com
虽然仍然可以用
include: task/ntupdate.yaml
来直接导入 task 或 playbook 已经不推荐这么做,将来会被废弃
导入 playbook
即加载一个或多个play 导入playbook可以使用 import_playbook
---
- name: first demo
hosts: cloud
vars:
name: finley
tasks:
- name: execute date cmd
shell: echo date
- name: create hello
shell: touch helloworld.txt
args:
creates: /tmp/hello.txt # 存在此文件就不执行 shell
- include_tasks: tasks/task-hello.yml
- import_playbook: playbooks/web.yml
Role
role 需要一个特定的目录结构,执行时会自动加载定义好的文件如vars_files,tasks,handles等 通过role进行内容分组方便与其他用户分享role。
示例项目结构
site.yml
webservers.yml
fooservers.yml
roles/
common/
tasks/
handlers/
files/
templates/
vars/
defaults/
meta/
webservers/
tasks/
defaults/
meta/
- tasks目录:存放task列表。若role要生效,此目录必须要有一个主task文件main.yml,在main.yml中可以使用 include包含同目录(即tasks)中的其他文件。
- handlers目录: 存放handlers的目录,若要生效,则文件必须名为main.yml文件。
- files目录:在task中执行copy或script模块时,如果使用的是相对路径,则会到此目录中寻找对应的文件。
- templates 目录:在task中执行template模块时,如果使用的是相对路径,则会到此目录中寻找对应的模块文 件。
- vars目录:定义专属于该role的变量,如果要有var文件,则必须为main.yml文件。
- defaults 目录:定义角色默认变量,角色默认变量的优先级最低,会被任意其他层次的同名变量覆盖。如果要有var文件,则必须为main.yml文件。
- meta目录:用于定义角色依赖(dependencies),如果要有角色依赖关系,则文件必须为main.yml。
参考
https://docs.ansible.com/ansible/latest/user_guide/playbooks_reuse.html
- 服务器进程异常的原因分析(r6笔记第74天)
- Elastic 技术栈之 Filebeat
- Elastic 技术栈之 Logstash 基础
- 备库CPU使用异常优化(r6笔记第73天)
- 数据清理的遗留问题处理(二)(r6笔记第91天)
- Kaggle Titanic 生存预测比赛超完整笔记(上)
- 多系统交互中DBA需要实现的技术细节(r6笔记第90天)
- Kaggle Titanic 生存预测比赛超完整笔记(中)
- SDP(11):MongoDB-Engine功能实现
- SDP(10):文本式大数据运算环境-MongoDB-Engine功能设计
- Kaggle Titanic 生存预测比赛超完整笔记(下)
- SDP(9):MongoDB-Scala - data access and modeling
- 数据清理的遗留问题处理(r6笔记第87天)
- 一次DB time抖动发现的expdp的bug(r6笔记第86天)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- PHP基于session.upload_progress 实现文件上传进度显示功能详解
- Android实现加法计算器
- Android使用Realm数据库实现App中的收藏功能(代码详解)
- Android实现简单加法计算器
- Android实现两个数相加功能
- 基于Android studio3.6的JNI教程之ncnn之语义分割ENet
- android计算器实现两位数的加减乘除
- android studio实现简单考试应用程序实例代码详解
- Kotlin 实现按钮点击跳转监听事件方式
- Android使用剪切板传递数据
- kotlin anko页面跳转实现方式,携带参数或flag
- 关于android连续点击出现多个Activity界面的解决方法
- Android Studio使用recyclerview实现展开和折叠功能(在之前的微信页面基础之上)
- 解决django 多个APP时 static文件的问题
- Android Studio如何获取SQLite数据并显示到ListView上