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. SpringBoot扫描不到类,注入失败A component required a bean of type 'XXService' that could...

    SpringBoot项目的Bean装配默认规则是根据Application类所在的包位置从上往下扫描! “Application类”是指SpringBoot项目入口类.这个类的位置很关键: 如果App ...

  2. # Python第十节 传参

    Python第十节 传参 一. 变量和变量名 首先说明变量名和变量的一点差异 例如: var = [1, 2, 3] `var = "Google" 调用变量var的时候, 既可以 ...

  3. Cas简介(一)

    Cas的全称是Centeral Authentication Service,是对单点登录SSO(Single Sign On)的一种实现.其由Cas Server和Cas Client两部分组成,C ...

  4. ios打包,通过Xcode生成ipa文件

    ios打包,通过Xcode生成ipa文件 干货文章 ·2018-03-21 19:03:47 打开ios项目目录,配置证书 将运行设备选择,如下图 选择:Product -> Scheme -& ...

  5. xfce4之whisker不显示自定义启动器的解决

    对某些启动比较麻烦的程序,想创建个启动器显示在whisker里,这样就能快速启动了. 通常自己创建的desktop文件可以放~/.local/share/applications里,但是按下面这个创建 ...

  6. centos7-关闭 rpcbind 服务

    1.关闭 rpcbind 服务 sudo systemctl disable rpcbind 2.关闭开机自启动 sudo  systemctl disable rpcbind 3.立即执行关闭 sy ...

  7. MySQL不支持事务处理的解决方法

    MySQL数据库默认的存储引擎类型是MyISAM,这种存储引擎类型不支持事务处理. 在MySQL中,只有InnoDB存储引擎类型的数据表才能支持事务处理. 因此,如果想让MySQL支持事务处理,只要将 ...

  8. Java虚拟机(一)

    一.Java发展历程 Java之父,James Gosling博士 时间 事件 1991年4月 James Gosling博士领导的Green Project启动,java语言前身Oak启动 1995 ...

  9. CSS3 object-position/object-fit

    object-position和object-fit只针对替换元素有作用,也就是form表单家族控件系列,老牌劲旅img图片,HTML5新贵video视频等元素(一般有src属性的). 一.objec ...

  10. Linux环境安装PHP链接SQLserver2008

    网上很多介绍,但是跟着做总是有问题,找到一个大神的,没出现过问题: 1.首先需要编译安装FreeTDS 1.1.安装 说明:一定要从官网下载最新的版本FreeTDS-0.95 ftp://ftp.fr ...