Public/New-ProfileHttp.ps1
Function New-ProfileHttp { <# .SYNOPSIS Create a new profile. .DESCRIPTION Read more about http profiles https://devcentral.f5.com/Wiki/iControlREST.APIRef_tm_ltm_profile_http.ashx .EXAMPLE New-Profile -F5Session $F5Session -Name $ProfileName -Partition $Partition -insertXforwardedFor "Enabled" .EXAMPLE New-Profile -F5Session $F5Session -Name "Service1" -Partition "ADO" -insertXforwardedFor "Enabled" .EXAMPLE Result of RestAPI kind : tm:ltm:profile:http:httpstate name : http_ServiceGB123 partition : ADO fullPath : /ADO/http_ServiceGB123 generation : 7645 selfLink : https://localhost/mgmt/tm/ltm/profile/http/~ADO acceptXff : Disabled appService : None basicAuthRealm : None defaultsFrom : /Common/http defaultsFromReference : @{link=https://localhost/mgmt/tm/ltm/profile/ht description : None encryptCookieSecret : **** encryptCookies : {} enforcement : @{excessClientHeaders=reject; excessServerHeade truncatedRedirects=Disabled; unknownMethod=Allo explicitProxy : @{badRequestMessage=None; badResponseMessage=no fallbackHost : None fallbackStatusCodes : {} headerErase : None headerInsert : None hsts : @{includeSubdomains=Enabled; maximumAge=1607040 insertXforwardedFor : Enabled lwsSeparator : None lwsWidth : 80 oneconnectTransformations : Enabled proxyType : reverse redirectRewrite : None requestChunking : Preserve responseChunking : Selective responseHeadersPermitted : {} serverAgentName : BigIP sflow : @{pollInterval=0; pollIntervalGlobal=yes; sampl viaHostName : None viaRequest : Preserve viaResponse : Preserve xffAlternativeNames : {} #> [cmdletBinding()] param ( $F5Session=$Script:F5Session, [Alias('ProfileName')] [Parameter(Mandatory=$true,ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true)] [string[]]$Name, [Parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true)] [string]$Partition, [ValidateSet('enabled','disabled')] [string]$acceptXff, [string]$appService, [string]$basicAuthRealm, [string]$description, [string]$encryptCookieSecret, [string[]]$encryptCookies=@(), [string]$fallbackHost, [string[]]$fallbackStatusCodes=@(), [string]$headerErase, [string]$headerInsert, [ValidateSet('Enabled','Disabled')] [string]$insertXforwardedFor, [string]$lwsSeparator, [int]$lwsWidth, [string]$oneconnectTransformations, [string]$tmPartition, [string]$proxyType, [ValidateSet('None','All','Matching','Nodes')] [string]$redirectRewrite, [ValidateSet('Preserve','Selective','Rechunk')] [string]$requestChunking, [ValidateSet('Preserve','Selective','Unchunk','Rechunk')] [string]$responseChunking, [string]$responseHeadersPermitted, [string]$serverAgentName, [string]$viaHostName, [ValidateSet('Remove','Preserve','Append')] [string]$viaRequest, [ValidateSet('Remove','Preserve','Append')] [string]$viaResponse, [string]$xffAlternativeNames, [string]$Enforcement ) begin { #Test that the F5 session is in a valid format Test-F5Session($F5Session) } process { $URI = ($F5Session.BaseURL + "profile/http") foreach ($profilename in $Name) { $newitem = New-F5Item -Name $profilename -Partition $Partition #Check whether the specified profile already exists If (Test-Profilehttp -F5session $F5Session -Name $newitem.Name -Partition $newitem.Partition){ Write-Error "The $($newitem.FullPath) profile already exists." } Else { #Start building the JSON for the action if($Enforcement -eq $null ){$Enforcement = @{}} $JSONBody = @{name=$newitem.Name;partition=$newitem.Partition;acceptXff=$acceptXff;appService=$appService;basicAuthRealm=$basicAuthRealm;defaultsFrom="/Common/http";description=$description;encryptCookieSecret=$encryptCookieSecret;encryptCookies=$encryptCookies;fallbackHost=$fallbackHost;fallbackStatusCodes=$fallbackStatusCodes;headerErase=$headerErase;headerInsert=$headerInsert;insertXforwardedFor=$insertXforwardedFor;lwsSeparator=$lwsSeparator;lwsWidth=$lwsWidth;oneconnectTransformations=$oneconnectTransformations;tmPartition=$tmPartition;proxyType=$proxyType;redirectRewrite=$redirectRewrite;requestChunking=$requestChunking;responseChunking=$responseChunking;responseHeadersPermitted=$responseHeadersPermitted;serverAgentName=$serverAgentName;viaHostName=$viaHostName;viaRequest=$viaRequest;viaResponse=$viaResponse;xffAlternativeNames=$xffAlternativeNames;Enforcement=$Enforcement} ($JSONBody.GetEnumerator() | ? Value -eq "" ).name | % {$JSONBody.Remove($_)} $JSONBody = $JSONBody | ConvertTo-Json Invoke-F5RestMethod -Method POST -Uri "$URI" -F5Session $F5Session -Body $JSONBody -ContentType 'application/json' -ErrorMessage ("Failed to create the $($newitem.FullPath) profile.") -AsBoolean Write-Verbose "If viaRequest or viaResponse is set to 'append,' then a value for viaHostName is required." } } } } |