• Ansible-roles学习


    一.roles角色介绍

    roles能够根据层次型结构自动装载变量文件,tasks以及handlers登。要使用roles只需在playbook中使用include指令即可。roles就是通过分别将变量,文件,任务,模块以及处理器放置于单独的目录中,并可以便捷的include他们的一种机制。角色一般用于基于主机构建服务的场景中,但是也可以用于构建守护进程等场景中。

    ROLES目录结构
    https://img2018.cnblogs.com/blog/1210730/201906/1210730-20190604093514442-703615703.png

    目录含义
    roles所有脚色都必须放在roles目录下,这个目录可以自定义,默认位置/etc/ansible/roles
    project具体角色项目名称,比如nginx,tomcat,php
    files用来存放copy模块过scripit模块调用文件
    templates用来存放jinjia2模板,template模块会自动在此目录寻找jinjia2模板文件
    tasks此目录应当包含一个main.yml文件,用于定义此角色的任务列表,此文件可以使用include包含其他的位于此目录的task文件
    handlers此目录应当包含一个main.yml文件,用于定义此角色中触发条件时执行的动作
    vars此目录应当包含一个main.yml文件,用于定义此角色用到的变量
    defaults此目录应当包含一个main.yml文件,用于为当前角色设定默认变量
    meta此目录应当包含一个main.yml文件,用于定义此角色的特授及其依赖关系

    二.示例

    一.安装httpd服务

    1.创建目录

    [root@tdm1 ~]# cd /etc/ansible/roles/
    # 创建需要用到的目录
    [root@tdm1 roles]# mkdir -p httpd/{handlers,tasks,templates,vars}
    [root@tdm1 roles]# cd httpd/
    [root@tdm1 httpd]# tree .
    .
    ├── handlers
    ├── tasks
    ├── templates
    └── vars
    
    4 directories, 0 file
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    2.准备变量文件

    [root@tdm1 httpd]# vim vars/main.yml
    PORT: 8088        #指定httpd监听的端口
    USERNAME: www     #指定httpd运行用户
    GROUPNAME: www    #指定httpd运行组
    
    • 1
    • 2
    • 3
    • 4

    3.配置文件模板

    # copy一个本地的配置文件放在templates/下并已j2为后缀
    [root@ansible httpd]# cp /etc/httpd/conf/httpd.conf templates/httpd.conf.j2
    
    # 找到一下几个参数,进行一些修改,调用上面定义的变量
    [root@tdm1 httpd]# vim templates/httpd.conf.j2
    Listen {{ PORT }} 
    User {{ USERNAME }}
    Group {{ GROUPNAME }}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    4.编写任务剧本,创建用户,创建组,安装软件,配置,启动登

    # 创建组的task
    [root@tdm1 httpd]# vim tasks/group.yml
    - name: Create a Startup Group
      group: 
        name: www 
        gid: 60 
        system: yes
    
    # 创建用户的task
    [root@tdm1 httpd]# vim tasks/user.yml
    - name: Create Startup Users
      user: 
        name: www 
        uid: 60 
        system: yes 
        shell: /sbin/nologin
    
    # 安装软件的task
    [root@tdm1 httpd]# vim tasks/install.yml
    - name: Install Package Httpd
      yum: 
        name: httpd 
        state: installed
    
    # 配置软件的task
    [root@tdm1 httpd]# vim tasks/config.yml
    - name: Copy Httpd Template File
      template: 
        src: httpd.conf.j2 
        dest: /etc/httpd/conf/httpd.conf
      notify: Restart Httpd
    
    # 启动软件的task
    [root@tmd1 httpd]# vim tasks/start.yml
    - name: Start Httpd Service
      service: 
        name: httpd 
        state: started 
        enabled: yes
    
    # 编写main.yml,将上面的这些task引入进来
    [root@tdm1 httpd]# vim tasks/main.yml
    - include: group.yml
    - include: user.yml
    - include: install.yml
    - include: config.yml
    - include: start.ym
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47

    5.编写handlers

    [root@tdm1 httpd]# vim handlers/main.yml
    # 这里的名字需要和task中的notify保持一致
    - name: Restart Httpd
      service: 
      name: httpd 
      state: restarted
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    6.编写yml文件调用httpd角色

    [root@tdm1 httpd]# cd ..
    [root@tdm1 roles]# vim httpd_roles.yml
    ---
    - hosts: all
      remote_user: root
      roles:
        - role: httpd        #指定角色名称
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    7.查看整个目录

    [root@tdm1 roles]# tree
    .
    └── httpd
        ├── handlers
        │   └── main.yml
        ├── httpd_roles.yml
        ├── tasks
        │   ├── config.yml
        │   ├── group.yml
        │   ├── install.yml
        │   ├── main.yml
        │   ├── start.yml
        │   └── user.yml
        ├── templates
        │   └── httpd.conf.j2
        └── vars
            └── main.yml
    
    5 directories, 10 files
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    8.测试playbook语法是否正确

    [root@tdm1 roles]# ll
    total 4
    drwxr-xr-x 6 root root 4096 Sep  6 14:13 httpd
    [root@tdm1 roles]# ansible-playbook httpd/httpd_roles.yml  -C
    
    PLAY [web] *************************************************************************************************************
    TASK [Gathering Facts] *************************************************************************************************ok: [47.93.98.117]
    
    TASK [httpd : create group] ********************************************************************************************changed: [47.93.98.117]
    
    TASK [httpd : create user] *********************************************************************************************changed: [47.93.98.117]
    
    TASK [install httpd] ***************************************************************************************************ok: [47.93.98.117]
    
    TASK [httpd : configure template file] *********************************************************************************changed: [47.93.98.117]
    
    TASK [start httpd] *****************************************************************************************************changed: [47.93.98.117]
    
    RUNNING HANDLER [restart httpd] ****************************************************************************************changed: [47.93.98.117]
    
    PLAY RECAP *************************************************************************************************************47.93.98.117               : ok=7    changed=5    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    9.执行剧本

    [root@tdm1 httpd]# ansible-playbook httpd_roles.yml 
    
    PLAY [web] *************************************************************************************************************
    TASK [Gathering Facts] *************************************************************************************************ok: [47.93.98.117]
    
    TASK [httpd : create group] ********************************************************************************************ok: [47.93.98.117]
    
    TASK [httpd : create user] *********************************************************************************************ok: [47.93.98.117]
    
    TASK [install httpd] ***************************************************************************************************ok: [47.93.98.117]
    
    TASK [httpd : configure template file] *********************************************************************************changed: [47.93.98.117]
    
    TASK [start httpd] *****************************************************************************************************changed: [47.93.98.117]
    
    RUNNING HANDLER [restart httpd] ****************************************************************************************changed: [47.93.98.117]
    
    PLAY RECAP *************************************************************************************************************47.93.98.117               : ok=7    changed=3    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    在这里插入图片描述

  • 相关阅读:
    免费简历制作神器
    ESP8266-Arduino网络编程实例-ESP-Now点对点双向通信(Two Way)
    Java设计模式
    RTT WK2412 spi-uart
    使用electron ipcRenderer接收通信消息多次触发
    基于javaweb的员工管理系统(前后端分离+java+vue+springboot+ssm+mysql+redis)
    Mysql 慢查询日志
    The IDE is running low on memory and this might affect performance.
    Wordpress页面生成器:Elementor 插件制作网站页面教程(图文完整)
    计算机系统(9)----- 进程控制
  • 原文地址:https://blog.csdn.net/m0_71163619/article/details/132713997