<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: schnipdip</title>
    <description>The latest articles on DEV Community by schnipdip (@schnipdip).</description>
    <link>https://dev.to/schnipdip</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F249108%2F357327e7-9878-485d-af5c-3c5b142c5b29.jpeg</url>
      <title>DEV Community: schnipdip</title>
      <link>https://dev.to/schnipdip</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/schnipdip"/>
    <language>en</language>
    <item>
      <title>Raisensu: A Lightweight License Management Application</title>
      <dc:creator>schnipdip</dc:creator>
      <pubDate>Sun, 13 Sep 2020 18:30:55 +0000</pubDate>
      <link>https://dev.to/schnipdip/raisensu-a-lightweight-license-management-application-l1p</link>
      <guid>https://dev.to/schnipdip/raisensu-a-lightweight-license-management-application-l1p</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kRdDXqTx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/tmpcs74fylsnyvq0e2al.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kRdDXqTx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/tmpcs74fylsnyvq0e2al.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hello! I want to brag about a little application I wrote called Raisensu. Raisensu is a lightweight license management solution that allows System Administrators to track licenses in a small to medium sized enterprise. &lt;/p&gt;

&lt;p&gt;The idea behind Raisensu was pretty simple - not every application needs a full stack front end web application with a robust and complex backend. Raisensu is lightweight in the sense it operates purely at the commandline level. It supports High Availability between monitoring services (Linux only). Raisensu has the capability of being pure stateless or a stateful application. &lt;/p&gt;

&lt;p&gt;The backend is pretty simple. A single table is used to store licenses. Raisensu supports two backend databases: SQLite3 and Postgresql. &lt;/p&gt;

&lt;p&gt;It's easy to get started with Raisensu; it only takes a few commands! &lt;/p&gt;

&lt;p&gt;Raisensu is supported on both Linux and Windows. The benefit to running on Linux is having High Availability support with the monitoring tool. A service file can be created easily to enable HA.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/schnipdip/Raisensu"&gt;https://github.com/schnipdip/Raisensu&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As a note, I'm not a programmer by trade. I develop small applications to keep up with basic knowledge and terminology for future expectations in my job. If you see any bugs or want to add something please open up a feature. If you want to contribute you can issue a PR.&lt;/p&gt;

&lt;p&gt;I hope this application can serve you well :) &lt;/p&gt;

</description>
      <category>python</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Automating debug removal for Ansible YAML code with Bugspray</title>
      <dc:creator>schnipdip</dc:creator>
      <pubDate>Mon, 27 Jul 2020 05:03:39 +0000</pubDate>
      <link>https://dev.to/schnipdip/automating-debug-removal-for-ansible-yaml-code-with-bugspray-24mc</link>
      <guid>https://dev.to/schnipdip/automating-debug-removal-for-ansible-yaml-code-with-bugspray-24mc</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F5z3vponga5zsv89e104r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F5z3vponga5zsv89e104r.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Backstory&lt;/strong&gt;: I wanted to learn more about the philosophy behind debug in production and development. I am not a programmer by nature, so understanding the implementation of debug was a foreign concept to me. I researched and researched on best practices for implementing debug into production. The answer I got - "it depends". There is no one way to properly implement debug. It comes down to what your enterprise requirements are. Some programmers leave in non-intrusive and non-sensitive debug in production code. Some programmers believe all debug should be removed from production.&lt;/p&gt;

&lt;p&gt;I designed a small application to fulfill the needs of having to mass remove or selectively locate useful debugs.&lt;/p&gt;

&lt;p&gt;The program I came up with is called &lt;strong&gt;&lt;em&gt;Bugspray&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/schnipdip/Bugspray" rel="noopener noreferrer"&gt;https://github.com/schnipdip/Bugspray&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Bugspray allows you to automate the mass removal of debug code from YAML files or you can selectively keep debug within your code. This reduces the amount of time needed to refactor your code when moving from dev to ops. It fits nicely within the devops pipeline.&lt;/p&gt;

&lt;p&gt;So whatever your enterprise requirements, Bugspray can help!&lt;/p&gt;

</description>
      <category>ansible</category>
      <category>python</category>
      <category>linux</category>
      <category>yaml</category>
    </item>
    <item>
      <title>Python: Subprocess or Paramiko?</title>
      <dc:creator>schnipdip</dc:creator>
      <pubDate>Tue, 22 Oct 2019 00:45:17 +0000</pubDate>
      <link>https://dev.to/schnipdip/python-subprocess-or-paramiko-1mf</link>
      <guid>https://dev.to/schnipdip/python-subprocess-or-paramiko-1mf</guid>
      <description>&lt;p&gt;Has anyone done a performance test on either of these for SSH? From what I have read, subprocess seems to perform better&lt;/p&gt;

</description>
      <category>python</category>
    </item>
    <item>
      <title>Making a Windows Python Application to Manage Linux Ansible</title>
      <dc:creator>schnipdip</dc:creator>
      <pubDate>Wed, 16 Oct 2019 21:59:13 +0000</pubDate>
      <link>https://dev.to/schnipdip/making-a-windows-python-application-to-manage-linux-ansible-1502</link>
      <guid>https://dev.to/schnipdip/making-a-windows-python-application-to-manage-linux-ansible-1502</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Purpose
&lt;/h2&gt;

&lt;p&gt;The purpose of this project is to control a Linux Ansible controller through Windows. &lt;/p&gt;

&lt;h2&gt;
  
  
  Idea inception
&lt;/h2&gt;

&lt;p&gt;The original idea originated from this trying to automate an IDAM solution called BeyondTrust. BeyondTrust wasn't meant to be automated, so it was a pretty daunting task through Ansible. &lt;/p&gt;

&lt;h2&gt;
  
  
  Proposed Solution
&lt;/h2&gt;

&lt;p&gt;I wanted to create a solution for dumb users who aren't familiar with the Linux environment and for those who aren't familiar with Ansible. I wanted to create a Windows solution, since most people are familiar with Windows and know how to double-click an executable.&lt;/p&gt;

&lt;h1&gt;
  
  
  Why Python?
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Libraries
&lt;/h2&gt;

&lt;p&gt;One of the main reasons I love using Python is for their extensive library selection. I know that if I have thought of something I want, someone has most likely already found a solution.&lt;/p&gt;

&lt;p&gt;The libraries I am using are located below:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;br&gt;
import tkinter&lt;br&gt;
import configparser &lt;br&gt;
import sys &lt;br&gt;
import logging &lt;br&gt;
import paramiko &lt;br&gt;
import os&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Previous knowledge (familiarity)
&lt;/h2&gt;

&lt;p&gt;I often think it's important to use something you are familiar with. There may be a better tool that does more and has more bells-and-whistles. However, it's important to stick with what you know, especially in a time sensitive situation. I could have easily learned a better language for application development. I'm sure there are better systems out there that are more efficient, require less code, consume less resources, etc. It was important for me to stick to my guns, Pythons. One of the requirements I self-imposed was a 3 week deadline. I felt 2 weeks was too fast and 4 weeks prolongs it and promotes procrastination. I wanted to avoid both situations; I felt that 3 weeks was a good medium. Being able to resort to Python, knowing that whatever I encounter Python has an answer.&lt;/p&gt;

&lt;p&gt;Python also has an extremely large community. From what I have seen on Reddit and Stackoverflow, much more helpful too ;) &lt;/p&gt;

&lt;h1&gt;
  
  
  Resources Used
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Hosting and Collaboration Tools
&lt;/h2&gt;

&lt;p&gt;I will be utilizing AWS cloud services to help accomplish this project. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS EC2&lt;/li&gt;
&lt;li&gt;AWS Cloud9&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For code management and versioning I set up a Github private repository.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Help
&lt;/h2&gt;

&lt;p&gt;So I knew I couldn't accomplish this project on my own within the time frame I set. So I crowdsourced for help. Two other people are working on this project with me. I don't know them, but I have to give them proper credit because without their help this project would never have gotten done.&lt;/p&gt;

&lt;h2&gt;
  
  
  Python IDE (KISS)
&lt;/h2&gt;

&lt;p&gt;The IDE I chose to work with is the Python IDE. I like to follow a simple philosophy - Keep It Simple Stupid (KISS). Keeping my working environment as bare bones as possible allows me to learn and understand what I am doing more, because I am at the wheel. It's like driving a manual compared to an automatic. Both are great and have their benefits, choose what fits you. &lt;/p&gt;

&lt;p&gt;I remember being made fun of by my college professors in my Java 101 class for using JGRASP, jokes on them - I got a B.&lt;/p&gt;

&lt;h1&gt;
  
  
  Concept Design and Thoughts
&lt;/h1&gt;

&lt;p&gt;The first design was based around the BeyondTrust stack. It was intended to just call an Ansible playbook based on the selections made. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vgZOeJxu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/bp1fnyu3kwsqtslpplgz.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vgZOeJxu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/bp1fnyu3kwsqtslpplgz.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This design would work really well for a single product deployment. The problem is that it doesn't follow any good dynamic design principles. It's extremely linear and doesn't allow for expandability. &lt;/p&gt;

&lt;p&gt;The next design concept takes all of that BeyondTrust stuff and chucks it out the window. Instead of focusing on one product, why not allow the user to execute any playbook the way they wanted to using Linux syntax? &lt;/p&gt;

&lt;p&gt;This is where I believe the final iteration of the product will end up. This design allows the product to be more dynamic and not locking it into a single use case. &lt;/p&gt;

&lt;h1&gt;
  
  
  Sharing Code
&lt;/h1&gt;

&lt;p&gt;Creating an Ansible Hosts file based on system type and service. Note: this isn't final, but it provides a general understanding on how to create a more dynamic inventory based on the service you want to the target hosts.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4w0LlZSP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/xgczb3vb9ybetp7pejid.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4w0LlZSP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/xgczb3vb9ybetp7pejid.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JYa1SsuR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/q2q035234lnqjlmktcxv.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JYa1SsuR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/q2q035234lnqjlmktcxv.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Reminder
&lt;/h1&gt;

&lt;p&gt;I want to remind everyone this project is still in progress. I am looking for help if anyone would like to contribute.&lt;/p&gt;

</description>
      <category>python</category>
      <category>windows</category>
      <category>ansible</category>
      <category>linux</category>
    </item>
  </channel>
</rss>
