Skip to main content

Fuselage

fuselage is a simple and fast idempotent configuration bundle builder and runtime.

To use fuselage:

  • Use your code to build a configuration bundle via our API. The output is an executable payload.
  • Transfer that payload to your server.
  • Run it.

Should you use fuselage? Probably not. But if you are wondering why:

  • It's fast. Unlike some configuration management tools the entire process runs on the target. It doesn't rely on a round trip between every step.
  • It's small. It's only dependency is a python3 interpreter on the target system plus some common posix binaries.
  • It's secure. It doesn't bring it's own control plane that you need to understand in detail to properly secure.
  • It's simple. It provides the absolute minimum, and tries to get out the way for the stuff where it doesn't need to have an opinion. Bring your own template engine, or don't use one at all. Bring your own control plane. Run it from a deamonset, run it via fabric or even just use scp and run it by hand.

Using with paramiko

import paramiko

from fuselage.bundle import ResourceBundle
from fuselage.resources import *
from fuselage.ssh import execute_via_ssh


bundle = ResourceBundle()

bundle.add(File(
    name="/tmp/hello.txt",
    contents="A test file!!",
))

transport = paramiko.Transport(("localhost", 22))
transport.connect(
    username="john",
    password="my super sekrit password",
)

# Compile the bundle, scp it to target server, execute it via sudo
execute_via_ssh(
    transport,
    bundle,
    "root",
    sudo_password="my super sekrit password"
)

Using with fabric

You will need to install fabric explicitly. Fuselage does not depend on fabric.

You can write simple deployment scripts with Fabric by adding this to your fabfile:

from fuselage.fabric import blueprint
from fuselage.resources import *

@blueprint
def minecraft(bundle):
    yield Directory(
        name='/var/local/minecraft',
    )
    yield Execute(
        command='wget https://s3.amazonaws.com/Minecraft.Download/versions/1.8/minecraft_server.1.8.jar',
        cwd="/var/local/minecraft",
        creates="/var/local/minecraft/minecraft_server.1.8.jar",
    )
    yield File(
        name='/var/local/minecraft/server.properties',
        contents=open('var_local_minecraft_server.properties').read(),
    )
    yield File(
        name="/etc/systemd/system/minecraft.service",
        contents=open("etc_systemd_system_minecraft.service"),
    )
    yield Execute(
        command="systemctl daemon-reload",
        watches=['/etc/systemd/system/minecraft.service'],
    )
    yield Execute(
        command="systemctl restart minecraft.service",
        watches=[
            "/var/local/minecraft/server.properties",
            "/etc/systemd/system/minecraft.service",
        ]
    )

And then run it against multiple servers::

fab -H server1,server2,server3 minecraft

Release files for fuselage 3.1.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for fuselage 3.1.2
File Size Uploaded
fuselage-3.1.2.tar.gz 44.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for fuselage 3.1.2
File Interpreter ABI Platform
fuselage-3.1.2-py3-none-any.whl Python 3 none any Details

Total release size:126.5 kB

Release files / fuselage-3.1.2.tar.gz

Download URL fuselage-3.1.2.tar.gz
Size 44.7 kB
Tags Source
SHA-256 checksum
How to use checksums
e6a96e45985fea3724e50e52315f1e64339032739be4a2ad238bafa3d2e018bf
BLAKE2b-256 checksum
How to use checksums
aaccac87223c544f9624f02af0884830f81a4a851245bd9dcc4e98fb502a465c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.4.2 CPython/3.10.10 Linux/5.15.0-1034-azure

Release files / fuselage-3.1.2-py3-none-any.whl

Download URL fuselage-3.1.2-py3-none-any.whl
Size 81.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3c55dfb894d89e70a24ba519a73f5aaa50e18f13341aff3dc3f5e75406a7ce34
BLAKE2b-256 checksum
How to use checksums
217c50fb5d2b20ced52a09d2ddb162bb2fd969a2a281ec9951ee4c4c0b546cbb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.4.2 CPython/3.10.10 Linux/5.15.0-1034-azure

Release history Release notifications | RSS feed

This release

3.1.2 This release

2 release files

3.1.0

2 release files

3.0.0

2 release files

1.0.0

2 release files

0.0.12

1 release file

0.0.11

1 release file

0.0.10

1 release file

0.0.9

1 release file

0.0.8

1 release file

0.0.7

1 release file

0.0.6

1 release file

0.0.5

1 release file

0.0.4

1 release file

0.0.3

1 release file

0.0.2

1 release file

0.0.1

1 release file

0.0.dev0

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page