grzegorznowak.cardano_node

Cardano Node Rolle

Ansible Lint CI Binary Integration

Installiert den Cardano Node als systemd-Dienst auf Ubuntu- und Debian-Systemen. Dann wird es mit Ansible-Tortilla umhüllt, um bestimmte Operationen kontrollierbar, idempotent und insgesamt einfacher zu gestalten.

Kann CNCLI hinzufügen und integrieren, wenn dies gewünscht wird.

Unterstützte Distributionen

Die Annahme und Unterstützung weiterer Distributionen hängt stark vom Feedback der Benutzer ab.

Bitte fügt eure Anwendungsfälle im Issue-Tracker hinzu, und wir werden diese im Laufe der Zeit bearbeiten.

Ubuntu

  • 20.04
  • 18.04

Debian

  • bullseye

Installation

Eine der folgenden Methoden:

  • ansible-galaxy install grzegorznowak.cardano_node
  • Das Repository direkt klonen

Beispiel-Playbook

Es gibt 2 Hauptinstallationsmethoden:

  • Kompilierung aus dem Quellcode
  • Verwendung vorgefertigter Binärdateien von IOHK

Kontrollierbar mit dem Flag cardano_install_method. Siehe den Abschnitt „Konfiguration“ weiter unten.

Die Installation aus vorgefertigten Binärdateien sollte in den meisten Fällen genügen, aber du kannst auch den Quellcode verwenden, um eine perfekte Nerd-Bauweise zu erreichen.

Diese Rolle versucht beide Ansätze zu testen.

Wenn vom GitHub geklont
- name: Cardano Node konvergieren
  hosts: all
  vars:
    cncli_add: true  # schließt CNCLI ein
    cardano_wallets:  # erstellt zwei Wallets für dich
      - einsparung
      - operationen
  roles:
    - cardano-node-role
Wenn mit ansible-galaxy installiert
- name: Cardano Node konvergieren
  hosts: all
  vars:
    cncli_add: true  # schließt CNCLI ein
    cardano_wallets:  # erstellt zwei Wallets für dich
      - einsparung
      - operationen
  roles:
    - grzegorznowak.cardano_node

Konfiguration & Nutzung

Standardmäßig wird Cardano für einen Benutzer und eine Gruppe namens cardano installiert. Dies ist eine empfohlene Praxis. Alle anderen Einstellmöglichkeiten sind in defaults/main.yml zu finden.

Detailliertere Anwendungsbeispiele und kopierbare Befehle werden in den nächsten Sprints bereitgestellt.

NFT-Token

Idempotent native NFT-Token mit dieser Rolle prägen. Es wird nicht erneut versucht, den Token zu prägen, wenn er bereits vorhanden und in der gewünschten Menge ist.

Die geprägten Token werden an die Adresse gesendet, die wir für das Prägen verwendet haben.

Minimale Konfiguration, die im Hauptnetz benötigt wird:

cardano_install_method: dist
active_network: main
cardano_wallets:
  - &wallet_default default
cardano_nfts:
  - slug: BurningGiraffe
    description: Burning Giraffe
    image: ""  # ein IPFS-Hash des NFT
    name: Burning Giraffe
    id: 1
    open_period: 1000000  # wie viele Slots für die Bearbeitung der NFT-Policy verfügbar sind
    quantity: 10
    wallet: *wallet_default

Native Tokens

Idempotent native Tokens (nicht NFTs) mit dieser Rolle prägen. Es wird nicht erneut versucht, den Token zu prägen, wenn er bereits vorhanden und in der gewünschten Menge ist.

Die geprägten Token werden an die Adresse gesendet, die wir für das Prägen verwendet haben.

Minimale Konfiguration, die im Hauptnetz benötigt wird:

cardano_install_method: dist
active_network: main
cardano_wallets:
  - &wallet_default default
cardano_assets:
  - name: MeinAsset
    quantity: 1000000
    wallet: *wallet_default  

Zahlungsadressen

Wir können ADA-Adressen im Zugriff behalten.

HINWEIS: Diese Rolle integriert (noch) keine Art von Wallet-Software. Was wir tun, ist, die benötigten Dateien zu erstellen, um Zahlungen mit CLI-Befehlen zu senden und zu empfangen. "Wallet" in diesem Kontext bedeutet einen benannten Pfad, der zusammengehörige Dateien enthält.

Der aktuelle Ansatz besteht darin, nur Wallets zu erstellen, die nicht existieren, und zu berichten, ob defekte Wallets gefunden werden - d.h. fehlende private Schlüssel. Aus Sicherheitsgründen werden wir nicht versuchen, bestehende Wallets zu löschen, auch wenn dies im Widerspruch zur Ansible-Philosophie steht, einen festgelegten Zustand des Systems zu definieren und darauf hinzuarbeiten.

# Füge hier eine Liste von Wallet-Namen hinzu, die du mit der Rolle verfolgen möchtest
cardano_wallets:
  - einsparung
  - operationen

Basierend auf dem obigen Beispiel - vorausgesetzt, es werden alle Standardwerte verwendet - werden die verwalteten Wallet-Adressen unter:

  • /home/cardano/wallets/einsparung/payment.addr
  • /home/cardano/wallets/operationen/payment.addr

neben den privaten Schlüsseln der Wallets

Node-Synchronisationsstatusprüfung

Blockiere die Ausführung eines Playbooks, bis der Cardano-Node vollständig synchronisiert ist.

- name: Warte, bis wir vollständig synchronisiert sind
  assert_cardano_synced:
    cardano_node_socket: "{{ cardano_node_socket }}"
    cardano_bin_path: "{{ cardano_bin_path }}"
    active_network: "{{ active_network }}"
    testnet_magic: "{{ network_magic }}"  # nur im Testnetz verwendet
  retries: 60
  delay: 240    # bis zu 4h für vollständige Synchronisation warten
  become: true
  become_user: "{{ cardano_user }}"
  register: sync_check_result
  until: sync_check_result.progress | int == 100

Mittelwertprüfung

Stelle sicher, dass die spezifische Adresse mindestens den angegebenen Betrag an Ada zur Verfügung hat. Nützlich, um einen Dienst zu überwachen, der immer etwas Ada haben muss, oder um spezifische Operationen zu blockieren, die bestimmte Beträge verfügbar haben müssen.

- set_fact
      wallet_to_check: default
      lovelace_needed: 1000000000

- name: Wallets sammeln
  cardano_wallet:
    cardano_bin_path: "{{ cardano_bin_path }}"
    name: "{{ wallet_to_check }}"
    active_network: "{{ active_network }}"
    testnet_magic: "{{ network_magic }}"  # nur im Testnetz verwendet
  become: true
  become_user: "{{ cardano_user }}"
  register: wallet_results

- name: Sicherstellen, dass wir etwas Lovelace haben
  assert_address_funded:
    cardano_node_socket: "{{ cardano_node_socket }}"
    cardano_bin_path: "{{ cardano_bin_path }}"
    active_network: "{{ active_network }}"
    testnet_magic: "{{ network_magic }}"  # nur im Testnetz verwendet
    expected_lovelace: "{{ lovelace_needed }}"
    address: "{{ wallet_results['wallets_addresses'][wallet_to_check] }}"    
  retries: 60
  delay: 240    # bis zu 4h für vollständige Synchronisation warten
  become: true
  become_user: "{{ cardano_user }}"
  register: lovelace_result
  until: lovelace_result.lovelace | int > lovelace_needed

Allgemeine Einstellungen

# Cardano-Benutzer
cardano_user: cardano
cardano_group: cardano
cardano_home_directory: "/home/{{ cardano_user }}"

# mögliche Optionen:
# src - aus dem Quellcode kompilieren
# dist - die offizielle Binärdatei verwenden
cardano_install_method: dist

# Versionsvariablen
ghc_version: 8.10.4
cabal_version: 3.4.0.0

# Gilt nur für die Kompilierung aus dem Quellcode
cardano_node_version: 1.33.0

# Gilt nur für die Installation aus dist
cardano_hydra_build: 9941151
# bestäetige immer deinen sha, sonst könnte ein Giftiges kommen
cardano_dist_sha_256: eb7fbc652f79bcb8f56699ed7fee174a4ed321307c7086838d44972136795543
cardano_dist_url: "https://hydra.iohk.io/build/{{ cardano_hydra_build }}/download/1"

# Dienstkonfiguration
cardano_listen_addr: 127.0.0.1
cardano_listen_port: 22322  # muss im oberen Bereich liegen, wenn es als nicht privilegierter Benutzer läuft

# CNCLI-Konfiguration
cncli_add: false  # auf 'true' setzen, um cncli mit dem cncli-sync-Dienst zu aktivieren 

Es gibt noch mehr, also schaut direkt in die Datei defaults/main.yml, um alle kleinen Details zu sehen.

Cardano CLI

Eines der Ziele dieses Repositories ist es, Cardano-Operationen mit Ansible-Tasks zu abstrahieren, aber es steht dir frei, direkt mit den Diensten und Binärdateien zu interagieren.

su cardano
cd ~/bin
./cardano-cli --help

Für Details zur Nutzung gehe direkt zur Dokumentation von cardano-cli

CNCLI

Für Details zur Nutzung siehe das ursprüngliche Repository

Dienste verwalten

Nutze es wie jeden anderen Dienst

# Verwaltung des cardano-node-Prozesses:
systemctl status cardano-node
systemctl restart cardano-node

# Allgemeine Protokolle anzeigen
journalctl -u cardano-node

Interaktion mit dem CNCLI-Sync-Dienst, wenn er aktiviert ist

# Verwaltung des cncli-sync-Prozesses
systemctl status cncli-sync
systemctl restart cncli-sync

# Allgemeine Protokolle anzeigen
journalctl -u cncli-sync

Integrationstests

lokal auf LXD

LXD sollte bereits installiert und konfiguriert sein.

Starte die vollständige Suite mit ./test-local.sh

Die Kompilierung der erforderlichen Binärdateien ist eine CPU-intensive Aufgabe, also sei auf einen langen Prozess vorbereitet.

In der Cloud über CI-Pipeline

CI wird auf einer DO-Infrastruktur aufgebaut und bei jeder bedeutenden Änderung im main-Zweig ausgelöst.

Um die Betriebskosten zu begrenzen, wird die Kompilierung von Quellcode derzeit nur gegen Focal Fossa durchgeführt.

Die vorgefertigte Binärdateien CI wird gegen Focal und Bionic durchgeführt.

Andere unterstützte Plattformen werden lokal bewertet.

Motivation

Diese Rolle ist eine fortlaufende Erkundung der Konfiguration von Cardano-Backends und -Diensten, deren Funktionalität im Laufe der Zeit wachsen wird, während wir den Suchbereich besser verstehen.

Erstellt mit hohen TDD- und Codierungsstandards, um sicherzustellen, dass Änderungen keine der bestehenden Komponenten brechen.

Denk daran, immer nach Tests zu fragen, wenn du deine Ansible-Pizza bestellst.

Wann sollte ich diese Rolle besser als das offizielle Docker-Image verwenden?

Zunächst einmal ist Docker ein großartiges Werkzeug, das ich in meinen Projekten oft verwende, um konsistente Bilder für konkrete Aufgaben bereitzustellen. Die Spezifität von Docker hat ihren Preis, und das ist, dass es nicht einfach ist, wenn es um Netzwerk oder systemd geht. Es kann dies nicht wirklich umfassend tun, und daher auch Kubernetes, Docker-Swarms usw. Das ist durchaus akzeptabel, bis man tatsächlich ein maßgeschneidertes Setup mit Mesh VPN oder Live-Überwachung von Diensten benötigt; man fängt an, Schicht um Schicht von Komplexität zum System hinzuzufügen, nur um Probleme zu lösen, die Docker selbst verursacht hat; mit vielen Abhängigkeiten, die nicht einfach mit dem Prinzip infra-as-code bereitgestellt werden können.

Wenn ich in den Jahren der Entwicklung etwas gelernt habe, dann dass es wirklich keine Lösung gibt, die zu allem passt. Irgendwann, wenn eine Produktionsplattform in Betracht gezogen wird, ist es einfach viel mehr Arbeit, Docker in den Rahmen einer korrekt definierten und kontrollierten Umgebung hineinzuzwingen, als eine gut verstandene und minimal festgelegte Menge von Rollen zu kompilieren, die spezifischen Nutzen bieten.

Wenn du das System nicht mit einem Docker-first-Ansatz entwickelst, den ich persönlich für eine eher umständliche Methode halte, dann wirst du vielleicht Freude an dieser Rolle haben. Mit dem zusätzlichen Vorteil, dass sie durchscheinend ist; sodass du dir nie Sorgen machen musst, was dein Docker-Image vorinstalliert hat, abgesehen von dem, was es behauptet zu tun.

Erste Tests wurden mit LXD-Containern durchgeführt, die leichtgewichtig, schnell und Ubuntu-nativ sind, und die tatsächlich Server auf einem Niveau simulieren können, das Docker wirklich nicht kann.

Bemerkenswert

Dank Molecule befinden wir uns momentan in der Ära des testgetriebenen infra-as-code. Was auch dieses Projekt verkörpert. Also besuche bitte https://github.com/ansible-community/molecule und gib ihm etwas Liebe und Aufmerksamkeit.

Zielgruppe

Entwickler und Ops

Fahrplan

Das Projekt wird mit wöchentlichen Sprints durchgeführt. Sieh dir an, was derzeit bearbeitet wird.

Der sehr breite 10k Fußblick auf das, was generell geplant ist:

  • Eine Grundinstallation des Cardano Nodes
  • Vollständige CI/CD
  • Integration von CNCLI
  • Automatisierung des Prägens nativer Token
  • Automatisierung des Prägens von NFTs
  • Schnittstellen für Smart Contracts
  • Mehr/bessere Bereitstellungsbeispiele
  • Aufzeigen, was das Ergebnis des Betriebs dieser Rolle als öffentlicher Node wäre
  • Automatisierung der Schlüsselverwaltung

Das Obige kann sich ändern oder kann in maßgeschneiderte Rollen zur Modularität umformuliert werden.

Über das Projekt

Cardano node for Debians and Ubuntus wrapped with Ops to simplify the most common use cases, like payment address creation, sync status checks, held Ada balance assertions and more being added. Developed using tests-first approach for unmatched stability.

Installieren
ansible-galaxy install grzegorznowak.cardano_node
GitHub Repository
Lizenz
mit
Downloads
73
Besitzer
Let's solve some more problems, shall we ?