Examples/Plugin-Creation.ps1
|
# Plugin Creation Example <# .SYNOPSIS Demonstrates how to create a plugin for ArgosCCF .DESCRIPTION Shows the complete process of creating, installing, and executing a plugin. #> # Import ArgosCCF Import-Module "$PSScriptRoot\..\ArgosCCF.psd1" -Force Init-CCFLogger -FileName "PluginCreation_Example.log" Log-Header "=== Plugin Creation Demo ===" # Step 1: Create plugin directory $pluginDir = Join-Path (Get-CCFPath -Target "Plugins") "DemoPlugin" if (-not (Test-Path $pluginDir)) { New-Item -ItemType Directory -Path $pluginDir -Force | Out-Null } Log-Success "Created plugin directory: $pluginDir" # Step 2: Create plugin manifest $manifest = @{ Name = "DemoPlugin" Version = "1.0.0" Author = "ArgosCCF Demo" Description = "A demonstration plugin showing lifecycle hooks" } $manifestPath = Join-Path $pluginDir "ccf_plugin.json" $manifest | ConvertTo-Json | Set-Content $manifestPath -Force Log-Success "Created plugin manifest" # Step 3: Create plugin script with lifecycle hooks $pluginScript = @' <# .NAME DemoPlugin .DESCRIPTION Demonstration plugin with lifecycle hooks .VERSION 1.0.0 .AUTHOR ArgosCCF Demo #> param($Arguments) function Before-Execute { param($Arguments) Log-Info "[DemoPlugin] Before-Execute hook called" Log-Info "[DemoPlugin] Initializing resources..." } function After-Execute { param($Result) Log-Info "[DemoPlugin] After-Execute hook called" Log-Info "[DemoPlugin] Cleaning up resources..." Log-Info "[DemoPlugin] Result was: $Result" } # Main plugin logic Log-Info "[DemoPlugin] Main execution starting" $taskName = if ($Arguments.TaskName) { $Arguments.TaskName } else { "DefaultTask" } Log-Info "[DemoPlugin] Executing task: $taskName" # Simulate some work Start-Sleep -Milliseconds 500 $result = @{ Status = "Success" Task = $taskName Timestamp = Get-Date Message = "Plugin executed successfully" } Log-Success "[DemoPlugin] Task completed" return $result '@ $pluginPath = Join-Path $pluginDir "DemoPlugin.ps1" $pluginScript | Set-Content $pluginPath -Force Log-Success "Created plugin script" # Step 4: Discover the plugin Log-Header "--- Discovering Plugins ---" $plugins = Get-CCFPlugins $demoPlugin = $plugins | Where-Object { $_.Name -eq "DemoPlugin" } if ($demoPlugin) { Log-Success "Plugin discovered successfully" Write-Host " Name: $($demoPlugin.Name)" -ForegroundColor Cyan Write-Host " Version: $($demoPlugin.Version)" -ForegroundColor Cyan Write-Host " Author: $($demoPlugin.Author)" -ForegroundColor Cyan Write-Host " Description: $($demoPlugin.Description)" -ForegroundColor Cyan } # Step 5: Execute the plugin Log-Header "--- Executing Plugin ---" $result = Invoke-CCFPlugin -Plugin $demoPlugin -Arguments @{ TaskName = "BackupDatabase" } Write-Host "`nPlugin Result:" -ForegroundColor Green $result | Format-List # Step 6: Execute in hardened mode (sandboxed) Log-Header "--- Executing in Hardened Mode ---" $hardenedResult = Invoke-CCFPlugin -Plugin $demoPlugin -Arguments @{ TaskName = "SecureOperation" } -HardenedMode Write-Host "`nHardened Mode Result:" -ForegroundColor Green $hardenedResult | Format-List Log-Header "=== Plugin Creation Demo Complete ===" Write-Host "`nYour plugin is located at: $pluginDir" -ForegroundColor Cyan Write-Host "You can modify it and reload by running Get-CCFPlugins again" -ForegroundColor Yellow |