zoukankan      html  css  js  c++  java
  • 随笔-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的内容。

  • 相关阅读:
    Redis 服务端程序实现原理
    Redis 中的客户端
    Redis 中的数据持久化策略(AOF)
    Redis 中的数据持久化策略(RDB)
    Redis 中的数据库
    Redis 的底层数据结构(对象)
    Redis 的底层数据结构(压缩列表)
    Redis 的底层数据结构(整数集合)
    又离职了~
    如何救活被屏蔽的主机,继续开发工作
  • 原文地址:https://www.cnblogs.com/t-road/p/11463328.html
Copyright © 2011-2022 走看看