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的更多相关文章

  1. Ansible随笔8

    自定义模块的开发模式 1.决定自定义模块的存放路径 编辑/etc/ansible/ansible.cfg文件,修改library = /usr/share/ansible/. 这样就告诉ansible ...

  2. Ansible playbook API 开发 调用测试

    Ansible是Agentless的轻量级批量配置管理工具,由于出现的比较晚(13年)基于Ansible进行开发的相关文档较少,因此,这里通过一些小的实验,结合现有资料以及源码,探索一下Ansible ...

  3. ansible学习

    声明:本博客内容是根据惨绿少年内容实践随笔,地址:http://www.cnblogs.com/clsn/p/7743792.html#comment_form 1.ansible介绍 Ansible ...

  4. Ansible 利用playbook批量部署mariadb

    环境说一下 192.168.30.21     ansible 192.168.30.25     client1 192.168.30.26     client2 这里我的ansible环境已经部 ...

  5. Ansible实现zabbix服务器agent端批量部署

    项目需求:由于搭建zabbix,需要每台服务器都需要安装监控端(agent)正常的的操作是一台一台去安装,这样确实有点浪费时间,这里为大家准备了一款开源 的自动化运维工具Ansible,相信大家也很熟 ...

  6. 利用ansible书写playbook搭建HAProxy+Keepalived+PXC负载均衡和高可用的PXC环境续

    ansible.playbook.haproxy.keepalived.PXC haproxy+keepalived双主模式调度pxc集群 HAProxy介绍 反向代理服务器,支持双机热备支持虚拟主机 ...

  7. 如何利用ansible callback插件对执行结果进行解析

    最近在写一个批量巡检工具,利用ansible将脚本推到各个机器上执行,然后将执行的结果以json格式返回来. 如下所示: # ansible node2 -m script -a /root/pyth ...

  8. AI人工智能系列随笔

    初探 AI人工智能系列随笔:syntaxnet 初探(1)

  9. 【置顶】CoreCLR系列随笔

    CoreCLR配置系列 在Windows上编译和调试CoreCLR GC探索系列 C++随笔:.NET CoreCLR之GC探索(1) C++随笔:.NET CoreCLR之GC探索(2) C++随笔 ...

  10. C++随笔:.NET CoreCLR之GC探索(4)

    今天继续来 带大家讲解CoreCLR之GC,首先我们继续看这个GCSample,这篇文章是上一篇文章的继续,如果有不清楚的,还请翻到我写的上一篇随笔.下面我们继续: // Initialize fre ...

随机推荐

  1. 使用yarn搭建vue项目

    今天尝试了一下用yarn的方式搭建vue项目,方法其实是和npm的用法一样.但是在创建过程中报错了.现在整理一下,便于后期查错时使用. 以windows系统为例 1.全局安装yarn,三种方式 官网上 ...

  2. 二、hibernate的常用API

    hibernate的调用过程 public class demo01 { @Test public void test(){ // 1.加载hibernate核心配置文件 Configuration ...

  3. JS中的迭代(数组)

    啥子是迭代?可以简单地理解为按顺序访问目标(数组.对象等)中的每一项(其实和遍历概念没什么差别) 数组的迭代被我分为两种: 查找 遍历 查找: 1.indexOf(item,start) 该方法搜索指 ...

  4. LeetCode Array Easy 217. Contains Duplicate

    Description Given an array of integers, find if the array contains any duplicates. Your function sho ...

  5. 微信小程序の页面路由

    微信小程序的页面路由由平台已栈的形式管理. 微信小程序的页面为什么会如此特殊呢,因为可视区域始终只有一个页面. 一.小程序页面的路由方式 小程序页面有6种路由方式:初始化.打开新页面.页面重定向.页面 ...

  6. 【leetcode】bash脚本练习

    [192]Word Frequency Write a bash script to calculate the frequency of each word in a text file words ...

  7. vue-cli下的vuex的极简Demo(实现加1减1操作)

    1.vue-cli搭建好项目之后,使用npm安装vuex npm install vuex --save 2.在项目目录中构建vuex目录(这里我新建了store的文件夹,里面新建了store.js文 ...

  8. yarn安装node-sass报错问题

    react前端项目在用yarn install命令安装依赖时报错了,看了下报错信息是node-sass安装的时候编译报错. 解决方法: 第一步:配置淘宝镜像 yarn config set regis ...

  9. Centos剔除在线用户

    CentOS踢除已登录用户的方法: 1.>先按下w查看用户终端号 2.>执行pkill -kill -t pts/1 (pts/1为w指令看到的用户终端号)命令

  10. (微服务架构)Security + Oauth2 + Jwt + Zuul解决微服务系统的安全问题

    前言 之前零零散散的学习过一点鉴权这方面的玩意儿,但自我感觉净他妈整些没用的,看代码还是看不懂,这次我们再统一对其进行学习一下,希望自己掌握这个技能,也希望屏幕面前的你能有点收获 此次的学习周期可能有 ...