diff --git a/validations_libs/cli/community.py b/validations_libs/cli/community.py index 640a4c22..9437c8ac 100644 --- a/validations_libs/cli/community.py +++ b/validations_libs/cli/community.py @@ -15,6 +15,7 @@ # under the License. import logging +import os from validations_libs import constants, utils from validations_libs.cli.base import BaseCommand @@ -49,6 +50,15 @@ class CommunityValidationInit(BaseCommand): ) ) + parser.add_argument('--validation-dir', dest='validation_dir', + default=constants.ANSIBLE_VALIDATION_DIR, + help=("Path where the validation playbooks " + "is located.")) + + parser.add_argument('--ansible-base-dir', dest='ansible_base_dir', + default=constants.DEFAULT_VALIDATIONS_BASEDIR, + help=("Path where the ansible roles, library " + "and plugins are located.")) return parser def take_action(self, parsed_args): @@ -56,7 +66,10 @@ class CommunityValidationInit(BaseCommand): # Merge config and CLI args: self.base.set_argument_parser(self, parsed_args) - co_validation = com_val(parsed_args.validation_name) + co_validation = com_val( + parsed_args.validation_name, + validation_dir=parsed_args.validation_dir, + ansible_base_dir=parsed_args.ansible_base_dir) if co_validation.is_community_validations_enabled(self.base.config): LOG.debug( @@ -79,7 +92,7 @@ class CommunityValidationInit(BaseCommand): .format( co_validation.role_name, constants.COMMUNITY_ROLES_DIR, - constants.ANSIBLE_ROLES_DIR) + os.path.join(parsed_args.ansible_base_dir, "roles/")) ) ) @@ -93,7 +106,7 @@ class CommunityValidationInit(BaseCommand): .format( co_validation.playbook_name, constants.COMMUNITY_PLAYBOOKS_DIR, - constants.ANSIBLE_VALIDATION_DIR) + parsed_args.validation_dir) ) ) diff --git a/validations_libs/community/init_validation.py b/validations_libs/community/init_validation.py index 8128f903..c35601df 100644 --- a/validations_libs/community/init_validation.py +++ b/validations_libs/community/init_validation.py @@ -17,6 +17,7 @@ import logging import re +import os # @matbu backward compatibility for stable/train try: from pathlib import Path @@ -35,9 +36,16 @@ class CommunityValidation: from a template. """ - def __init__(self, validation_name): + def __init__( + self, + validation_name, + validation_dir=constants.ANSIBLE_VALIDATION_DIR, + ansible_base_dir=constants.DEFAULT_VALIDATIONS_BASEDIR): """Construct Role and Playbook.""" + self._validation_name = validation_name + self.validation_dir = validation_dir + self.ansible_base_dir = ansible_base_dir def execute(self): """Execute the actions necessary to create a new community validation @@ -106,11 +114,12 @@ class CommunityValidation: :rtype: ``Boolean`` """ + roles_dir = os.path.join(self.ansible_base_dir, "roles/") non_community_roles = [] - if Path(constants.ANSIBLE_ROLES_DIR).exists(): + if Path(roles_dir).exists(): non_community_roles = [ Path(x).name - for x in Path(constants.ANSIBLE_ROLES_DIR).iterdir() + for x in Path(roles_dir).iterdir() if x.is_dir() ] @@ -131,10 +140,10 @@ class CommunityValidation: :rtype: ``Boolean`` """ non_community_playbooks = [] - if Path(constants.ANSIBLE_VALIDATION_DIR).exists(): + if Path(self.validation_dir).exists(): non_community_playbooks = [ Path(x).name - for x in Path(constants.ANSIBLE_VALIDATION_DIR).iterdir() + for x in Path(self.validation_dir).iterdir() if x.is_file() ]