As mentioned by Chaoxiang, containerize it.
Docker is also available for Mac so that's a way. For linux there's docker, kubernetes, lxc. Windows has docker as well but I'm not sure how well that works. You should be able to use the windows Sandbox too but then all data is gone once you shut it down and that may not be what you want.
So, more than enough ...
I understand that I could just run shell commands using Ansible on all
servers, but I don't think it is really good solution
Which would imply some kind of Vagrant-aware Ansible module. I am not aware of any shipped with Ansible; you could write one. Or, settle for shell commands and run Vagrant with Ansible command module.
ansible-pull is an example ...