zoukankan      html  css  js  c++  java
  • ansible处理一些逻辑请求思路

    ansible处理一些逻辑请求思路

    我发现ansible处理一些没有模块能用的那种带逻辑判断的任务,比较难处理。比如说做swap这种,

     - stat: path=/data/swap 
       register: s
    然后再判断s 是否存在
      - shell: dd if=/dev/zero of=/eastmoney/swap bs=1G count=16
       when: s.stat.exists
    
    

    然后发现stat 模块也是超级慢的。如果你的文件够大的话,比如上面这个16G文件(当然这是比较极端的情况)。

    因为ansible源码, /usr/lib/python2.7/site-packages/ansible/modules/files/stat.py

    def main():
        module = AnsibleModule(
            argument_spec=dict(
                path=dict(type='path', required=True),
                follow=dict(type='bool', default=False),
                get_md5=dict(type='bool', default=False),
                get_checksum=dict(type='bool', default=True),
                get_mime=dict(type='bool', default=True, aliases=['mime', 'mime_type', 'mime-type']),
                get_attributes=dict(type='bool', default=True, aliases=['attr', 'attributes']),
                checksum_algorithm=dict(type='str', default='sha1',
                                        choices=['md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512'],
                                        aliases=['checksum', 'checksum_algo']),
            ),
            supports_check_mode=True,
        )
    
    
    

    get_checksum 默认是true的,

        # checksums
        if output.get('isreg') and output.get('readable'):
    
            # NOTE: see above about get_md5
            if get_md5:
                # Will fail on FIPS-140 compliant systems
                try:
                    output['md5'] = module.md5(b_path)
                except ValueError:
                    output['md5'] = None
    
            if get_checksum:
                output['checksum'] = module.digest_from_file(b_path, checksum_algorithm)
    
    

    如果isreg 并且readable ,就会计算checksum ,大文件计算一遍要很久,其实纯的stat调用是不会扫整个文件的,但是ansbile的模块里加了checksum的逻辑,一种当然是设成false即可,当时没细看,

    然后发现用script结合 shell很好实现:

    if [ -f /data/swap ]; then
    	echo "文件存在"
    	#statements
    else	
    	dd if=/dev/zero of=/data/swap bs=1G count=16
    	chmod 600 /data/swap
    	mkswap /data/swap
    	swapon /data/swap
    fi 
    
    

    playbook里直接script 即可:

      - script: doswap.sh
    

    逻辑里面实现就行了,里面记得做幂等。

  • 相关阅读:
    Clipper库中文文档详解
    uboot makefile构建分析
    nvidia tk1使用记录--基本环境搭建
    学习
    es6 es7新语法
    react dva发送请求详解(转)
    antDesign表单getFieldDecorator
    react dav
    js实现截取a标签的href属性和内容
    react学习
  • 原文地址:https://www.cnblogs.com/gqdw/p/15582328.html
Copyright © 2011-2022 走看看