zoukankan      html  css  js  c++  java
  • ansible之roles简单使用

    一、roles简介

    将多种不同的tasks的文件集中存储在某个目录下,则该目录就是角色,角色一般存放在/etc/ansible/roles/目录下,可通过ansible的配置文件来调整默认的角色目录,/etc/ansible/roles/目录下有很多子目录,其中每一个子目录对应一个角色,每个角色也有自己的目录结构,如图:

    20200322142808

    每个角色的定义,以特定的层级目录结构进行组织。比如:

    • files:存放有copy或script等模块调用的文件;
    • templates:存放template模块查找所需要的模板文件的目录;
    • tasks:任务存放的目录;
    • handlers:存放相关触发执行器的目录;
    • vars:变量存放的目录;
    • meta:用于存放此角色元数据;
    • default:默认变量存放的目录,文件中定义了此角色使用的默认变量;

    上述目录中,tasks、handlers、vars、meta、default至少应该包含一个main.yaml文件,该目录下也可由其他.yaml文件,但是需要在main.yml文件中用include指令将其他.yml文件包含起来。

    二、简单的roles示例

    $ mkdir roles   
    #创建一个目录,名称为roles。官方推荐在/etc/ansible/roles/这个目录,不过在哪里都是可以的
    $ mkdir roles/nginx
    $ cd roles/nginx/
    $ mkdir tasks templates
    $ cd tasks/
    $ cat user.yaml 
    - name: create user
      user: name=nginx uid=80 group=nginx system=yes shell=/sbin/nologin
    
    $ cat group.yaml 
    - name: create group
      group: name=nginx gid=80
    $ cat yum.yaml 
    - name: install package
      yum: name=nginx
    
    $ cat templ.yaml 
    - name: copy conf
      template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf 
    
    $ cat stservice.yaml 
    - name: start service
      service: name=nginx state=started enabled=yes
    
    $ cat main.yaml 
    - include: group.yaml
    - include: user.yaml
    - include: yum.yaml
    - include: templ.yaml
    - include: stservice.yaml
    #如果需要调用别的角色的yaml文件,也可以这样写,比如:- include:roles/httpd/tasks/copyfile.yaml
    注意:copyfiile.yaml文件中的源路径必须是绝对路径
    
    $ ls
    nginx.conf.j2
    #该文件就是nginx的配置文件改名了而已
    $ cd ../../../
    $ cat nginx.yaml 
    - hosts: webservers
      remote_user: root
      roles:
        - role: nginx    
    #定义了多个角色,也可在接着写,每行调用一个角色
    #也可以定义tags标签,比如:- { roles: httpd ,tags:['web','httpd']}或- { roles: httpd ,tags:'web'  如果需要加when语句,在此处添加 }都可以
    $ ls
    nginx.yaml  roles
    #确保调用nginx的yaml文件是和roles是在同一目录下的
    $ tree
    .
    ├── nginx.yaml
    └── roles
        └── nginx
            ├── tasks
            │   ├── group.yaml
            │   ├── main.yaml
            │   ├── reservice.yaml
            │   ├── stservice.yaml
            │   ├── templ.yaml
            │   ├── user.yaml
            │   └── yum.yaml
            └── templates
                └── nginx.conf.j2
    #确保目录的层次效果是这样的
    $ ansible-playbook nginx.yaml 
    #如果定义了标签,就可对标签进行操作(比如:web或httpd)
    $ ansible webservers -m shell -a 'ss -lntp | grep nginx'
    #确认被控端的主机nginx已经启动
    

    一个简单的nginx的roles已经编写完成了!

    三、roles示例二

    $ mkdir app
    $ cd app/
    $ mkdir tasks templates vars handlers files
    $ cd tasks/
    $ cat group.yaml 
    - name: create group
      group: name=apache system=yes
    $ cat user.yaml 
    - name: create user
      user: name=apache group=apache system=yes shell=/sbin/nologin
    $ cat yum.yaml 
    - name: install package
      yum: name=httpd
    $ cat templ.yaml 
    - name: copy file
      template: src=httpd.conf.j2 dest=/etc/httpd/httpd.conf
      notify: restart service
    
    $ cat copyfile.yaml 
    - name: copy config
      copy: src=vhosts.conf dest=/etc/httpd/conf.d/ owner=apache
    $ cat start.yaml 
    - name: start service
      service: name=httpd state=started
    $ cat main.yaml 
    - include: group.yaml
    - include: user.yaml
    - include: yum.yaml
    - include: templ.yaml
    - include: copyfile.yaml
    - include: start.yaml
    $ ls files/vhosts.conf 
    files/vhosts.conf
    #空文件用于测试
    $ cat handlers/main.yaml 
    - name: restart service
      service: name=httpd state=restarted
    $ cat templates/httpd.conf.j2 
    #httpd的配置文件
    $ cat vars/main.yaml 
    username: apache
    groupname: apache
    $ tree
    .
    ├── files
    │   └── vhosts.conf
    ├── handlers
    │   └── main.yaml
    ├── tasks
    │   ├── copyfile.yaml
    │   ├── group.yaml
    │   ├── main.yaml
    │   ├── start.yaml
    │   ├── templ.yaml
    │   ├── user.yaml
    │   └── yum.yaml
    ├── templates
    │   └── httpd.conf.j2
    └── vars
        └── main.yaml
    #目录结构
    $ cat httpd.yaml 
    ---
    - hosts: webservers
      remote_user: root
      roles:
        - httpd
    $ ls
    httpd.yaml  nginx.yaml  roles
    #确保与roles目录在同一目录下
    $ ansible-playbook httpd.yaml 
    $ ansible all -m shell -a 'ps -ef | grep apache'
    //根据配置文件中修改的内容自行进行修改
    
    *************** 当你发现自己的才华撑不起野心时,就请安静下来学习吧!***************
  • 相关阅读:
    海报
    mailto
    tab+tab
    tab22
    tab
    line-height属性详解
    vertical-align属性详解
    窗口关系及框架、窗口位置、窗口大小、导航和打开窗口
    cursor属性
    深入了解css3新特性
  • 原文地址:https://www.cnblogs.com/lvzhenjiang/p/14199463.html
Copyright © 2011-2022 走看看