diff options
| -rw-r--r-- | setup.py | 48 | 
1 files changed, 32 insertions, 16 deletions
@@ -221,27 +221,43 @@ class OpenShiftAnsibleSyntaxCheck(Command):          ''' run command '''          has_errors = False +        playbooks = set() +        included_playbooks = set()          for yaml_file in find_files(                  os.path.join(os.getcwd(), 'playbooks', 'byo'),                  None, None, r'\.ya?ml$'):              with open(yaml_file, 'r') as contents: -                for line in contents: -                    # initialize_groups.yml is used to identify entry point playbooks -                    if re.search(r'initialize_groups\.yml', line): -                        print('-' * 60) -                        print('Syntax checking playbook: %s' % yaml_file) -                        try: -                            subprocess.check_output( -                                ['ansible-playbook', '-i localhost,', -                                 '--syntax-check', yaml_file] -                            ) -                        except subprocess.CalledProcessError as cpe: -                            print('{}Execution failed: {}{}'.format( -                                self.FAIL, cpe, self.ENDC)) -                            has_errors = True -                        # Break for loop, no need to continue looping lines -                        break +                for task in yaml.safe_load(contents): +                    if not isinstance(task, dict): +                        # Skip yaml files which do not contain plays or includes +                        continue +                    if 'include' in task: +                        # Add the playbook and capture included playbooks +                        playbooks.add(yaml_file) +                        included_file_name = task['include'].split()[0] +                        included_file = os.path.normpath( +                            os.path.join(os.path.dirname(yaml_file), +                                         included_file_name)) +                        included_playbooks.add(included_file) +                    elif 'hosts' in task: +                        playbooks.add(yaml_file) +        # Evaluate the difference between all playbooks and included playbooks +        entrypoint_playbooks = sorted(playbooks.difference(included_playbooks)) +        print('Entry point playbook count: {}'.format(len(entrypoint_playbooks))) +        # Syntax each entry point playbook +        for playbook in entrypoint_playbooks: +            print('-' * 60) +            print('Syntax checking playbook: {}'.format(playbook)) +            try: +                subprocess.check_output( +                    ['ansible-playbook', '-i localhost,', +                     '--syntax-check', playbook] +                ) +            except subprocess.CalledProcessError as cpe: +                print('{}Execution failed: {}{}'.format( +                    self.FAIL, cpe, self.ENDC)) +                has_errors = True          if has_errors:              raise SystemExit(1)  | 
