随笔-ansible-6
Ansible中的变量引用有时候需要双引号,有时候不需要双引号,这是因为Ansible是多人协作的作品,所以没有统一。
一切以官网说明为主,同时自己也要实践。
这是一个example.yml文件,我们用它的内容来表示role的引用方式。后面我们会用一个例子来做实验。
1、编排roles目录结构
2、编辑roles/apache/handlers/main.yml的内容
3、编辑roles/apache/tasks/restart.yml的内容
4、编辑roles/apache/tasks/main.yml的内容
5、编排roles目录的同级目录下的apache.yml的内容
当我们引用apache这个role时,它就会到apache目录下找相关的文件。
6、执行命令
ansible-playbook apache.yml
========= 以上内容是关于handlers的使用,主要就是当某个动作发生了,会连带触发另一个动作(notify)
roles技巧之Files:文件传输。
Files目录下的文件无需写绝对路径即可将文件传输至远程主机。
Templates目录下的文件以jinja2渲染。
1、结构
2、编辑项目入口文件file.yml的内容:
3、编辑roles/example/tasks/file.yml文件的内容
4、编辑roles/example/tasks/main.yml文件的内容
5、执行命令
ansible-playbook file.yml
这里的file.yml是入口文件,而不是tasks目录下的file.yml文件。
每个yml文件都要携带 "---"标记。
在企业中我们不仅会遇到文件传输的需求,对于应用的配置文件,针对不同的主机需要使用不同的配置文件。
开始使用Templates。
Templates常被用作传输文件,同时支持预定义变量替换。
案例场景:将order.j2分发至远程主机/data/{{ PROJECT }}/目录下,并改名为order.conf,且替换配置文件中
变量的值。
1、编排目录
在roles的同目录中还有template.yml文件。
template.yml
roles/template
2、编辑总调度文件template.yml
3、编辑roles/template/tasks/main.yml文件
4、编辑roles/template/tasks/template.yml文件
5、编辑模板文件roles/template/templates/order.j2
6、编辑roles/template/vars/main.yml,定义变量
7、执行命令
ansible-playbook template.yml
Roles的Template用法和场景在企业中尤为常见,对配置文件的下发及变量替换有着极为灵活的支持。
如果配置文件因为环境的复杂性需要加一定的逻辑才能生成,请参考下面的方式。
跨平台案例讲解:
为Debian、Redhat两种类型的系统安装Apache服务。
1、编辑hosts文件
实际在写时,不要加后面的注释,会导致报错。
2、编辑roles/httpd_debian/tasks/httpd.yml文件
3、编辑roles/httpd_debian/tasks/main.yml文件
4、编辑roles/httpd_centos/tasks/httpd.yml文件
5、编辑roles/httpd_centos/tasks/main.yml文件
6、编辑总调度文件
7、执行命令
ansible-playbook httpd.yml
Jinja2简单语法
{{ 变量 }}
{% 命令执行语句 %}
场景:对于mysql的配置文件,如果人工指定监听端口,就使用人工指定的;如果没有指定,就使用默认的。
结构:
在mysqlconf这个role的目录下,我们只创建了templates目录,没有创建tasks目录,这说明了mysqlconf
这个role的功能不全而已,并不影响正常使用。
1、编辑mysqlconf.yml文件
由于功能不全,所以将原本应该在tasks下的任务放到了总控制入口文件中。被放置的是template模块。
2、编辑roles/mysqlconf/templates/mycnf.j2文件
只要是以j2结尾的文件,就应该在里面写jinja2语法。
如果变量PORT存在,就使用上面那个;否则使用下面这个。
这里的文件可以改成这样:
这样稍微比前面简洁些。
3、执行,看效果
ansible-playbook mysqlconf.yml
改下文件:
PORT参数一定要写,否则报错。可以不写值,这样就使用默认值。
可以写为:
PORT: false
PORT:
这样都会导致if PORT为False。
Jinja2多值合并举例:
1、结构
2、编辑模板文件roles/join/templates/list.j2
3、编辑入口文件
这里的roles部分可以不写,因为导入了也没有什么用。
4、执行命令,查看结果
ansible-playbook join.yml
案例:根据nginx的角色,生成不同的配置文件。
2台代理服务器,软件为nginx。
1台WEB服务器,软件为nginx。
1、结构
还有一个nginxconf.yml,同roles目录一样,处于同一目录下。
2、编辑roles/nginxconf/tasks/file.yml文件
3、编辑roles/nginxconf/tasks/main.yml文件
4、编辑模板文件roles/nginxconf/templates/nginx.conf.j2
该文件的内容将根据变量的不同而不同。所以至关重要。
内容比较多,无法粘贴。
这里是根据nginx_use_proxy的值来判断是否是代理服务器。然后来生成相关内容。
同样,这两个位置也是如此。
5、编辑变量文件roles/nginxconf/vars/main.yml
6、编辑总调度文件nginxconf.yml
套路就是:
1、首先根据不同的nginx角色,提前编写好完整的nginx配置文件。
2、然后分析配置文件,将部分内容替换为jinja语法,以适应不同的主机。
3、要保证根据主机角色的不同来执行不同的yml文件。
同样的一套模板,通过if判断语句来生成不同功能的配置文件。
可以给web服务器生成配置文件;可以给proxy服务器生成配置文件。
上面的方式是:将所有信息都放在一个文件中了。
Inventory文件扩展:随着服务器数量的增多,动态扩展Inventory文件的内容。
因为随着业务的需要,机器肯定增多,如果要纳入ansible的管理,就需要将
它写入inventory文件中,方便管理。
可以通过python脚本来生成等价于inventory的内容。
随笔-ansible-6的更多相关文章
- Ansible随笔8
自定义模块的开发模式 1.决定自定义模块的存放路径 编辑/etc/ansible/ansible.cfg文件,修改library = /usr/share/ansible/. 这样就告诉ansible ...
- Ansible playbook API 开发 调用测试
Ansible是Agentless的轻量级批量配置管理工具,由于出现的比较晚(13年)基于Ansible进行开发的相关文档较少,因此,这里通过一些小的实验,结合现有资料以及源码,探索一下Ansible ...
- ansible学习
声明:本博客内容是根据惨绿少年内容实践随笔,地址:http://www.cnblogs.com/clsn/p/7743792.html#comment_form 1.ansible介绍 Ansible ...
- Ansible 利用playbook批量部署mariadb
环境说一下 192.168.30.21 ansible 192.168.30.25 client1 192.168.30.26 client2 这里我的ansible环境已经部 ...
- Ansible实现zabbix服务器agent端批量部署
项目需求:由于搭建zabbix,需要每台服务器都需要安装监控端(agent)正常的的操作是一台一台去安装,这样确实有点浪费时间,这里为大家准备了一款开源 的自动化运维工具Ansible,相信大家也很熟 ...
- 利用ansible书写playbook搭建HAProxy+Keepalived+PXC负载均衡和高可用的PXC环境续
ansible.playbook.haproxy.keepalived.PXC haproxy+keepalived双主模式调度pxc集群 HAProxy介绍 反向代理服务器,支持双机热备支持虚拟主机 ...
- 如何利用ansible callback插件对执行结果进行解析
最近在写一个批量巡检工具,利用ansible将脚本推到各个机器上执行,然后将执行的结果以json格式返回来. 如下所示: # ansible node2 -m script -a /root/pyth ...
- AI人工智能系列随笔
初探 AI人工智能系列随笔:syntaxnet 初探(1)
- 【置顶】CoreCLR系列随笔
CoreCLR配置系列 在Windows上编译和调试CoreCLR GC探索系列 C++随笔:.NET CoreCLR之GC探索(1) C++随笔:.NET CoreCLR之GC探索(2) C++随笔 ...
- C++随笔:.NET CoreCLR之GC探索(4)
今天继续来 带大家讲解CoreCLR之GC,首先我们继续看这个GCSample,这篇文章是上一篇文章的继续,如果有不清楚的,还请翻到我写的上一篇随笔.下面我们继续: // Initialize fre ...
随机推荐
- TP5截取部分字符串
TP5截取超出的字符串,使用...显示 在公共文件common.php中 视图模板中调用
- VC的小工具查询exe的依赖
查看程序或动态库所依赖的动态库 dumpbin /dependents abc.exe 查看动态库的输出函数 dumpbin /exports abc.dll
- 转 JMeter基础之--元件的作用域与执行顺序
前面有介绍过jmeter的元件类别,对于新手来说,jmeter的元件是还是不少的,如果我们按照每一个元件的每一个参数的含义去学习,无疑会降低学习性能测试的热情,就算我们熟悉了所有元件以及元件上的参数了 ...
- 深浅拷贝, for循环小知识点 str操作 list的删除问题,类型转换
深浅拷⻉ : lst1 = ["⾦⽑狮王", "紫衫⻰王", "⽩眉鹰王", "⻘翼蝠王"] lst2 = lst1 ...
- 一、最新Kafka单节点部署+测试 完整
每次学一个东西从基础的开始,循序渐进. 不急不躁,路还很长. 所有教程都是学习汪文君大神的kafka教程的. 一.部署 这里选的kafka版本是 0.10.2.1 下载连接 https://dow ...
- mySQL学习入门教程——2.创建表
二.创建表 一.创建数据表的SQL语句模型(弱类型)CREATE TABLE [IF NOT EXISTS] 表名称(字段名1 列的类型[属性][索引],字段名2 列的类型[属性][索引],-字段名n ...
- sed以及awk
一.sed sed是一种流编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时 缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的 内容,处理完成后,把缓 ...
- 编译Android源代码
硬盘空间需要在50G以上,最好100g 系统:ubuntu14.04 交叉工具链:arm-linux-gcc-4.5.1-v6-vfp-20120301 安装 Java 开发环境 $ sudo apt ...
- ubuntu安装及破解WebStorm11
ubuntu安装及破解WebStorm11 下载地址:http://www.jetbrains.com/webstorm/download/#section=linux-version 1.qingy ...
- 【Luogu】【关卡2-1】简单的模拟(2017年10月)
任务说明:开始普及组的训练!所谓模拟,就是直接根据题意编写,思维难度简单. 铺地毯 进制转换 多项式输出 机器翻译 排座椅 笨小猴 都是简单模拟题