lrx182125 发表于 2018-7-30 09:13:02

Ansible源码分析之svn模块

def main():  
    module = AnsibleModule(
  
      argument_spec=dict(
  
            dest=dict(required=True),
  
            repo=dict(required=True, aliases=['name', 'repository']),
  
            revision=dict(default='HEAD', aliases=['rev', 'version']),
  
            force=dict(default='no', type='bool'),
  
            username=dict(required=False),
  
            password=dict(required=False),
  
            executable=dict(default=None),
  
            export=dict(default=False, required=False, type='bool'),
  
      ),
  
      supports_check_mode=True
  
    )
  

  
    dest = os.path.expanduser(module.params['dest'])
  
    repo = module.params['repo']
  
    revision = module.params['revision']
  
    force = module.params['force']
  
    username = module.params['username']
  
    password = module.params['password']
  
    svn_path = module.params['executable'] or module.get_bin_path('svn', True)
  
    export = module.params['export']
  

  
    os.environ['LANG'] = 'C'
  
    svn = Subversion(module, dest, repo, revision, username, password, svn_path)
  

  
    if export or not os.path.exists(dest):
  
      before = None
  
      local_mods = False
  
      if module.check_mode:
  
            module.exit_json(changed=True)
  
      if not export:
  
            svn.checkout()
  
      else:
  
            svn.export(force=force)
  
    elif os.path.exists("%s/.svn" % (dest, )):
  
      # Order matters. Need to get local mods before switch to avoid false
  
      # positives. Need to switch before revert to ensure we are reverting to
  
      # correct repo.
  
      if module.check_mode:
  
            check, before, after = svn.needs_update()
  
            module.exit_json(changed=check, before=before, after=after)
  
      before = svn.get_revision()
  
      local_mods = svn.has_local_mods()
  
      svn.switch()
  
      if local_mods:
  
            if force:
  
                svn.revert()
  
            else:
  
                module.fail_json(msg="ERROR: modified files exist in the repository.")
  
      svn.update()
  
    else:
  
      module.fail_json(msg="ERROR: %s folder already exists, but its not a subversion repository." % (dest, ))
  

  
    if export:
  
      module.exit_json(changed=True)
  
    else:
  
      after = svn.get_revision()
  
      changed = before != after or local_mods
  
      module.exit_json(changed=changed, before=before, after=after)
  

  
# import module snippets
  
from ansible.module_utils.basic import *
  
main()
页: [1]
查看完整版本: Ansible源码分析之svn模块