Ward,
Your Jinja templates are good, however as I mentioned earlier VpnTunnels API should be run after forwarding rule, ESP and both UDP protocols are successfully created. It seems the deployment manager is trying to create VpnTunnels independent of the creation status of other resources, therefore it throws the error.
In the meantime, as workarounds you may use
Python templates which support
time library and add some delays before creating VpnTunnel. You can also use
Operations API to fetch the status of the jobs and create VpnTunnels after forwarding rule and its protocols creation are completed. The other workaround could be creating VPN resources in two deployment baches and adding some delay between gcloud commands.
Regarding your templates, which is not related to this issue, I noticed you use network-template.jinja to create your VPN network resources, however in cluster-template.jinja a specific network (gateway) is being passed to VPN deployment templates. If not intentionally configured in this way, it will cause all VPNs networks to be the same.
I hope this helps.
Regards,
Kamran