modules/inventory.psm1
# /api/v2/inventory-sources function Get-PPDMinventory_sources { [CmdletBinding()] param( $PPDM_API_BaseUri = $Global:PPDM_API_BaseUri, $apiver = "/api/v2", [Parameter(Mandatory = $false, ParameterSetName = 'byID', ValueFromPipelineByPropertyName = $true)] $id ) begin { $Response = @() $METHOD = "GET" $Myself = ($MyInvocation.MyCommand.Name.Substring(8) -replace "_", "-").ToLower() # $response = Invoke-WebRequest -Method $Method -Uri $Global:PPDM_API_BaseUri/api/v0/$Myself -Headers $Global:PPDM_API_Headers } Process { switch ($PsCmdlet.ParameterSetName) { 'byID' { $URI = "/$myself/$id" } default { $URI = "/$myself" } } try { $Response += Invoke-PPDMapirequest -uri $URI -Method $METHOD -Body "$body" } catch { Get-PPDMWebException -ExceptionMessage $_ break } write-verbose ($response | Out-String) } end { switch ($PsCmdlet.ParameterSetName) { 'byID' { write-output $response | convertfrom-json } default { write-output ($response | convertfrom-json).content } } } } function Set-PPDMinventory_sources { [CmdletBinding()] param( $PPDM_API_BaseUri = $Global:PPDM_API_BaseUri, $apiver = "/api/v2", [Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true)] $id, $configobject ) begin { $Response = @() $METHOD = "PUT" $Myself = ($MyInvocation.MyCommand.Name.Substring(8) -replace "_", "-").ToLower() # $response = Invoke-WebRequest -Method $Method -Uri $Global:PPDM_API_BaseUri/api/v0/$Myself -Headers $Global:PPDM_API_Headers } Process { switch ($PsCmdlet.ParameterSetName) { default { $URI = "/$myself/$id" } } $body = $configobject | ConvertTo-json -Depth 7 try { $Response += Invoke-PPDMapirequest -uri $URI -Method $METHOD -Body "$body" } catch { Get-PPDMWebException -ExceptionMessage $_ break } write-verbose ($response | Out-String) } end { switch ($PsCmdlet.ParameterSetName) { default { write-output ($response) } } } } <# .Synopsis Adds Inventory Components .Description Adds Inventory Sources of Types 'DATADOMAINMANAGEMENTCENTER''DDSYSTEM''VCENTER''EXTERNALDATADOMAIN''KUBERNETES' GENERIC_NAS .Example Add Vanilla Kubernetes Inventory Create Kubernetes Credentials $tokenfile="\\nasug.home.labbuildr.com\minio\aks\aksazs1\ppdmk8stoken-20210606.653.18+UTC.json" $Securestring=ConvertTo-SecureString -AsPlainText -String "$(Get-Content $tokenfile -Encoding utf8)" -Force $username="limitedadmin" $Credentials = New-Object System.Management.Automation.PSCredential($username, $Securestring) $newcreds=New-PPDMcredentials -name aksazs1 -type KUBERNETES -authmethod TOKEN -credentials $Credentials Add the Certificate $myHost="aksazs1.local.cloudapp.azurestack.external" Get-PPDMcertificates -newhost $myHost -Port 443 | Approve-PPDMcertificates Add the inventory Add-PPDMinventory_sources -Type KUBERNETES -Hostname $myHost -Name aksazs1 -ID $newcreds.id -port 443 id : deacf2c9-9c15-4749-8fb3-619a76ce2bb1 name : aksazs1 version : type : KUBERNETES lastDiscovered : lastDiscoveryResult : @{status=UNKNOWN; summaries=System.Object[]} lastDiscoveryTaskId : address : aksazs1.local.cloudapp.azurestack.external port : 443 credentials : @{id=c9f25735-352a-4ff3-acbd-d16663804d99} details : local : False vendor : _links : @{self=; storageSystems=; credentials=} .Example Add TANZU_GUEST_CLUSTER Kubernetes Inventory Create Kubernetes Credentials $tokenfile="\\nasug.home.labbuildr.com\minio\aks\aksazs1\ppdmk8stoken-20210606.653.18+UTC.json" $Securestring=ConvertTo-SecureString -AsPlainText -String "$(Get-Content $tokenfile -Encoding utf8)" -Force $username="limitedadmin" $Credentials = New-Object System.Management.Automation.PSCredential($username, $Securestring) $newcreds=New-PPDMcredentials -name aksazs1 -type KUBERNETES -authmethod TOKEN -credentials $Credentials Add the Certificate $myHost="platform-services.tkg.home.labbuildr.com" Get-PPDMcertificates -newhost $myHost -Port 443 | Approve-PPDMcertificates Add the inventory Add-PPDMinventory_sources -Type KUBERNETES -Hostname $myHost -Name tanzu1 -ID $newcreds.id -port 443 Add-PPDMinventory_sources -Hostname $myHost -Type KUBERNETES -K8S_TYPE TANZU_GUEST_CLUSTER -VCENTER_ID 69c8ac3a-3eca-55f1-a2e0-347e63a90540 -Name demo -port 8443 -ID $newcreds.id -Verbose id : deacf2c9-9c15-4749-8fb3-619a76ce2bb1 name : aksazs1 version : type : KUBERNETES lastDiscovered : lastDiscoveryResult : @{status=UNKNOWN; summaries=System.Object[]} lastDiscoveryTaskId : address : aksazs1.local.cloudapp.azurestack.external port : 443 credentials : @{id=c9f25735-352a-4ff3-acbd-d16663804d99} details : local : False vendor : _links : @{self=; storageSystems=; credentials=} #> function Add-PPDMinventory_sources { [CmdletBinding()] param( [Parameter(Mandatory = $true, ParameterSetName = 'Host', ValueFromPipelineByPropertyName = $true)] [alias('fqdn')]$Hostname, [Parameter(Mandatory = $true, ParameterSetName = 'GENERIC_NAS', ValueFromPipelineByPropertyName = $true)] [ValidateSet('CIFS', 'NFS')]$Protocol, [Parameter(Mandatory = $true, ParameterSetName = 'GENERIC_NAS', ValueFromPipelineByPropertyName = $true)] [string[]]$address, [Parameter(Mandatory = $true, ParameterSetName = 'Host', ValueFromPipelineByPropertyName = $true)] [ValidateSet( # Inventory Type as on of 'DATADOMAINMANAGEMENTCENTER''DDSYSTEM''VCENTER''EXTERNALDATADOMAIN''KUBERNETES' 'DATADOMAINMANAGEMENTCENTER', 'DDSYSTEM', 'VCENTER', 'EXTERNALDATADOMAIN', 'KUBERNETES' )]$Type, [Parameter(Mandatory = $false, ParameterSetName = 'Host', ValueFromPipelineByPropertyName = $true)] [ValidateSet( # K8S Type as on of 'TANZU_GUEST_CLUSTER' 'VANILLA_ON_VSPHERE' 'NON_VSPHERE' 'TANZU_GUEST_CLUSTER', 'VANILLA_ON_VSPHERE', 'NON_VSPHERE' )]$K8S_TYPE, [Parameter(Mandatory = $false, ParameterSetName = 'Host', ValueFromPipelineByPropertyName = $true)] # Required VCENTER ID if 'TANZU_GUEST_CLUSTER' $VCENTER_ID, [Parameter(Mandatory = $true, ParameterSetName = 'Host', ValueFromPipelineByPropertyName = $true)] $Name, [Parameter(Mandatory = $true, ParameterSetName = 'Host', ValueFromPipelineByPropertyName = $true)] [Parameter(Mandatory = $true, ParameterSetName = 'GENERIC_NAS', ValueFromPipelineByPropertyName = $true)] [alias('secretID')]$ID, [Parameter(Mandatory = $false, ParameterSetName = 'Host', ValueFromPipelineByPropertyName = $true)] [Parameter(Mandatory = $true, ParameterSetName = 'GENERIC_NAS', ValueFromPipelineByPropertyName = $true)] $port, $PPDM_API_BaseUri = $Global:PPDM_API_BaseUri, $apiver = "/api/v2" ) begin { $Response = @() $METHOD = "POST" $Myself = ($MyInvocation.MyCommand.Name.Substring(8) -replace "_", "-").ToLower() } Process { switch ($PsCmdlet.ParameterSetName) { 'Host' { $URI = "/$myself" $body = @{ name = $Name type = $Type address = $Hostname port = $port credentials = @{ id = $ID } } if ( $K8S_TYPE ) { $body.Add('details',@{}) $body.details.Add('k8s',@{}) write-verbose "$K8S_TYPE selected" if ($K8S_TYPE -eq "TANZU_GUEST_CLUSTER") { if ($VCENTER_ID) { $body.details.k8s.Add('vCenterId',$VCENTER_ID ) } else { write-host "Tanzu Guest Clusters need vCenter ID to be set" break } } $body.details.k8s.Add('distributionType',$K8S_TYPE ) } $body = $body | ConvertTo-Json } 'GENERIC_NAS' { $URI = "/$($myself)-batch" $body = @{} $body.Add('requests',@()) # this goes to foreach $request = @{} $request.Add('id','1') $requestbody = @{ name = $address type = 'GENERICNASMANAGEMENTSERVER' address = $address -replace ":" port = $port credentials = @{ id = $ID } } $request.Add('body',$requestbody) $body.requests += $request $body = $body | ConvertTo-Json -Depth 6 } default { $URI = "/$myself" } } Write-Verbose ($body | Out-String) $Parameters = @{ body = $body Uri = $Uri Method = $Method RequestMethod = 'Rest' PPDM_API_BaseUri = $PPDM_API_BaseUri apiver = $apiver Verbose = $PSBoundParameters['Verbose'] -eq $true } try { $Response += Invoke-PPDMapirequest @Parameters } catch { Get-PPDMWebException -ExceptionMessage $_ break } write-verbose ($response | Out-String) } end { switch ($PsCmdlet.ParameterSetName) { 'Host' { write-output $response } default { write-output ($response ) } } } } function Remove-PPDMinventory_sources { [CmdletBinding()] param( $PPDM_API_BaseUri = $Global:PPDM_API_BaseUri, $apiver = "/api/v2", [Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true)] $id ) begin { $Response = @() $METHOD = "DELETE" $Myself = ($MyInvocation.MyCommand.Name.Substring(11) -replace "_", "-").ToLower() # $response = Invoke-WebRequest -Method $Method -Uri $Global:PPDM_API_BaseUri/api/v0/$Myself -Headers $Global:PPDM_API_Headers } Process { $URI = "/$myself/$id" $Parameters = @{ # body = $body Uri = $Uri Method = $Method RequestMethod = 'Rest' PPDM_API_BaseUri = $PPDM_API_BaseUri apiver = $apiver Verbose = $PSBoundParameters['Verbose'] -eq $true } try { $Response += Invoke-PPDMapirequest @Parameters } catch { Get-PPDMWebException -ExceptionMessage $_ break } write-verbose ($response | Out-String) } end { switch ($PsCmdlet.ParameterSetName) { 'byID' { write-output $response | convertfrom-json } default { write-output ($response | convertfrom-json).content } } } } |