zoukankan      html  css  js  c++  java
  • Ansible进阶之roles详解

    迭代写法:with_items

      迭代:当需要重复性执行的任务时,可以使用迭代机制

        ·对迭代选项的引用,固定变量名为“item”

        ·要在task中使用with_items给定要迭代的元素列表

        ·列表格式:字符串、浮点

    使用字符串

    ---
    - host: webservs
       remote_user: root
    
       tasks:
         - name: create some files
           file: name=/data/{{ item }} start=touch
           with_itmes:
              - file1
              - file2
              - file3

    迭代嵌套子变量

    使用字典

    ---
    - host: webservs
       remote_user: root
    
       tasks:
         - name: create some files
           group: name={{item}}
           when: ansible_distribution_major_version == "7"#是版本7才执行下面的
           with_items:
              - g1
              - g2
              - g3
         - name: create some users
           user: name={{itme.name}} group={{item.group}}
            with_items:
               - { name: 'user1', group: 'g1'}
               - { name: 'user2', group: 'g2'}
               - { name: 'user3', group: 'g3'}

    Playbook中template for if

    for循环的运用

    ---
    - hosts: websrvs
    remote_user: root
    vars:
    ports:#定义变量列表
    - 81
    - 82
    - 83
    tasks:
    - name: copy conf
    template: src=for1.conf.j2 dest+/data/for1.conf#使用模板将src作为模板
    需要创建for1.conf.j2这个模板文件
    vim for1.conf.j2#在里面写下面的内容
    {% for port in ports%}
    server {
          listen {{ port }}
    }
    {%endfor%}
    ###############################
    使用键值对的时候将81、82、83改为listen_port: 81这样的格式类推,然后在模板文件里将调用的变量port改为port.listen_port

    使用键值对实例

     说明:一个web属于一个变量

    模板文件的创建:

     说明:p.port是变量的调用

    if的运用

    {% if vhost.server_ name is defined %}
    server_ name {{ vhost.server_ name }};
    {% endif %}

    for和if配合使用

     if语句的说明:如果p.name是被定义的则执行下面的语句

    roles

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

      复杂场景:建议使用roles,代码复用度高

      ·变更指定主机或主机组

      ·如命名不规范维护和传承成本大

      ·某些功能需要多个playbook,通过inscudes即可实现

      ·一般的角色都会写在/etc/ansible/roles下对应服务创建相应的服务文件夹

    roles目录结构示例:

    实例:通过角色实现nginx的安装到运行

      1.创建nginx用户并创建nginx用户组然后加到组里

      2.yum这个Nginx包

      3.通过template使用Nginx的配置文件模板

      4.启动Nginx

    创建tasks文件夹内写具体的小功能

    1.vim group.yml
    
      - name: create group
      group: name=nginx gid=80
    
    2.vim user.yml
    
      - name: create user
    
        user: name=nginx grounp=nginx shell=/sbin/nologin uid=80
    
    3.vim yum.yml
    
      - name: install package
    
        yum: name=nginx
    
    4.vim start.yml
    
      - name:start nginx
    
        service: name=nginx state=started enabled=yes
    
    5.cp /etc/nginx/nginx.conf /etc/ansible/templates/nginx.conf.j2
    
    6.vim templ.yml
    
      - name: copy conf
    
        template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
    
    7.创建总的剧本调用任务剧本
    
    vim main.yml
    
    - include: group.yml
    
    - include: user.yml
    
    - include: yum.yml
    
    - include: templ.yml
    
    - include: start.yml
    
    8.创建调用角色的剧本
    
    cd /etc/ansble
    
    vim nginx_roles.yml
    
    - hosts: 106.12.39
    
      remote_user: root
    
      roles:
    
      - role: nginx
  • 相关阅读:
    Redis 分区
    利用phpexcel把excel导入数据库和数据库导出excel实现
    Phpcms V9网站从本地上传到服务器需要修改的地方
    PHPcms怎么调用二级栏目
    phpcms调用一级栏目和二级栏目
    [v9] 列表页 调用 正文内容 或 自定义 字段(moreinfo的调用方法)
    phpcms v9最常用的22个调用代码
    phpcms_v9 多图字段 内容页,首页,分页自定义字段调用
    JS常用语句
    phpcms v9中调用栏目及调用多个子栏目中的文章列表
  • 原文地址:https://www.cnblogs.com/zrxuexi/p/11808948.html
Copyright © 2011-2022 走看看