@page "/ansible/inventory" @using RackPeek.Domain.UseCases.Ansible @inject AnsibleInventoryGeneratorUseCase InventoryUseCase
Ansible Inventory Generator
Format
Select output format
Group By Tags
Comma-separated tag names
Group By Labels
Creates groups like env_prod, site_london
Global Variables
One per line: key=value
@if (_warnings.Any()) {
Warnings
}
Generated Inventory
@code { private InventoryFormat _selectedFormat = InventoryFormat.Ini; private string _groupByTagsRaw = "prod, staging"; private string _groupByLabelsRaw = "env, site"; private string _globalVarsRaw = @"ansible_user=ansible ansible_python_interpreter=/usr/bin/python3"; private string _inventoryText = string.Empty; private List _warnings = new(); private async Task GenerateInventory() { try { _warnings.Clear(); _inventoryText = string.Empty; var options = new InventoryOptions { Format = _selectedFormat, GroupByTags = ParseCsv(_groupByTagsRaw), GroupByLabelKeys = ParseCsv(_groupByLabelsRaw), GlobalVars = ParseGlobalVars(_globalVarsRaw) }; var result = await InventoryUseCase.ExecuteAsync(options); if (result is null) { _warnings.Add("Inventory generation returned null."); return; } _inventoryText = result.InventoryText; _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(); } private static IDictionary ParseGlobalVars(string raw) { var dict = new Dictionary(StringComparer.OrdinalIgnoreCase); if (string.IsNullOrWhiteSpace(raw)) return dict; var lines = raw.Split('\n', StringSplitOptions.RemoveEmptyEntries); foreach (var line in lines) { var trimmed = line.Trim(); if (string.IsNullOrWhiteSpace(trimmed)) continue; var parts = trimmed.Split('=', 2); if (parts.Length != 2) continue; var key = parts[0].Trim(); var value = parts[1].Trim(); if (!string.IsNullOrWhiteSpace(key)) dict[key] = value; } return dict; } }