No problem: target has checkzone and checkconfig (out of memory) and only does sudo cp <editlocation> <reallocation>; git commit -a .... if everything seems basically fine...

Complex deployment?

No problem record it in a Makefile

I've pretty much used Makefiles anywhere where a script would have been appropriate also. Acutally I combine them, /usr/local/[s]bin/ is where the "single step" scripts are and the Makefile is in the working directory of the service in question.

Actually I have used them a lot more for the above reasons than for build systems - that is if you don't count latex and builds from upstream.

actuall I don't :) - I've long ago abandoned bind because of the syntax. I'm using either tinydns or powerdns both of which I find a lot better than bind :) -- I just remembered it because typos in the zonefiles where a really common pitfall
–
Server HorrorJun 24 '09 at 17:40

I used makefiles to handle XML transformation from DocBook sources. That way I could pipeline all of the commands and do "make pdf" or "make wordml" from the same source depending on who the intended audience was.

Nothing really. I find Makefile syntax to be horrible for most day-to-day tasks and I try to only interact with Makefiles when absolutely necessary. For system administration tasks, I don't see what they offer over a Bash or Python script. For building software, there are better build systems out there.

i don't see how a bash or python script would understand dependencies or if a file has actually been produced at an intermediate step without writing all these checks by hand
–
jermdemoFeb 1 '12 at 15:36

I've used it to "print all notes since last printing" in a random notes directory:

printflag: *.txt
printcmd $?
echo "printcmd $?" > $@

I echoed the command into the flag file so I could just ". printflag" to reprint the same set if need be;

to maintain DNS / DHCP / etc. :

edit hosts.dat # maintain single file with all relevant info
make # work copies for visual check, diffs, etc., if needed
make install # put into deploy-from-here location
make deploy # push changed files to servers
make restart # restart appropriate server processes here and there

(or just "edit hosts.dat; make restart" for the foolishly brave)

and as a quick and dirty way to generate manual scripts for procedures -- that is, just use pseudo targets and have the makefile commands echo something along the lines of "do step Foo" -- when you need something more sophisticated than tsort