mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
Clarify examples further.
This commit is contained in:
parent
caf4e44be7
commit
399fe32287
2 changed files with 64 additions and 53 deletions
|
@ -234,7 +234,7 @@ def exit_without_ignore(options, rc=1):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if not get_opt(options, "ignore_errors", False):
|
if not get_opt(options, "ignore_errors", False):
|
||||||
print 'You can use --ignore-errors to skip failed roles.'
|
print '- you can use --ignore-errors to skip failed roles.'
|
||||||
sys.exit(rc)
|
sys.exit(rc)
|
||||||
|
|
||||||
#-------------------------------------------------------------------------------------
|
#-------------------------------------------------------------------------------------
|
||||||
|
@ -268,10 +268,10 @@ def api_lookup_role_by_name(api_server, role_name):
|
||||||
parts = role_name.split(".")
|
parts = role_name.split(".")
|
||||||
user_name = ".".join(parts[0:-1])
|
user_name = ".".join(parts[0:-1])
|
||||||
role_name = parts[-1]
|
role_name = parts[-1]
|
||||||
print " downloading role '%s', owned by %s" % (role_name, user_name)
|
print "- downloading role '%s', owned by %s" % (role_name, user_name)
|
||||||
except:
|
except:
|
||||||
parser.print_help()
|
parser.print_help()
|
||||||
print "Invalid role name (%s). You must specify username.rolename" % role_name
|
print "- invalid role name (%s). Specify role as format: username.rolename" % role_name
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
url = 'https://%s/api/v1/roles/?owner__username=%s&name=%s' % (api_server,user_name,role_name)
|
url = 'https://%s/api/v1/roles/?owner__username=%s&name=%s' % (api_server,user_name,role_name)
|
||||||
|
@ -329,7 +329,7 @@ def api_get_list(api_server, what):
|
||||||
done = (data.get('next', None) == None)
|
done = (data.get('next', None) == None)
|
||||||
return results
|
return results
|
||||||
except:
|
except:
|
||||||
print " - failed to download the %s list" % what
|
print "- failed to download the %s list" % what
|
||||||
return None
|
return None
|
||||||
|
|
||||||
#-------------------------------------------------------------------------------------
|
#-------------------------------------------------------------------------------------
|
||||||
|
@ -338,7 +338,7 @@ def api_get_list(api_server, what):
|
||||||
|
|
||||||
def scm_archive_role(scm, role_url, role_version, role_name):
|
def scm_archive_role(scm, role_url, role_version, role_name):
|
||||||
if scm not in ['hg', 'git']:
|
if scm not in ['hg', 'git']:
|
||||||
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()
|
||||||
clone_cmd = [scm, 'clone', role_url, role_name]
|
clone_cmd = [scm, 'clone', role_url, role_name]
|
||||||
|
@ -476,7 +476,7 @@ def fetch_role(role_name, target, role_data, options):
|
||||||
archive_url = role_name
|
archive_url = role_name
|
||||||
else:
|
else:
|
||||||
archive_url = 'https://github.com/%s/%s/archive/%s.tar.gz' % (role_data["github_user"], role_data["github_repo"], target)
|
archive_url = 'https://github.com/%s/%s/archive/%s.tar.gz' % (role_data["github_user"], role_data["github_repo"], target)
|
||||||
print " - downloading role from %s" % archive_url
|
print "- downloading role from %s" % archive_url
|
||||||
|
|
||||||
try:
|
try:
|
||||||
url_file = urllib2.urlopen(archive_url)
|
url_file = urllib2.urlopen(archive_url)
|
||||||
|
@ -490,7 +490,7 @@ def fetch_role(role_name, target, role_data, options):
|
||||||
except Exception, e:
|
except Exception, e:
|
||||||
# TODO: better urllib2 error handling for error
|
# TODO: better urllib2 error handling for error
|
||||||
# messages that are more exact
|
# messages that are more exact
|
||||||
print "Error: failed to download the file."
|
print "- error: failed to download the file."
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def install_role(role_name, role_version, role_filename, options):
|
def install_role(role_name, role_version, role_filename, options):
|
||||||
|
@ -498,7 +498,7 @@ def install_role(role_name, role_version, role_filename, options):
|
||||||
# to the specified (or default) roles directory
|
# to the specified (or default) roles directory
|
||||||
|
|
||||||
if not tarfile.is_tarfile(role_filename):
|
if not tarfile.is_tarfile(role_filename):
|
||||||
print "Error: the file downloaded was not a tar.gz"
|
print "- error: the file downloaded was not a tar.gz"
|
||||||
return False
|
return False
|
||||||
else:
|
else:
|
||||||
if role_filename.endswith('.gz'):
|
if role_filename.endswith('.gz'):
|
||||||
|
@ -514,13 +514,13 @@ def install_role(role_name, role_version, role_filename, options):
|
||||||
meta_file = member
|
meta_file = member
|
||||||
break
|
break
|
||||||
if not meta_file:
|
if not meta_file:
|
||||||
print "Error: this role does not appear to have a meta/main.yml file."
|
print "- error: this role does not appear to have a meta/main.yml file."
|
||||||
return False
|
return False
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
meta_file_data = yaml.safe_load(role_tar_file.extractfile(meta_file))
|
meta_file_data = yaml.safe_load(role_tar_file.extractfile(meta_file))
|
||||||
except:
|
except:
|
||||||
print "Error: this role does not appear to have a valid meta/main.yml file."
|
print "- error: this role does not appear to have a valid meta/main.yml file."
|
||||||
return False
|
return False
|
||||||
|
|
||||||
# we strip off the top-level directory for all of the files contained within
|
# we strip off the top-level directory for all of the files contained within
|
||||||
|
@ -528,20 +528,20 @@ def install_role(role_name, role_version, role_filename, options):
|
||||||
# to the specified role's name
|
# to the specified role's name
|
||||||
role_path = os.path.join(get_opt(options, 'roles_path', '/etc/ansible/roles'), role_name)
|
role_path = os.path.join(get_opt(options, 'roles_path', '/etc/ansible/roles'), role_name)
|
||||||
role_path = os.path.expanduser(role_path)
|
role_path = os.path.expanduser(role_path)
|
||||||
print " - extracting %s to %s" % (role_name, role_path)
|
print "- extracting %s to %s" % (role_name, role_path)
|
||||||
try:
|
try:
|
||||||
if os.path.exists(role_path):
|
if os.path.exists(role_path):
|
||||||
if not os.path.isdir(role_path):
|
if not os.path.isdir(role_path):
|
||||||
print "Error: the specified roles path exists and is not a directory."
|
print "- error: the specified roles path exists and is not a directory."
|
||||||
return False
|
return False
|
||||||
elif not get_opt(options, "force", False):
|
elif not get_opt(options, "force", False):
|
||||||
print "Error: the specified role %s appears to already exist. Use --force to replace it." % role_name
|
print "- error: the specified role %s appears to already exist. Use --force to replace it." % role_name
|
||||||
return False
|
return False
|
||||||
else:
|
else:
|
||||||
# using --force, remove the old path
|
# using --force, remove the old path
|
||||||
if not remove_role(role_name, options):
|
if not remove_role(role_name, options):
|
||||||
print "Error: %s doesn't appear to contain a role." % role_path
|
print "- error: %s doesn't appear to contain a role." % role_path
|
||||||
print "Please remove this directory manually if you really want to put the role here."
|
print " please remove this directory manually if you really want to put the role here."
|
||||||
return False
|
return False
|
||||||
else:
|
else:
|
||||||
os.makedirs(role_path)
|
os.makedirs(role_path)
|
||||||
|
@ -563,11 +563,11 @@ def install_role(role_name, role_version, role_filename, options):
|
||||||
# write out the install info file for later use
|
# write out the install info file for later use
|
||||||
write_galaxy_install_info(role_name, role_version, options)
|
write_galaxy_install_info(role_name, role_version, options)
|
||||||
except OSError, e:
|
except OSError, e:
|
||||||
print "Error: you do not have permission to modify files in %s" % role_path
|
print "- error: you do not have permission to modify files in %s" % role_path
|
||||||
return False
|
return False
|
||||||
|
|
||||||
# return the parsed yaml metadata
|
# return the parsed yaml metadata
|
||||||
print "%s was installed successfully" % role_name
|
print "- %s was installed successfully" % role_name
|
||||||
return meta_file_data
|
return meta_file_data
|
||||||
|
|
||||||
#-------------------------------------------------------------------------------------
|
#-------------------------------------------------------------------------------------
|
||||||
|
@ -588,7 +588,7 @@ def execute_init(args, options, parser):
|
||||||
if not offline:
|
if not offline:
|
||||||
api_config = api_get_config(api_server)
|
api_config = api_get_config(api_server)
|
||||||
if not api_config:
|
if not api_config:
|
||||||
print "The API server (%s) is not responding, please try again later." % api_server
|
print "- the API server (%s) is not responding, please try again later." % api_server
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
@ -598,18 +598,17 @@ def execute_init(args, options, parser):
|
||||||
role_path = os.path.join(init_path, role_name)
|
role_path = os.path.join(init_path, role_name)
|
||||||
if os.path.exists(role_path):
|
if os.path.exists(role_path):
|
||||||
if os.path.isfile(role_path):
|
if os.path.isfile(role_path):
|
||||||
print "The path %s already exists, but is a file - aborting" % role_path
|
print "- the path %s already exists, but is a file - aborting" % role_path
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
elif not force:
|
elif not force:
|
||||||
print "The directory %s already exists." % role_path
|
print "- the directory %s already exists." % role_path
|
||||||
print ""
|
print " you can use --force to re-initialize this directory,\n" + \
|
||||||
print "You can use --force to re-initialize this directory,\n" + \
|
" however it will reset any main.yml files that may have\n" + \
|
||||||
"however it will reset any main.yml files that may have\n" + \
|
" been modified there already."
|
||||||
"been modified there already."
|
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
except Exception, e:
|
except Exception, e:
|
||||||
parser.print_help()
|
parser.print_help()
|
||||||
print "No role name specified for init"
|
print "- no role name specified for init"
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
ROLE_DIRS = ('defaults','files','handlers','meta','tasks','templates','vars')
|
ROLE_DIRS = ('defaults','files','handlers','meta','tasks','templates','vars')
|
||||||
|
@ -668,7 +667,7 @@ def execute_init(args, options, parser):
|
||||||
f = open(main_yml_path, 'w')
|
f = open(main_yml_path, 'w')
|
||||||
f.write('---\n# %s file for %s\n' % (dir,role_name))
|
f.write('---\n# %s file for %s\n' % (dir,role_name))
|
||||||
f.close()
|
f.close()
|
||||||
print "%s was created successfully" % role_name
|
print "- %s was created successfully" % role_name
|
||||||
|
|
||||||
def execute_info(args, options, parser):
|
def execute_info(args, options, parser):
|
||||||
"""
|
"""
|
||||||
|
@ -695,13 +694,13 @@ def execute_install(args, options, parser):
|
||||||
# the user needs to specify one of either --role-file
|
# the user needs to specify one of either --role-file
|
||||||
# or specify a single user/role name
|
# or specify a single user/role name
|
||||||
parser.print_help()
|
parser.print_help()
|
||||||
print "You must specify a user/role name or a roles file"
|
print "- you must specify a user/role name or a roles file"
|
||||||
sys.exit()
|
sys.exit()
|
||||||
elif len(args) == 1 and role_file:
|
elif len(args) == 1 and role_file:
|
||||||
# using a role file is mutually exclusive of specifying
|
# using a role file is mutually exclusive of specifying
|
||||||
# the role name on the command line
|
# the role name on the command line
|
||||||
parser.print_help()
|
parser.print_help()
|
||||||
print "Please specify a user/role name, or a roles file, but not both"
|
print "- please specify a user/role name, or a roles file, but not both"
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
roles_done = []
|
roles_done = []
|
||||||
|
@ -739,12 +738,12 @@ def execute_install(args, options, parser):
|
||||||
# installing from galaxy
|
# installing from galaxy
|
||||||
api_config = api_get_config(api_server)
|
api_config = api_get_config(api_server)
|
||||||
if not api_config:
|
if not api_config:
|
||||||
print "The API server (%s) is not responding, please try again later." % api_server
|
print "- the API server (%s) is not responding, please try again later." % api_server
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
role_data = api_lookup_role_by_name(api_server, role_src)
|
role_data = api_lookup_role_by_name(api_server, role_src)
|
||||||
if not role_data:
|
if not role_data:
|
||||||
print "Sorry, %s was not found on %s." % (role_src, api_server)
|
print "- sorry, %s was not found on %s." % (role_src, api_server)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
role_versions = api_fetch_role_related(api_server, 'versions', role_data['id'])
|
role_versions = api_fetch_role_related(api_server, 'versions', role_data['id'])
|
||||||
|
@ -761,14 +760,16 @@ def execute_install(args, options, parser):
|
||||||
role["version"] = 'master'
|
role["version"] = 'master'
|
||||||
else:
|
else:
|
||||||
if role_versions and role["version"] not in [a.get('name',None) for a in role_versions]:
|
if role_versions and role["version"] not in [a.get('name',None) for a in role_versions]:
|
||||||
print "The specified version (%s) was not found in the list of available versions." % role.version
|
print "- the specified version (%s) was not found in the list of available versions." % role.version
|
||||||
exit_without_ignore(options)
|
exit_without_ignore(options)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# download the role. if --no-deps was specified, we stop here,
|
# download the role. if --no-deps was specified, we stop here,
|
||||||
# otherwise we recursively grab roles and all of their deps.
|
# otherwise we recursively grab roles and all of their deps.
|
||||||
tmp_file = fetch_role(role_src, role["version"], role_data, options)
|
tmp_file = fetch_role(role_src, role["version"], role_data, options)
|
||||||
if tmp_file and install_role(role.get("name"), role.get("version"), tmp_file, options):
|
installed = False
|
||||||
|
if tmp_file:
|
||||||
|
installed = install_role(role.get("name"), role.get("version"), tmp_file, options):
|
||||||
# we're done with the temp file, clean it up
|
# we're done with the temp file, clean it up
|
||||||
os.unlink(tmp_file)
|
os.unlink(tmp_file)
|
||||||
# install dependencies, if we want them
|
# install dependencies, if we want them
|
||||||
|
@ -784,14 +785,14 @@ def execute_install(args, options, parser):
|
||||||
else:
|
else:
|
||||||
dep = ansible.utils.role_yaml_parse(dep)
|
dep = ansible.utils.role_yaml_parse(dep)
|
||||||
if not get_role_metadata(dep["name"], options):
|
if not get_role_metadata(dep["name"], options):
|
||||||
print ' adding dependency: %s' % dep["name"]
|
print '- adding dependency: %s' % dep["name"]
|
||||||
roles_left.append(dep)
|
roles_left.append(dep)
|
||||||
else:
|
else:
|
||||||
print ' dependency %s is already installed, skipping.' % dep["name"]
|
print '- dependency %s is already installed, skipping.' % dep["name"]
|
||||||
else:
|
if not tmp_file or not installed:
|
||||||
if tmp_file:
|
if tmp_file:
|
||||||
os.unlink(tmp_file)
|
os.unlink(tmp_file)
|
||||||
print "%s was NOT installed successfully." % role.get("name")
|
print "- %s was NOT installed successfully." % role.get("name")
|
||||||
exit_without_ignore(options)
|
exit_without_ignore(options)
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
|
@ -803,17 +804,17 @@ def execute_remove(args, options, parser):
|
||||||
|
|
||||||
if len(args) == 0:
|
if len(args) == 0:
|
||||||
parser.print_help()
|
parser.print_help()
|
||||||
print 'You must specify at least one role to remove.'
|
print '- you must specify at least one role to remove.'
|
||||||
sys.exit()
|
sys.exit()
|
||||||
|
|
||||||
for role in args:
|
for role in args:
|
||||||
if get_role_metadata(role, options):
|
if get_role_metadata(role, options):
|
||||||
if remove_role(role, options):
|
if remove_role(role, options):
|
||||||
print 'successfully removed %s' % role
|
print '- successfully removed %s' % role
|
||||||
else:
|
else:
|
||||||
print "failed to remove role: %s" % role
|
print "- failed to remove role: %s" % role
|
||||||
else:
|
else:
|
||||||
print '%s is not installed, skipping.' % role
|
print '- %s is not installed, skipping.' % role
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
def execute_list(args, options, parser):
|
def execute_list(args, options, parser):
|
||||||
|
@ -825,7 +826,7 @@ def execute_list(args, options, parser):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if len(args) > 1:
|
if len(args) > 1:
|
||||||
print "Please specify only one role to list, or specify no roles to see a full list"
|
print "- please specify only one role to list, or specify no roles to see a full list"
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
if len(args) == 1:
|
if len(args) == 1:
|
||||||
|
@ -840,19 +841,19 @@ def execute_list(args, options, parser):
|
||||||
if not version:
|
if not version:
|
||||||
version = "(unknown version)"
|
version = "(unknown version)"
|
||||||
# show some more info about single roles here
|
# show some more info about single roles here
|
||||||
print " %s, %s" % (role_name, version)
|
print "- %s, %s" % (role_name, version)
|
||||||
else:
|
else:
|
||||||
print "The role %s was not found" % role_name
|
print "- the role %s was not found" % role_name
|
||||||
else:
|
else:
|
||||||
# show all valid roles in the roles_path directory
|
# show all valid roles in the roles_path directory
|
||||||
roles_path = get_opt(options, 'roles_path')
|
roles_path = get_opt(options, 'roles_path')
|
||||||
roles_path = os.path.expanduser(roles_path)
|
roles_path = os.path.expanduser(roles_path)
|
||||||
if not os.path.exists(roles_path):
|
if not os.path.exists(roles_path):
|
||||||
parser.print_help()
|
parser.print_help()
|
||||||
print "The path %s does not exist. Please specify a valid path with --roles-path" % roles_path
|
print "- the path %s does not exist. Please specify a valid path with --roles-path" % roles_path
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
elif not os.path.isdir(roles_path):
|
elif not os.path.isdir(roles_path):
|
||||||
print "%s exists, but it is not a directory. Please specify a valid path with --roles-path" % roles_path
|
print "- %s exists, but it is not a directory. Please specify a valid path with --roles-path" % roles_path
|
||||||
parser.print_help()
|
parser.print_help()
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
path_files = os.listdir(roles_path)
|
path_files = os.listdir(roles_path)
|
||||||
|
@ -864,7 +865,7 @@ def execute_list(args, options, parser):
|
||||||
version = install_info.get("version", None)
|
version = install_info.get("version", None)
|
||||||
if not version:
|
if not version:
|
||||||
version = "(unknown version)"
|
version = "(unknown version)"
|
||||||
print " %s, %s" % (path_file, version)
|
print "- %s, %s" % (path_file, version)
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
#-------------------------------------------------------------------------------------
|
#-------------------------------------------------------------------------------------
|
||||||
|
@ -882,7 +883,7 @@ def main():
|
||||||
fn = globals()["execute_%s" % action]
|
fn = globals()["execute_%s" % action]
|
||||||
fn(args, options, parser)
|
fn(args, options, parser)
|
||||||
#except KeyError, e:
|
#except KeyError, e:
|
||||||
# print "Error: %s is not a valid action. Valid actions are: %s" % (action, ", ".join(VALID_ACTIONS))
|
# print "- error: %s is not a valid action. Valid actions are: %s" % (action, ", ".join(VALID_ACTIONS))
|
||||||
# sys.exit(1)
|
# sys.exit(1)
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|
|
@ -61,18 +61,28 @@ The extension is important. If the .yml extension is left off, the ansible-galax
|
||||||
|
|
||||||
And here's an example showing some specific version downloads from multiple sources. In one of the examples we also override the name of the role and download it as something different::
|
And here's an example showing some specific version downloads from multiple sources. In one of the examples we also override the name of the role and download it as something different::
|
||||||
|
|
||||||
- src: bennojoy.mysql
|
# from galaxy
|
||||||
name: mysql # save as mysql not bennojoy.mysql
|
- src: yatesr.timezone
|
||||||
|
|
||||||
|
# from github
|
||||||
|
- src: https://github.com/bennojoy/nginx
|
||||||
|
|
||||||
|
# from github, overriding the name and specifying a specific tag
|
||||||
|
- src: https://github.com/bennojoy/nginx
|
||||||
|
name: nginx_role
|
||||||
|
|
||||||
|
# from a webserver, where the role is packaged in a tar.gz
|
||||||
|
- src: https://some.webserver.example.com/files/master.tar.gz
|
||||||
|
name: http-role
|
||||||
|
|
||||||
|
# from bitbucket, if bitbucket happens to be operational right now :)
|
||||||
- src: git+http://bitbucket.org/willthames/git-ansible-galaxy
|
- src: git+http://bitbucket.org/willthames/git-ansible-galaxy
|
||||||
version: v1.4
|
version: v1.4
|
||||||
|
|
||||||
|
# from bitbucket, alternative syntax and caveats
|
||||||
- src: http://bitbucket.org/willthames/hg-ansible-galaxy
|
- src: http://bitbucket.org/willthames/hg-ansible-galaxy
|
||||||
scm: hg
|
scm: hg
|
||||||
|
|
||||||
- src: https://bitbucket.org/willthames/http-ansible-galaxy/get/master.tar.gz
|
|
||||||
name: http-role
|
|
||||||
|
|
||||||
As you can see in the above, there are a large amount of controls available
|
As you can see in the above, there are a large amount of controls available
|
||||||
to customize where roles can be pulled from, and what to save roles as.
|
to customize where roles can be pulled from, and what to save roles as.
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue