Stackar: OpenTofu med godkännande
En stack är en OpenTofu-konfiguration (eller en Ansible-konfiguration) som Velrix kör åt dig. Tillståndet sparas i Velrix, förseglat och med alla versioner. Varje körning planerar först i en sandlåda. Du ser vad den skulle ändra, och först därefter tillämpas den, exakt den plan du såg. Med fyraögonsprincipen måste någon annan än den som startade körningen godkänna den.
Den här guiden sätter upp en OpenTofu-stack för en organisation. Personliga stackar fungerar likadant, men utan godkännandesteget.
Det här får du
- Inget tillstånd på bärbara datorer. Tillståndet finns i Velrix, krypterat och med sin historik. En körning låser det, så två tillämpningar kan aldrig krocka.
- Inga långlivade nycklar. Varje körning får en kortlivad nyckel som agerar som personen som startade den, med bara de behörigheter som stacken tillåter. Nyckeln slängs i samma stund som körningen tar slut.
- Fyra ögon och spårbarhet. Vem som startade en körning, vem som godkände den och vad den ändrade sparas på stacken.
- Hemligheter förblir hemliga. Hemliga variabler förseglas, lämnas till körningar bara som hemligheter och maskeras på varje loggrad.
- Fungerar utan nätanslutning. Körningar hämtar providers från installationens egen spegel, aldrig från internet.
1. Skapa stacken
Öppna Stackar och välj Ny stack.
- Namn: till exempel
network. - Typ: OpenTofu.
- Källa: Repo som en git-adress över https, med Gren, tagg eller commit och den Mapp där konfigurationen ligger. För ett privat repo lägger du till en Åtkomsttoken (deploy token); den förseglas och visas aldrig igen. Du kan också ladda upp källan som en
.tar.gzi stället. - Godkännande: En annan person.
- Vad körningar får anropa: de API-behörigheter som en körning behöver, åtskilda med mellanslag, till exempel
machines ssh-keys. En körning kan aldrig göra mer än den som startade den får göra.
Välj Skapa stack.
2. Lägg till variabler
Lägg till det konfigurationen behöver under Variabler på stackens flik Inställningar. Körningarna får varje variabel som var.<name>.
Kryssa i Hemlig för lösenord och tokens. En hemlighet förseglas i Velrix, lämnas till körningar bara som hemlighet, visas aldrig igen och maskeras i utdata: en rad som skulle skriva ut den visar •••••• i stället.
3. Planera
Välj Planera på fliken Körningar. Velrix startar en körning i en sandlåda som hämtar källan, kör tofu plan och sparar planfilen förseglad.
Körningens sida visar vad planen ändrar, både som antal och resurs för resurs: vad den skapar, uppdaterar, ersätter och förstör. Det som förstörs eller ersätts sticker ut. De sista raderna i utdata finns också där, maskerade.
Skiljer sig ingenting slutar körningen som Inga ändringar.
4. Godkänn och tillämpa
Nu står det Väntar på godkännande på körningen, och vem som startade den.
- Du kan inte godkänna din egen körning. Be en kollega som har behörigheten Godkänna planer i organisationen. Administratörer och ägare i organisationen har den.
- Den som godkänner öppnar körningen, granskar planen och källan den kom från, och väljer Godkänn och tillämpa.
Velrix tillämpar sedan exakt den plan som godkändes, i en ny sandlåda och fortfarande som den person som startade körningen. Den som godkänner lånar inte ut några egna rättigheter. Har tillståndet ändrats sedan planen gjordes vägrar OpenTofu, och körningen slutar som Inaktuell plan: planera igen.
Vill du slänga en plan väljer du Kassera. Vill du stoppa en pågående körning väljer du Avbryt körning.
5. Håll koll på avvikelser
Ställ in Avvikelsekontroll, intervall (timmar) på fliken Inställningar. Då planerar Velrix enligt det schemat, tillämpar aldrig, och skickar ett meddelande när något har ändrats utanför stacken. Körningen slutar som Avviker, och meddelandet öppnar den.
Använd tillståndet från en bärbar dator eller CI
En stacks tillstånd fungerar också fristående, för OpenTofu-körningar som du startar på annat håll. Fliken Tillstånd visar kodsnutten som du klistrar in i din konfiguration:
terraform {
backend "http" {
address = "https://velrix.example.com/stacks/<stack>/state"
lock_address = "https://velrix.example.com/stacks/<stack>/lock"
unlock_address = "https://velrix.example.com/stacks/<stack>/unlock"
lock_method = "POST"
unlock_method = "POST"
username = "velrix"
}
}
Lösenordet är en API-nyckel med behörigheten stacks:state. Mer om nycklarna finns i API-referensen i realmens Docs-fönster:
export TF_HTTP_PASSWORD=vlxk_…
tofu init
tofu apply
Fliken Tillstånd listar alla sparade versioner. Med Återställ blir en äldre version det aktuella tillståndet igen, med nästa serienummer, och med Ladda ned sparar du den. Ett tillstånd innehåller hemligheter i klartext, så varje nedladdning registreras med ditt namn. Bryt upp låset öppnar ett lås vars innehavare är borta, och även det registreras.
Providers i en installation utan internet
Körningar hämtar ingenting från internet. Velrix-providern finns alltid. Alla andra providers måste först finnas i installationens spegel:
- Importera providern med namn och version under Spegel i listan över stackar, till exempel
hashicorp/random 3.6.3. - Velrix laddar ned den en gång, kontrollerar dess signerade kontrollsummor och sparar den i ditt register. Just det här steget kräver en väg ut till providerns eget register.
En körning som behöver en provider som inte finns i spegeln misslyckas och talar om vilken: not in the realm’s mirror: hashicorp/random.
Ansible
En Ansible-stack fungerar på samma sätt. Planen är ansible-playbook --check --diff. Sammanfattningen visar för varje värd hur mycket som ändrades, var oförändrat eller misslyckades, och om värden gick att nå. Tillämpningen är den riktiga körningen av samma commit.
- Varje Ansible-stack har ett eget SSH-nyckelpar. Fliken Inställningar visar den publika halvan, med Lägg till bland SSH-nycklar, så att dina maskiner kan släppa in den.
- Anslut till projektnätet låter körningar nå de privata adresserna till dina maskiner på den server där körningen hamnar. Utan det når körningar bara publika adresser.
- Utan inventariefil är inventariet dina maskiner.
- SSH-värdnycklar kontrolleras vid varje körning. Velrix-maskiners nycklar är kända innan de startar. Andra värdars nycklar registreras första gången de används, och en körning mot en ändrad nyckel stoppas innan den ansluter.
Nästa steg
- Providern för OpenTofu och Terraform och Ansible-samlingen, i realmens Docs-fönster