• Ansible的roles标准化


    一、使用roles标准化Playbook

    roles功能可以用来规范playbook的编写

     

    1 创建所需要的roles原型目录结构

    (1)、创建一个用于存放标准化文件的目录,名字自定义,例:mkdir myroles

    (2)、在标准化目录myroles下创建一个标准化playbook接口文件,用于自动找标准化目录下的内容.

     
    例:touch nginx.yaml
    #里面写剧本
    ---
    - hosts: webB
    gather_facts: True
    roles:
    - nginx

    (3)、在标准化目录myroles下创建一个playbook的原型配置目录,用于存放相关模组配置目录,例:mkdir roles

    (4)、在playbook的原型配置目录roles里创建一个相关模组配置目录,用于存放模块任务的目录,例:mkdir nginx

    (5)、在模块任务的目录nginx下创建一个ansible模块任务的剧本,用来执行。

     
    例:touch main.yaml
    #里面写具体任务
    ---
    - name: check alived
    ping:
    - name:
    shell: ls /
    register: ls_result
    - debug: var=ls_result

    以上详见下图

    image_1ct0c6k5miisbpm8d91ecraus1j.png-31.6kB

    image_1ct0cbv0q116hhuc1hhh1q9r1lid20.png-21.1kB

    image_1ct0ck8mp142e1elfvqj16o5osq2d.png-30.9kB

    image_1ct0br7kh1v834jr1m3liu91gfa9.png-59.1kB
    image_1ct0brphgrjs16vk7tb1231rmim.png-15.4kB

    注; 
    ansible-playbook执行入口配置文件nginx.yaml后,它会自动在roles目录下查找nginx目录并进入后查找tasks任务目录并执行main.yaml的任务配置文件。 
    1、相关模组配置目录,可以根据不同需求来创建,可以是多个。 
    2、模组配置目录下的目录也可根据执行不同任务来创建,可以是多个 
    例:原型的目录结构如下

     
    [root@ansible myroles]# tree /myroles/
    /myroles/
    ├── nginx.yaml #入口触发配置文件
    └── roles #playbook的原型配置目录
    └── nginx #nginx相关模组配置目录
    ├── files #copy模块和script模块的参数src默认会从这个文件夹查找
    ├── handlers #用来存放notify的
    ├── tasks #用来存放ansible模块任务的
    ├── templates #用来存放j2的
    └── vars #用来存放变量的
    7 directories, 1 file
     

    2、roles中vars自定义变量模组的使用

    (1)在模块任务的目录nginx下创建一个vars目录用于存放变量文件。 例:mkdir vars

    (2)vars目录下创建一个变量文件

     
    例:touch main.yaml
    #文件里面写变量
    ---
    my_name: mendermi
    phone: 13800000

    (3)在roles/nginx/tasks/main.yaml下添加新的环境变量的任务 
    image_1ct0flbou1ejb1gmj1oj0a7d6a37.png-25.6kB

     
    1. [root@ansible myroles]# ansible-playbook nginx.yaml #执行入口配置文件

    下图为输出的结果 
    image_1ct0f0mv310le1vmd1t3m1mpr164q2q.png-40.9kB

     

    3、使用copy,script模块的标准化

    roles模型里使用copy,script模块,默认从roles/nginx/files里面找

    (1)先在在模块任务的目录nginx下创建一个files目录 mkdir files

    (2)在files目录里创建脚本和要copy的文件。

     
    例:
    echo "my name is mendermi" > test #创建copy的文件
    vim test.sh #创建脚本文件
    #!/bin/bash
    echo "aaa" > /tmp/test #脚本内容
    chmod +x test.sh #给脚本加上可执行权限

    (3)在roles/nginx/tasks/main.yaml下添加添加copy,script任务 
    image_1ct0kc6fc1f5a1ph61gl86ff1d1v9.png-46.3kB

    执行结果

    image_1ct0kfmmt368ne81vrj15d3qlum.png-23.3kB

    image_1ct0km4ver44cd21fbm69103u1g.png-64.7kB

     

    4、roles中template模块的使用

    roles模型里使用template模块,默认从roles/nginx/templates里面找

    (1)在模块任务的目录nginx下创建一个templates目录用于存放可变的环境变量文件。例:mkdir template

    (2)template目录下创建可变的环境变量文件,文件要以j2结尾。

     
    例:touch test.j2
    vim test.j2
    myname is {{ my_name }},my phone is {{ phone }} #引用自定义变量
    my ipaddress is {{ ansible_all_ipv4_addresses[0] }} #引用内置变量

    (3)在roles/nginx/tasks/main.yaml下添加添加template任务

    image_1ct0n97mg53qcg91urv7m31jnq13.png-34kB

    image_1ct0n6dlk7un195hu9uefjue4m.png-23.1kB

    image_1ct0n5nkl15dv3olohp1jl41fbs9.png-34.5kB

     

    5、roles中notify模块的使用

    roles使用notify模块,默认从roles/nginx/handles里面找

    (1)在模块任务的目录nginx下创建一个handlers目录用来存放notify动作 
    例:mkdir handlers

    (2)handlers目录下创建剧本,用于控制

     
    vim main.yaly
    ---
    - name: start_nginx
    shell: /usr/local/nginx/sbin/nginx
    - name: stop_nginx
    shell: /usr/local/nginx/sbin/nginx -s stop
    - name: reload_nginx
    shell: /usr/local/nginx/sbin/nginx -s reload

    (3) 在roles/nginx/tasks/main.yaml下添加添加notify任务

    image_1ct0o0pls1mif1k0l1ac21oc813bv1g.png-40.1kB

    image_1ct0odkou1k7pdt918491hkraph1t.png-19.2kB

    image_1ct0oeiud1vredcs1tqd19i21mj2a.png-15.4kB

    image_1ct0of9ct2n61ja211u811mm16ae2n.png-17.1kB

    特别提示: 
    notify下发通知只有当之前的任务造成了变化那么才会被执行,如果没有发生任何改变,则notify不会被执行。

    例:

    image_1ct0p1iqg1qkv1ivu18gt5831f43h.png-35.9kB

    image_1ct0ov6c912j31nut2rmria1qb134.png-16.3kB

    image_1ct0p4ac4aul8iqqlr1ud11bj50.png-29.5kB

    image_1ct0p76ji18nk1oqocoi7281p7t5d.png-28.8kB

  • 相关阅读:
    手机端局部滚动问题 overflow-y:auto|scroll无效,使用iscroll解决
    h5 js 图片预览并判断 ajax上传
    安装一些包管理的记录 win10
    nginx php rewrite配置
    记一次u盘 无法格式化、0字节、写保护的解决过程
    erlang,elixir安装
    Redis详解:lists数据类型及操作
    redis类型[string 、list 、 set 、sorted set 、hash]
    java 生成Word文档
    mysql 获取当前月最后一天和第一天
  • 原文地址:https://www.cnblogs.com/mendermi/p/10010522.html
Copyright © 2020-2023  润新知