Yes. It's actually a lot about external resources.
And the solution to managing them should satisfy three cases:
(1) Be extendable for types of data you might need to access in the future with their own peculiarities: simple external files, or entire repositories like Git, SVN, YUM, or even
Syncthing, ...
(2) Be able to switch from online mode (resources are on the network) to offline mode (all required resources are downloaded).
(3) Make it transparent your Salt states so that they access resources regardless of online or online mode. This requires an access layer abstraction which hides these details from Salt states.
Actually, the 3rd point is the key.
And it even extends beyond that to bootstrap script (before Salt is ready) - must use offline resources as well.
I'm in the same state. What eventually comes out is a framework on top of Salt:
some mandatory keys in your pillars,
some mandatory way to write states (which access external resources),
some repository with offline external resources for bootstrap per each supporting platform.
And framework always have these problems:
For those who already has substantial number of states written, It will requires rewrite them all.
For those who start from beginning, it requires learning how to use the framework (on top of learning Salt).
So, I'm not in a hurry to opensource (it's hard, and probably useless due to all these issues).
Wish
Then I start hoping that somewhere in distant release of Salt there could be a built-in support for this.
The idea is that all attempts to access external resource may go through a module which is able to map from online to offline locations depending on the mode.
This will remove a need for framework and become a pure Salt feature.
And I believe this is much more useful than just full offline.
Unavailability of some parts of resources (i.e. proprietary ones in company's networks) is likely common case for many.
And the need to map only some specific resources from online to offline depending on deployment environment can be pretty general.
Unfortunately, I don't see simple solution here.