@page "/ssh/export" @using RackPeek.Domain.UseCases.SSH @inject SshConfigExportUseCase SshUseCase
SSH Config Export
Include Tags
Only include resources with these tags (optional)
Default SSH User
Used if ssh_user or ansible_user label is not defined
Default SSH Port
Used if ssh_port or ansible_port label is not defined
Default Identity File
Used if ssh_identity_file label is not defined
@if (_warnings.Any()) {
Warnings
}
Generated SSH Config
@code { private string _includeTagsRaw = string.Empty; private string? _defaultUser = "ubuntu"; private int _defaultPort = 22; private string? _defaultIdentityFile = "~/.ssh/id_rsa"; private string _sshText = string.Empty; private List _warnings = new(); private async Task GenerateExport() { try { _warnings.Clear(); _sshText = string.Empty; var options = new SshExportOptions { IncludeTags = ParseCsv(_includeTagsRaw), DefaultUser = string.IsNullOrWhiteSpace(_defaultUser) ? null : _defaultUser, DefaultPort = _defaultPort, DefaultIdentityFile = string.IsNullOrWhiteSpace(_defaultIdentityFile) ? null : _defaultIdentityFile }; var result = await SshUseCase.ExecuteAsync(options); if (result is null) { _warnings.Add("SSH export returned null."); return; } _sshText = result.ConfigText; _warnings = result.Warnings.ToList(); } catch (Exception ex) { _warnings.Clear(); _warnings.Add($"Unexpected error: {ex.Message}"); } } private static IReadOnlyList ParseCsv(string raw) { if (string.IsNullOrWhiteSpace(raw)) return []; return raw.Split(',', StringSplitOptions.RemoveEmptyEntries) .Select(x => x.Trim()) .Where(x => !string.IsNullOrWhiteSpace(x)) .ToArray(); } }