• Ansible role


    一、Roles概述

    (1)Roles简介

    1. Roles又称为角色,playbook被称为剧本。Roles角色是自1.2版本之后引入的新特性,用于层次性、结构化的组织剧本。在ansible中,roles是playbooks的一部分。playbooks模块化之后,成为roles的组织结构,易读,代码可重用,层次清晰。
    2. 简单的说,roles就是通过分别将变量、文件、任务、模块及处理器放置于单独的目录中、并可以便捷地include他们的一种机制。
    3. 角色一般用于基于主机构建服务的场景中、但也可以是用于构建守护进程等场景中,主要是使用在代码复用度较高的场景下
    4. 以特定的层级目录结构进行组织的tasks、variables、handlers、templates、files等;

    (2)Roles目录结构

    各目录的作用:

    •  roles: 所有的角色必须放到roles目录下,这个目录可以自定义,默认的位置就在/etc/ansible/roles,并且和剧本是同级目录
    • project: 具体的角色项目命令,比如nginx、tomcat、php
    •  files #角色名称,用来存放配置文件或者源代码包的
    • handlers #存放静态文件,此目录应当包含一个main.yml文件,用于定义此角色中触发条件时执行的动作,可以不用写
    • tasks #具体任务,此目录应当包含一个main.yml文件,用于定义此角色的任务列表,此文件可以使用
    • templates #模板文件,用来存放配置文件,跟files目录不同的是,这里的配置文件可以调用变量
    • vars #存放变量, 此目录应当包含一个main.yml文件,用于定义此角色用到的变量

    role执行顺序:pre_tasks > role > tasks > post_tasks

    二、使用Roles

    通过roles安装配置nginx服务

    (1)创建目录

    [root@ansible1 ~]# mkdir /roles

    [root@ansible1 roles]# mkdir nginx/   角色叫什么就创建什么(我这里叫nginx)

    在nginx目录下,就是分开的那些功能,每个功能一个目录,文件在哪创建一个目录,处理器在哪就创建一个目录。目录创建好,还有一个site.yaml的文件,这个文件名字可以随意写。

    [root@ansible1 nginx]# mkdir files handlers tasks templates vars

    [root@ansible1 roles]# touch site.yaml       最终执行的东西,最后写

    [root@ansible1 ~]# tree /roles/   查看目录树

    (2)定义任务

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

    [root@ansible1 nginx]# vim tasks/main.yaml   

    ---     在这个位置可以不写
    - name: install nginx package    名字的命名相当于描述,很长
      yum: name={{ item }} state=latest   item是一个变量 安装一个  latest/installed/present,latest直接安装最新版   删除removed/absent
      with_items:        当有需要重复性执行的任务时,可以使用迭代机制。按照从上到下的顺序依次执行,当把值执行完了,任务就完了。先安装epel,再安装nginx
        - epel-release    源的名字  
        - nginx
    - name: copy nginx.conf template    名字随便写,
      template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf   调用模板template,拷贝nginx配置文件的模板,不是拷贝配置文件,是拷贝模板文件
      notify: restart nginx   调用一个处理器,这个名字要和处理器name保持一致
    - name: copy index.html     
      copy: src=index.html dest=/usr/share/nginx/html/index.html  拷贝它的主页文件
    - name: make sure 
      service: name=nginx state=started   启动服务

    【注意】epel源,如果最后下载不了,z'j

     (3)定义处理器

    因为刚才在编写配置文件的剧本时添加了触发,所以需要写触发相应的动作

    [root@ansible1 nginx]# vim handlers/main.yaml 

    ---
    - name: restart nginx   这个名字要和 notify保持一致
      service: name=nginx state=restarted

     (4)定义变量的目录

    [root@ansible1 nginx]# vim vars/main.yaml  变量文件准备

    worker_connections: 10240   我只定义了一个变量,就算是100个也是这样,一行一个。

    在模板文件用,把它的连接数改掉,就改成这个变量存储的值。我现在只改了一个,将来可能你去修改可能要改,发布网站的目录,日志文件的路径,keepalived,tomcat的值,但是修改之前,在模板文件要把它定义成变量。

     (5)配置模板文件

    准备nginx.conf.j2 

    我们会把它放在templates里,模板文件可以手动写,但一般不会手动写,它就是在原来nginx配置文件的基础上做了修改。直接拷贝一个nginx的配置文件。

    [root@ansible1 templates]# cp /etc/nginx/nginx.conf nginx.conf.j2 
    [root@ansible1 templates]# vim nginx.conf.j2

    ansible_processor_cores  用这个变量,这个没有定义,是从 facts,setup模块会获取对面机器的基本信息,基本信息里就有这么一个变量,这个变量的值是预定义变量,就已经定义好了,facts组件自动获取的变量。

    worker_connections  调用变量,10240

    (6)编写主的nginx的角色文件,调用nginx角色

     [root@ansible1 roles]# vim site.yaml  创建剧本,就是执行程序的入口。

    ---
    - hosts: 192.168.22.172
      roles:           (要是有多个roles,就接着往下写)
      - nginx

    (7)创建主页文件

    [root@ansible1 files]# vim index.html 

     三、执行

    (1)监测剧本是否有问题

    [root@ansible1 roles]# ansible-playbook -C site.yaml    -C测试运行,但不会产生运行结果

    (2) 执行剧本

    [root@ansible1 roles]# ansible-playbook site.yaml

     (3)验证

    人工检查一遍,看看nginx,它应该是启动状态。访问一下没问题,

    vim /etc/nginx/nginx.conf  看模板有没有生效,之前定义了10240

     

  • 相关阅读:
    AWTK开发编译环境踩坑记录1(编译提示powershell.exe出错)
    MES管理系统如何处理电子行业生产问题
    系统架构设计:16 论软件开发过程RUP及其应用
    由浅入深Dubbo网络通信协议大全
    【Python】split()方法简介
    项目经理摆脱「计划无用」的秘诀!
    【算法|动态规划No.26】leetcode1745. 分割回文串 IV
    【校招VIP】前端专业课考点之其它协议和端口
    零基础入门JavaWeb——Web基本概念
    NX/UG二次开发—UF_MODL_ask_bounding_box_exact浅析
  • 原文地址:https://blog.csdn.net/weixin_53150440/article/details/127431681