143 lines
4.2 KiB
Plaintext
143 lines
4.2 KiB
Plaintext
|
|
# Info: KCL Polkadot Node task schemas for provisioning (Provisioning)
|
||
|
|
# Author: Provisioning System
|
||
|
|
# Release: 0.0.1
|
||
|
|
# Date: 2025-07-24
|
||
|
|
|
||
|
|
import regex
|
||
|
|
|
||
|
|
schema User:
|
||
|
|
"""
|
||
|
|
User settings for Polkadot node
|
||
|
|
"""
|
||
|
|
name: str
|
||
|
|
group: str = name
|
||
|
|
home?: str = "/home/${name}"
|
||
|
|
|
||
|
|
schema SSL:
|
||
|
|
"""
|
||
|
|
SSL certificate configuration
|
||
|
|
"""
|
||
|
|
enabled: bool = False
|
||
|
|
cert_file?: str
|
||
|
|
key_file?: str
|
||
|
|
ca_file?: str
|
||
|
|
|
||
|
|
check:
|
||
|
|
not enabled or cert_file != Undefined and len(cert_file) > 0, "cert_file required when SSL enabled"
|
||
|
|
not enabled or key_file != Undefined and len(key_file) > 0, "key_file required when SSL enabled"
|
||
|
|
|
||
|
|
schema WSS:
|
||
|
|
"""
|
||
|
|
Secure WebSocket configuration
|
||
|
|
"""
|
||
|
|
enabled: bool = False
|
||
|
|
port: int = 443
|
||
|
|
domain?: str
|
||
|
|
proxy_type: "nginx" | "apache" = "nginx"
|
||
|
|
rate_limit: int = 100 # requests per minute
|
||
|
|
ssl: SSL = {}
|
||
|
|
|
||
|
|
check:
|
||
|
|
1 <= port <= 65535, "WSS port must be between 1 and 65535"
|
||
|
|
not enabled or ssl.enabled, "SSL must be enabled for WSS"
|
||
|
|
not enabled or domain != Undefined and len(domain) > 0, "domain required for WSS"
|
||
|
|
|
||
|
|
schema Pruning:
|
||
|
|
"""
|
||
|
|
Pruning configuration for Polkadot node
|
||
|
|
"""
|
||
|
|
enabled: bool = True
|
||
|
|
mode: "state" | "block" | "both" = "state"
|
||
|
|
blocks_to_keep: int = 256
|
||
|
|
state_pruning: int = 256
|
||
|
|
block_pruning?: int = 256 if mode == "block" else Undefined
|
||
|
|
|
||
|
|
check:
|
||
|
|
blocks_to_keep > 0, "blocks_to_keep must be positive"
|
||
|
|
state_pruning > 0, "state_pruning must be positive"
|
||
|
|
block_pruning == Undefined or block_pruning > 0, "block_pruning must be positive if set"
|
||
|
|
|
||
|
|
schema Network:
|
||
|
|
"""
|
||
|
|
Network configuration
|
||
|
|
"""
|
||
|
|
chain: "polkadot" | "kusama" | "westend" = "polkadot"
|
||
|
|
listen_addr: str = "/ip4/0.0.0.0/tcp/30333"
|
||
|
|
public_addr?: str
|
||
|
|
bootnodes: [str] = []
|
||
|
|
reserved_nodes: [str] = []
|
||
|
|
reserved_only: bool = False
|
||
|
|
max_peers: int = 50
|
||
|
|
max_peers_light: int = 100
|
||
|
|
|
||
|
|
check:
|
||
|
|
max_peers > 0, "max_peers must be positive"
|
||
|
|
max_peers_light > 0, "max_peers_light must be positive"
|
||
|
|
|
||
|
|
schema RPC:
|
||
|
|
"""
|
||
|
|
RPC configuration
|
||
|
|
"""
|
||
|
|
enabled: bool = True
|
||
|
|
bind_addr: str = "127.0.0.1"
|
||
|
|
port: int = 9944
|
||
|
|
ws_port: int = 9944
|
||
|
|
http_port: int = 9933
|
||
|
|
max_connections: int = 100
|
||
|
|
cors: [str] = ["all"]
|
||
|
|
methods: [str] = ["safe"]
|
||
|
|
rate_limit?: int = 1000 # requests per minute
|
||
|
|
|
||
|
|
check:
|
||
|
|
1 <= port <= 65535, "RPC port must be between 1 and 65535"
|
||
|
|
1 <= ws_port <= 65535, "WebSocket port must be between 1 and 65535"
|
||
|
|
1 <= http_port <= 65535, "HTTP port must be between 1 and 65535"
|
||
|
|
max_connections > 0, "max_connections must be positive"
|
||
|
|
|
||
|
|
schema Telemetry:
|
||
|
|
"""
|
||
|
|
Telemetry configuration
|
||
|
|
"""
|
||
|
|
enabled: bool = True
|
||
|
|
url: str = "wss://telemetry.polkadot.io/submit/"
|
||
|
|
verbosity: int = 0
|
||
|
|
|
||
|
|
check:
|
||
|
|
0 <= verbosity <= 9, "verbosity must be between 0 and 9"
|
||
|
|
|
||
|
|
schema PolkadotNode:
|
||
|
|
"""
|
||
|
|
Polkadot node configuration
|
||
|
|
"""
|
||
|
|
name: str = "polkadot-node"
|
||
|
|
version: str = "latest"
|
||
|
|
node_type: "full" | "light" | "validator" = "full"
|
||
|
|
sync_mode: "full" | "fast" | "warp" = "warp"
|
||
|
|
pruning: Pruning = {}
|
||
|
|
archive_mode: bool = False
|
||
|
|
run_user: User = {
|
||
|
|
name = "polkadot"
|
||
|
|
}
|
||
|
|
work_path: str = "/var/lib/polkadot"
|
||
|
|
config_path: str = "/etc/polkadot"
|
||
|
|
bin_path: str = "/usr/local/bin/polkadot"
|
||
|
|
base_path: str = "/var/lib/polkadot/data"
|
||
|
|
network: Network = {}
|
||
|
|
rpc: RPC = {}
|
||
|
|
telemetry: Telemetry = {}
|
||
|
|
wss: WSS = {}
|
||
|
|
log_level: "error" | "warn" | "info" | "debug" | "trace" = "info"
|
||
|
|
log_targets: [str] = []
|
||
|
|
execution: "native" | "wasm" | "both" = "wasm"
|
||
|
|
wasm_execution: "compiled" | "interpreted" = "compiled"
|
||
|
|
state_cache_size: int = 67108864 # 64MB
|
||
|
|
db_cache: int = 1024 # MB
|
||
|
|
|
||
|
|
check:
|
||
|
|
len(run_user.name) > 0, "Check run_user name"
|
||
|
|
len(work_path) > 0, "Check work_path"
|
||
|
|
len(config_path) > 0, "Check config_path"
|
||
|
|
len(base_path) > 0, "Check base_path"
|
||
|
|
state_cache_size > 0, "state_cache_size must be positive"
|
||
|
|
db_cache > 0, "db_cache must be positive"
|
||
|
|
not (archive_mode and pruning.enabled), "Cannot enable both archive mode and pruning"
|