SYMBOL INDEX (247 symbols across 34 files) FILE: library/gcp_compute_location_info.py function main (line 19) | def main(): function collection (line 41) | def collection(module): function fetch_list (line 45) | def fetch_list(module, link, query): function query_options (line 51) | def query_options(filters): function return_if_object (line 69) | def return_if_object(module, response): FILE: library/lightsail_region_facts.py function main (line 72) | def main(): FILE: library/scaleway_compute.py function check_image_id (line 170) | def check_image_id(compute_api, image_id): function fetch_state (line 183) | def fetch_state(compute_api, server): function wait_to_complete_state_transition (line 201) | def wait_to_complete_state_transition(compute_api, server): function public_ip_payload (line 221) | def public_ip_payload(compute_api, public_ip): function create_server (line 247) | def create_server(compute_api, server): function restart_server (line 282) | def restart_server(compute_api, server): function stop_server (line 286) | def stop_server(compute_api, server): function start_server (line 290) | def start_server(compute_api, server): function perform_action (line 294) | def perform_action(compute_api, server, action): function remove_server (line 305) | def remove_server(compute_api, server): function present_strategy (line 317) | def present_strategy(compute_api, wished_server): function absent_strategy (line 346) | def absent_strategy(compute_api, wished_server): function running_strategy (line 382) | def running_strategy(compute_api, wished_server): function stop_strategy (line 424) | def stop_strategy(compute_api, wished_server): function restart_strategy (line 477) | def restart_strategy(compute_api, wished_server): function find (line 537) | def find(compute_api, wished_server, per_page=1): function server_attributes_should_be_changed (line 560) | def server_attributes_should_be_changed(compute_api, target_server, wish... function server_change_attributes (line 589) | def server_change_attributes(compute_api, target_server, wished_server): function core (line 620) | def core(module): function main (line 648) | def main(): FILE: library/x25519_pubkey.py function run_module (line 32) | def run_module(): function main (line 126) | def main(): FILE: scripts/list_servers.py function list_servers (line 11) | def list_servers(configs_dir: Path) -> list[dict]: function main (line 22) | def main() -> None: FILE: scripts/track-test-effectiveness.py function get_github_api_data (line 14) | def get_github_api_data(endpoint): function analyze_workflow_runs (line 24) | def analyze_workflow_runs(repo_owner, repo_name, days_back=30): function extract_failed_test (line 65) | def extract_failed_test(job_name, run_id): function extract_pr_number (line 78) | def extract_pr_number(run): function correlate_with_issues (line 85) | def correlate_with_issues(repo_owner, repo_name, test_failures): function generate_effectiveness_report (line 111) | def generate_effectiveness_report(test_failures, correlations): function save_metrics (line 161) | def save_metrics(test_failures, correlations): FILE: tests/conftest.py function test_variables (line 17) | def test_variables(): function test_config (line 25) | def test_config(test_variables): function temp_directory (line 31) | def temp_directory(): function wireguard_private_key (line 38) | def wireguard_private_key(): function wireguard_key_pair (line 45) | def wireguard_key_pair(temp_directory): class MockAnsibleModule (line 60) | class MockAnsibleModule: method __init__ (line 63) | def __init__(self, params): method fail_json (line 70) | def fail_json(self, **kwargs): method exit_json (line 76) | def exit_json(self, **kwargs): function mock_ansible_module (line 82) | def mock_ansible_module(): function mock_to_uuid (line 88) | def mock_to_uuid(value): function mock_bool (line 93) | def mock_bool(value): function mock_lookup (line 98) | def mock_lookup(lookup_type, path): function jinja2_env (line 111) | def jinja2_env(): function project_root (line 126) | def project_root(): function roles_dir (line 132) | def roles_dir(project_root): function pytest_configure (line 138) | def pytest_configure(config): function skip_wireguard_tests (line 145) | def skip_wireguard_tests(request): FILE: tests/fixtures/__init__.py function load_test_variables (line 8) | def load_test_variables(): function get_test_config (line 15) | def get_test_config(overrides=None): FILE: tests/integration/mock_modules/apt.py function main (line 9) | def main(): FILE: tests/integration/mock_modules/command.py function main (line 9) | def main(): FILE: tests/integration/mock_modules/shell.py function main (line 9) | def main(): FILE: tests/test_cloud_init_template.py function create_expected_cloud_init (line 28) | def create_expected_cloud_init(): class TestCloudInitTemplate (line 79) | class TestCloudInitTemplate: method test_yaml_validity (line 82) | def test_yaml_validity(self): method test_required_sections (line 97) | def test_required_sections(self): method test_ssh_configuration (line 110) | def test_ssh_configuration(self): method test_user_creation (line 143) | def test_user_creation(self): method test_runcmd_section (line 172) | def test_runcmd_section(self): method test_indentation_consistency (line 192) | def test_indentation_consistency(self): function run_tests (line 229) | def run_tests(): FILE: tests/test_package_preinstall.py class TestPackagePreinstall (line 8) | class TestPackagePreinstall(unittest.TestCase): method setUp (line 9) | def setUp(self): method test_preinstall_disabled_by_default (line 27) | def test_preinstall_disabled_by_default(self): method test_preinstall_enabled (line 38) | def test_preinstall_enabled(self): method test_preinstall_disabled_explicitly (line 53) | def test_preinstall_disabled_explicitly(self): method test_package_count (line 64) | def test_package_count(self): FILE: tests/unit/test_ansible_12_boolean_fix.py class TestAnsible12BooleanFix (line 11) | class TestAnsible12BooleanFix: method test_ipv6_support_not_string_boolean (line 14) | def test_ipv6_support_not_string_boolean(self): method test_input_yml_algo_variables_not_string_boolean (line 31) | def test_input_yml_algo_variables_not_string_boolean(self): method test_no_bare_true_false_in_templates (line 68) | def test_no_bare_true_false_in_templates(self): method test_conditional_uses_of_variables (line 94) | def test_conditional_uses_of_variables(self): FILE: tests/unit/test_basic_sanity.py function test_python_version (line 13) | def test_python_version(): function test_pyproject_file_exists (line 19) | def test_pyproject_file_exists(): function test_config_file_valid (line 33) | def test_config_file_valid(): function test_ansible_syntax (line 46) | def test_ansible_syntax(): function test_shellcheck (line 54) | def test_shellcheck(): function test_dockerfile_exists (line 65) | def test_dockerfile_exists(): function test_cloud_init_header_format (line 77) | def test_cloud_init_header_format(): FILE: tests/unit/test_boolean_variables.py function render_template (line 10) | def render_template(template_str, variables=None): class TestBooleanVariables (line 17) | class TestBooleanVariables: method test_ipv6_support_produces_boolean (line 20) | def test_ipv6_support_produces_boolean(self): method test_algo_variables_boolean_fallbacks (line 41) | def test_algo_variables_boolean_fallbacks(self): method test_boolean_filter_on_strings (line 57) | def test_boolean_filter_on_strings(self): method test_ansible_12_conditional_compatibility (line 75) | def test_ansible_12_conditional_compatibility(self): method test_regression_no_string_booleans (line 98) | def test_regression_no_string_booleans(self): FILE: tests/unit/test_cloud_provider_configs.py function load_config (line 42) | def load_config(): function test_no_deprecated_instance_types (line 48) | def test_no_deprecated_instance_types(): function test_required_fields_present (line 60) | def test_required_fields_present(): function test_no_malformed_values (line 75) | def test_no_malformed_values(): FILE: tests/unit/test_comprehensive_boolean_scan.py class TestComprehensiveBooleanScan (line 42) | class TestComprehensiveBooleanScan: method get_yaml_files (line 45) | def get_yaml_files(self): method test_no_string_true_false_in_set_fact (line 98) | def test_no_string_true_false_in_set_fact(self): method test_no_bare_false_in_jinja_else (line 113) | def test_no_bare_false_in_jinja_else(self): method test_when_conditions_use_booleans (line 129) | def test_when_conditions_use_booleans(self): method test_template_files_boolean_usage (line 163) | def test_template_files_boolean_usage(self): method test_all_when_conditions_would_work (line 189) | def test_all_when_conditions_would_work(self): method test_no_other_problematic_patterns (line 218) | def test_no_other_problematic_patterns(self): method test_verify_our_fixes_are_correct (line 267) | def test_verify_our_fixes_are_correct(self): method test_templates_handle_booleans_correctly (line 289) | def test_templates_handle_booleans_correctly(self): FILE: tests/unit/test_config_validation.py function test_wireguard_config_format (line 14) | def test_wireguard_config_format(): function test_base64_key_format (line 44) | def test_base64_key_format(): function test_ip_address_format (line 60) | def test_ip_address_format(): function test_mobile_config_xml (line 75) | def test_mobile_config_xml(): function test_port_ranges (line 113) | def test_port_ranges(): FILE: tests/unit/test_destroy.py function test_destroy_playbook_exists (line 25) | def test_destroy_playbook_exists(): function test_destroy_playbook_valid_yaml (line 30) | def test_destroy_playbook_valid_yaml(): function test_destroy_playbook_syntax (line 41) | def test_destroy_playbook_syntax(): function test_destroy_playbook_has_rescue (line 51) | def test_destroy_playbook_has_rescue(): function test_destroy_playbook_has_confirmation (line 59) | def test_destroy_playbook_has_confirmation(): function test_all_provider_destroy_files_exist (line 66) | def test_all_provider_destroy_files_exist(): function test_all_provider_destroy_files_valid_yaml (line 73) | def test_all_provider_destroy_files_valid_yaml(): function test_provider_destroy_uses_absent_state (line 82) | def test_provider_destroy_uses_absent_state(): function test_ec2_destroy_uses_cloudformation (line 91) | def test_ec2_destroy_uses_cloudformation(): function test_lightsail_destroy_uses_cloudformation (line 99) | def test_lightsail_destroy_uses_cloudformation(): function test_gce_destroy_cleans_subsidiary_resources (line 107) | def test_gce_destroy_cleans_subsidiary_resources(): function test_vultr_destroy_cleans_firewall_group (line 116) | def test_vultr_destroy_cleans_firewall_group(): function test_openstack_destroy_cleans_security_group (line 123) | def test_openstack_destroy_cleans_security_group(): function test_cloudstack_destroy_cleans_security_group (line 130) | def test_cloudstack_destroy_cleans_security_group(): function test_subsidiary_cleanup_is_best_effort (line 137) | def test_subsidiary_cleanup_is_best_effort(): function test_linode_uses_label_not_name (line 152) | def test_linode_uses_label_not_name(): function test_azure_deletes_resource_group (line 159) | def test_azure_deletes_resource_group(): function test_algo_script_has_destroy_command (line 167) | def test_algo_script_has_destroy_command(): function test_algo_script_destroy_requires_ip (line 175) | def test_algo_script_destroy_requires_ip(): function test_server_yml_stores_algo_region (line 182) | def test_server_yml_stores_algo_region(): function test_destroy_playbook_validates_region_for_required_providers (line 189) | def test_destroy_playbook_validates_region_for_required_providers(): function test_destroy_playbook_loads_server_config (line 197) | def test_destroy_playbook_loads_server_config(): FILE: tests/unit/test_docker_localhost_deployment.py function check_docker_available (line 12) | def check_docker_available(): function test_wireguard_config_validation (line 21) | def test_wireguard_config_validation(): function test_strongswan_config_validation (line 52) | def test_strongswan_config_validation(): function test_docker_algo_image (line 88) | def test_docker_algo_image(): function test_localhost_deployment_requirements (line 119) | def test_localhost_deployment_requirements(): FILE: tests/unit/test_double_templating.py function find_yaml_files (line 17) | def find_yaml_files() -> list[Path]: function detect_double_templating (line 33) | def detect_double_templating(content: str) -> list[tuple[int, str]]: function test_no_double_templating (line 65) | def test_no_double_templating(): function test_specific_known_issues (line 99) | def test_specific_known_issues(): function test_valid_patterns_not_flagged (line 117) | def test_valid_patterns_not_flagged(): FILE: tests/unit/test_generated_configs.py function check_command_available (line 12) | def check_command_available(cmd): function test_wireguard_config_syntax (line 21) | def test_wireguard_config_syntax(): function test_strongswan_ipsec_conf (line 96) | def test_strongswan_ipsec_conf(): function test_ssh_config_syntax (line 172) | def test_ssh_config_syntax(): function test_iptables_rules_syntax (line 230) | def test_iptables_rules_syntax(): function test_dns_config_syntax (line 298) | def test_dns_config_syntax(): FILE: tests/unit/test_iptables_rules.py function _ansible_bool (line 15) | def _ansible_bool(value): function load_template (line 24) | def load_template(template_name): function test_wireguard_nat_rules_ipv4 (line 32) | def test_wireguard_nat_rules_ipv4(): function test_ipsec_nat_rules_ipv4 (line 60) | def test_ipsec_nat_rules_ipv4(): function test_both_vpns_nat_rules_ipv4 (line 86) | def test_both_vpns_nat_rules_ipv4(): function test_alternative_ingress_snat (line 118) | def test_alternative_ingress_snat(): function test_ipsec_forward_rule_has_policy_match (line 148) | def test_ipsec_forward_rule_has_policy_match(): function test_wireguard_forward_rule_no_policy_match (line 171) | def test_wireguard_forward_rule_no_policy_match(): function test_output_interface_in_nat_rules (line 197) | def test_output_interface_in_nat_rules(): function test_dns_firewall_restricted_to_vpn (line 225) | def test_dns_firewall_restricted_to_vpn(): FILE: tests/unit/test_lightsail_boto3_fix.py class TestLightsailBoto3Fix (line 18) | class TestLightsailBoto3Fix(unittest.TestCase): method setUp (line 21) | def setUp(self): method tearDown (line 37) | def tearDown(self): method test_lightsail_region_facts_imports (line 42) | def test_lightsail_region_facts_imports(self): method test_get_aws_connection_info_called_without_boto3 (line 64) | def test_get_aws_connection_info_called_without_boto3(self): method test_no_boto3_parameter_in_source (line 116) | def test_no_boto3_parameter_in_source(self): method test_regression_issue_14822 (line 135) | def test_regression_issue_14822(self): FILE: tests/unit/test_list_servers.py function configs_dir (line 20) | def configs_dir(tmp_path): function test_empty_directory (line 32) | def test_empty_directory(tmp_path): function test_missing_directory (line 37) | def test_missing_directory(tmp_path): function test_lists_servers (line 42) | def test_lists_servers(configs_dir): function test_sorted_output (line 50) | def test_sorted_output(configs_dir): function test_skips_empty_yaml (line 57) | def test_skips_empty_yaml(tmp_path): function test_cli_output (line 66) | def test_cli_output(tmp_path): function test_cli_missing_dir (line 83) | def test_cli_missing_dir(): FILE: tests/unit/test_openssl_compatibility.py function find_generated_certificates (line 20) | def find_generated_certificates(): function test_openssl_version_detection (line 43) | def test_openssl_version_detection(): function validate_ca_certificate_real (line 60) | def validate_ca_certificate_real(cert_files): function validate_ca_certificate_config (line 114) | def validate_ca_certificate_config(): function test_ca_certificate (line 168) | def test_ca_certificate(): function validate_server_certificates_real (line 177) | def validate_server_certificates_real(cert_files): function validate_server_certificates_config (line 221) | def validate_server_certificates_config(): function test_server_certificates (line 267) | def test_server_certificates(): function validate_client_certificates_real (line 276) | def validate_client_certificates_real(cert_files): function validate_client_certificates_config (line 324) | def validate_client_certificates_config(): function test_client_certificates (line 374) | def test_client_certificates(): function validate_pkcs12_files_real (line 383) | def validate_pkcs12_files_real(cert_files): function validate_pkcs12_files_config (line 422) | def validate_pkcs12_files_config(): function test_pkcs12_files (line 449) | def test_pkcs12_files(): function validate_certificate_chain_real (line 458) | def validate_certificate_chain_real(cert_files): function validate_certificate_chain_config (line 492) | def validate_certificate_chain_config(): function test_certificate_chain (line 524) | def test_certificate_chain(): function find_ansible_file (line 533) | def find_ansible_file(relative_path): FILE: tests/unit/test_scaleway_fix.py function load_yaml_file (line 17) | def load_yaml_file(file_path): function test_scaleway_main_uses_project_parameter (line 23) | def test_scaleway_main_uses_project_parameter(): function test_scaleway_prompts_collect_org_id (line 52) | def test_scaleway_prompts_collect_org_id(): function test_scaleway_config_has_valid_settings (line 77) | def test_scaleway_config_has_valid_settings(): function test_scaleway_marketplace_api_usage (line 94) | def test_scaleway_marketplace_api_usage(): FILE: tests/unit/test_strongswan_templates.py function mock_to_uuid (line 18) | def mock_to_uuid(value): function mock_bool (line 23) | def mock_bool(value): function mock_version (line 28) | def mock_version(version_string, comparison): function mock_b64encode (line 34) | def mock_b64encode(value): function mock_b64decode (line 43) | def mock_b64decode(value): function get_strongswan_test_variables (line 50) | def get_strongswan_test_variables(scenario="default"): function test_strongswan_templates (line 102) | def test_strongswan_templates(): function test_openssl_template_constraints (line 178) | def test_openssl_template_constraints(): function test_mobileconfig_template (line 223) | def test_mobileconfig_template(): FILE: tests/unit/test_template_rendering.py function mock_to_uuid (line 19) | def mock_to_uuid(value): function mock_bool (line 24) | def mock_bool(value): function mock_lookup (line 29) | def mock_lookup(type, path): function get_test_variables (line 42) | def get_test_variables(): function find_templates (line 48) | def find_templates(): function test_template_syntax (line 56) | def test_template_syntax(): function test_critical_templates (line 101) | def test_critical_templates(): function test_variable_consistency (line 158) | def test_variable_consistency(): function test_wireguard_ipv6_endpoints (line 187) | def test_wireguard_ipv6_endpoints(): function test_template_conditionals (line 247) | def test_template_conditionals(): FILE: tests/unit/test_user_management.py function test_user_list_parsing (line 15) | def test_user_list_parsing(): function test_server_selection_format (line 42) | def test_server_selection_format(): function test_ssh_key_preservation (line 71) | def test_ssh_key_preservation(): function test_ca_password_handling (line 98) | def test_ca_password_handling(): function test_user_config_generation (line 127) | def test_user_config_generation(): function test_duplicate_user_handling (line 149) | def test_duplicate_user_handling(): FILE: tests/unit/test_wireguard_key_generation.py function test_wireguard_tools_available (line 17) | def test_wireguard_tools_available(): function test_x25519_module_import (line 29) | def test_x25519_module_import(): function generate_test_private_key (line 40) | def generate_test_private_key(): function test_x25519_pubkey_from_raw_file (line 70) | def test_x25519_pubkey_from_raw_file(): function test_x25519_pubkey_from_b64_string (line 141) | def test_x25519_pubkey_from_b64_string(): function test_wireguard_validation (line 194) | def test_wireguard_validation(): function test_key_consistency (line 272) | def test_key_consistency(): FILE: tests/unit/test_yaml_jinja2_expressions.py function find_yaml_files_with_jinja2 (line 15) | def find_yaml_files_with_jinja2(): function extract_jinja2_expressions (line 32) | def extract_jinja2_expressions(content): function find_line_number (line 63) | def find_line_number(content, position): function validate_jinja2_expression (line 68) | def validate_jinja2_expression(expression, context_vars=None): function get_test_variables (line 161) | def get_test_variables(): function validate_yaml_file (line 209) | def validate_yaml_file(yaml_path, check_inline_comments_only=False): function test_regression_openssl_inline_comments (line 258) | def test_regression_openssl_inline_comments(): function test_edge_cases_inline_comments (line 301) | def test_edge_cases_inline_comments(): function test_yaml_files_no_inline_comments (line 364) | def test_yaml_files_no_inline_comments(): function test_openssl_file_specifically (line 387) | def test_openssl_file_specifically(): FILE: tests/validate_jinja2_templates.py function find_jinja2_templates (line 17) | def find_jinja2_templates(root_dir: str = ".") -> list[Path]: function check_inline_comments_in_expressions (line 34) | def check_inline_comments_in_expressions(template_content: str, template... function check_undefined_variables (line 69) | def check_undefined_variables(template_path: Path) -> list[str]: function validate_template_syntax (line 120) | def validate_template_syntax(template_path: Path) -> tuple[bool, list[st... function check_common_antipatterns (line 180) | def check_common_antipatterns(template_path: Path) -> list[str]: function main (line 210) | def main():