Bygg komplett IT-infrastruktur från terminalen.
TUI-baserat verktyg som genererar Ansible-projekt för att automatisera hela infrastrukturen — från nätverkskonfiguration och hypervisor-provisionering till OS-hardening och dokumentationsgenerering. 14 wizard-steg, 16 tjänstplugins, noll manuellt krångel.
InfraBuilderOS täcker hela livscykeln — från initial nätverksdesign till driftverifiering och dokumentation — utan att du behöver lämna terminalen.
Guidar dig igenom hela infrastrukturdesignen med interaktiva formulär och navigationsmeny i sidopanelen.
10 Linux-tjänster, 5 Windows-tjänster och 1 plattformsoberoende plugin. Beroenden löses automatiskt.
Inbyggd integration mot Proxmox via community.proxmox-collectionen. Provisionera VMs direkt från wizarden.
OPNsense via REST API (api_key/api_secret) och MikroTik RouterOS via SSH/API. CHR stöds.
ansible-lockdown-roller för CIS L1/L2 och STIG mot Ubuntu, AlmaLinux och Windows Server.
Out-of-band-hantering för Dell (iDRAC) och HPE (iLO) servrar. Konfigureras i steg 8.
Wizarden scannar projektet efter vault_-nyckelreferenser och presenterar maskerade inmatningsfallt.
Jämför faktiskt tillstånd mot projektdefinitionen. Visar MATCH, DRIFT eller MISSING per host och tjänst.
Genererar sex dokumenttyper i Markdown eller HTML — systemoverview, trafikmatriser, användarmanualer med mer.
Körs från ett USB-minne med ett virtualenv utan att installera något på hosten. Ansible måste dock finnas på systemet.
Hela infrastrukturmodellen sparas som YAML. Snapshot-funktion skapar versionerade kopior (_v001.yml).
709 tester täcker modeller, plugins, generator, driftkomparator, dokumentation, vault och wizard-flöde.
Wizarden körs helt i terminalen med Textual som rendering-motor.
Med --ascii-flaggan fungerar den i PuTTY och alla terminaler utan Unicode-stöd.
python -m infrabuilder
ntp markerades automatiskt eftersom nginx kräver det.
vault_*-referenser och presenterar ett maskerat fält per nyckel.
08-verify.yml mot levande hostar och visar MATCH, DRIFT eller MISSING per check.
Varje steg är ett eget skärmformulär i TUI:n. Du navigerar fritt mellan stegen och kan
spara projektet när som helst med Ctrl+S.
--project.dns_ad läggs ad_dc till utan att du begär det.skip_reboot och disruption_high.vault_-nyckelreferenser och presenterar ett maskerat inmatningsfallt för vart och ett. Sparas krypterat till vault.yml.InfraBuilderOS stöder de vanligaste enterprise-operativsystemen, bade Linux och Windows, samt ledande brandväggar och Proxmox som hypervisor.
| OS | Version | Familj |
|---|---|---|
| Ubuntu | 22.04 LTS | Linux |
| Ubuntu | 24.04 LTS | Linux |
| AlmaLinux | 8 | Linux |
| AlmaLinux | 9 | Linux |
| Windows Server | 2022 | Windows |
| Windows Server | 2025 | Windows |
| Typ | Ansible-anslutning | Notering |
|---|---|---|
| OPNsense | REST API |
api_key / api_secret. Standard-val. |
| MikroTik RouterOS | SSH / RouterOS API |
CHR (Cloud Hosted Router) stöds. |
| Typ | Ansible-collection |
|---|---|
| Proxmox VE | community.proxmox |
Varje plugin är ett Python-objekt som deklarerar plattform, beroenden, portar, Ansible-variabler och driftcheckar. Beroenden löses automatiskt — ingen manuell ordning krävs.
| Plugin | Visningsnamn | Plattform | Ansible-roll / Collection |
|---|---|---|---|
apache |
Apache HTTP Server | Linux | geerlingguy.apache |
nginx |
Nginx | Linux | geerlingguy.nginx |
ntp |
Chrony NTP | Linux | geerlingguy.ntp |
dns_bind |
BIND9 DNS | Linux | dns_bind (lokal) |
rsyslog |
Central Rsyslog | Linux | rsyslog_server (lokal) |
zabbix_agent |
Zabbix Agent 2 | Linux | community.zabbix.zabbix_agent |
zabbix_server |
Zabbix Server | Linux | community.zabbix.zabbix_server |
pxe |
PXE Boot Server | Linux | pxe_server (lokal) |
haproxy |
HAProxy | Linux | haproxy (lokal) |
ssh_jumpserver |
SSH Jump Server | Linux | jumpserver (lokal) |
ad_dc |
Active Directory DC | Windows | infrabuilder.ad_dc |
adfs |
AD FS | Windows | adfs (lokal) |
dns_ad |
AD-integrerad DNS | Windows | infrabuilder.dns_ad |
gpo |
Group Policy Objects | Windows | gpo (lokal) |
rds |
Remote Desktop Services | Windows | rds (lokal) |
ca |
Certificate Authority | Båda | infrabuilder.ca / community.crypto |
Välj en mall i steg 2 som startpunkt. Alla VLAN-parametrar — ID, namn, subnot och DHCP-intervall — kan redigeras fritt efterat i TUI:n.
Klassisk trelagermodell med separata VLAN för servrar, klienter och management.
| VLAN | Namn | Roll | Subnot | DHCP |
|---|---|---|---|---|
| 10 | servers | lan | 192.168.10.0/24 | 100–200 |
| 20 | clients | lan | 192.168.20.0/24 | 100–250 |
| 99 | management | mgmt | 192.168.99.0/24 | Nej |
Som 3-Tier men med ett dedikerat OOB-VLAN för iDRAC/iLO-hantering.
| VLAN | Namn | Roll | Subnot | DHCP |
|---|---|---|---|---|
| 10 | servers | lan | 192.168.10.0/24 | 100–200 |
| 20 | clients | lan | 192.168.20.0/24 | 100–250 |
| 99 | management | mgmt | 192.168.99.0/24 | Nej |
| 100 | oob | oob | 192.168.100.0/24 | 100–200 |
För enklare miljoer: ett enda platt produktionsnät kombinerat med ett OOB-VLAN.
| VLAN | Namn | Roll | Subnot | DHCP |
|---|---|---|---|---|
| 1 | default | lan | 192.168.1.0/24 | 100–250 |
| 100 | oob | oob | 192.168.100.0/24 | 100–200 |
InfraBuilderOS anvander ansible-lockdown-rollerna för OS-hardening. Konfigurera niva per VM i steg 7. STIG för Ubuntu är inte tillgängligt i ansible-lockdown; anvand CIS för Ubuntu-hostar.
| Framework | Niva | OS | Ansible-roll |
|---|---|---|---|
| CIS | L1 / L2 | Ubuntu 22.04 | ansible-lockdown.ubuntu22_cis |
| CIS | L1 / L2 | Ubuntu 24.04 | ansible-lockdown.ubuntu24_cis |
| CIS | L1 / L2 | AlmaLinux 8 | ansible-lockdown.rhel8_cis |
| CIS | L1 / L2 | AlmaLinux 9 | ansible-lockdown.rhel9_cis |
| CIS | L1 / L2 | Windows Server 2022 / 2025 | ansible-lockdown.windows_2022_cis |
| STIG | L1 / L2 | AlmaLinux 8 | ansible-lockdown.rhel8_stig |
| STIG | L1 / L2 | AlmaLinux 9 | ansible-lockdown.rhel9_stig |
Konfigurerbara parametrar per profil: skip_reboot, disruption_high,
enabled_sections och custom_vars.
I steg 12 skapar generatorn följande katalogstruktur, redo att köras med
ansible-playbook site.yml -i inventory/hosts.ini.
<output-dir>/ ├── ansible.cfg ├── site.yml # Master playbook (importerar alla faser) ├── 01-network.yml # Brandväggskonfiguration ├── 02-hypervisor.yml # Proxmox-konfiguration ├── 03-vms.yml # Skapa virtuella maskiner ├── 04-base-config.yml # Basinstallning (hostname, SSH, osv.) ├── 05-services.yml # Tjanstinstallation via plugins ├── 06-hardening.yml # OS-hardening (CIS/STIG) ├── 07-oob.yml # OOB-konfiguration (iDRAC/iLO) ├── 08-verify.yml # Driftverifiering ├── inventory/ │ ├── hosts.ini # Inventarielista │ └── group_vars/ │ ├── all.yml # Globala variabler (utan vault) │ ├── all/ │ │ ├── vars.yml # Globala variabler (med vault) │ │ └── vault.yml # Krypterade hemligheter (ansible-vault) │ ├── linux.yml # Linux-specifika variabler │ ├── windows.yml # Windows-specifika variabler │ └── firewall.yml # MikroTik-anslutningsvariabler │ └── host_vars/ │ ├── webb01.yml # Per-host-variabler (en fil per VM) │ └── dc01.yml └── roles/ └── requirements.yml # ansible-galaxy-beroenden
I steg 11 scannar wizarden alla vault_-nyckelreferenser i projektet —
till exempel vault_ca_passphrase, opnsense_api_key — och
presenterar ett maskerat inmatningsfallt för vart och ett.
Varden lagras i minnet och skrivs av generatorn till
inventory/group_vars/all/vault.yml. Kryptera efterat med ansible-vault.
---
vault_ca_passphrase: "hemligt-lösenord"
vault_opnsense_api_key: "abc123"
vault_opnsense_api_secret: "xyz789"
ansible-vault encrypt inventory/group_vars/all/vault.yml
Steg 13 kör playbook 08-verify.yml mot den levande infrastrukturen och
jämför resultatet med vad som är definierat i projektet. Varje tjänst-plugin implementerar
get_inventory_checks() som genererar de Ansible-tasks som körs.
Tjänsten är aktiv, portarna är öppna och konfigurationen stämmer överens med projektdefinitionen. Ingen åtgärd krävs.
Tjänsten körs men avviker från förväntat tillstånd — till exempel fel version, stängd port eller modifierad konfiguration.
Tjänsten är definierad i projektet men hittades inte på hosten. Troligtvis en misslyckad eller ej utförd provisionering.
TUI:n visar resultaten uppdelade per host med en sammanfattning av antal MATCH, DRIFT och MISSING. Varje host kan expanderas för att se detaljerade kontrollresultat.
Steg 14 genererar dokumentation direkt från projektmodellen. Bade Markdown och standalone-HTML stöds. Välj utdatakatalog direkt i TUI:n.
| Typ | Filnamn (Markdown) | Innehåll |
|---|---|---|
system_overview |
system_overview.md | Översikt: VMs, tjänster, nätverk och topologi. |
traffic_internal |
traffic_internal.md | Intern trafikmatris mellan VMs och tjänster. |
traffic_external |
traffic_external.md | Extern trafik till och från brandväggen. |
user_manual |
user_manual.md | Användargränssnitt och dagliga arbetsflödena. |
admin_manual |
admin_manual.md | Administrationsinstruktioner och underhall. |
prerequisites |
prerequisites.md | Krav och förarbeten fore deploy. |
Att lägga till en ny tjänst kräver bara ett Python-objekt och en Ansible-roll.
Pluginen dyker automatiskt upp i steg 6 för alla VMs med ett OS som listas i
supported_os_versions.
from infrabuilder.services.base import ServicePlugin
class MinTjanstPlugin(ServicePlugin):
@property
def name(self) -> str:
return "min_tjanst"
@property
def display_name(self) -> str:
return "Min Tjänst"
@property
def platform(self) -> str:
return "linux" # eller "windows" eller "both"
@property
def supported_os_versions(self) -> list[str]:
return ["ubuntu_2204", "ubuntu_2404", "alma_8", "alma_9"]
def get_role_name(self) -> str:
return "namespace.min_tjanst_roll"
def get_ansible_vars(self, config: dict) -> dict:
return {"min_tjanst_port": config.get("port", 8080)}
def get_dependencies(self) -> list[str]:
return [] # t.ex. ["ntp"] om NTP måste vara installerat först
def get_ports(self) -> list[dict]:
return [{"port": 8080, "proto": "tcp"}]
def validate(self, config: dict) -> list[str]:
errors = []
port = config.get("port", 8080)
if not isinstance(port, int) or not (1 <= port <= 65535):
errors.append("port måste vara ett heltal mellan 1 och 65535")
return errors
def get_inventory_checks(self) -> list[dict]:
return [
{
"name": "Check min_tjanst is running",
"ansible.builtin.service_facts": {},
}
]
def default_config(self) -> dict:
return {"port": 8080}
from infrabuilder.services.min_tjanst import MinTjanstPlugin # noqa: F401
för _cls in [
...,
MinTjanstPlugin, # <-- lägg till har
]:
registry.register(_cls)
Skapa sedan en Ansible-roll under roles/min_tjanst_roll/ eller registrera
den i roles/requirements.yml för automatisk nedladdning via ansible-galaxy.