zoukankan      html  css  js  c++  java
  • ansible-play中for,if的使用

    #迭代循环的使用
    #实现同时新建三个文件,同时部署三个服务
    ---
    - host: websrvs
      remote_user: root
      
      task:
        - name: create some files
          file: name=/data/{{ item }} state=touch          #item=变量
          when: ansible_distribution_major_version == "7"
          with_items:                                      #with_items=变量列表
            - file1
            - file2
            - file3
        - name: install some pakcages
          yum: name={{ item }} state=started enabled=yes
          with_items:
            - httpd
            - nginx
            - vsftp
    
            
    ################################################################################
    
    
    #迭代嵌套子变量
    #实现新建三个用户三个组,三个用户分别归属于三个不同组
    ---
    - host: websrvs
      remote_user: root
      
      task:
        - name: create some groups
          group: name={{ item }}   
          when: ansible_distribution_major_version == "7"
          with_items:                                   
            - g1
            - g2
            - g3
        - name: create some users
          user: name={{ item.name }} group={{ item.group }}
          with_items:
            - { name: 'user1', group: 'g1' }
            - { name: 'user2', group: 'g2' }
            - { name: 'user3', group: 'g3' }
            
    ###################################################################################
    #for循环
    ---
    - host: websrvs
      remote_user: root
      vars:
        ports:         #ports为变量名称,其中包含了一个量变列表
          - 81
          - 82
          - 83
      tasks:
        - name: copy conf
          tmplate: src=for1.conf.j2 dest=/data/for1.conf
    
    #==============================
    #for1.conf.j2配置文件
    {% for port in ports %}    #port为变量,从已经定义的ports变量列表中取值
    server{
            listen {{ port }}  #port作为变量,用括号表示
    }
    {% endfor %}               #以for开头,对应以endfor结尾
    最终实现结果:
    server{
            listen 81
    }
    server{
            listen 82
    }
    server{
            listen 82
    }
    
    ############################################################################
    #for循环进阶应用,键值对
    ---
    - host: websrvs
      remote_user: root
      vars:
        ports:         #ports为变量名称,其中包含了一个量变列表
          - web1:
            port: 8080
            name: web1.shykoo.com
          - web2:
            port: 8081
            name: web2.shykoo.com
          - web1:
            port: 8082
            name: web3.shykoo.com
      tasks:
        - name: copy conf
          tmplate: src=for2.conf.j2 dest=/data/for2.conf
    #===============================
    #for2.conf.j2配置文件
    {% for P in ports %}    #P为变量,从已经定义的ports变量列表中取值
    server{
            listen {{ P.port }}  #P.port取键值对中对应的数据
            servername {{ P.name }}
    }
    {% endfor %}               #以for开头,对应以endfor结尾
    最终执行结果:
    server{
            listen 8080
            servername web1.shykoo.com
    }
    server{
            listen 8081
            servername web2.shykoo.com
    }
    server{
            listen 8082
            servername web3.shykoo.com
    }
    
    ############################################################
    #if的使用
    - host: websrvs
      remote_user: root
      vars:
        ports:         #ports为变量名称,其中包含了一个量变列表
          - web1:
            port: 8080
            #name: web1.shykoo.com    #此处被注释
          - web2:
            port: 8081
            name: web2.shykoo.com
      tasks:
        - name: copy conf
          tmplate: src=for3.conf.j2 dest=/data/for3.conf
    #===============================
    #for2.conf.j2配置文件
    {% for P in ports %}              #P为变量,从已经定义的ports变量列表中取值
    server{                            
            listen {{ P.port }}       #P.port取键值对中对应的数据,固定存在
     {% if P.name is defined %}       #P.name如果被定义,那么servername将同时被定义
            servername {{ P.name }}   #如果if成立P.name从配置文件中取值 
      {% endif %}                     # if开头,endif结尾
    }
    {% endfor %}               #以for开头,对应以endfor结尾
    最终执行结果:
    server{
            listen 8080           #这边因为P.name被注释没有被定义,所以只有端口,没有P.name
    }
    server{
            listen 8081
            servername web2.shykoo.com
    }
  • 相关阅读:
    CSS 文本换行及指定行数显示
    JavaScript随机生成六位数
    Vue 添加评论,node作后台保存到MongoDB数据库中
    详情页面中根据ID请求数据
    多线程学习笔记
    串口 PLC 编程FAQ
    NI CWGraph 显示波形图
    华为企业级AS111-S,比较垃圾的地方
    jqmobile FAQ
    给easyui datebox扩展一个清空按钮,无侵入
  • 原文地址:https://www.cnblogs.com/shykoo/p/10558827.html
Copyright © 2011-2022 走看看