ansible复习笔记_role-从零到无
--创建时间:2021年3月9日
--修改时间:2021年3月9日
--作者:飞翔的小胖猪
roles是各个单独功能性模块的集合,通过分别将变量、文件、任务、模板及处理器放置于单独的目录中,并可以便捷地include它们的一种机制。
简介
roles:多个角色的集合, 可以将多个的role,分别放至roles目录下的独立子目录中
文件夹说明
- roles/project/ :项目名称,有以下子目录
- - files/ :存放由copy或script模块等调用的文件
- - templates/:template模块查找所需要模板文件的目录
- - tasks/:定义task,role的基本元素,至少应该包含一个名为main.yml的文件;其它的文件需要在此文件中通过include进行包含
- - handlers/:至少应该包含一个名为main.yml的文件;其它的文件需要在此文件中通过include进行包含
- - vars/:定义变量,至少应该包含一个名为main.yml的文件;其它的文件需要在此文件中通过include进行包含
- - meta/:定义当前角色的特殊设定及其依赖关系,至少应该包含一个名为main.yml的文件,其它文件需在此文件中通过include进行包含
- - default/:设定默认变量时使用此目录中的main.yml文件,比vars的优先级低
以上的文件夹包含了一个role整的目录结构,在使用role时可以不全部都创建,可即用及建。也可以先行创建,文件夹下可以为空。
编写流程
1.创建roles的目录结构
- mkdir roles/功能名自定义/{files,tasks,templates,vars,handlers,meta,default}
2.编写主的main.yml文件
- [root@135 playbook]# cat roles/功能名自定义/tasks/main.yml
- - include: touch_file.yml
- - include: user.yml
- - include: copy_file.yml
tasks目录下的main.yml文件时整个role的模块入口。其中include行表示单独的模板,置于tasks/目录下。
此处的include有顺序要求,执行次序是从上至下。请根据自身软件逻辑调整功能模块的调用顺序。
3.编写各个单独的功能性模块
根据tasks/main.yml文件中的include行有序的编写单个功能性模块。
- [root@135 tasks]# cat copy_file.yml
- - name: copy file
- copy: src=test.txt dest=/tmp/ backup=yes
- notify: test11
单个模块编写时,需要把这个模块涉及的所有东西都编写完再进行下一个模块的编写。
(有些模块会用到变量,hander,文件等,需要在专用的文件夹中进行相关资源的编写)
3.1 准备文件
- [root@135 playbook]# cat roles/功能名自定义/files/test.txt
- lvan test hhahahaha
- asfassf
3.2 编写对应的handler
- [root@135 playbook]# cat roles/功能名自定义/handlers/main.yml
- - name: test11
- shell: echo "`date` test_lvan" >> /var/log/message
4. 编写调用的playbook文件
在roles目录同级目录下创建一个playbook文件用作调用role模块。
- [root@135 playbook]# cat http_role.yml
- ---
- - hosts: oracle_11g
- remote_user: root
- gather_facts: no
- roles:
- - http
调用文件是整个role编写的最后一步,要确定所有单个功能性模块都编写完成后再编写调用的playbook文件。
5.测试role的功能性
使用ansible-playbook -C 命令检测编写的role是否正常。该步骤不是必须的,但是检测一下总是好的。
- [root@135 playbook]# ansible-playbook -C http_role.yml
检测有时候会因为逻辑错误出现检测不通过,但又确定没有语法和参数的错误。
一般出现在某一个模块需要依赖上一个模块的执行结果。而-C参数是检测不会真实执行,则会出现依赖性的报错。此时不用管这类报错,一般提示有:没有该用户 文件路径不存在等。
role调用
role在编写调用的playbook时可以给role设置标签和条件用来控制筛选待执行的role。
基本调用
- [root@135 playbook]# cat http_role_base.yml
- ---
- - hosts: websrvs
- remote_user: root
- roles:
- - mysql
- - memcached
- - nginx
条件调用
- [root@135 playbook]# cat http_role_term.yml
- ---
- - hosts: all
- remote_user: root
- roles:
- - { role: nginx, username: nginx, when: ansible_distribution_major_version == '7' }
传参调用
- [root@135 playbook]# cat http_role_args.yml
- ---
- - hosts: all
- remote_user: root
- roles:
- - mysql
- - { role: nginx, username: nginx }
tags调用
- [root@135 playbook]# cat http_role_tags.yml
- ---
- - hosts: websrvs
- remote_user: root
- roles:
- - { role: nginx ,tags: [ 'nginx', 'web' ] ,when: ansible_distribution_major_version == "6“ }
- - { role: httpd ,tags: [ 'httpd', 'web' ] }
- - { role: mysql ,tags: [ 'mysql', 'db' ] }
- - { role: mariadb ,tags: [ 'mariadb', 'db' ] }
执行命令:ansible-playbook --tags="nginx,httpd,mysql" http_role_tags.yml
模块展示
不同文件夹下各个文件配置模版展示。
tasks
tasks目录下存放的是整个role的所有模块,至少包含一个main.yml文件和一个功能性yml文件。
main.yml
- cat main.yml
- include: user.yml
单个功能模块
- cat user.yml
- - name: create user
- user: name=test_lvan system=yes shell=/sbin/nologin
vars
变量存放路径。
- cat main.yml
- user: lvan
- name_test: lvan11
handlers
- cat main.yml
- - name: restart
- service: name=nginx state=restarted
default
存放变量的目录,优先级比vars目录中的低,如果vars中的main.yml没有匹配的变量再来这里找。
- cat main.yml
- user: nginx
- group: nginx
- tarball_name: nginx-1.6.3.tar.gz
- nginx_configuration: nginx.conf.j2
- nginx_dir: nginx-1.6.3
files
该文件夹下保存的是tasks文件夹下模块要用到的文件,没有特殊格式就只是单个普通文件。
templates
该文件夹下保存的是tasks文件夹下模块要用到的文件,ansible专用模版文件。就是可以包含变量的文件。每个模版文件的定义均不一样,只展示较简单的格式。
- cat nginx.conf.j2
- worker_processes {{ ansible_processor_vcpus }}
其中{{ ansible_processor_vcpus }}就是变量。
ansible复习笔记_role-从零到无的更多相关文章
- ansible复习笔记_基础-从零到无
--创建时间:2021年1月25日 --修改时间:2021年3月9日 --作者:飞翔的小胖猪 前言 该文档仅作为作者复习ansible使用,对格式和流程没有做过多的编排和概述.不喜勿喷. 基础 ans ...
- ansible复习笔记_playbook-从零到无
--创建时间:2021年3月9日 --修改时间:2021年3月9日 --作者:飞翔的小胖猪 yaml语法格式 每单一文件第一行,使用 "---"开始.在结尾的时候使用三个点&quo ...
- Ansible安装及初始化-从零到无
--时间:2019年1月12日 --作者:飞翔的小胖猪 前言 说明 文档指导读者在Redhat系列操作系统上安装Ansible软件及初始化配置,包括服务端及被控端的配置文件设置. 以下所有操作都在An ...
- Java二次复习笔记(1)
Java二次复习笔记(1) Java采用的默认字符编码集是Unicode. byte=byte+byte报错,值为int,而byte+=byte不报错.同样short = short+short报错, ...
- 斜率优化DP复习笔记
前言 复习笔记2nd. Warning:鉴于摆渡车是普及组题目,本文的难度定位在普及+至省选-. 参照洛谷的题目难度评分(不过感觉部分有虚高,提高组建议全部掌握,普及组可以选择性阅读.) 引用部分(如 ...
- 数位DP复习笔记
前言 复习笔记第五篇.(由于某些原因(见下),放到了第六篇后面更新)CSP-S RP++. luogu 的难度评级完全不对,所以换了顺序,换了别的题目.有点乱,见谅.要骂就骂洛谷吧,原因在T2处 由于 ...
- FFT/NTT复习笔记&多项式&生成函数学习笔记Ⅲ
第三波,走起~~ FFT/NTT复习笔记&多项式&生成函数学习笔记Ⅰ FFT/NTT复习笔记&多项式&生成函数学习笔记Ⅱ 单位根反演 今天打多校时 1002 被卡科技了 ...
- Java基础复习笔记系列 九 网络编程
Java基础复习笔记系列之 网络编程 学习资料参考: 1.http://www.icoolxue.com/ 2. 1.网络编程的基础概念. TCP/IP协议:Socket编程:IP地址. 中国和美国之 ...
- Java基础复习笔记系列 八 多线程编程
Java基础复习笔记系列之 多线程编程 参考地址: http://blog.csdn.net/xuweilinjijis/article/details/8878649 今天的故事,让我们从上面这个图 ...
随机推荐
- golang中数组指针和指针数组当做函数参数如何修改数组中的值
先理解:数组指针它的类型时指针,指针数组它的类型时数组 1. 数组指针当做函数的参数 package main import "fmt" func changeData(dataA ...
- jsp中获取下拉框的value问题
遇到问题 最近快期末考试了,今天想写一个简单的增删改查项目练练手,可是在刚写增加的时候就出现了问题,"增"一直是最简单的操作,本来自付很快就能写完,可是数据库中对应的下拉框数据一直 ...
- 什么是以特性为核心的持续交付|阿里巴巴DevOps实践指南
编者按:本文源自阿里云云效团队出品的<阿里巴巴DevOps实践指南>,扫描上方二维码或前往:https://developer.aliyun.com/topic/devops,下载完整版电 ...
- 什么是协程(第三方模块gevent--内置模块asyncio)
目录 一:协程 1.什么是协程? 2.携程的作用? 3.安装第三方模块:在命令行下 二:greenlet模块(初级模块,实现了保存状态加切换) 三: gevent模块(协程模块) 1.time 模式协 ...
- python全局解释器GIL锁(-死锁)
目录 一:Python中的GIL锁 1.GIL介绍 2.GIL的作用 3.cpython 4.内存管理>>>垃圾回收机制 二:全局解释器锁GIL 1.GIL特点 三:计算密集型与IO ...
- linux中uniq命令全面解析
目录 一 :uniq作用 二:uniq格式 1.参数 2.参数案例解析: linuxuniq简介 Linux uniq 命令用于检查及删除文本文件中重复出现的行列,一般与 sort 命令结合使用. u ...
- [数据结构]伸展树(Splay)
#0.0 写在前面 Splay(伸展树)是较为重要的一种平衡树,理解起来也依旧很容易,但是细节是真的多QnQ,学一次忘一次,还是得用博客加深一下理解( #1.0 Splay! #1.1 基本构架 Sp ...
- CPU飙升排查
怎么排查CPU飙升 线上有些系统,本来跑的好好的,突然有一天就会出现报警,CPU使用率飙升,然后重启之后就好了.例如,多线程操作一个线程不安全的list往往就会出现这种现象.那么怎么定位到具体的代码范 ...
- python使用range()函数创建数字列表list
#!/usr/bin/python #coding=utf-8 #好好学习,天天向上 numbers=list(range(1,6)) print(numbers) range指定步长: #!/usr ...
- Java的代理机制
Java的代理机制 使用代理 Proxzy 可以在运行时创建一组给定接口的新类,这种功能只有在编译时无法确定需要实现哪种接口时才需要使用. 1. 使用代理的时机 假如有一个表示接口的 Class 对象 ...