mirror of
				https://github.com/kevinveenbirkenbach/computer-playbook.git
				synced 2025-10-31 18:29:21 +00:00 
			
		
		
		
	Added warnings concerning application_id
This commit is contained in:
		
							
								
								
									
										51
									
								
								tests/integration/test_application_id_matches_role_name.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								tests/integration/test_application_id_matches_role_name.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,51 @@ | ||||
| import os | ||||
| import unittest | ||||
| import yaml | ||||
| import glob | ||||
| import warnings | ||||
|  | ||||
| class TestApplicationIdMatchesRoleName(unittest.TestCase): | ||||
|     def test_application_id_matches_role_directory(self): | ||||
|         """ | ||||
|         Warn if application_id in vars/main.yml does not match | ||||
|         the role directory basename, to avoid confusion. | ||||
|         If vars/main.yml is missing, do nothing. | ||||
|         """ | ||||
|         # locate the 'roles' directory (two levels up) | ||||
|         base_dir = os.path.dirname(__file__) | ||||
|         roles_dir = os.path.abspath(os.path.join(base_dir, '..', '..', 'roles')) | ||||
|  | ||||
|         # iterate over each role folder | ||||
|         for role_path in glob.glob(os.path.join(roles_dir, '*')): | ||||
|             if not os.path.isdir(role_path): | ||||
|                 continue | ||||
|  | ||||
|             role_name = os.path.basename(role_path) | ||||
|             vars_main = os.path.join(role_path, 'vars', 'main.yml') | ||||
|  | ||||
|             # skip roles without vars/main.yml | ||||
|             if not os.path.exists(vars_main): | ||||
|                 continue | ||||
|  | ||||
|             with open(vars_main, 'r', encoding='utf-8') as f: | ||||
|                 data = yaml.safe_load(f) or {} | ||||
|  | ||||
|             app_id = data.get('application_id') | ||||
|             if app_id is None: | ||||
|                 warnings.warn( | ||||
|                     f"{role_name}: 'application_id' is missing in vars/main.yml. " | ||||
|                     f"Consider setting it to '{role_name}' to avoid confusion." | ||||
|                 ) | ||||
|             elif app_id != role_name: | ||||
|                 warnings.warn( | ||||
|                     f"{role_name}: 'application_id' is '{app_id}', " | ||||
|                     f"but the folder name is '{role_name}'. " | ||||
|                     "This can lead to confusion—using the directory name " | ||||
|                     "as the application_id is recommended." | ||||
|                 ) | ||||
|  | ||||
|         # always pass | ||||
|         self.assertTrue(True) | ||||
|  | ||||
| if __name__ == '__main__': | ||||
|     unittest.main() | ||||
		Reference in New Issue
	
	Block a user