mirror of
				https://github.com/kevinveenbirkenbach/computer-playbook.git
				synced 2025-10-31 02:10:05 +00:00 
			
		
		
		
	Implement filter checks: ensure all defined filters are used and remove dead code
Integration tests added/updated:
- tests/integration/test_filters_usage.py: AST-based detection of filter definitions (FilterModule.filters), robust Jinja detection ({{ ... }}, {% ... %}, {% filter ... %}), plus Python call tracking; fails if a filter is used only under tests/.
- tests/integration/test_filters_are_defined.py: inverse check — every filter used in .yml/.yaml/.j2/.jinja2/.tmpl must be defined locally. Scans only inside Jinja blocks and ignores pipes inside strings (e.g., lookup('pipe', "... | grep ... | awk ...")) to avoid false positives like trusted_hosts, woff/woff2, etc.
Bug fixes & robustness:
- Build regexes without %-string formatting to avoid ValueError from literal '%' in Jinja tags.
- Strip quoted strings in usage analysis so sed/grep/awk pipes are not miscounted as filters.
- Prevent self-matches in the defining file.
Cleanup / removal of dead code:
- Removed unused filter plugins and related unit tests:
  * filter_plugins/alias_domains_map.py
  * filter_plugins/get_application_id.py
  * filter_plugins/load_configuration.py
  * filter_plugins/safe.py
  * filter_plugins/safe_join.py
  * roles/svc-db-openldap/filter_plugins/build_ldap_nested_group_entries.py
  * roles/sys-ctl-bkp-docker-2-loc/filter_plugins/dict_to_cli_args.py
  * corresponding tests under tests/unit/*
- roles/svc-db-postgres/filter_plugins/split_postgres_connections.py: dropped no-longer-needed list_postgres_roles API; adjusted tests.
Misc:
- sys-stk-front-proxy/defaults/main.yml: clarified valid vhost_flavour values (comma-separated).
Ref: https://chatgpt.com/share/68b56bac-c4f8-800f-aeef-6708dbb44199
			
			
This commit is contained in:
		| @@ -77,12 +77,6 @@ class SplitPostgresConnectionsTests(unittest.TestCase): | ||||
|     def test_registry_contains_filters(self): | ||||
|         registry = self.mod.FilterModule().filters() | ||||
|         self.assertIn("split_postgres_connections", registry) | ||||
|         self.assertIn("list_postgres_roles", registry) | ||||
|  | ||||
|     def test_list_postgres_roles(self): | ||||
|         roles = self.mod.list_postgres_roles(self.roles_dir) | ||||
|         self.assertIsInstance(roles, list) | ||||
|         self.assertSetEqual(set(roles), {"app_a", "app_b"}) | ||||
|  | ||||
|     def test_split_postgres_connections_division(self): | ||||
|         # There are 2 postgres roles -> 200 / 2 = 100 | ||||
|   | ||||
| @@ -1,61 +0,0 @@ | ||||
| import unittest | ||||
| import os | ||||
| import sys | ||||
|  | ||||
| # Add the path to roles/sys-ctl-bkp-docker-2-loc/filter_plugins | ||||
| CURRENT_DIR = os.path.dirname(__file__) | ||||
| FILTER_PLUGIN_DIR = os.path.abspath( | ||||
|     os.path.join(CURRENT_DIR, '../../../../../roles/sys-ctl-bkp-docker-2-loc/filter_plugins') | ||||
| ) | ||||
| sys.path.insert(0, FILTER_PLUGIN_DIR) | ||||
|  | ||||
| from dict_to_cli_args import dict_to_cli_args | ||||
|  | ||||
|  | ||||
| class TestDictToCliArgs(unittest.TestCase): | ||||
|     def test_simple_string_args(self): | ||||
|         data = {"backup-dir": "/mnt/backups", "version-suffix": "-nightly"} | ||||
|         expected = "--backup-dir=/mnt/backups --version-suffix=-nightly" | ||||
|         self.assertEqual(dict_to_cli_args(data), expected) | ||||
|  | ||||
|     def test_boolean_true(self): | ||||
|         data = {"shutdown": True, "everything": True} | ||||
|         expected = "--shutdown --everything" | ||||
|         self.assertEqual(dict_to_cli_args(data), expected) | ||||
|  | ||||
|     def test_boolean_false(self): | ||||
|         data = {"shutdown": False, "everything": True} | ||||
|         expected = "--everything" | ||||
|         self.assertEqual(dict_to_cli_args(data), expected) | ||||
|  | ||||
|     def test_list_argument(self): | ||||
|         data = {"ignore-volumes": ["redis", "memcached"]} | ||||
|         expected = '--ignore-volumes="redis memcached"' | ||||
|         self.assertEqual(dict_to_cli_args(data), expected) | ||||
|  | ||||
|     def test_mixed_arguments(self): | ||||
|         data = { | ||||
|             "backup-dir": "/mnt/backups", | ||||
|             "shutdown": True, | ||||
|             "ignore-volumes": ["redis", "memcached"] | ||||
|         } | ||||
|         result = dict_to_cli_args(data) | ||||
|         self.assertIn("--backup-dir=/mnt/backups", result) | ||||
|         self.assertIn("--shutdown", result) | ||||
|         self.assertIn('--ignore-volumes="redis memcached"', result) | ||||
|  | ||||
|     def test_empty_dict(self): | ||||
|         self.assertEqual(dict_to_cli_args({}), "") | ||||
|  | ||||
|     def test_none_value(self): | ||||
|         data = {"some-value": None, "other": "yes"} | ||||
|         expected = "--other=yes" | ||||
|         self.assertEqual(dict_to_cli_args(data), expected) | ||||
|  | ||||
|     def test_invalid_type(self): | ||||
|         with self.assertRaises(TypeError): | ||||
|             dict_to_cli_args(["not", "a", "dict"]) | ||||
|  | ||||
|  | ||||
| if __name__ == "__main__": | ||||
|     unittest.main() | ||||
		Reference in New Issue
	
	Block a user