Infra-RunbookEngine.psm1
|
# Infra-RunbookEngine - Automated Runbook Execution Engine # YAML decision trees, AI-generated runbooks, blast radius checks, approval workflows $Public = @(Get-ChildItem -Path "$PSScriptRoot\Public\*.ps1" -ErrorAction SilentlyContinue) $Private = @(Get-ChildItem -Path "$PSScriptRoot\Private\*.ps1" -ErrorAction SilentlyContinue) foreach ($file in @($Public + $Private)) { try { . $file.FullName } catch { Write-Error "Failed to import $($file.FullName): $_" } } # Ensure engine state directories exist $script:EngineRoot = Join-Path $env:USERPROFILE '.runbookengine' $script:ExecutionsPath = Join-Path $script:EngineRoot 'executions' $script:LearningsPath = Join-Path $script:EngineRoot 'learnings.json' $script:RunbooksPath = Join-Path $script:EngineRoot 'runbooks' $script:MaintenanceWindowsPath = Join-Path $script:EngineRoot 'maintenance-windows.json' $script:TemplatePath = Join-Path $PSScriptRoot 'Templates' foreach ($dir in @($script:EngineRoot, $script:ExecutionsPath, $script:RunbooksPath)) { if (-not (Test-Path $dir)) { New-Item -Path $dir -ItemType Directory -Force | Out-Null } } # Initialize learnings file if absent if (-not (Test-Path $script:LearningsPath)) { '[]' | Set-Content -Path $script:LearningsPath -Encoding UTF8 } # Initialize maintenance windows file if absent if (-not (Test-Path $script:MaintenanceWindowsPath)) { '[]' | Set-Content -Path $script:MaintenanceWindowsPath -Encoding UTF8 } Export-ModuleMember -Function $Public.BaseName |