Re: Large-scale configuration backup with GIT?
From: Junio C Hamano <hidden>
Date: 2016-06-15 22:43:32
Jan-Benedict Glaw [off-list ref] writes:
I'm just thinking about storing our whole company's configuration into GIT, because I'm all too used to it. That is, there are configuration ... In both cases, I'd be left with a good number of GIT repos, which should probably be bound together with the GIT subproject functions. However, one really interesting thing would be to be able to get the diff of two machine's configuration files. (Think of machines that *should* be all identical!) For this, it probably would be easier to not put each machine into its own GIT repo, but to use a single one with a zillion branches, one for each machine. Did anybody already try to do something like that and can help me with some real-life experience on that topic?
This is something similar to what I and others in my group did
long time before git was even invented. I'd suggest you go in
the opposite direction.
If you have 5 configurations, each of which have 20 machines
that _should_ share that configuration (modulo obvious
differences that come from hostname, IP address assignment,
etc), then
- You keep track of 5 configurations; in git, you would
probably maintain them as 5 branches.
- You have a build mechanism to create systemic variation among
20 machines that shares one configuration; this can be
different per branch. So if you have 20 solaris machines all
should share logically the same configuration, you would:
$ git checkout solarisconf
... tweak the config for machine #27, adjusting for
... hostname, IP address variation, etc...
$ make target=solaris27 output=../solaris27.expect
Make that makefile produce the output in named directory;
- You get the config dump from your machines (your "staging
area"), as you planned. Then after running the above, you
could:
$ cd ..
$ diff -r solaris27.expect solaris27.actual
if your "staging area" for machine #27 is "solaris27.actual".
The difference you would see is something done by *hand* on the
machine, which you would want to propagate back to the solaris
configuration *source* you keep track in git. For some changes,
you may even want to adjust that single manual change done on
machine #27 so that you do not have to do that on other 19
solaris boxes manually, by adjusting the build procedure in the
solarisconf branch.