Public/Create-EdgeKvmEntry.ps1

Function Create-EdgeKvmEntry {
    <#
    .SYNOPSIS
        Create a named entry in an existing key-value map in Apigee Edge.

    .DESCRIPTION
        Create a named entry in an existing key-value map in Apigee Edge.
        The KVM must exist, and the entry must not exist. This works only on CPS-enabled organizations.

    .PARAMETER Name
        The name of the key-value map, in which the entry exists.

    .PARAMETER Entry
        Required. The name (or key) of the value to create.

    .PARAMETER Value
        Required. A string value to use for the entry.
          
    .PARAMETER Env
        Optional. A string, the name of the environment for this key-value map.
        The default behavior is to create an organization-wide KVM.

    .PARAMETER Org
        Optional. The Apigee Edge organization. The default is to use the value from Set-EdgeConnection.

    .EXAMPLE
        Create-EdgeKvmEntry -Name kvm101 -Env test -Entry newkey1 -Value 'newly created value'

    .LINK
        Delete-EdgeKvmEntry

    .FUNCTIONALITY
        ApigeeEdge
    #>


    [cmdletbinding()]
    PARAM(
        [Parameter(Mandatory=$True)][string]$Name,
        [Parameter(Mandatory=$True)][string]$Entry,
        [Parameter(Mandatory=$True)][string]$Value,
        [string]$Env,
        [string]$Org
    )
    
    $Options = @{ }
    
    if ($PSBoundParameters['Debug']) {
        $DebugPreference = 'Continue'
        $Options.Add( 'Debug', $Debug )
    }
    if ($PSBoundParameters['Org']) {
        $Options.Add( 'Org', $Org )
    }

    if (!$PSBoundParameters['Name']) {
      throw [System.ArgumentNullException] "Name", "You must specify the -Name option."
    }
    if (!$PSBoundParameters['Entry']) {
      throw [System.ArgumentNullException] "Entry", "You must specify the -Entry option."
    }
    if (!$PSBoundParameters['Value']) {
      throw [System.ArgumentNullException] "Value", "You must specify the -Value option."
    }
    
    $basepath = if ($PSBoundParameters['Env']) {
        $( Join-Parts -Separator '/' -Parts 'e', $Env, 'keyvaluemaps' )
    }
    else {
        'keyvaluemaps'
    }
    
    $Options.Add( 'Collection', $( Join-Parts -Separator '/' -Parts $basepath, $Name, 'entries' ) )
    $Options.Add( 'Payload', @{ name = $Entry; value = $Value } )

    Write-Debug ([string]::Format("Options {0}`n", $( ConvertTo-Json $Options -Compress ) ) )
    
    Send-EdgeRequest @Options
}