zoukankan      html  css  js  c++  java
  • ansiblle---roles

    使用ansible中的roles来管理主机。

    剧本中的roles
    你现在已经学过 tasks 和 handlers,那怎样组织 playbook 才是最好的方式呢?简单的回答就是:使用 roles ! Roles 基于一个已知的文件结构,去自动的加载某些 vars_files,tasks 以及 handlers。基于 roles 对内容进行分组,使得我们可以容易地与其他用户分享 roles 。

    你现在已经学过 tasks 和 handlers,那怎样组织 playbook 才是最好的方式呢?简单的回答就是:使用 roles ! Roles 基于一个已知的文件结构,去自动的加载某些 vars_files,tasks 以及 handlers。基于 roles 对内容进行分组,使得我们可以容易地与其他用户分享 roles 。
    如果 roles/x/tasks/main.yml 存在, 其中列出的 tasks 将被添加到 play 中
    如果 roles/x/handlers/main.yml 存在, 其中列出的 handlers 将被添加到 play 中
    如果 roles/x/vars/main.yml 存在, 其中列出的 variables 将被添加到 play 中
    如果 roles/x/meta/main.yml 存在, 其中列出的 “角色依赖” 将被添加到 roles 列表中 (1.3 and later)
    所有 copy tasks 可以引用 roles/x/files/ 中的文件,不需要指明文件的路径。
    所有 script tasks 可以引用 roles/x/files/ 中的脚本,不需要指明文件的路径。
    所有 template tasks 可以引用 roles/x/templates/ 中的文件,不需要指明文件的路径。
    所有 import  tasks 可以引用 roles/x/tasks/ 中的文件,不需要指明文件的路径。

    roles的优势:

    • 目录结构比较清晰

    • 可以相互调用

    • 便于备分

    roles的目录结构:

    nginx/
    ├── files
    │   └── fstab
    ├── handlers
    │   └── main.yml
    ├── tasks
    │   ├── copyfile.yml
    │   ├── install.yml
    │   ├── main.yml
    │   └── start.yml
    ├── templates
    │   └── nginx.conf
    └── vars
        └── main.yml

    在/etc/ansible/roles目录中创建角色

    cd /etc/ansible/roles

    已安装nginx为例,创建一下的目录结构

    cd /etc/ansible/roles

    mkdir nginx

    cd nginx

    mkdir {tasks,files,templates,handlers,vars}

    目录说明:

    tasks 存放任务的
    files 存放静态文件的,copy模块需要的文件
    templates 存放动态文件 template 模块需要渲染变量的文件
    handlers handlers  执行的文件
    vars 存放变量的文件

    cd etc/ansible/roles/nginx/tasks

    依次写这些目录中的文件

    安装nginx

    [root@bogon tasks]# cat yum.yml 
    - name: yum install nginx
      yum: name=nginx

    创建nginx用户

    [root@bogon tasks]# cat createuser.yml 
    - name: create{{user}}
      user: name={{user}}

    启动nginx

    [root@bogon tasks]# cat start.yml 
    - name: start nginx
      service: name=nginx state=started

    copy nginx的配置文件

    [root@bogon tasks]# cat copyfile.yml 
    - name: copy nginx.conf
      template: src=nginx.conf dest=/etc/nginx/nginx.conf
      tags: copyfile
      notify: restart nginx

    任务的执行顺序

    [root@bogon tasks]# cat main.yml 
    - import_tasks: yum.yml
    - import_tasks: start.yml
    - import_tasks: createuser.yml
    - import_tasks: copyfile.yml

    cd /etc/ansible/roles/nginx/handlers

    [root@bogon handlers]# cat main.yml 
    - name: restart nginx
      service: name=nginx state=restarted

    cd /etc/ansible/roles/nginx/templates
    [root@bogon templates]# ll
    total 4
    -rw-r--r-- 1 root root 2495 Jul 18 16:00 nginx.conf

    cat nginx.conf

    nginx 的进程数,cpu核数的2倍
    worker_processes {{ansible_processor_vcpus*2}};
    # 线程数
    events {
        worker_connections 102400;
    }


    /etc/ansible/roles/nginx/vars

    [root@bogon vars]# cat main.yml 
    {'user':'nginx'}

    /etc/ansible/roles

    [root@bogon roles]# cat nginx.yml 
    - hosts: web
      remote_user: root
      roles: 
      - nginx

    执行剧本

    ansible-playbook    nginx.yml

    查找顺序

    • 先查找roles里面的目录

    • 找tasks里面的main.yml

    • 如果发现了import_tasks 根据引入的次序依次执行

    • 如果template,则区templates目录里面找文件

    • 如果发现copy,则区files目录里面找文件

    • 如果发现了notify,则去handlers里面找main.yml

    • 如果发现了变量,则去vars里面找main.yml

    相互调用

    - import_tasks: roles/nginx/tasks/install.yml

    使用ansible roles可以在  https://galaxy.ansible.com/ 

    这个网址上看到别人写好的ansible roels可以直接使用

  • 相关阅读:
    ModelFirst的CRUD
    EF中逆变和协变
    ERP客户关系渠管理(二十)
    ERP反馈信息管理(十九)
    ERP系统上传文档信息下载(十八)
    比较 数组与对象的同源特性
    对android的认识
    我的知乎
    HTTP来源地址
    BroadcastReceiver 翻译
  • 原文地址:https://www.cnblogs.com/lulin9501/p/11201810.html
Copyright © 2011-2022 走看看