Most Recent Posts
Dynamic vim Templates
Vim (or vi in the anceint past) has been my partner in getting things done. Like an rich tool it has lots of features that go untapped or undiscovered. A few days ago I decided I wanted a script within a tempate to help build the “front matter” to my markdown (.md) files.
The front matter looks like this:
+++ author = "" comments = true date = "2018-07-15 14:45:19" draft = false image = "" share = true # slug = # tags = [ "tag1", "tag2" ] title = "vim_scriptable_templates" +++
The challenge was to have vim write in the date for me in the needed format. And if you use hugo as your static web site generator as I do you may have found that it will silently ignore a new markdown file if the date is not formated correctly. It some testing to discover that but the bottom line is that I needed a way to script it for to avoid mistakes.
Research to me to this tip source: vim embedded scripts
Python Fabric is a denatured version of ansible and, if you enjoy python, fabric makes a small scale devops strategy a whole lot less painful. Combined with hugo static website generator, fabic makes testing and promoting a website a whole lot easier.
I have struggled in the past with one challenge that made promoting website code from my workbench to dev, staging, and ultimately production tricky. The matter of URL always played havoc when I sent code up from one server to another for testing. Hugo offers a simple solution. When I promote website code it goes through this workflow process:
Fabric vs Ansible
I have wrestled with ansible for too long. It is an awesome tool but you need to learn the syntax of three different languages (ansible, yaml, and maybe some python) to hold it down and control it. Every time I go to use it I have to learn how to do what I need to do. But the most frustrating aspect of ansible when learning to do something new is that your first attempt rarely succeeds - at least for me. So you resort to “force programming” to get through it. By “force programming” I mean you try this and that and then something else until it works… and I end up with a hodgepodge of debug lines commented out.
Following the bunny trail to find an alternative, I ran across python “fabric”. I am a committed python code minion. So much so lately, that I have converted many of my bash scripts to python. But all that is a different topic for a rainy day. Put ansible away in a dark closet somewhere and start using fabric. If you are starting out with fabric or going to explore it now, don’t just type “how to use fabric” in your search engine because the obvious will happen. So precede your mention of “fabric” with “python”… so “how to use python fabric”.
Using pip you can install fabric. Python fabric is a module that comes along with a python tool called “fab”. The “fab” tool will
also be available. If you run
fab -h you will see a healthy list of options/arguments. Don’t let that put you off. A working
knowledge of python is all you need to master fabric. The fabric module is designed to provide you with ssh tools out of the box. It allows running
any process remotely or locally, without any headaches. If you have been using ansible, then this exercise will be a little like
subjecting a Windows user to the linux command line (well maybe not quite that bad).
Here’s a quick one-liner:
fab -H rpi01,rpi02,192.168.1.40 -- df -h
Pretty obvious… until it fails. If one of those hosts is down this process will break. The fab tool by default looks for a file called fabfile.py. So lets create a simple one to overcome the failure problem just mentioned.
Write a file called fabfile.py You can use any filename but we are sticking with the default.
from fabric.api import run,settings def df_h(): with settings(warn_only=True): run('df -h')
To run this:
fab -H rpi01,rpi02 df_h