• 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
    }
  • 相关阅读:
    搭建视频网站光线cms
    Linux FTP服务配置
    Chromium下载地址
    Ubuntu Server批量ping选择最快源
    vs2010扩展
    私有云
    mssql格式化输出
    CSLA .NET 3.6支持Silverlight 2
    Unity Application Block 1.2 for Silverlight December 2008
    silverlight寻奇 Graphite
  • 原文地址:https://www.cnblogs.com/shykoo/p/10558827.html
Copyright © 2020-2023  润新知