Its a poor craftsman that blames their tools
So you decide that you want to automate all the things, but where to start and with what tools? There are two types of tooling. UNIX style and Monolithic. The two are polar opisits
The Linux/UNIX/*nix thinking is to make one program or tool to do a job and do it well. A different need means different tool. Then use multiple tools in concert to achieve your task. Think tools in a tool box versus a multi-tool. Sure it can be a pain to keep track of the different tools in your tool box, but you’ll get more use out of all those different tools. It also means your tools are modular and interchangeable. Using brand X tap, Y screw driver, and Z screws aren’t mutually exclusive if they meet the same specs.
You could go with a monolithic all in one tool, but just like the “As seen on TV” Wunder Awesome Tool™ you got from your well intentioned Aunt Rose, it might do one or two things ok and everything else will be a disaster. If you don’t like the WunderTool™ works, good luck changing the part that doesnt work.This is how the WunderTool™ ends up in the garage under your 8 track player and matching Alice Copper tapes.
So here’s the tools I keep in my toolbox, what the do, where to get them, and why. Generally I expect my tools to be cross platform and preferable open source when applicable. While these are just suggestions, I will say that Git should be considered mandatory. It’s just that essential to success.
Managing text files, and the revisions to them can e a huge pain. Git is the tool for managing this. Its fast and decentralized. forget about naming files config-old version.3.conf.bakup.real backup.bk. You let git track the history in git, see the changes, who made them. While git doesn’t require a repository server Github/GitLab/BitBucket/etc, they really unlock the real power of git.
Git for managing source code is awesome. Git for text files is awesome. You should have a place put keep your git repo. I got started with Bitbucket fir their private repos. The thing I find to be a plus is that things like project management is a separate tool that can be integrated. That and I have taken to some of the other tools in the Atlasssian suite.
I have nothing against Github, just haven’t really worked it enough to have an honest opinion.
I’ve also spent a good amount of time working with Gitlab. They were the one that made it easy to have on premises git server. The Runners are pretty solid to have a vm do things when you commit and/or merge code into the repo. The fancy name for this is CI/CD pipeline. As we know, computers are good at repetitive tasks, and one repetitive task they should do is to Do Things with your files once they get merged in. Developers use this to build and deploy their software projects.
One thing I count as a negative, is they bake in all the project management stuff. While its great to have it all in one place to start, it may not meet your needs. That, it violates our “Make a tool to do one job, and do it well” rule.
Its half text editor, half light weight IDE for some languages. It doesn’t get into my way while i’m working in various languages and file formats. It also has a half decent git gui built into it so you don’t have to drop out of the tool commit your changes. Its a hard fork of the Atom Editor. I also heard lots of good things about sublime.
This is engine to push out your automation to your boxes. It uses YAML, a simple mark up language to execute tasks on remote systems. It has no agents to install; as well as a love for using SSH and API’s to effect its change. You get a list of simple tasks to do thing with modules designed to check if the change is emplace, and if not, make it happen. While you give up the flexibility found in Python, Powershell, Perl, etc…. You get easy read, easy to implement code.
You’ll need VM’s. Some VM’s are persistent, others are disposable, I use Virtual Box for my disposable VM’s. If you need a persistent VM, this tool will do it. It just kills me to recommend a tool from Big Red, since they are so antithetical to the Open Source mentality. You’re on Windows, Hyper-V is also an option. But I have no idea how it plays with the next tool.
Vagrant is a tool for managing disposable VM’s. Two things that will help you on your automation journey is the abilities to iterate quickly, and to fail safely. Vagrant will manage your virtualization tool to make standing up and tearing down easy. You define what them vm will look like (including OS) and what script / automation play to configure it; then
vagrant up, and watch your vm come up. try your operation. Want to try it again because you screwed up or you just want to verify things are as you expect….
vagrant destroy -f && vagrant up. Just remember, you’re not using it with anything you want to keep around.
NRE Labs is a place to learn and try the tools in a network centric universe. All you need is a browser, time, and an open mind. While it has a very heavy juniper slant, that’s understandable since they are footing the whole bill with no real advertising, pay walls, logins, etc.