ansible.cfg, site.yml, roles/).gitignore (inventory files, credentials, users.yml, output/)inventory/hosts.yml.example with servers, snell, trojan groupsgroup_vars/all.yml with base variables and Python interpreter settingusers.yml.example with trojan_users list templatecredentials/ directory placeholder with .gitkeepREADME.md with project overview and usage instructionsroles/base/)roles/base/tasks/main.yml with package installation taskroles/snell/)roles/snell/tasks/main.yml with Snell binary download and install taskroles/snell/templates/snell-server.conf.j2 with listen, psk, ipv6 settingsroles/snell/templates/snell.service.j2 systemd unit filecredentials/snell_psk lookuproles/trojan/)roles/trojan/tasks/main.yml with trojan-go binary download and install taskusers.yml loading via include_vars at playbook levelroles/trojan/templates/config.json.j2 with multi-user password arrayroles/trojan/templates/trojan-go.service.j2 systemd unit with CAP_NET_BIND_SERVICEsite.yml with plays: bootstrap, base (all), snell (snell group), trojan (trojan group)include_vars for users.yml in the Trojan playansible_python_interpreter: auto_silent to group_vars/all.ymlansible-playbook --check to validate syntax and task structure.gitignore covers all sensitive files (credentials/, users.yml, inventory/hosts.yml)