Antonio Abella
Senior DevOps Engineer at SmartBear Software
Sr DevOps Engineer at SmartBear Software
Eager to face new and exciting technical challenges. With a focus on the world of Linux/*nix and containerization, I dream of one day working on projects that will leave lasting and positive change in the world. As a life-long techie, my experience in the IT space stretches back to my childhood. When I envision the future of my career, I don't see just a job. I see myself applying my skills and passion to a subject I've always loved.
SmartBear Software
https://www.linkedin.com/company/smartbear
Coconut Creek, Florida, United States
https://media-exp1.licdn.com/dms/image/C4E0BAQHvcaaw3m3gUw/company-logo_100_100/0/1633542767627?e=1655942400&v=beta&t=hOG3sZeUqPKIGoTBJQObCO8LovfnWfXCF7VzGbMHkdg
Senior DevOps Engineer
SmartBear Software
https://www.linkedin.com/company/smartbear
Coconut Creek, Florida, United States
https://media-exp1.licdn.com/dms/image/C4E0BAQHvcaaw3m3gUw/company-logo_100_100/0/1633542767627?e=1655942400&v=beta&t=hOG3sZeUqPKIGoTBJQObCO8LovfnWfXCF7VzGbMHkdg
Junior DevOps Engineer
Inktel Contact Center Solutions
https://www.linkedin.com/company/inktel
Began as a Desktop Support Specialist but was quickly entrusted with Linux Administration tasks in addition to Exchange- and Active Directory-related responsibilities. Automated Windows and Linux administration tasks with PowerShell, bash, and Python scripting. Linux Administration duties included server maintenance, deployment of new servers, designing and deploying new systems and services, and more.
Miami/Fort Lauderdale Area
https://media-exp1.licdn.com/dms/image/C4E0BAQF6i9ckY2SLZw/company-logo_100_100/0/1621539262805?e=1655942400&v=beta&t=UwunTuSq1IKJGlU9rEJPLjSj816qFGpJA_YWZj0iKwQ
Junior System Administrator
Information Technology Services
Hardware and software troubleshooting of consumer desktop and laptop PCs.Troubleshooting of consumer-grade networking devices on and off site. Sourced parts and built desktop PCs based on client needs.
Miami/Fort Lauderdale Area
IT Support Technician
Bachelor's degree
Information Technology
https://media-exp1.licdn.com/dms/image/C560BAQEVMx6tBKgu4g/company-logo_100_100/0/1607460696992?e=1655942400&v=beta&t=RM2gO4XdPQI3yLqrZ8MZBdZ5F8zM7QiuF23DRxTQI6U
Florida International University
https://www.linkedin.com/school/florida-international-university/
Our development team grew to a point where our existing handful of Docker dev and QA environments became a bottleneck and started causing contention over feature deployments. In the past with a smaller team, it was uncommon for two or more developers to be simultaneously but separately working on the same microservices. To deal with this, I was tasked with finding a way to grant developers on-demand, dynamic, individual environments within the development Swarm cluster. Accomplishing this required every tool in our team's arsenal; Terraform, Python, Groovy, MySQL, Ansible, shell scripts, Makefiles, InfluxDB, and Jenkins came together like Voltron to build a system that could:

* Provision and assign individualized AWS infrastructure
* Tag all resources for cost analysis per-environment and per-user
* Isolate Docker image builds to avoid poisoning each other's build caches
* Support any size deployment, from individual microservices to full stack
* Dynamically modify container environments as neighbor services are spun up or down
* Alert on deployment inactivity to ensure against abandoned environments

The centerpieces that made this system possible are the Terraform external datasource which enabled infrastructure configurations to be fetched and generated from a centralized MySQL environment metadata table, the Ansible docker_swarm and docker_node modules with which EC2 instances could be dynamically added to and removed from the Swarm, and the Jenkins Extended Choice Parameter plugin with which complex forms could be presented to users for fine-grained control over environment configuration.
Transient environments for Docker Swarm
Many aeons ago, my organization managed an internal git server for all our team's source code. Eventually a decision was made to migrate to GitHub, starting first with new repositories and then later transferring existing ones. All went well until they got to the last and most critical of all the repositories--a 20+ year old behemoth that itself started life as a migrated Subversion repository. Over the decades, users had made the poor decision to check in large binaries. These binaries were eventually removed, but once they're in git history the binary content is checked in forever, taking up space. GitHub imposes a limit on repo import of a maximum 3 GB repo size and 100 MB maximum checked-in file size--our repo exceeded both.

I presented two potential solutions--adopt Git LFS, performing a migration of binary files in history to LFS using git-lfs-migrate, or simply strip all large files from history using BFG Repo Cleaner. Migrating to LFS would preserve git history but incur a storage cost on GitHub, whereas using BFG Repo Cleaner would alter historical commit IDs as all commit hashes would have to be recalculated after the content was removed from history. We decided that, given our relatively small team, altering history was not a deal-beaker and we could simply all re-clone after the repository was cleaned up. In the end, BFG Repo Cleaner shrunk the repository to around 450 MB, a nearly 90% decrease in footprint.
Trimming git object history for critical repositories
Our team has long-used docker-compose to manage container workloads, writing compose files in the compose v2 format. I was tasked with migrating us to Docker Swarm Mode which exclusively uses compose v3. I was immediately concerned with the implications of maintaining two separate compose files per environment and the potential that creates for configuration drift, so instead I chose to develop a tool to translate a given compose file in the v2 format to v3. This way, we would continue to use the same v2 files we always had, and the deploy pipeline would automatically convert the file to the required format at deploy time.

Initially I thought this would be a straightforward case of renaming certain yaml keys, or trimming unneeded deprecated configurations. As I began though, I realized that our organization made heavy use of the depends_on and extends features of compose v2 that had been deprecated with no equivalent or replacement as of version 3.8. The challenge then became to find a way to replicate the behaviors v2 offered during translation.
Convert Compose v2 to v3
If you simply google the title above, you'll see very many people asking how to accomplish this task. The demand is so great that it's honestly amazing that Docker have not extended the docker logs command to support multiple containers. Even docker-compose logs will output a stream of logs from all containers defined in the compose file! It seems to be an obvious use-case to everyone but Docker themselves. So to right this wrong I created a tool for myself that streams multiple container logs directly from the Docker API. I placed a hard limit of eight simultaneous streams in case this much concurrency could be a problem for the API, though I've done no testing or research to see if this is even the case.
Parallel docker logs for multiple containers
https://github.com/a-abella/docklog
Time-series data is at the heart of the application I support. Our teams' primary customer-facing product is (for the most part) a series of dashboards and reports displaying metric data backended by InfluxDB. One day one of our QA engineers was expressing that it would be easier to compare the functionality of charts and graphs across different code versions if they were always rendering the same data, regardless of when the comparison was being done.

I took it upon myself to write a tool that could output a consistent metric set to an InflxuDB instance for any arbitrary window of time. Using this tool, the QA team could eliminate variability in data and perform more consistent testing. Eventually I would like to extend this tool to output data for other commonly used time-series databases, like Prometheus and Graphite.
InfluxDB sample data generator
Our team was looking for a way to aggregate and report on certain API usage metrics which we could only retrieve from Docker-based HTTP logs. I had previously implemented Docker log aggregation with Filebeat and Elastic Cloud. One of the features of Elasticsearch is the ingest pipeline where you can define parsing and mutation rules for inputs prior to indexing. Many people use Logstash as part of the "ELK stack" for this purpose, but it's less commonly known that parsing and mutation can also be done on Elasticsearch itself, making use of existing compute and reducing complexity in the logging stack.

I took the existing NGINX log ingest pipeline (provided by Filebeat) and extended it to grok out the query string pattern from the request URL. Once I had the query string separated, it could be split on the & character and each key-value pair could be loaded into the index using the kv processor. This made possible aggregation queries to the effect of `select count(requests) where url.fields.time_range is not NULL group by url.fields.time_range`. The resulting data from this example would be very valuable for determining platform improvements, like optimizing web server cache time and InfluxDB shard group durations.
Elasticsearch HTTP log query string indexing
Much of modern operations is based around automation. Monitoring and observability are all very important, but if a person has to react and intervene on monitoring alerts then that person becomes a bottleneck. Eventually it was realized that if procedures and remediations could be defined for operators in runbooks, then there's no reason that runbook couldn't be executed automatically--this gave birth to tools like Rundeck.

We use many different monitoring tools internally. One of these tools is Zabbix, a MySQL-based system monitoring suite. We like Zabbix for its flexibility--absolutely any arbitrary data that you can generate at a shell prompt can be regularly collected and monitored by Zabbix without the same kind of cardinality issues that would affect most time-series based monitoring tools. An extension of this capability is Zabbix Actions; the same way arbitrary shell commands can be executed on remote hosts to collect data, arbitrary shell commands can be executed when trigger conditions are met. Assume a trigger that fires when a process $p dies, an Action can simply start $p.

There was one problem to overcome with this: preventing Zabbix from interfering with an operator. If for whatever reason an operator was intentionally making changes that could trigger alerts, we didn't want Zabbix to then be simultaneously firing off commands, causing confusion and inconsistency. So a crucial requirement was to implement some form of idle session detection--if users were logged in and not idle, then Zabbix should never execute actions on that machine. If there were no sessions or idle sessions, then Zabbix could go ahead and take its remediation steps. We parse the w command for idle times, which counts time since the user's last keystroke.
Zabbix problem auto-resolution
I came into a new role as a DevOps Engineer at SmartBear, working on an application with some pretty unique infrastructure challenges. In addition to a fairly standard AWS technology stack, my team had to manage a fleet of about 300 additional servers located in around 30 different countries around the world hosted in all manner of ways--colocations, dedicated server providers, VPS services, and larger cloud providers. This situation disallowed the "cattle, not pets" philosophy that is promoted in modern DevOps and SRE.

Idempotent infrastructure for these 300-ish servers was not possible since we had no direct control over system images or ad-hoc infrastructure deployments. Given the restriction imposed by the underlying infrastructure, Ansible was the primary tool used to align systems with as much identicality as we could manage. To that end, Ansible dynamic inventory provided a very powerful way to centrally configure Ansible-managed hosts.

Fortunately for us, our application already relied on a MySQL server inventory table that we could leverage for Ansible inventory. A host_type field mapped directly to Ansible host groups, and a delimited string of feature flags could be passed as an array hostvar enabling conditional execution of tasks. With these already in-hand, all that was needed was a script to format each host row into Ansible inventory-compatible JSON.
Ansible dynamic inventory
https://github.com/a-abella/dynamic-inventory
Detecting suspicious activity through inode monitoring with inotify-tools. Watches hidden directories filled with honeypot text files at the top of a volume. When ransomware recursively attacks a volume, this hidden folder will be attacked first. When a set threshold of files gets modified or deleted (as notified by inotify),  an alert is sent out. If the monitored volume is a network storage location, the alert will include instructions to terminate the suspected compromised connection.
Ransomware detection with inotify()
https://github.com/a-abella/ransom-alarm.sh
Reengineered aged network file share by designing and building secure Samba-share-based DFS Namespace for per-department storage. Developed to enhance the resiliency of network storage solutions against ransomware events and network intrusion. Extras: self-made intrusion detection alarms using random inode monitoring, python-automated share configuration utility.
Samba-based DFS Namespace network share redesign, intrusion detection, configuration automation
A "public" (Inktel.Wiki) and "private" (it_docs) set of MediaWiki-based sites for company documentation. LDAP authentication provides access control to sensitive materials. Inktel.Wiki contains articles deemed safe for public employee knowledge. it_docs holds internal IT documentation. Served via a single web server with asset sharing, but with two separate wiki DBs to maintain a secure physical separation of sensitive data.
Inktel.Wiki and it_docs - Centralized and domain-integrated documentation
A self-hosted, secure, and auditable Chat solution for all intra-company communications. Based on the RocketChat open source project. Intended to replace third-party solutions like Hangouts and Slack in the workplace while keeping to a high standard of security. Project includes a Chat server, web application, desktop applications for Windows, Mac, and Linux, and mobile apps for Android and iOS.
Inktel.Chat - self-hosted Chat and Messaging platform
https://chat.inktel.com
A Samba network share hosting software installer packages with batch, Powershell, and VBscript installation and configuration scripts. Designed to centralize and synchronize software package sources among various technicians for use with AdminArsenal PDQ Deploy. Also a self-hosted method to restore some missing functionality from the PDQ Deploy free license.
Remote Windows software deployment repository with Samba and PDQ Deploy
A portal website for a World of Warcraft raiding guild, written and designed in CSS3, JavaScript/JQuery, and PHP. Also a seperately developed mobile site at m.cv-guild.com. https://github.com/a-abella/convictionguild ||| https://github.com/a-abella/convictionmobile
Warcraft Guild Website
http://www.cv-guild.com
A personal website holding a quick overview of myself as a hopeful professional, some of my past projects, and an easy way to distribute my resume. https://github.com/a-abella/antonioabella.com
Personal Website
http://www.antonioabella.com
A multi-role CentOS 5.11 installation serving PBX, printing, DHCP, DNS, mail, logging service, web/php, SaltStack configuration management, xRDP, Samba, IRC chat, and more.
CentOS Multi-Function Server
https://github.com/a-abella/centos-server
-
Kaseya Certified Technician
https://www.linkedin.com/in/anna-mayumi
Gainesville, FL
Anna Mayumi
University of Florida
https://ca.linkedin.com/in/vijayakumar-subramaniyan-41615a132
Greater Toronto Area, Canada
Vijayakumar Subramaniyan
Solution Architect at Digitate - Tata Consultancy Services
https://www.linkedin.com/in/gabriellaaraujo2
Gainesville, FL
Gabriella Araujo
FIRST Robotics Volunteer | Aerospace Engineering Student at the University of Florida.
https://www.linkedin.com/in/osmelf
Gainesville, FL
Osmel Fernandez
I want to develop space exploration technology, spacecrafts, and manage projects that will get humanity further into space.
https://in.linkedin.com/in/gauravpawar007
Pune
Gaurav Pawar
ITSM Consultant, Ask me about Ivanti Service Management, ServiceNow and IT Process Automations
https://in.linkedin.com/in/vinoth-sukumaran-540514100
Tamil Nadu, India
vinoth sukumaran
Data Science | AIOps
https://www.linkedin.com/in/rogelioreynosojr
Los Angeles, CA
Rogelio Reynoso
Project Engineer at Global Diversified Voltage
https://www.linkedin.com/in/madison-forseth-92bb0013b
San Francisco Bay Area
Madison Forseth
Aerospace Engineering Student
https://www.linkedin.com/in/arravintha-gobinathan
Gainesville, FL
Arravintha Gobinathan
Anthropology and Microbiology Pre Med⚕️ Future Flight Surgeon 🚀
https://in.linkedin.com/in/shripad-pande-191557a
Pune/Pimpri-Chinchwad Area
Shripad Pande
Engineering Manager at Digitate
https://www.linkedin.com/in/ana-karapetiani-a95b9b1bb
Arlington Heights, IL
Ana Karapetiani
Engineering Student at University of Illinois Chicago
https://www.linkedin.com/in/francis-gold-sy
New York City Metropolitan Area
Francis Gold Sy
Aspiring Mechatronics Engineer @ CCNY
https://www.linkedin.com/in/jose-shaji
United States
Jose Shaji
Second year Mechanical Engineering Student.
https://www.linkedin.com/in/humbertolee
Miami, FL
Humberto Alexander Lee
CEO at Statra, Healthcare Executive, Hospital IT Operations
https://www.linkedin.com/in/samuel-martinez-662320144
Miami, FL
Samuel Martinez
SysAdmin at Accelya
https://www.linkedin.com/in/anusha-p-a125ba1b3
Houston, TX
Anusha p
DevOps Engineer at USAA
https://uy.linkedin.com/in/antonio-abella-4a3555ba
Uruguay
Antonio Abella
Consignatario en Federico Rodríguez - Negocios Rurales
https://ph.linkedin.com/in/antonio-abella-20989790
Philippines
Antonio Abella
Human Resources Specialist
https://ph.linkedin.com/in/antonio-abella-jr-38527948
Philippines
Antonio Abella, Jr.
CEO - Owner at 3-AAA Co.
https://www.linkedin.com/in/antonio-abella-7049149
Miami, FL
Antonio Abella
Sr. Systems Engineer / VMware & Hyper-V Infrastructure Administrator at Independent Consultant/Contract Hire