zoukankan      html  css  js  c++  java
  • ansible register 之用法

    ansible register 这个功能非常有用。当我们需要判断对执行了某个操作或者某个命令后,如何做相应的响应处理(执行其他 ansible 语句),则一般会用到register 。

    举个例子:

    我们需要判断sda6是否存在,如果存在了就执行一些相应的脚本,则可以为该判断注册一个register变量,并用它来判断是否存在,存在返回 succeeded, 失败就是 failed.

    - name: Create a register to represent the status if the /dev/sda6 exsited
      shell: df -h | grep sda6
      register: dev_sda6_result
      ignore_errors: True
      tags: docker
    
    - name: Copy docker-thinpool.sh to all hosts
      copy: src=docker-thinpool.sh dest=/usr/bin/docker-thinpool mode=0755
      when: dev_sda6_result | succeeded
      tags: docker

    注意:
    1、register变量的命名不能用 -中横线,比如dev-sda6_result,则会被解析成sda6_resultdev会被丢掉,所以不要用-
    2、ignore_errors这个关键字很重要,一定要配合设置成True,否则如果命令执行不成功,即 echo $?不为0,则在其语句后面的ansible语句不会被执行,导致程序中止。

    那我如何去做多种条件的判断呢,比如我还需要判断是否有 docker-thinpool 存在,则还需要为它注册一个变量。

    - name: Create a register to represent the status if the docker-thinpool exsited
      shell: lsblk | grep docker-thinpool
      register: docker_thinpool_result
      ignore_errors: True
      tags: docker

    然后在when中用and或者or来组合判断。比如当两种条件之一成功,都对docker配置文件进行修改:

    - name: Special config for docker-thinpool devicemapper
      lineinfile: dest=/etc/sysconfig/docker regexp=^OPTIONS= line=OPTIONS='--selinux-enabled=false --insecure-registry=10.213.42.254:10500 --log-level=warn --storage-opt dm.basesize={{ dm_base_size }} --storage-opt dm.loopdatasize={{ dm_loop_data_size }} --storage-opt dm.loopmetadatasize={{ dm_loop_meta_size }} --storage-driver=devicemapper --storage-opt=dm.thinpooldev=/dev/mapper/docker-thinpool --storage-opt=dm.use_deferred_removal=true --storage-opt=dm.use_deferred_deletion=true'
      when: (dev_sda6_result | succeeded) or (docker_thinpool_result | succeeded)
      tags: docker
  • 相关阅读:
    WCF系列(五) 也谈序列化(下)
    优秀程序员的十个习惯
    WCF系列(九) WCF安全系列(四) WSHttpBinding绑定之Transport安全模式
    TCP/IP 协议简单分析
    技巧:在Silverlight应用程序中进行数据验证
    WCF系列(三) WCF配置文件注释
    [转]ASP.NET(C#)常用代码30例
    服务器端 在iframe中控制父窗体div并调用父窗体Button
    GridView的模版列中加入按钮,触发按钮事件后,如何获取该行的某个值?
    通用分页 模块
  • 原文地址:https://www.cnblogs.com/qianggezhishen/p/7349309.html
Copyright © 2011-2022 走看看