mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
Tidied up a little, added tests
Moved repo_url_to_role_name to common method in ansible.utils Added unit test for repo_url_to_role_name Added integration tests for galaxy
This commit is contained in:
parent
b550cb9bc3
commit
c2fe33f9f4
7 changed files with 38 additions and 7 deletions
|
@ -40,6 +40,7 @@ from jinja2 import Environment
|
||||||
from optparse import OptionParser
|
from optparse import OptionParser
|
||||||
|
|
||||||
import ansible.constants as C
|
import ansible.constants as C
|
||||||
|
import ansible.utils
|
||||||
|
|
||||||
default_meta_template = """---
|
default_meta_template = """---
|
||||||
galaxy_info:
|
galaxy_info:
|
||||||
|
@ -174,7 +175,7 @@ def build_option_parser(action):
|
||||||
help='The path in which the skeleton role will be created. '
|
help='The path in which the skeleton role will be created. '
|
||||||
'The default is the current working directory.')
|
'The default is the current working directory.')
|
||||||
elif action == "install":
|
elif action == "install":
|
||||||
parser.set_usage("usage: %prog install [options] [-r FILE | role_name(s)[,version] | tar_file(s)]")
|
parser.set_usage("usage: %prog install [options] [-r FILE | role_name(s)[,version] | scm+role_repo_url[,version] | tar_file(s)]")
|
||||||
parser.add_option(
|
parser.add_option(
|
||||||
'-i', '--ignore-errors', dest='ignore_errors', action='store_true', default=False,
|
'-i', '--ignore-errors', dest='ignore_errors', action='store_true', default=False,
|
||||||
help='Ignore errors and continue with the next specified role.')
|
help='Ignore errors and continue with the next specified role.')
|
||||||
|
@ -336,7 +337,7 @@ def scm_archive_role(scm, role_url, role_version):
|
||||||
print "SCM %s is not currently supported" % scm
|
print "SCM %s is not currently supported" % scm
|
||||||
return False
|
return False
|
||||||
tempdir = tempfile.mkdtemp()
|
tempdir = tempfile.mkdtemp()
|
||||||
role_name = role_url.split('/')[-1]
|
role_name = ansible.utils.repo_url_to_role_name(role_url)
|
||||||
clone_cmd = [scm, 'clone', role_url]
|
clone_cmd = [scm, 'clone', role_url]
|
||||||
with open('/dev/null', 'w') as devnull:
|
with open('/dev/null', 'w') as devnull:
|
||||||
popen = subprocess.Popen(clone_cmd, cwd=tempdir, stdout=devnull, stderr=devnull)
|
popen = subprocess.Popen(clone_cmd, cwd=tempdir, stdout=devnull, stderr=devnull)
|
||||||
|
@ -728,8 +729,8 @@ def execute_install(args, options, parser):
|
||||||
exit_without_ignore(options)
|
exit_without_ignore(options)
|
||||||
else:
|
else:
|
||||||
if '+' in role_name:
|
if '+' in role_name:
|
||||||
(scm, role_url) = role_name.split('+')
|
(scm, role_url) = role_name.split('+',1)
|
||||||
role_name = role_name.split('/')[-1]
|
role_name = ansible.utils.repo_url_to_role_name(role_name)
|
||||||
# create tar file from scm url
|
# create tar file from scm url
|
||||||
tmp_file = scm_archive_role(scm, role_url, role_version)
|
tmp_file = scm_archive_role(scm, role_url, role_version)
|
||||||
role_data = None
|
role_data = None
|
||||||
|
|
|
@ -181,7 +181,7 @@ class Play(object):
|
||||||
if '+' in orig_path and '://' in orig_path:
|
if '+' in orig_path and '://' in orig_path:
|
||||||
# dependency name pointing to SCM URL
|
# dependency name pointing to SCM URL
|
||||||
# assume role name is last part of the URL
|
# assume role name is last part of the URL
|
||||||
orig_path = orig_path.split('/')[-1]
|
orig_path = utils.repo_url_to_role_name(orig_path)
|
||||||
|
|
||||||
role_vars = {}
|
role_vars = {}
|
||||||
if type(orig_path) == dict:
|
if type(orig_path) == dict:
|
||||||
|
@ -417,7 +417,7 @@ class Play(object):
|
||||||
else:
|
else:
|
||||||
role_name = role
|
role_name = role
|
||||||
if '+' in role_name and '://' in role_name:
|
if '+' in role_name and '://' in role_name:
|
||||||
role_name = role_name.split('/')[-1]
|
role_name = utils.repo_url_to_role_name(role_name)
|
||||||
|
|
||||||
role_names.append(role_name)
|
role_names.append(role_name)
|
||||||
if os.path.isfile(task):
|
if os.path.isfile(task):
|
||||||
|
|
|
@ -352,6 +352,12 @@ def path_dwim_relative(original, dirname, source, playbook_base, check=True):
|
||||||
raise errors.AnsibleError("input file not found at %s or %s" % (source2, obvious_local_path))
|
raise errors.AnsibleError("input file not found at %s or %s" % (source2, obvious_local_path))
|
||||||
return source2 # which does not exist
|
return source2 # which does not exist
|
||||||
|
|
||||||
|
def repo_url_to_role_name(repo_url):
|
||||||
|
trailing_path = repo_url.split('/')[-1]
|
||||||
|
if trailing_path.endswith('.git'):
|
||||||
|
trailing_path = trailing_path[:-4]
|
||||||
|
return trailing_path
|
||||||
|
|
||||||
def json_loads(data):
|
def json_loads(data):
|
||||||
''' parse a JSON string and return a data structure '''
|
''' parse a JSON string and return a data structure '''
|
||||||
|
|
||||||
|
|
|
@ -14,9 +14,12 @@ else
|
||||||
CREDENTIALS_ARG =
|
CREDENTIALS_ARG =
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
# http://unix.stackexchange.com/questions/30091/fix-or-alternative-for-mktemp-in-os-x
|
||||||
|
TMPDIR = $(shell mktemp -d 2>/dev/null || mktemp -d -t 'mytmpdir')
|
||||||
|
|
||||||
VAULT_PASSWORD_FILE = vault-password
|
VAULT_PASSWORD_FILE = vault-password
|
||||||
|
|
||||||
all: non_destructive destructive includes unicode test_var_precedence check_mode test_hash test_handlers test_group_by test_vault parsing
|
all: non_destructive destructive includes unicode test_var_precedence check_mode test_hash test_handlers test_group_by test_vault parsing test_galaxy
|
||||||
|
|
||||||
parsing:
|
parsing:
|
||||||
ansible-playbook bad_parsing.yml -i $(INVENTORY) -e @$(VARS_FILE) $(CREDENTIALS_ARG) -vvv $(TEST_FLAGS) --tags common,scenario1; [ $$? -eq 3 ]
|
ansible-playbook bad_parsing.yml -i $(INVENTORY) -e @$(VARS_FILE) $(CREDENTIALS_ARG) -vvv $(TEST_FLAGS) --tags common,scenario1; [ $$? -eq 3 ]
|
||||||
|
@ -101,3 +104,12 @@ rackspace: $(CREDENTIALS_FILE)
|
||||||
RC=$$? ; \
|
RC=$$? ; \
|
||||||
CLOUD_RESOURCE_PREFIX="$(CLOUD_RESOURCE_PREFIX)" make rackspace_cleanup ; \
|
CLOUD_RESOURCE_PREFIX="$(CLOUD_RESOURCE_PREFIX)" make rackspace_cleanup ; \
|
||||||
exit $$RC;
|
exit $$RC;
|
||||||
|
|
||||||
|
test_galaxy:
|
||||||
|
mytmpdir=$(TMPDIR) ; \
|
||||||
|
ansible-galaxy install -r galaxy_rolesfile -p $$mytmpdir/roles ; \
|
||||||
|
cp galaxy_playbook.yml $$mytmpdir ; \
|
||||||
|
ansible-playbook -i $(INVENTORY) $$mytmpdir/galaxy_playbook.yml -v $(TEST_FLAGS) ; \
|
||||||
|
RC=$$? ; \
|
||||||
|
rm -rf $$mytmpdir ; \
|
||||||
|
exit $$RC
|
||||||
|
|
5
test/integration/galaxy_playbook.yml
Normal file
5
test/integration/galaxy_playbook.yml
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
- hosts: localhost
|
||||||
|
connection: local
|
||||||
|
|
||||||
|
roles:
|
||||||
|
- "git-ansible-galaxy"
|
2
test/integration/galaxy_rolesfile
Normal file
2
test/integration/galaxy_rolesfile
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
git+http://bitbucket.org/willthames/git-ansible-galaxy,v1.2
|
||||||
|
hg+ssh://hg@bitbucket.org/willthames/hg-ansible-galaxy
|
|
@ -778,3 +778,8 @@ class TestUtils(unittest.TestCase):
|
||||||
assert 'msg' not in data
|
assert 'msg' not in data
|
||||||
assert data['censored'] == 'results hidden due to no_log parameter'
|
assert data['censored'] == 'results hidden due to no_log parameter'
|
||||||
|
|
||||||
|
def test_repo_url_to_role_name(self):
|
||||||
|
tests = [("http://git.example.com/repos/repo.git", "repo"),
|
||||||
|
("ssh://git@git.example.com:repos/role-name", "role-name")]
|
||||||
|
for (url, result) in tests:
|
||||||
|
self.assertEqual(ansible.utils.repo_url_to_role_name(url), result)
|
||||||
|
|
Loading…
Reference in a new issue