Public/Publish-Space.ps1

<#
.Synopsis
   Publish a CloudFoundry space using a definition
.DESCRIPTION
   The Publish-Space cmdlet creates a new space and all defined service instances and user provided services
.PARAMETER Org
    This parameter is a org object
.PARAMETER Definition
    This parameter is the object that defines the Definition of the space
.PARAMETER Timeout
    This parameter is how long in minutes to wait for timeout (Defaults to 60)
#>

function Publish-Space {

    [CmdletBinding()]
    [OutputType([psobject])]
    param(
        [Parameter(Mandatory, Position = 0, ValueFromPipeline)]
        [ValidateNotNullOrEmpty()]
        [psobject]
        $Org,

        [Parameter(Mandatory, Position = 1)]
        [ValidateNotNullOrEmpty()]
        [psobject]
        $Definition,

        [Parameter()]
        [Int]
        $Timeout = 60
    )

    begin {
        Write-Verbose "[$($MyInvocation.MyCommand.Name)] Function started"
    }

    process {
        Write-Debug "[$($MyInvocation.MyCommand.Name)] PSBoundParameters: $($PSBoundParameters | Out-String)"

        $space = Get-Space -Name $Definition.name
        if ($null -eq $space) {
            $space = New-Space -Org $org -Name $Definition.name
        } else {
            Write-Verbose "Publish-Space: '$($Definition.name)' exists, skipping"
        }
        Add-RolesFromDefinition -Space $space -UserNames $Definition.roles.developers -RoleName "developers" | Out-Null
        Add-RolesFromDefinition -Space $space -UserNames $Definition.roles.managers -RoleName "managers" | Out-Null
        Add-RolesFromDefinition -Space $space -UserNames $Definition.roles.auditors -RoleName "auditors" | Out-Null
        foreach ($s in $Definition.services) {
            $serviceInstance = Get-ServiceInstance -Space $space -Name $s.name
            if ($null -eq $serviceInstance) {
                New-ServiceAsync -Space $space -ServiceName $s.service -Plan $s.plan -Name $s.name -Params $s.params | Out-Null
            } else {
                Write-Information "Publish-Space: service '$($s.name)' exists, skipping"
            }
        }
        foreach ($s in $Definition.userservices) {
            $serviceInstance = Get-ServiceInstance -Space $space -Name $s.name
            if ($null -eq $serviceInstance) {
                New-UserProvidedService -Space $space -Name $s.name -Params $s.params -SyslogDrainUrl $s.syslog_drain_url -RouteServiceUrl $s.route_service_url | Out-Null
            } else {
                Write-Information "Publish-Space: userservice '$($s.name)' exists, skipping"
            }
        }
        Wait-ServiceOperations -Space $space -Timeout $Timeout | out-null
        Write-Information "published space $($Definition.name)"
    }

    end {
        Write-Verbose "[$($MyInvocation.MyCommand.Name)] Complete"
    }
}