mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-07-22 21:00:22 -07:00
actually check we can run scm command for roles (#43315)
* actually check we can run scm command for roles * a better error message than file not found * more narrow exception hanlding * refactor common functions for more extended use and further 'basic.py' separation
This commit is contained in:
parent
b3c054c55e
commit
222c907ffb
4 changed files with 74 additions and 38 deletions
|
@ -28,6 +28,7 @@ from subprocess import Popen, PIPE
|
|||
from ansible import constants as C
|
||||
from ansible.errors import AnsibleError
|
||||
from ansible.module_utils._text import to_native
|
||||
from ansible.module_utils.common.process import get_bin_path
|
||||
from ansible.module_utils.six import string_types
|
||||
from ansible.playbook.role.definition import RoleDefinition
|
||||
|
||||
|
@ -203,12 +204,17 @@ class RoleRequirement(RoleDefinition):
|
|||
if scm not in ['hg', 'git']:
|
||||
raise AnsibleError("- scm %s is not currently supported" % scm)
|
||||
|
||||
try:
|
||||
scm_path = get_bin_path(scm)
|
||||
except (ValueError, OSError, IOError):
|
||||
raise AnsibleError("could not find/use %s, it is required to continue with installing %s" % (scm, src))
|
||||
|
||||
tempdir = tempfile.mkdtemp(dir=C.DEFAULT_LOCAL_TMP)
|
||||
clone_cmd = [scm, 'clone', src, name]
|
||||
clone_cmd = [scm_path, 'clone', src, name]
|
||||
run_scm_cmd(clone_cmd, tempdir)
|
||||
|
||||
if scm == 'git' and version:
|
||||
checkout_cmd = [scm, 'checkout', version]
|
||||
checkout_cmd = [scm_path, 'checkout', version]
|
||||
run_scm_cmd(checkout_cmd, os.path.join(tempdir, name))
|
||||
|
||||
temp_file = tempfile.NamedTemporaryFile(delete=False, suffix='.tar', dir=C.DEFAULT_LOCAL_TMP)
|
||||
|
@ -218,12 +224,12 @@ class RoleRequirement(RoleDefinition):
|
|||
with tarfile.open(temp_file.name, "w") as tar:
|
||||
tar.add(os.path.join(tempdir, name), arcname=name)
|
||||
elif scm == 'hg':
|
||||
archive_cmd = ['hg', 'archive', '--prefix', "%s/" % name]
|
||||
archive_cmd = [scm_path, 'archive', '--prefix', "%s/" % name]
|
||||
if version:
|
||||
archive_cmd.extend(['-r', version])
|
||||
archive_cmd.append(temp_file.name)
|
||||
elif scm == 'git':
|
||||
archive_cmd = ['git', 'archive', '--prefix=%s/' % name, '--output=%s' % temp_file.name]
|
||||
archive_cmd = [scm_path, 'archive', '--prefix=%s/' % name, '--output=%s' % temp_file.name]
|
||||
if version:
|
||||
archive_cmd.append(version)
|
||||
else:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue