Skip to content

HexmosTech/Ansika

Repository files navigation

Ansika: Hassle-Free Engineer Onboarding

Binary Build And Release

The Problem

Bringing in new engineers to your team means tediously setting up lots of software.Ansika helps build hassle-free custom one-line installers, saving your team time, effort, and money.

Overview

Ansika simplifies bulk software installation and configuration tasks into a single command. It reduces the employee onboarding workload for technical leads and engineers. In a few steps, Ansika installs and configures software, libraries, and extensions for new employees or interns.

Ansika produces a binary file that does not requires external dependencies. Simply define software, libraries, and configurations in the Ansible playbook file (one_installer.yml). Ansika will release a new binary in GitHub releases. The one-line command downloads, authorizes and executes the binary file on local machines.

Benefits

  • Install any combination of software packages, libraries and extensions
  • Run commands and configure setting files
  • Produce zero-dependency binaries
  • Provide one-liner to perform every on-boarding task
  • 100% Free and Open Source Software
  • Built upon solid tech: Ansible and Nuitka (Python)

Usage

Fork the Repository

To create the one-line installer for your team or company, begin by forking this repository.After forking, you can make changes locally to tailor the code or content according to your specific requirements.

Requirements

  • python: Version 2.7 or 3.5 and higher
  • Ansible: Version 2.7 or higher (depends on python version installed)
  • Nuitka: Version 1.7.5 or higher

Installing Requirements

  • Install Ansible : pip3 install ansible==7.0.0
  • Install Nuitka : pip3 install nuitka==1.7.5

Modify Ansible Playbook

Modify the ansible playbook file in this repository (one_installer.yml) to include additional instructions for installing software packages, tools, extensions, and configurations. For further insights into ansible and ansible playbook, you can refer to the Ansible documentation.

Local Testing

We recommend testing the binary within a Docker container first. Docker isolates your Ansible installation and binary file execution from the rest of your system. Here's the procedure :

  • Begin by pulling the Ubuntu 20.04 image from Docker Hub :
docker pull ubuntu:20.04
  • Run an Ubuntu container named my_ubuntu_container with an interactive shell, a mounted volume, and start a bash session :
docker run -it --name my_ubuntu_container -v ~/Docker_Share:/data ubuntu /bin/bash
  • The mounted volume facilitates file sharing between the Docker container and the host machine through the Docker_Share directory in your host machine.

Ansible Python API

  • Specify the ansible playbook file that should be executed inside the executor.py
  • Adjust the playbook file path in the executor.py file.
  • You can refer Ansible Python API for more details about the code.

Build Binary using Nuitka

For building the binary file run the command:

python3 -m nuitka --onefile \
--include-package-data=ansible:'*.py' \
--include-package-data=ansible:'*.yml' \
--include-data-files=one_installer.yml=one_installer.yml \
 executor.py

The --include-package-data option tells Nuitka to include all files that match the specified pattern in the package data of the specified module. In this case, the pattern *.py and *.yml will match all Python files and YAML files in the ansible module.

The --include-data-files=one_installer.yml=one_installer.yml option tells Nuitka to include the ansible playbook file one_installer.yml in the distribution.

You may refer to the Nuitka user manual for more information on the available options.

Executing binary

First copy the binary file from the host machine to the docker container :

sudo cp executor.bin ~/Docker_Share

The shared files can be found in the data directory inside the docker container :

cd /data

Run the executable binary file :

./executor.bin

If you encounter any permission issues run :

chmod +x executor.bin 

Release and One-line command

Release the binary file and generate a one line command easily using the github actions and workflows.

Github Workflow

The github workflow mentioned in the file build-and-release.yml will handle the binary creation and release of the binary.

  • First commit your changes.
  • Then create a tag name using the command git tag v1.0.0.
  • Push the tag git push v1.0.0.

If you encounter any permission issues in the workflow follow this steps:

  • Go to the repository "Settings".
  • After that, it will show you a left pane where you will find "Actions"
  • Expand the "Actions" tab
  • Click on "General" under the options tab.
  • Now on the new page scroll down and you will find "Workflow Permissions"
  • Select "Read and Write" under "Workflow Permissions".

Binary Release

After the successful completion of the workflow you can see a new release with tag_name in the github releases.

One-line Command

Finally, generate the one-line command:

wget  -q https://github.com/USER/PROJECT/releases/latest/download/executor.bin && chmod +x executor.bin && ./executor.bin

replace USER and PROJECT with github username and repository name.

Share this URL with employees and interns to help them set up the software, tools, and configurations they need for onboarding to your team.

Blog Post about Ansika

Ansible + Nuitka: One-line Installer for Smoother Employee Onboarding

Acknowledgements

  • Ansible
  • Nuitka