Skip to content
Snippets Groups Projects
Unverified Commit 0f99ef21 authored by Rafael Guterres Jeffman's avatar Rafael Guterres Jeffman Committed by GitHub
Browse files

Merge pull request #1080 from t-woerner/module_defaults

Create action group in collection for use with module_defaults
parents b861a618 966797db
No related branches found
No related tags found
No related merge requests found
...@@ -114,6 +114,8 @@ echo -e "\033[ACreating CHANGELOG.rst... \033[32;1mDONE\033[0m" ...@@ -114,6 +114,8 @@ echo -e "\033[ACreating CHANGELOG.rst... \033[32;1mDONE\033[0m"
sed -i -e "s/ansible.module_utils.ansible_freeipa_module/ansible_collections.${collection_prefix}.plugins.module_utils.ansible_freeipa_module/" plugins/modules/*.py sed -i -e "s/ansible.module_utils.ansible_freeipa_module/ansible_collections.${collection_prefix}.plugins.module_utils.ansible_freeipa_module/" plugins/modules/*.py
python utils/create_action_group.py "meta/runtime.yml" "$collection_prefix"
(cd plugins/module_utils && { (cd plugins/module_utils && {
ln -sf ../../roles/*/module_utils/*.py . ln -sf ../../roles/*/module_utils/*.py .
}) })
......
import sys
import yaml
from facts import MANAGEMENT_MODULES
def create_action_group(yml_file, project_prefix):
yaml_data = None
with open(yml_file) as f_in:
yaml_data = yaml.safe_load(f_in)
yaml_data.setdefault("action_groups", {})[
"%s.modules" % project_prefix
] = MANAGEMENT_MODULES
with open(yml_file, 'w') as f_out:
yaml.safe_dump(yaml_data, f_out, default_flow_style=False,
explicit_start=True)
if len(sys.argv) != 3:
print("Usage: %s <runtime file> <collection prefix>" % sys.argv[0])
sys.exit(-1)
create_action_group(sys.argv[1], sys.argv[2])
import os
def get_roles(dir):
roles = []
_rolesdir = "%s/roles/" % dir
for _role in os.listdir(_rolesdir):
_roledir = "%s/%s" % (_rolesdir, _role)
if not os.path.isdir(_roledir) or \
not os.path.isdir("%s/meta" % _roledir) or \
not os.path.isdir("%s/tasks" % _roledir):
continue
roles.append(_role)
return sorted(roles)
def get_modules(dir):
management_modules = []
roles_modules = []
for root, _dirs, files in os.walk(dir):
if not root.startswith("%s/plugins/" % dir) and \
not root.startswith("%s/roles/" % dir):
continue
for _file in files:
if _file.endswith(".py"):
if root == "%s/plugins/modules" % dir:
management_modules.append(_file[:-3])
elif root.startswith("%s/roles/" % dir):
if root.endswith("/library"):
roles_modules.append(_file[:-3])
return sorted(management_modules), sorted(roles_modules)
BASE_DIR = os.path.abspath(os.path.dirname(__file__) + "/..")
ROLES = get_roles(BASE_DIR)
MANAGEMENT_MODULES, ROLES_MODULES = get_modules(BASE_DIR)
ALL_MODULES = sorted(MANAGEMENT_MODULES + ROLES_MODULES)
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
# Authors: # Authors:
# Thomas Woerner <twoerner@redhat.com> # Thomas Woerner <twoerner@redhat.com>
# #
# Copyright (C) 2019,2020 Red Hat # Copyright (C) 2019-2023 Red Hat
# see file 'COPYING' for use and warranty information # see file 'COPYING' for use and warranty information
# #
# This program is free software; you can redistribute it and/or modify # This program is free software; you can redistribute it and/or modify
...@@ -21,48 +21,94 @@ ...@@ -21,48 +21,94 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
import re import re
from facts import ROLES, ALL_MODULES
def get_indent(txt):
return len(txt) - len(txt.lstrip())
def galaxyfy_playbook(project_prefix, collection_prefix, lines): def galaxyfy_playbook(project_prefix, collection_prefix, lines):
po1 = re.compile('(%s.*:)$' % project_prefix) po_module = re.compile('(%s.*):$' % project_prefix)
po2 = re.compile('(.*:) (%s.*)$' % project_prefix) po_module_arg = re.compile('(%s.*): (.*)$' % project_prefix)
out_lines = [] po_module_unnamed = re.compile('- (%s.*):$' % project_prefix)
po_role = re.compile('(.*:) (%s.*)$' % project_prefix)
pattern1 = r'%s.\1' % collection_prefix pattern_module = r'%s.\1:' % collection_prefix
pattern2 = r'\1 %s.\2' % collection_prefix pattern_module_arg = r'%s.\1: \2' % collection_prefix
pattern_module_unnamed = r'- %s.\1:' % collection_prefix
pattern_role = r'\1 %s.\2' % collection_prefix
out_lines = []
changed = False changed = False
changeable = False changeable = False
include_role = False include_role = False
module_defaults = False
module_defaults_indent = -1
for line in lines: for line in lines:
stripped = line.strip() stripped = line.strip()
if stripped.startswith("- name:") or \ if stripped.startswith("- name:") or \
stripped.startswith("- block:"): stripped.startswith("- block:"):
changeable = True changeable = True
module_defaults = False
module_defaults_indent = -1
elif stripped in ["set_fact:", "ansible.builtin.set_fact:", "vars:"]: elif stripped in ["set_fact:", "ansible.builtin.set_fact:", "vars:"]:
changeable = False changeable = False
include_role = False include_role = False
module_defaults = False
module_defaults_indent = -1
elif stripped == "roles:": elif stripped == "roles:":
changeable = True changeable = True
include_role = False include_role = False
module_defaults = False
module_defaults_indent = -1
elif (stripped.startswith("include_role:") or elif (stripped.startswith("include_role:") or
stripped.startswith("ansible.builtin.include_role:")): stripped.startswith("ansible.builtin.include_role:")):
include_role = True include_role = True
module_defaults = False
module_defaults_indent = -1
elif include_role and stripped.startswith("name:"): elif include_role and stripped.startswith("name:"):
line = po2.sub(pattern2, line) match = po_role.search(line)
if match and match.group(2) in ROLES:
line = po_role.sub(pattern_role, line)
changed = True
elif stripped == "module_defaults:":
changeable = True
include_role = False
module_defaults = True
module_defaults_indent = -1
elif module_defaults:
_indent = get_indent(line)
if module_defaults_indent == -1:
module_defaults_indent = _indent
if _indent == module_defaults_indent:
# only module, no YAML anchor or alias
match = po_module.search(line)
if match and match.group(1) in ALL_MODULES:
line = po_module.sub(pattern_module, line)
changed = True
# module with YAML anchor or alias
match = po_module_arg.search(line)
if match and match.group(1) in ALL_MODULES:
line = po_module_arg.sub(pattern_module_arg, line)
changed = True changed = True
elif changeable and stripped.startswith("- role:"): elif changeable and stripped.startswith("- role:"):
line = po2.sub(pattern2, line) match = po_role.search(line)
if match and match.group(2) in ROLES:
line = po_role.sub(pattern_role, line)
changed = True changed = True
elif (changeable and stripped.startswith(project_prefix) elif (changeable and stripped.startswith(project_prefix)
and not stripped.startswith(collection_prefix) # noqa
and stripped.endswith(":")): # noqa and stripped.endswith(":")): # noqa
line = po1.sub(pattern1, line) match = po_module.search(line)
if match and match.group(1) in ALL_MODULES:
line = po_module.sub(pattern_module, line)
changed = True changed = True
changeable = False # Only change first line in task changeable = False # Only change first line in task
elif (stripped.startswith("- %s" % project_prefix) elif (stripped.startswith("- %s" % project_prefix)
and stripped.endswith(":")): # noqa and stripped.endswith(":")): # noqa
line = po1.sub(pattern1, line) match = po_module_unnamed.search(line)
if match and match.group(1) in ALL_MODULES:
line = po_module_unnamed.sub(pattern_module_unnamed, line)
changed = True changed = True
out_lines.append(line) out_lines.append(line)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment