UCF Application

A UCF application is the the description of a cloud application created using UCF microservices in UCF application graph specification format.

A UCF application consists of:

  • Basic Information - Application name, description, version

  • Documentation - Detailed documentation on how to build, deploy and interact with the application

  • Dependencies - A list of microservices used in the application and the versions of the microservices to use

  • Components - A list of microservices and other components to add to the application along with their configuration - parameters, secrets, etc.,

  • Connections - A list of connections between different microservices

UCF applications can be built to generate a deployable helm chart using UCF Studio or UCF Application Builder CLI. While building an application, the tools perform multiple validations like microservice parameter value validation, connection validation such as whether connected endpoints are compatible, other requirements satisfaction such as microservice secrets are specified.

List of available microservices and detailed information about microservices can be obtained using the UCF Studio GUI or the UCF Application Builder CLI tool.

Applications can be created based on the information provided by these tools.

Creating an Application

A UCF application can be created manually by writing a YAML in UCF application specification format or using the UCF Studio GUI. For more information, refer to Creating an Application

Sample Application - Visual Format

UCF Studio - Sample Application

Sample Application - Textual Format

A sample UCF application in the textual YAML format is shown below:

specVersion: 1.5.0

version: 0.0.1

doc: README.md

name: ucf-bot-app

description: UCF application for a bot

dependencies:
- ucf.svc.riva.speech-skills:2.0.0
- ucf.svc.botmaker.speech-web-app:2.0.0
- ucf.svc.botmaker.speech-controller:2.0.0
- ucf.svc.botmaker.dialog-manager:2.0.0

components:
- name: Riva Speech Skills
  type: ucf.svc.riva.speech-skills
  parameters:
    buildModelEngines: 'true'
    ngcModelConfigs:
    - nvidia/riva/rmir_asr_citrinet_1024_en_us_str:2.6.0
    - nvidia/riva/rmir_tts_fastpitch_hifigan_en_us:2.6.0
    - eevaigoeixww/ucf-11-ea-release/misty_text_classification:1.7.3-ea
    - eevaigoeixww/ucf-11-ea-release/intent_slot_weather:1.7.3-ea
    - eevaigoeixww/ucf-11-ea-release/intent_slot_poi:1.7.3-ea
    - eevaigoeixww/ucf-11-ea-release/intent_slot_smalltalk:1.7.3-ea
    - nvidia/riva/rmir_nlp_question_answering_bert_base:2.6.0
    - nvidia/riva/rmir_nlp_named_entity_recognition_bert_base:2.6.0
    imagePullSecrets:
    - name: ngc-docker-reg-secret
  secrets:
    ngc-api-key-secret: my-ngc-api-key-k8s

- name: BotMaker Speech Web App
  type: ucf.svc.botmaker.speech-web-app
  parameters:
    imagePullSecrets:
    - name: ngc-docker-reg-secret

- name: BotMaker Speech Controller
  type: ucf.svc.botmaker.speech-controller
  parameters:
    pipeline: speech_lite
    botNgcPath: eevaigoeixww/ucf-11-ea-release/misty_bot:2.0.0-ea-x86_64
    wordBoostFilePath: ''
    imagePullSecrets:
    - name: ngc-docker-reg-secret
  secrets:
    ngc-api-key-secret: my-ngc-api-key-k8s

- name: BotMaker Dialog Manager
  type: ucf.svc.botmaker.dialog-manager
  parameters:
    botNgcPath: eevaigoeixww/ucf-11-ea-release/misty_bot:2.0.0-ea-x86_64
    botConfigName: misty_bot_config.yaml
    botConfig:
      fulfillments:
        weather:
          parameters:
            api-key: XXXXXXXXXXXXXXXXX
        poi:
          parameters:
            api-key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
            here-api-key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
        map:
          parameters:
            api-key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    imagePullSecrets:
    - name: ngc-docker-reg-secret
  secrets:
    ngc-api-key-secret: my-ngc-api-key-vault

connections:
  BotMaker Speech Web App/speech-controller: BotMaker Speech Controller/grpc-api
  BotMaker Dialog Manager/riva-speech: Riva Speech Skills/riva-speech-api
  BotMaker Dialog Manager/triton-grpc: Riva Speech Skills/triton-grpc
  BotMaker Speech Controller/riva: Riva Speech Skills/riva-speech-api
  BotMaker Speech Controller/dialog-manager: BotMaker Dialog Manager/dialog-manager

vaultAgent:
  auth:
    path: auth/jwt/authMountPath
    type: jwt
    jwt:
      audience: https://vault.example.com:443
      role: auth-role
  role: auth-role
  namespace: vault-namespace
  service: https://vault.example.com/

secrets:
  my-ngc-api-key-vault:
    vaultAgent:
      path: secrets/kv/ngc-api-key
      template:
        type: kv
        key: NGC_API_KEY
  my-ngc-api-key-k8s:
    k8sSecret:
      secretName: ngc-api-key-secret
      key: NGC_API_KEY

Basic Information

Following information about the application is included:

Field

Description

specVersion

The UCF Specification version that the application adheres to. Current specVersion is 1.5.0

name

Application name

description

A short description of the application

version

Application version. Follows semantic versioning https://semver.org/

doc

Path to a file containing detailed documentation for the application

Dependencies

A list of microservices and their versions to use in the application. The format is a list of strings <microservice-type>:<microservice-version>. <microservice-version> can be a fixed version or in the format of NPM version range spec https://github.com/npm/node-semver#ranges

Components

A list of microservices and other components (like configmap) to add to the application along with their configuration. Each component should have:

Field

Description

name

A unique string identifier for the microservice/component so it can be referred to in other places in the application

type

Type of the microservice/component

parameters

An object to set parameter values of the microservice/component. Must follow the parameter schema of the component

secrets

Set secrets on the microservice. For more information refer to Specifying secrets in an UCF Application

Connections

Specifies the connections between microservices in the application in the format <microservice-name-with-egress-endpoint>/<egress-endpoint-name>: <microservice-name-with-ingress-endpoint>/<ingress-endpoint-name> or if the egress endpoint supports multiple connections (multi: true) -

<microservice-name-with-egress-endpoint>/<egress-endpoint-name>: [
    <microservice-name-with-ingress-endpoint1>/<ingress-endpoint-name1>,
    <microservice-name-with-ingress-endpoint2>/<ingress-endpoint-name2>
]

Secrets

Specifies the secrets used in the application and their configuration details. For more information refer to the Specifying secrets in an UCF Application.

Application Features

UCF applications provides certain features on top of microservices. These include:

  • Vault Agent (vaultAgent) - For Vault Server based Secrets Management. This section contains details on connection & authentication details for Vault. For more information, refer to Using Vault secrets.

  • Certificates (certificates) - For cert-managet based Certificate Management. This section contains details on certificates that should be added to an application. For more information, refer to Using cert-manager Certificate.