小橘子大叔

  • 首页
  • nginx
  • Linux
  • docker
  • Kubernetes
  • Prometheus
  • 生活
  • 文章归档
  • 友情链接
  • Instagram
  • TikTok
  • X
欢迎随时联系本人
  • Mail

Ansible role讲解

  • luxy
  • 2024-03-28
  • 3

    还记得大一时刚刚接触Ansible,它的便利性强烈地吸引着我。给当时刚入门Linux的我来说带来了小小震撼。我心想,怎么有这么酷的软件哈哈?!

roles
  ansible自1.2版本引入的新特性,用于层次性、结构化地组织playbook。
  roles能够根据层次型结构自动装载变量文件、tasks以及handlers等。
  要使用roles只需要在playbook中使用include指令即可。
  简单来讲,roles就是通过分别将变量、文件、任务、模板及处理器放置于单独的目录中,
  并可以便捷地include它们的一种机制。
  角色一般用于基于主机构建服务的场景中,但也可以是用于构建守护进程等场景中

  复杂场景:建议使用roles,代码复用度高
  变更指定主机或主机组
  如命名不规范维护和传承成本大
  某些功能需多个Playbook,通过includes即可实现

大致来说这就是role的目录结构,必须严格按照规定的目录结构进行编写。

/roles/project/ :项目名称,有以下子目录
files/ :存放由copy或script模块等调用的文件
templates/:template模块查找所需要模板文件的目录
tasks/:定义task,role的基本元素,至少应该包含一个名为main.yml的文件;
其它的文件需要在此文件中通过include进行包含
handlers/:至少应该包含一个名为main.yml的文件;
其它的文件需要在此文件中通过include进行包含
vars/:定义变量,至少应该包含一个名为main.yml的文件;
其它的文件需要在此文件中通过include进行包含
meta/:定义当前角色的特殊设定及其依赖关系,至少应该包含一个名为main.yml的文件,
其它文件需在此文件中通过include进行包含
default/:设定默认变量时使用此目录中的main.yml文件

下面以创建nginx角色来熟悉一下role的简单使用


1> 创建nginx角色目录
     cd /app/ansible/role
     mkdir nginx{tesks,templates,hanslers} -pv

2> 创建任务目录
     cd tasks/
     touch insatll.yml config.yml service.yml file.yml user.yml
   创建main.yml文件定义任务执行顺序
     vim main.yml
     - include: user.yml
     - include: insatll.yml
     - include: config.yml
     - include: file.yml
     - include: service.yml

  
3> 准备配置文件(centos7、8)
   ll /app/ansible/role/nginx/templates/
   nginx7.conf.j2
   nginx8.conf.j2


4> 定义任务
   vim tasks/install.yml
   - name: install
     yum: name=nginx
     
   vim tasks/config.yml
    - name: config file
      template: src=nginx7.conf.j2 dest=/etc/nginx/nginx.conf
      when: ansible_distribution_major_version=="7"
      notify: restrat
      
    - name: config file
      template: src=nginx8.conf.j2 dest=/etc/nginx/nginx.conf
      when: ansible_distribution_major_version=="8"
      notify: restrat
      
    vim tasks/file.yml   跨角色调用file.yum文件,实现文件复用
    - name: index.html
      copy: src=roles/httpd/files/index.html dest=/usr/share/nginx/html/ 
   
    vim tasks/service.yml
    - nmae: start service
      service: name=nginx state=started enabled=yes
      
    vim handlers/main.yml
    - name: restrat
      service: name=nginx state=restarted
      
    vim roles/role_nginix.yml
    --- 
    - hosts: luxy
    
      roles: 
        - role: nginx
        
5> 测试安装
   ansible-playbook role_nginx.yml

当然,在https://galaxy.ansible.com/中提供了许多现有的role角色。

© 2025 小橘子大叔
Theme by Wing
  • {{ item.name }}
  • {{ item.name }}