• ansible复习笔记_role-从零到无


    --创建时间:2021年3月9日

    --修改时间:2021年3月9日

    --作者:飞翔的小胖猪

    roles是各个单独功能性模块的集合,通过分别将变量、文件、任务、模板及处理器放置于单独的目录中,并可以便捷地include它们的一种机制。

    简介

    roles:多个角色的集合, 可以将多个的role,分别放至roles目录下的独立子目录中

    文件夹说明

    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文件,比vars的优先级低

    以上的文件夹包含了一个role整的目录结构,在使用role时可以不全部都创建,可即用及建。也可以先行创建,文件夹下可以为空。

    编写流程

    1.创建roles的目录结构

    mkdir roles/功能名自定义/{files,tasks,templates,vars,handlers,meta,default}

    2.编写主的main.yml文件

    [root@135 playbook]# cat roles/功能名自定义/tasks/main.yml 
    - include: touch_file.yml 
    - include: user.yml
    - include: copy_file.yml

    tasks目录下的main.yml文件时整个role的模块入口。其中include行表示单独的模板,置于tasks/目录下。

    此处的include有顺序要求,执行次序是从上至下。请根据自身软件逻辑调整功能模块的调用顺序。

    3.编写各个单独的功能性模块

    根据tasks/main.yml文件中的include行有序的编写单个功能性模块。

    [root@135 tasks]# cat copy_file.yml 
    - name: copy file
      copy: src=test.txt dest=/tmp/ backup=yes
      notify: test11

    单个模块编写时,需要把这个模块涉及的所有东西都编写完再进行下一个模块的编写。

    (有些模块会用到变量,hander,文件等,需要在专用的文件夹中进行相关资源的编写)

     3.1  准备文件

    [root@135 playbook]# cat roles/功能名自定义/files/test.txt 
    lvan test hhahahaha
    asfassf

      3.2 编写对应的handler

    [root@135 playbook]# cat roles/功能名自定义/handlers/main.yml 
    - name: test11
      shell: echo "`date` test_lvan" >> /var/log/message

    4.  编写调用的playbook文件

    在roles目录同级目录下创建一个playbook文件用作调用role模块。

    [root@135 playbook]# cat http_role.yml 
    ---
    - hosts: oracle_11g
      remote_user: root
      gather_facts: no
      
      roles:
      - http
    

    调用文件是整个role编写的最后一步,要确定所有单个功能性模块都编写完成后再编写调用的playbook文件。

    5.测试role的功能性

    使用ansible-playbook -C 命令检测编写的role是否正常。该步骤不是必须的,但是检测一下总是好的。

    [root@135 playbook]# ansible-playbook -C http_role.yml

    检测有时候会因为逻辑错误出现检测不通过,但又确定没有语法和参数的错误。

    一般出现在某一个模块需要依赖上一个模块的执行结果。而-C参数是检测不会真实执行,则会出现依赖性的报错。此时不用管这类报错,一般提示有:没有该用户   文件路径不存在等。

    role调用

    role在编写调用的playbook时可以给role设置标签和条件用来控制筛选待执行的role。

    基本调用

    [root@135 playbook]# cat http_role_base.yml 
    ---
    - hosts: websrvs
      remote_user: root
      roles:
        - mysql
        - memcached
        - nginx  

    条件调用

    [root@135 playbook]# cat http_role_term.yml 
    ---
    - hosts: all
      remote_user: root
      roles:
        - { role: nginx, username: nginx, when: ansible_distribution_major_version == '7'  }

    传参调用

    [root@135 playbook]# cat http_role_args.yml 
    ---
    - hosts: all
      remote_user: root
      roles:
        - mysql
        - { role: nginx, username: nginx }

    tags调用

    [root@135 playbook]# cat http_role_tags.yml 
    ---
    - hosts: websrvs
      remote_user: root
      roles:
        - { role: nginx ,tags: [ 'nginx', 'web' ] ,when: ansible_distribution_major_version == "6“ }
        - { role: httpd ,tags: [ 'httpd', 'web' ]  }
        - { role: mysql ,tags: [ 'mysql', 'db' ] }
        - { role: mariadb ,tags: [ 'mariadb', 'db' ] }

    执行命令:ansible-playbook  --tags="nginx,httpd,mysql"  http_role_tags.yml

    模块展示

    不同文件夹下各个文件配置模版展示。

    tasks

    tasks目录下存放的是整个role的所有模块,至少包含一个main.yml文件和一个功能性yml文件。

    main.yml

    cat  main.yml
    - include: user.yml

    单个功能模块

    cat  user.yml
    - name: create user
      user: name=test_lvan  system=yes shell=/sbin/nologin

    vars

    变量存放路径。

    cat  main.yml 
    user: lvan
    name_test: lvan11

    handlers

    cat  main.yml 
    - name: restart
      service: name=nginx state=restarted

    default

     存放变量的目录,优先级比vars目录中的低,如果vars中的main.yml没有匹配的变量再来这里找。

    cat  main.yml
    user: nginx
    group: nginx
    tarball_name: nginx-1.6.3.tar.gz
    nginx_configuration: nginx.conf.j2
    nginx_dir: nginx-1.6.3

    files

    该文件夹下保存的是tasks文件夹下模块要用到的文件,没有特殊格式就只是单个普通文件。

    templates

    该文件夹下保存的是tasks文件夹下模块要用到的文件,ansible专用模版文件。就是可以包含变量的文件。每个模版文件的定义均不一样,只展示较简单的格式。

    cat  nginx.conf.j2 
    worker_processes {{ ansible_processor_vcpus }}

    其中{{ ansible_processor_vcpus }}就是变量。

  • 相关阅读:
    自学mvc4.0 工作当中随笔(在view页面当中循环table,当遇到html标签怎么处理)
    安卓当中的线程和每秒刷一次
    通过后台代码访问前台js
    学习正则表达式记录
    net 当中动态给记事本当中插入值
    session,cookie 等区别
    vss 2.0框架与4.0框架的设置iis区别
    Javascript中char和int的互相转换的代码(转载)
    获得鼠标在页面上的坐标
    HTTP协议header头域
  • 原文地址:https://www.cnblogs.com/Pigs-Will-Fly/p/14504129.html
Copyright © 2020-2023  润新知