From be5d68f3adbc7ea078f013340b6db4af9e4bea24 Mon Sep 17 00:00:00 2001 From: Brian Coca Date: Wed, 13 Dec 2017 22:16:54 -0500 Subject: [PATCH] add support for other scms to pull (#33152) * add support for other scms to pull * show choices for scms module in help --- lib/ansible/cli/pull.py | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/lib/ansible/cli/pull.py b/lib/ansible/cli/pull.py index 42fb4e7bc1..1709da4ae8 100644 --- a/lib/ansible/cli/pull.py +++ b/lib/ansible/cli/pull.py @@ -57,6 +57,7 @@ class PullCLI(CLI): DEFAULT_REPO_TYPE = 'git' DEFAULT_PLAYBOOK = 'local.yml' + REPO_CHOICES = ('git', 'subversion', 'hg', 'bzr') PLAYBOOK_ERRORS = { 1: 'File does not exist', 2: 'File is not readable', @@ -113,7 +114,8 @@ class PullCLI(CLI): self.parser.add_option('--accept-host-key', default=False, dest='accept_host_key', action='store_true', help='adds the hostkey for the repo url if not already added') self.parser.add_option('-m', '--module-name', dest='module_name', default=self.DEFAULT_REPO_TYPE, - help='Repository module name, which ansible will use to check out the repo. Default is %s.' % self.DEFAULT_REPO_TYPE) + help='Repository module name, which ansible will use to check out the repo. Choices are %s. Default is %s.' + % (self.REPO_CHOICES, self.DEFAULT_REPO_TYPE)) self.parser.add_option('--verify-commit', dest='verify', default=False, action='store_true', help='verify GPG signature of checked out commit, if it fails abort running the playbook. ' 'This needs the corresponding VCS module to support such an operation') @@ -176,7 +178,7 @@ class PullCLI(CLI): if not inv_opts: inv_opts = " -i localhost, " - # FIXME: enable more repo modules hg/svn? + # SCM specific options if self.options.module_name == 'git': repo_opts = "name=%s dest=%s" % (self.options.url, self.options.dest) if self.options.checkout: @@ -191,14 +193,31 @@ class PullCLI(CLI): if self.options.verify: repo_opts += ' verify_commit=yes' - if self.options.clean: - repo_opts += ' force=yes' - if self.options.tracksubs: repo_opts += ' track_submodules=yes' if not self.options.fullclone: repo_opts += ' depth=1' + elif self.options.module_name == 'subversion': + repo_opts = "repo=%s dest=%s" % (self.options.url, self.options.dest) + if self.options.checkout: + repo_opts += ' revision=%s' % self.options.checkout + if not self.options.fullclone: + repo_opts += ' export=yes' + elif self.options.module_name == 'hg': + repo_opts = "repo=%s dest=%s" % (self.options.url, self.options.dest) + if self.options.checkout: + repo_opts += ' revision=%s' % self.options.checkout + elif self.options.module_name == 'bzr': + repo_opts = "name=%s dest=%s" % (self.options.url, self.options.dest) + if self.options.checkout: + repo_opts += ' version=%s' % self.options.checkout + else: + raise AnsibleOptionsError('Unsupported (%s) SCM module for pull, choices are: %s' % (self.options.module_name, ','.join(self.REPO_CHOICES))) + + # options common to all supported SCMS + if self.options.clean: + repo_opts += ' force=yes' path = module_loader.find_plugin(self.options.module_name) if path is None: