salt '*' state.highstate
always applies all states to your minion. It depends on your states why it takes quite a while until highstate returns.
It is possible to organize the deployment by using seperate states for each venv. Individual states can be applied like that:
salt '*' state.sls venv1
A simple salt tree might look like this.
.
+-- salt
| +-- _prereq.sls
| +-- venv1.sls
| +-- venv2.sls
| +-- top.sls
If you need stuff to be done as prerequisite for each venv in the same way you might use something like that:
_prereq.sls
install_something:
pkg.installed:
pkgs: ['foo', 'bar']
venv1.sls
include:
- _prereq
myvenv_state:
virtualenv.managed:
- system_site_packages: False
- requirements: salt://requirements.txt
- require:
- sls: _prereq
I prefer to be able to highstate my minions without thinking about it, so i try to avoid addressable states. But it might fit your needs.
You might also want to have a look at salt.states.virtualenv