Merge pull request #502 from bwuch/master
vRealize Automation SaltStack Config API wrapper
This commit is contained in:
41
Modules/SaltStackConfig/SaltStackConfig.Format.ps1xml
Normal file
41
Modules/SaltStackConfig/SaltStackConfig.Format.ps1xml
Normal file
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<Configuration>
|
||||
<ViewDefinitions>
|
||||
<View>
|
||||
<Name>SscConnection</Name>
|
||||
<ViewSelectedBy>
|
||||
<TypeName>SscConnection</TypeName>
|
||||
</ViewSelectedBy>
|
||||
<TableControl>
|
||||
<TableHeaders>
|
||||
<TableColumnHeader>
|
||||
<Width>30</Width>
|
||||
<Label>Name</Label>
|
||||
</TableColumnHeader>
|
||||
<TableColumnHeader>
|
||||
<Width>30</Width>
|
||||
<Label>User</Label>
|
||||
</TableColumnHeader>
|
||||
<TableColumnHeader>
|
||||
<Label>Authenticated</Label>
|
||||
</TableColumnHeader>
|
||||
</TableHeaders>
|
||||
<TableRowEntries>
|
||||
<TableRowEntry>
|
||||
<TableColumnItems>
|
||||
<TableColumnItem>
|
||||
<PropertyName>Name</PropertyName>
|
||||
</TableColumnItem>
|
||||
<TableColumnItem>
|
||||
<PropertyName>User</PropertyName>
|
||||
</TableColumnItem>
|
||||
<TableColumnItem>
|
||||
<PropertyName>Authenticated</PropertyName>
|
||||
</TableColumnItem>
|
||||
</TableColumnItems>
|
||||
</TableRowEntry>
|
||||
</TableRowEntries>
|
||||
</TableControl>
|
||||
</View>
|
||||
</ViewDefinitions>
|
||||
</Configuration>
|
||||
127
Modules/SaltStackConfig/SaltStackConfig.psd1
Normal file
127
Modules/SaltStackConfig/SaltStackConfig.psd1
Normal file
@@ -0,0 +1,127 @@
|
||||
<#
|
||||
Copyright 2021 VMware, Inc.
|
||||
SPDX-License-Identifier: BSD-2-Clause
|
||||
#>
|
||||
|
||||
#
|
||||
# Module manifest for module 'SaltStackConfig'
|
||||
#
|
||||
# Generated by: Brian Wuchner
|
||||
#
|
||||
# Generated on: 11/28/2021
|
||||
#
|
||||
|
||||
@{
|
||||
|
||||
# Script module or binary module file associated with this manifest.
|
||||
RootModule = 'SaltStackConfig.psm1'
|
||||
|
||||
# Version number of this module.
|
||||
ModuleVersion = '0.0.5'
|
||||
|
||||
# Supported PSEditions
|
||||
# CompatiblePSEditions = @()
|
||||
|
||||
# ID used to uniquely identify this module
|
||||
GUID = '9a36e984-2f63-450e-8c14-a6bccb18f87a'
|
||||
|
||||
# Author of this module
|
||||
Author = 'Brian Wuchner'
|
||||
|
||||
# Company or vendor of this module
|
||||
CompanyName = 'VMware'
|
||||
|
||||
# Copyright statement for this module
|
||||
Copyright = '(c) VMware. All rights reserved.'
|
||||
|
||||
# Description of the functionality provided by this module
|
||||
Description = 'Community sourced PowerShell wrapper module for the vRealize Automation SaltStack Config API.'
|
||||
|
||||
# Minimum version of the Windows PowerShell engine required by this module
|
||||
PowerShellVersion = '4.0'
|
||||
|
||||
# Name of the Windows PowerShell host required by this module
|
||||
# PowerShellHostName = ''
|
||||
|
||||
# Minimum version of the Windows PowerShell host required by this module
|
||||
# PowerShellHostVersion = ''
|
||||
|
||||
# Minimum version of Microsoft .NET Framework required by this module. This prerequisite is valid for the PowerShell Desktop edition only.
|
||||
# DotNetFrameworkVersion = ''
|
||||
|
||||
# Minimum version of the common language runtime (CLR) required by this module. This prerequisite is valid for the PowerShell Desktop edition only.
|
||||
# CLRVersion = ''
|
||||
|
||||
# Processor architecture (None, X86, Amd64) required by this module
|
||||
# ProcessorArchitecture = ''
|
||||
|
||||
# Modules that must be imported into the global environment prior to importing this module
|
||||
# RequiredModules = @()
|
||||
|
||||
# Assemblies that must be loaded prior to importing this module
|
||||
# RequiredAssemblies = @()
|
||||
|
||||
# Script files (.ps1) that are run in the caller's environment prior to importing this module.
|
||||
# ScriptsToProcess = @()
|
||||
|
||||
# Type files (.ps1xml) to be loaded when importing this module
|
||||
# TypesToProcess = @()
|
||||
|
||||
# Format files (.ps1xml) to be loaded when importing this module
|
||||
FormatsToProcess = @('SaltStackConfig.Format.ps1xml')
|
||||
|
||||
# Modules to import as nested modules of the module specified in RootModule/ModuleToProcess
|
||||
# NestedModules = @()
|
||||
|
||||
# Functions to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no functions to export.
|
||||
FunctionsToExport = @('Connect-SscServer', 'Disconnect-SscServer', 'Get-SscActivity', 'Get-SscData', 'Get-SscJob', 'Get-SscMaster', 'Get-SscMinionCache', 'Get-SscReturn', 'Get-SscSchedule')
|
||||
|
||||
# Cmdlets to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no cmdlets to export.
|
||||
CmdletsToExport = @()
|
||||
|
||||
# Variables to export from this module
|
||||
VariablesToExport = '*'
|
||||
|
||||
# Aliases to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no aliases to export.
|
||||
AliasesToExport = @()
|
||||
|
||||
# DSC resources to export from this module
|
||||
# DscResourcesToExport = @()
|
||||
|
||||
# List of all modules packaged with this module
|
||||
# ModuleList = @()
|
||||
|
||||
# List of all files packaged with this module
|
||||
# FileList = @()
|
||||
|
||||
# Private data to pass to the module specified in RootModule/ModuleToProcess. This may also contain a PSData hashtable with additional module metadata used by PowerShell.
|
||||
PrivateData = @{
|
||||
|
||||
PSData = @{
|
||||
|
||||
# Tags applied to this module. These help with module discovery in online galleries.
|
||||
# Tags = @()
|
||||
|
||||
# A URL to the license for this module.
|
||||
# LicenseUri = ''
|
||||
|
||||
# A URL to the main website for this project.
|
||||
# ProjectUri = ''
|
||||
|
||||
# A URL to an icon representing this module.
|
||||
# IconUri = ''
|
||||
|
||||
# ReleaseNotes of this module
|
||||
# ReleaseNotes = ''
|
||||
|
||||
} # End of PSData hashtable
|
||||
|
||||
} # End of PrivateData hashtable
|
||||
|
||||
# HelpInfo URI of this module
|
||||
# HelpInfoURI = ''
|
||||
|
||||
# Default prefix for commands exported from this module. Override the default prefix using Import-Module -Prefix.
|
||||
# DefaultCommandPrefix = ''
|
||||
|
||||
}
|
||||
255
Modules/SaltStackConfig/SaltStackConfig.psm1
Normal file
255
Modules/SaltStackConfig/SaltStackConfig.psm1
Normal file
@@ -0,0 +1,255 @@
|
||||
<#
|
||||
Copyright 2021 VMware, Inc.
|
||||
SPDX-License-Identifier: BSD-2-Clause
|
||||
#>
|
||||
Function Connect-SscServer {
|
||||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created by: Brian Wuchner
|
||||
Date: November 27, 2021
|
||||
Blog: www.enterpriseadmins.org
|
||||
Twitter: @bwuch
|
||||
===========================================================================
|
||||
.SYNOPSIS
|
||||
Use this function to create the cookie/header to connect to SaltStack Config RaaS API
|
||||
.DESCRIPTION
|
||||
This function will allow you to connect to a vRealize Automation SaltStack Config RaaS API.
|
||||
A global variable will be set with the Servername & Cookie/Header value for use by other functions.
|
||||
.EXAMPLE
|
||||
PS C:\> Connect-SscServer -Server 'salt.example.com' -Username 'root' -Password 'VMware1!'
|
||||
This will default to internal user authentication.
|
||||
.EXAMPLE
|
||||
PS C:\> Connect-SscServer -Server 'salt.example.com' -Username 'bwuchner' -Password 'MyPassword1!' -AuthSource 'LAB Directory'
|
||||
This will use the 'Lab Directory' LDAP authentication source.
|
||||
#>
|
||||
param(
|
||||
[Parameter(Mandatory=$true)][string]$server,
|
||||
[Parameter(Mandatory=$true)][string]$username,
|
||||
[Parameter(Mandatory=$true)][ValidateNotNullOrEmpty()][string]$password,
|
||||
[string]$AuthSource='internal'
|
||||
)
|
||||
|
||||
$loginBody = @{'username'=$username; 'password'=$password; 'config_name'=$AuthSource}
|
||||
try {
|
||||
$webRequest = Invoke-WebRequest -Uri "https://$server/account/login" -SessionVariable ws
|
||||
$ws.headers.Add('X-Xsrftoken', $webRequest.headers.'x-xsrftoken')
|
||||
$webRequest = Invoke-WebRequest -Uri "https://$server/account/login" -WebSession $ws -method POST -body (ConvertTo-Json $loginBody)
|
||||
$webRequestJson = ConvertFrom-JSON $webRequest.Content
|
||||
$global:DefaultSscConnection = New-Object psobject -property @{ 'SscWebSession'=$ws; 'Name'=$server; 'ConnectionDetail'=$webRequestJson;
|
||||
'User'=$webRequestJson.attributes.config_driver +'\'+ $username; 'Authenticated'=$webRequestJson.authenticated; PSTypeName='SscConnection' }
|
||||
|
||||
# Return the connection object
|
||||
$global:DefaultSscConnection
|
||||
} catch {
|
||||
Write-Error ("Failure connecting to $server. " + $_)
|
||||
} # end try/catch block
|
||||
}
|
||||
|
||||
Function Disconnect-SscServer {
|
||||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created by: Brian Wuchner
|
||||
Date: November 27, 2021
|
||||
Blog: www.enterpriseadmins.org
|
||||
Twitter: @bwuch
|
||||
===========================================================================
|
||||
.SYNOPSIS
|
||||
This function clears a previously created cookie/header used to connect to SaltStack Config
|
||||
.DESCRIPTION
|
||||
This function will clear the global variable used to connect to the vRealize Automation SaltStack Config RaaS API
|
||||
.EXAMPLE
|
||||
PS C:\> Disconnect-SscServer
|
||||
#>
|
||||
if ($global:DefaultSscConnection) {
|
||||
$global:DefaultSscConnection = $null
|
||||
} else {
|
||||
Write-Error 'Could not find an existing connection.'
|
||||
} # end if
|
||||
}
|
||||
|
||||
Function Get-SscData {
|
||||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created by: Brian Wuchner
|
||||
Date: November 27, 2021
|
||||
Blog: www.enterpriseadmins.org
|
||||
Twitter: @bwuch
|
||||
===========================================================================
|
||||
.SYNOPSIS
|
||||
Use this function to call the SaltStack Config API.
|
||||
Additional helper functions will call this function, this is where the majority of the logic will happen.
|
||||
.DESCRIPTION
|
||||
This function will pass resource/method/arguments to the vRealize Automation SaltStack Config RaaS API.
|
||||
It depends on a global variable created by Connect-SscServer.
|
||||
.EXAMPLE
|
||||
PS C:\> Get-SscData -Resource 'minions' -Method 'get_minion_cache'
|
||||
#>
|
||||
param(
|
||||
[Parameter(Mandatory=$true)][string]$resource,
|
||||
[Parameter(Mandatory=$true)][string]$method,
|
||||
[System.Collections.Hashtable]$kwarg
|
||||
)
|
||||
|
||||
if (!$global:DefaultSscConnection) {
|
||||
Write-Error 'You are not currently connected to any servers. Please connect first using Connect-SscServer.'
|
||||
return;
|
||||
} # end if
|
||||
|
||||
if (!$kwarg) {
|
||||
$body = @{'resource'=$resource; 'method'=$method }
|
||||
} else {
|
||||
$body = @{'resource'=$resource; 'method'=$method; 'kwarg'=$kwarg }
|
||||
}
|
||||
|
||||
try{
|
||||
$output = Invoke-WebRequest -WebSession $global:DefaultSscConnection.SscWebSession -Method POST -Uri "https://$($global:DefaultSscConnection.Name)/rpc" -body $(ConvertTo-Json $body) -ContentType 'application/json'
|
||||
$outputJson = (ConvertFrom-Json $output.Content)
|
||||
|
||||
if ($outputJson.error) { Write-Error $outputJson.error }
|
||||
if ($outputJson.warnings) { Write-Warning $outputJson.warnings }
|
||||
return $outputJson.ret
|
||||
|
||||
} catch {
|
||||
Write-Error $_.Exception.Message
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
# Lets include a couple sample/helper functions wrappers
|
||||
Function Get-SscMaster {
|
||||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created by: Brian Wuchner
|
||||
Date: November 27, 2021
|
||||
Blog: www.enterpriseadmins.org
|
||||
Twitter: @bwuch
|
||||
===========================================================================
|
||||
.SYNOPSIS
|
||||
This wrapper function will return grain details about the SaltStack Config master node.
|
||||
.DESCRIPTION
|
||||
This wrapper function will call Get-SscData master.get_master_grains.
|
||||
.EXAMPLE
|
||||
PS C:\> Get-SscMaster
|
||||
#>
|
||||
|
||||
(Get-SscData master get_master_grains).salt.grains
|
||||
}
|
||||
|
||||
Function Get-SscMinionCache {
|
||||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created by: Brian Wuchner
|
||||
Date: November 27, 2021
|
||||
Blog: www.enterpriseadmins.org
|
||||
Twitter: @bwuch
|
||||
===========================================================================
|
||||
.SYNOPSIS
|
||||
This wrapper function will return the grain property cache of SaltStack Config minions.
|
||||
.DESCRIPTION
|
||||
This wrapper function will call Get-SscData minions.get_minion_cache.
|
||||
.EXAMPLE
|
||||
PS C:\> Get-SscMinion
|
||||
#>
|
||||
|
||||
(Get-SscData minions get_minion_cache).results
|
||||
}
|
||||
|
||||
Function Get-SscJob {
|
||||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created by: Brian Wuchner
|
||||
Date: November 27, 2021
|
||||
Blog: www.enterpriseadmins.org
|
||||
Twitter: @bwuch
|
||||
===========================================================================
|
||||
.SYNOPSIS
|
||||
This wrapper function will return configured SatlStack Config jobs.
|
||||
.DESCRIPTION
|
||||
This wrapper function will call Get-SscData job.get_jobs.
|
||||
.EXAMPLE
|
||||
PS C:\> Get-SscJob
|
||||
#>
|
||||
|
||||
(Get-SscData job get_jobs).results
|
||||
}
|
||||
|
||||
Function Get-SscSchedule {
|
||||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created by: Brian Wuchner
|
||||
Date: November 27, 2021
|
||||
Blog: www.enterpriseadmins.org
|
||||
Twitter: @bwuch
|
||||
===========================================================================
|
||||
.SYNOPSIS
|
||||
This wrapper function will return schedules for SaltStack Config.
|
||||
.DESCRIPTION
|
||||
This wrapper function will call Get-SscData schedule.get.
|
||||
.EXAMPLE
|
||||
PS C:\> Get-SscSchedule
|
||||
#>
|
||||
|
||||
(Get-SscData schedule get).results
|
||||
}
|
||||
|
||||
Function Get-SscReturn {
|
||||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created by: Brian Wuchner
|
||||
Date: November 27, 2021
|
||||
Blog: www.enterpriseadmins.org
|
||||
Twitter: @bwuch
|
||||
===========================================================================
|
||||
.SYNOPSIS
|
||||
This wrapper function will return job results from the job cache based on the provided arguments.
|
||||
.DESCRIPTION
|
||||
This wrapper function will call Get-SscData ret.get_returns with either Jid or MinionID.
|
||||
.EXAMPLE
|
||||
PS C:\> Get-SscReturn
|
||||
.EXAMPLE
|
||||
PS C:\> Get-SscReturn -Jid '20211122160147314949'
|
||||
.EXAMPLE
|
||||
PS C:\> Get-SscReturn -MinionID 't147-win22-01.lab.enterpriseadmins.org'
|
||||
.EXAMPLE
|
||||
PS C:\> Get-SscReturn -MinionID 't147-win22-01.lab.enterpriseadmins.org' -Jid '20211122160147314949'
|
||||
#>
|
||||
param(
|
||||
[string]$jid,
|
||||
[string]$MinionID
|
||||
)
|
||||
|
||||
$kwarg = @{}
|
||||
if ($jid) { $kwarg += @{'jid'=$jid} }
|
||||
if ($MinionID) { $kwarg += @{'minion_id'=$MinionID} }
|
||||
|
||||
(Get-SscData ret get_returns $kwarg).results
|
||||
}
|
||||
|
||||
Function Get-SscActivity {
|
||||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created by: Brian Wuchner
|
||||
Date: November 27, 2021
|
||||
Blog: www.enterpriseadmins.org
|
||||
Twitter: @bwuch
|
||||
===========================================================================
|
||||
.SYNOPSIS
|
||||
This wrapper function will return SaltStack Config commands that have been issued.
|
||||
In the web interface this is similar to the Activity button.
|
||||
.DESCRIPTION
|
||||
This wrapper function will call Get-SscData cmd.get_cmds.
|
||||
.EXAMPLE
|
||||
PS C:\> Get-SscActivity
|
||||
#>
|
||||
|
||||
(Get-SscData cmd get_cmds).results
|
||||
}
|
||||
Reference in New Issue
Block a user