icinga-powershell-framework/lib/core/installer/Install-Icinga.psm1

165 lines
7.4 KiB
PowerShell
Raw Normal View History

function Install-Icinga()
{
param (
[string]$InstallCommand = $null,
[string]$InstallFile = ''
);
if ($null -eq $global:Icinga) {
$global:Icinga = @{ };
}
if ($global:Icinga.ContainsKey('InstallWizard') -eq $FALSE) {
$global:Icinga.Add(
'InstallWizard', @{
'AdminShell' = (Test-AdministrativeShell);
'LastInput' = '';
'LastNotice' = '';
'LastError' = '';
'HeaderPreview' = '';
'DirectorSelfService' = $FALSE;
'DirectorRegisteredHost' = $FALSE;
'LastParent' = [System.Collections.ArrayList]@();
'LastValues' = @();
2021-08-06 12:12:27 -04:00
'DisabledEntries' = @{ };
'Config' = @{ };
'ConfigSwap' = @{ };
'ParentConfig' = $null;
'Menu' = 'Install-Icinga';
'NextCommand' = '';
'NextArguments' = $null;
'HeaderSelection' = $null;
'DisplayAdvanced' = $FALSE;
'ShowAdvanced' = $FALSE;
'ShowHelp' = $FALSE;
'ShowCommand' = $FALSE;
'DeleteValues' = $FALSE;
'HeaderPrint' = $FALSE;
'JumpToSummary' = $FALSE;
'Closing' = $FALSE;
}
);
}
if ([string]::IsNullOrEmpty($InstallFile) -eq $FALSE) {
$InstallCommand = Read-IcingaFileSecure -File $InstallFile -ExitOnReadError;
}
# Use our install command to configure everything
if ([string]::IsNullOrEmpty($InstallCommand) -eq $FALSE) {
Disable-IcingaFrameworkConsoleOutput;
# Add our "old" swap internally
$OldConfigSwap = Get-IcingaPowerShellConfig -Path 'Framework.Config.Swap';
[hashtable]$IcingaConfiguration = Convert-IcingaForwindowsManagementConsoleJSONConfig -Config (ConvertFrom-Json -InputObject $InstallCommand);
# First run our configuration values
Invoke-IcingaForWindowsManagementConsoleCustomConfig -IcingaConfiguration $IcingaConfiguration;
# In case we use the director, we require to first fetch all basic values from the Self-Service API then
# require to register the host to fet the remaining content
if ($IcingaConfiguration.ContainsKey('IfW-DirectorSelfServiceKey') -And $IcingaConfiguration.ContainsKey('IfW-DirectorUrl')) {
Resolve-IcingaForWindowsManagementConsoleInstallationDirectorTemplate;
Resolve-IcingaForWindowsManagementConsoleInstallationDirectorTemplate -Register;
Disable-IcingaFrameworkConsoleOutput;
} else {
# Now load all remaining values we haven't set and define the defaults
Add-IcingaForWindowsInstallationAdvancedEntries;
}
# Now apply our configuration again to ensure the defaults are overwritten again
# Suite a mess, but we can improve this later
Invoke-IcingaForWindowsManagementConsoleCustomConfig -IcingaConfiguration $IcingaConfiguration;
Enable-IcingaFrameworkConsoleOutput;
Start-IcingaForWindowsInstallation -Automated;
# Set our "old" swap live again. By doing so, we can still continue our old
# configuration
Set-IcingaPowerShellConfig -Path 'Framework.Config.Swap' -Value $OldConfigSwap;
return;
}
while ($TRUE) {
# Do nothing else anymore in case we are closing the management console
if ($global:Icinga.InstallWizard.Closing) {
break;
}
$FrameworkInstalled = Get-IcingaPowerShellConfig -Path 'Framework.Installed';
if ($null -eq $FrameworkInstalled) {
$FrameworkInstalled = $FALSE;
}
if ([string]::IsNullOrEmpty($global:Icinga.InstallWizard.NextCommand) -Or $global:Icinga.InstallWizard.NextCommand -eq 'Install-Icinga') {
Show-IcingaForWindowsInstallerMenu `
-Header 'What do you want to do?' `
-Entries @(
@{
'Caption' = 'Installation';
'Command' = 'Show-IcingaForWindowsInstallerMenuInstallWindows';
'Help' = 'Allows you to install Icinga for Windows with all required components and options.'
},
@{
'Caption' = 'Install components';
'Command' = 'Show-IcingaForWindowsMenuInstallComponents';
'Help' = 'Allows you to install new components for Icinga for Windows from your repositories.';
'Disabled' = (-Not ($global:Icinga.InstallWizard.AdminShell));
2021-07-16 15:38:08 -04:00
},
@{
'Caption' = 'Update components';
'Command' = 'Show-IcingaForWindowsMenuUpdateComponents';
'Help' = 'Allows you to modify your current Icinga for Windows installation.';
'Disabled' = (-Not ($global:Icinga.InstallWizard.AdminShell));
},
@{
'Caption' = 'Remove components';
'Command' = 'Show-IcingaForWindowsMenuRemoveComponents';
'Help' = 'Allows you to modify your current Icinga for Windows installation.';
'Disabled' = (-Not ($global:Icinga.InstallWizard.AdminShell));
},
@{
'Caption' = 'Manage environment';
'Command' = 'Show-IcingaForWindowsMenuManage';
'Help' = 'Allows you to modify your current Icinga for Windows installation.';
},
@{
'Caption' = 'List environment';
'Command' = 'Show-IcingaForWindowsMenuListEnvironment';
'Help' = 'Shows you an overview of your current Icinga for Windows installation, including installed components and system informations.';
}
) `
-DefaultIndex 0;
} else {
$NextArguments = $global:Icinga.InstallWizard.NextArguments;
if ($global:Icinga.InstallWizard.NextCommand.Contains(':')) {
$NextArguments = @{
'Value' = ($global:Icinga.InstallWizard.NextCommand.Split(':')[1]);
};
$global:Icinga.InstallWizard.NextCommand = $global:Icinga.InstallWizard.NextCommand.Split(':')[0];
}
try {
if ($null -ne $NextArguments -And $NextArguments.Count -ne 0) {
& $global:Icinga.InstallWizard.NextCommand @NextArguments;
} else {
& $global:Icinga.InstallWizard.NextCommand;
}
} catch {
$ErrMsg = $_.Exception.Message;
$global:Icinga.InstallWizard.LastError = [string]::Format('Failed to enter menu "{0}". Error "{1}', $global:Icinga.InstallWizard.NextCommand, $ErrMsg);
$global:Icinga.InstallWizard.NextCommand = 'Install-Icinga';
$global:Icinga.InstallWizard.NextArguments = @{ };
}
}
}
}