Cisco Expressway · Arazzo Workflow

Cisco Expressway Set Up Firewall Traversal Pair

Version 1.0.0

Create the matched server/client zones that form an Expressway-E to Expressway-C traversal.

1 workflow 2 source APIs 1 provider
View Spec View on GitHub CollaborationFirewall TraversalH.323Session Border ControllerSIPUnified CommunicationsVideo ConferencingArazzoWorkflows

Provider

cisco-expressway

Workflows

setup-traversal-pair
Create a traversal server zone on the E and a matching client zone on the C.
Creates the server side of a firewall traversal on the Expressway-E, creates the matching client side on the Expressway-C with the same credentials, then reads zone connectivity status on the Expressway-C to confirm the link.
3 steps inputs: clientZoneName, controllerHost, edgeAddress, edgeHost, password, serverZoneName, sharedPassword, sharedUsername, username outputs: clientZoneName, serverZoneName, zoneStatus
1
createServerZone
createEdgeTraversalServerZone
Create the traversal server zone on the Expressway-E so it can provide firewall traversal services to a traversal client.
2
createClientZone
createControllerTraversalClientZone
Create the matching traversal client zone on the Expressway-C that connects to the Expressway-E using the same shared connection credentials.
3
confirmZoneStatus
listZoneStatus
Read zone connectivity status on the Expressway-C and confirm the new client zone is present so the traversal pairing can be verified.

Source API Descriptions

Arazzo Workflow Specification

cisco-expressway-setup-traversal-pair-workflow.yml Raw ↑
arazzo: 1.0.1
info:
  title: Cisco Expressway Set Up Firewall Traversal Pair
  summary: Create the matched server/client zones that form an Expressway-E to Expressway-C traversal.
  description: >-
    Establishes firewall traversal between an Expressway-E and an Expressway-C by
    creating a traversal server zone on the Expressway-E, creating the matching
    traversal client zone on the Expressway-C using the same shared credentials,
    and then reading zone connectivity status to confirm the pairing is active.
    Every step spells out its request inline so the flow can be read and executed
    without opening the underlying OpenAPI description.
  version: 1.0.0
sourceDescriptions:
- name: configurationApi
  url: ../openapi/cisco-expressway-configuration-api-openapi.yml
  type: openapi
- name: statusApi
  url: ../openapi/cisco-expressway-status-api-openapi.yml
  type: openapi
workflows:
- workflowId: setup-traversal-pair
  summary: Create a traversal server zone on the E and a matching client zone on the C.
  description: >-
    Creates the server side of a firewall traversal on the Expressway-E, creates
    the matching client side on the Expressway-C with the same credentials, then
    reads zone connectivity status on the Expressway-C to confirm the link.
  inputs:
    type: object
    required:
    - edgeHost
    - controllerHost
    - username
    - password
    - serverZoneName
    - clientZoneName
    - sharedUsername
    - sharedPassword
    - edgeAddress
    properties:
      edgeHost:
        type: string
        description: FQDN or IP of the Expressway-E node (server variable host).
      controllerHost:
        type: string
        description: FQDN or IP of the Expressway-C node (server variable host).
      username:
        type: string
        description: Administrator username for HTTP Basic auth on both nodes.
      password:
        type: string
        description: Administrator password for HTTP Basic auth on both nodes.
      serverZoneName:
        type: string
        description: Name for the traversal server zone created on the Expressway-E.
      clientZoneName:
        type: string
        description: Name for the traversal client zone created on the Expressway-C.
      sharedUsername:
        type: string
        description: Connection credentials username shared by both zones.
      sharedPassword:
        type: string
        description: Connection credentials password shared by both zones.
      edgeAddress:
        type: string
        description: FQDN or IP of the Expressway-E that the client zone connects to.
  steps:
  - stepId: createServerZone
    description: >-
      Create the traversal server zone on the Expressway-E so it can provide
      firewall traversal services to a traversal client.
    operationId: createEdgeTraversalServerZone
    parameters:
    - name: Authorization
      in: header
      value: Basic $inputs.username:$inputs.password
    requestBody:
      contentType: application/json
      payload:
        Name: $inputs.serverZoneName
        ConnectionCredentialsUsername: $inputs.sharedUsername
        SIPMode: 'On'
        SIPPort: 7001
        SIPTransport: TLS
        MediaEncryptionMode: Auto
    successCriteria:
    - condition: $statusCode == 200
    outputs:
      serverZoneName: $response.body#/Name
  - stepId: createClientZone
    description: >-
      Create the matching traversal client zone on the Expressway-C that connects
      to the Expressway-E using the same shared connection credentials.
    operationId: createControllerTraversalClientZone
    parameters:
    - name: Authorization
      in: header
      value: Basic $inputs.username:$inputs.password
    requestBody:
      contentType: application/json
      payload:
        Name: $inputs.clientZoneName
        PeerAddress: $inputs.edgeAddress
        ConnectionCredentialsUsername: $inputs.sharedUsername
        ConnectionCredentialsPassword: $inputs.sharedPassword
        SIPMode: 'On'
        SIPPort: 7001
        SIPTransport: TLS
    successCriteria:
    - condition: $statusCode == 200
    outputs:
      clientZoneName: $response.body#/Name
  - stepId: confirmZoneStatus
    description: >-
      Read zone connectivity status on the Expressway-C and confirm the new
      client zone is present so the traversal pairing can be verified.
    operationId: listZoneStatus
    parameters:
    - name: Authorization
      in: header
      value: Basic $inputs.username:$inputs.password
    successCriteria:
    - condition: $statusCode == 200
    - context: $response.body
      condition: $[?(@.ZoneName == '$inputs.clientZoneName')]
      type: jsonpath
    outputs:
      zoneStatus: $response.body
  outputs:
    serverZoneName: $steps.createServerZone.outputs.serverZoneName
    clientZoneName: $steps.createClientZone.outputs.clientZoneName
    zoneStatus: $steps.confirmZoneStatus.outputs.zoneStatus