☁ 🏠 ☁ Fluff, Happy Little Clouds at Home

🏠 Fluff, Happy Little Clouds at Home

Update: After reading more about the libvirt project, kcli (python), and virt-lightning (also python) projects I'm going to take a break from fluff at least until the Beginner Boost content is finished and I've completed my K8S certificaitons. I've decided all we need for all the Boost parts is VirtualBox and the VirtualBox extensions. In fact, fluff would rob people learning some great little scripting sessions to automated their preferred VM cloud configuration. This is also the reason free VirtualBox with extensions and Ubuntu server image is a no-brainer decision for beginners. Plus, people need to learn about making snapshots with VirtualBox and the Vbox CLI command tools. Also, cloud-init is not for beginners. When I return to fluff I want to rethink the entire thing from a libvirt perspective first so that we automatically support every single provider rather than a few specific ones.*

"It's docker-compose for cloud-init VMs."

  • Support VMware Workstation Pro and VirtualBox
  • Focus only on virtual hardware configuration
  • Compliment Ansible for system configuration
  • Cater to absolute beginners as well as pros
  • Simplest possible CLI with optional web UI
  • Local cloud VMs organized in $HOME/Fluff
  • Bridged static IP network support only
  • Highly opinionated defaults
  • Only allow cloud-init images
  • Secure shell into everything
  • Batteries included

Prerequisites

Fluff is primarily designed to be run from any modern Windows or Mac computer. It will also run from most Linux desktop distros as well:

Installation

  1. Install a terminal (Windows Terminal, iTerm2, etc.)
  2. Install VMware Workstation Pro (recommended) or VirtualBox
  3. Install qemu-img
  4. Install fluff binary

Fluff will also run from most Linux

⚠️ Note Windows users do not need to setup WSL2 but it won't hurt.

First, you'll need to install a good terminal to make best use of your home local cloud virtual machines so that you can connect to them from ssh (which is installed by default on all major desktop operating systems these days).

Second, install one of the following industry standard desktop virtualization applications:

  • VMware Workstation Pro (recommended)
  • Oracle VirtualBox

Third, install qemu-img depending on your operating system. This allows fluff to convert between virtual machine images designed for the cloud (qcow2) into images that work with VMware (vmdk) or VirtualBox (vdi). (This application also has different licensing requiring it to be installed separately.)

And finally, install the fluff binary using any of the following methods:

If you have Go already installed:

go install github.com/rwxrob/fluff@latest

Otherwise, grab the binary for your computer and add put it someplace your computer will know to run it.

curl ...

Usage

Here are the main user-facing commands:

fluff help [COMMAND] - display help
fluff init           - create a starter fluff.yaml file
fluff lint           - check the fluff.yaml file for syntax and more
fluff up [FILE|URL]  - start a local cloud, display description
fluff down - stop local cloud VMs and save their state
fluff away - destroy and delete all local cloud VMs
fluff shot - take a "snapshot" of all local cloud VMs
fluff list - list all the local cloud VMs with name and IP
fluff copy - copy all local cloud VMs and config to target 

There are a number of other (hidden) commands that allow users to do specific things that are a part of the other main user commands:

fluff cache [URL]             - retrieve and cache distro image
fluff validate [PATH]         - validate a fluff.yaml file
fluff convert [PATH] [FORMAT] - convert target image to specified format
fluff iso [PATH]              - create a cloudinit.iso
fluff volume [MB] [FORMAT]    - create volume file of size and format
fluff ssh-config [INSTANCE]   - output ~/.ssh/config Host for instance

And a few debugging hidden commands:

fluff err  - prepare large detailed report of last error

And a few expected aliases:

fluff start   - up
fluff stop    - down
fluff off     - down
fluff vet     - lint
fluff destroy - away
fluff rm      - away
fluff snap    - shot
fluff ps      - list
fluff cp      - copy

Domain Model and Terminology

machine - specification of a virtual machine instance - a specific instance of a configured virtual machine
cloud - a collection of instances

Machine (Box) Specification Types

A machine consists of all the hardware specification information. Certain default specs are included within the binary while users may create their own in the specs.yaml file. Here are the current defaults:

machines:
  - name: alma8.server 
    cores: 2
    memory: 2048
    volumes:
      - size: 100 
    url: |
      https://repo.almalinux.org/almalinux/8/cloud/x86_64/images/AlmaLinux-8-GenericCloud-8.5-20211119.x86_64.qcow2
  - name: alma8.node
    base: alma8.server
    cores: 1

clouds:
  - name: basic
    description: |
      Simple control and three node mini-cloud suitable for testing
      basic endpoint architecture and applications such as Kubernetes
      installed with kubeadm. Default IPs: 192.168.132.10-13.
    instances:
      - name: control
        base: alma8.server 
        ip: 192.168.132.10
    group:
      - name: node           # node-1, node-2, node-3
        base: alma8.node
        count: 3
        startip: 192.168.132.11

Note that this exact YAML file is embedded in the Go binary.

Primary Use Cases

  • Administrators, operators, cloud-native engineers, systems engineers to experiment for testing and learning purposes
  • Experimenting and testing any cloud-init enabled virtual machine image
  • Simulate specific, real-world networks and traffic within them including boding of interfaces, etc.

YAML Configuration Files

"Why not use Vagrant?"

It's scope of use-cases is too large
It's ancient (lots of technical debt)
It adds layer of unnecessary abstraction
It wasn't conceived with cloud-init in mind
It doesn't play nice with WSL2
It has a screwed up network model
It isn't a single executable
It's in Ruby

Owner
Rob Muhlestein
Infrastructure Engineer / Software Developer • Cloud Native • Professional Mentor • Streamer
Rob Muhlestein
Similar Resources

⚔️ Web Hacker's Weapons / A collection of cool tools used by Web hackers. Happy hacking , Happy bug-hunting

⚔️ Web Hacker's Weapons / A collection of cool tools used by Web hackers. Happy hacking , Happy bug-hunting

A collection of cool tools used by Web hackers. Happy hacking , Happy bug-hunting Family project Table of Contents WHW-Tools Weapons Awesome Bookmarkl

Jan 5, 2023

🐁 happy little queue

🐁 happy little queue

happy little queue 97% covered, 90LOC, 80_000RPS, integration test, auto-cleaning, lightweight When your Go code does not panic When your infra does n

Dec 30, 2022

Write cloud-agnostic config deployed across multiple clouds

Multy is the easiest way to deploy multi cloud infrastructure Write cloud-agnostic config deployed across multiple clouds. Let's try to deploy a simpl

Dec 25, 2022

A 12-factor app logger built for performance and happy development

A 12-factor app logger built for performance and happy development

logxi log XI is a structured 12-factor app logger built for speed and happy development. Simpler. Sane no-configuration defaults out of the box. Faste

Nov 27, 2022

V2 because I wasn't happy with the way things were going in V1

Pokerchips V2 A client/server app that simulates poker chips so you and your friends can play poke without physical chips! Client The client is writte

Oct 2, 2022

oDrop, a fast efficient cross-platform file transfer software for server and home environments

oDrop is a cross-platform LAN file transfer software to efficiently transfer files between computers, oDrop is useful in environments where GUI is not available.

Jun 4, 2022

🏠 An HTTP-based command runner for home automation.

🏠 An HTTP-based command runner for home automation.

Badges Reporting Issues If you are facing a problem with this package or found any bug, please open an issue on GitHub. License The MIT License (MIT).

Oct 29, 2022

🛡️ Synchronize AdGuard Home config to replicas

AdGuardHome sync Synchronize AdGuardHome config to a replica instance. Current sync features General Settings Filters Rewrites Services Clients Instal

Dec 31, 2022

The new home of the CUE language! Validate and define text-based and dynamic configuration

The CUE Data Constraint Language Configure, Unify, Execute CUE is an open source data constraint language which aims to simplify tasks involving defin

Dec 31, 2022

CasaOS - A simple, easy-to-use, elegant open-source home server system.

CasaOS - A simple, easy-to-use, elegant open-source home server system.

CasaOS - A simple, easy-to-use, elegant open-source home server system. CasaOS is an open-source home server system based on the Docker ecosystem and

Jan 8, 2023

Vallox RS-485 MQTT gateway to integrate Vallox RS485 ventilation device to Home Assistant via MQTT.

Vallox RS-485 MQTT gateway to integrate Vallox RS485 ventilation device to Home Assistant via MQTT.

Vallox RS-485 MQTT gateway to integrate Vallox RS485 ventilation device to Home Assistant via MQTT. Implements Home Assistant MQTT discovery but can also be used without Home Assistant.

Dec 26, 2021

Sensirion SCD30 CO2 sensor MQTT gateway with Home Assistant MQTT discovery

Sensirion SCD30 CO2 sensor MQTT gateway for Home Assistant Overview This gateway can be used to publish measurements SCD30 to mqtt. It supports Home A

Oct 10, 2022

OCI drive, available from home

OCI Drive ... use your storage with Oracle Object Store Quick Start Make sure you have the Object Storage, bucket and you know the compartment id wher

Nov 10, 2021

Helping Indiranagar ka Gunda get back home at the earliest

Indiranagar ka Gunda This is the solution to a problem given to me by @exagil. The problem is as follows: Chirag is Indiranagar ka Gunda, but somehow,

Nov 27, 2021

Go library for detecting and expanding the user's home directory without cgo.

go-homedir This is a Go library for detecting the user's home directory without the use of cgo, so the library can be used in cross-compilation enviro

Jan 5, 2023

Home Assistant custom integration for e-distribución

Home Assistant custom integration for e-distribución

DEPRECATED! En primer lugar, gracias a todos por vuestra participación identificando fallos o proponiendo mejoras, pero debido a los últimos movimient

Sep 7, 2022

A simple web-based time in/time out intended for home-based workers.

Web-based Time in/Time out About A simple web-based time in/time out intended for home-based workers. Pre-requisite To run the pre-built binary: An in

Dec 16, 2021

Home Assistant screenshot capture web server suitable for e-ink displays

hass-shooter hass-shooter is a Home Assistant screenshot capture web server suitable for e-ink displays. Dependencies Chromium ImageMagick Installatio

Jan 28, 2022

It allows the world to access websites on home computers.

Intranet-Penetration-Go Software function: It allows the world to access websites on home computers. Principle The client runs on a home computer with

Dec 27, 2021
Comments
  • Senior network pro needs to vet network domain language

    Senior network pro needs to vet network domain language

    We need someone who deeply understands networks and cloud-init to take a look at our model and see how much can be simplified appropriately from what is already available in cloud-init.

  • libvirt VM creation command

    libvirt VM creation command

    apt install libvirt-daemon virtinst qemu-kvm

    virt-install \ --name Alma8CloudVM \ --memory 2048 \ --vcpus 2 \ --disk https://repo.almalinux.org/almalinux/8/cloud/x86_64/imagesAlmaLinux-8-GenericCloud-8.5-20211119.x86_64.qcow2 \
    --cdrom /path/to/cloudinit.iso \ <--------------- adjust this to your path for the iso *************** --import \ --os-variant rhel8

    virsh start Alma8CloudVM && virsh console Alma8CloudVM


    https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/virtualization_deployment_and_administration_guide/sect-guest_virtual_machine_installation_overview-creating_guests_with_virt_install

    --network br0
    --extra-args "ip=192.168.1.2::192.168.1.1:255.255.255.0:test.example.com:eth0:none"

    [WSL2/Win10] virt-manager for kvm on Windows | Nico Maas apt install virt-manager bridge-utils

  • Support cloud-init Passthrough

    Support cloud-init Passthrough

    At some point we want to allow people to pass lines of cloud-init YAML directly into files that make it into the ISO so that machines can be expanded from the same basic ISO images.

Related tags
OCI drive, available from home

OCI Drive ... use your storage with Oracle Object Store Quick Start Make sure you have the Object Storage, bucket and you know the compartment id wher

Nov 10, 2021
HomeRaid aim to be the raid solutions for budget home servers.

HomeRaid HomeRaid aim to be the raid solutions for budget home servers. The project goals are: Providing an easy to expand raid like solution, new dis

Jan 8, 2022
k8s applications at my home (on arm64 devices e.g nvidia jet son nano)

k8s applications at my home (on arm64 devices e.g nvidia jet son nano)

Oct 9, 2022
Little Reversing CrackMe written in GO

Go_CrackMe Little Reversing CrackMe written in GO Info: I created little reversing crackme challenge written in GO language for educational purpose. A

Jul 22, 2022
Stewards little helper

littlesteward Stewards little helper Functinality Take a script/program, and SCP it to 1+ nodes. Connect via SSH, execute the script, and get the resu

Nov 8, 2021
Ducklett: managing all the little nodes of a Conducktor cluster

Ducklett Overview Ducklett is a kubernetes controller that manages updating nodes in a Conducktor cluster. Origin For immutable infrastructure, we nee

Nov 14, 2022
An little docker container to send an heartbeat to uptime kuma.

Uptime Kuma Push Service This Docker image is for sending a heartbeat to an Uptime Kuma server. Here you will find a little introduction on how to use

Apr 17, 2022
A very simple, silly little kubectl plugin / utility that guesses which language an application running in a kubernetes pod was written in.

A very simple, silly little kubectl plugin / utility that guesses which language an application running in a kubernetes pod was written in.

Mar 9, 2022
You drive the heart of a little creature called: Musshi.
You drive the heart of a little creature called: Musshi.

Musshi's Heart You drive the heart oh a little creature called: Musshi. Developed for the 50th Ludum Dare Game Jam: Delay The Inevitable Goal Every Mu

Dec 20, 2022
A collection of cool tools used by Mobile hackers. Happy hacking , Happy bug-hunting
A collection of cool tools used by Mobile hackers. Happy hacking , Happy bug-hunting

A collection of cool tools used by Mobile hackers. Happy hacking , Happy bug-hunting Family project Table of Contents Weapons Contribute Thanks to con

Jan 3, 2023