Inter-Service Referencing
A service within a commissioning file describes resources and their relations by referencing each other. In addition to referencing resources within the same commissioning file, you can also reference resources from other commissioning files. This is called inter-service referencing.
Inter-service referencing allows resources in one service to depend on resources in another service. For example, an endpoint in a file can be linked to a connection resource defined in another service by referencing that connection.
To reference resources in another commissioning file, you must not specify the Service ID directly. Instead, you must define a parameter that specifies the appropriate Service ID at run time. For more details, see Service ID and Resource ID.
Example: If the parameter is
otherServiceName, write the reference as!ref '${otherServiceName}::resourceId'.
Interactions across Referenced Services
Given the flexibility Connectware offers to build advance relationships between services it is important to understand what behaviors are expected in different scenarios.
Let’s define services that reference other services
Children ServicesLet’s define a service that is referenced by other services
Parent Service
Expected Behaviors
Following are four scenarios and how the services behave in each case:
All services are installed and then enabled in parents/children order
This behaves as any other set of services
Disabling a
Parent Servicewill disable all itsChildren Services
All services are installed and then enabled in random order
Children Serviceswill wait on Enabling stateOnce the
Parent Servicebecomes available they will switch to Enabled
Children Servicesare installed first withoutParent ServicepresentTrying to enable these services will fail with logs in Service Manger indicating the reason
You will see a log starting with
Failed enabling service because: Could not resolve cross-service reference...and some extra details about the unresolvable reference
Parents services are installed first without children presents
No special behavior, once
Children Servicesare added this is the same scenario as cases 1 and 2
Example
The following Service Commissioning Files will be deployed:
A Cybus::Container running a database
Service ID will be
mssqldatabase
A Cybus::Connection connecting to the database
Service ID will be
serviceaconnection
A Cybus::Endpoint using referencing to use that Connection
Service ID will be
servicebendpoint
You can reproduce all the behaviors described above using these Service Commissioning Files.
SQL Database
description: MSSQL Database
metadata:
    name: MSSQL Database
definitions:
    password: password1234!
resources:
    mssqlDatabase:
        type: Cybus::Container
        properties:
            image: mcr.microsoft.com/mssql/server
            ports:
                - '1433:1433'
            environment:
                ACCEPT_EULA: 'Y'
                SA_PASSWORD: !ref passwordSQL Connection
description: MSSQL Connection
metadata:
    name: Service A Connection
parameters:
    ip_host:
        type: string
        title: IP address or hostname where Connectware is installed
definitions:
    port: 1433
    database: master
    username: sa
    password: password1234!
resources:
    mssqlConnection:
        type: Cybus::Connection
        properties:
            protocol: Mssql
            connection:
                host: !ref ip_host
                port: !ref port
                username: !ref username
                password: !ref password
                database: !ref database
                useEncryption: falseSQL Endpoint
description: Service B
metadata:
    name: Service B Endpoint
parameters:
    mssqlConnectionServiceId:
        type: string
        title: Service ID of the MSSQL Connection
resources:
    mssqlVersionB:
        type: Cybus::Endpoint
        properties:
            protocol: Mssql
            connection: !ref '${mssqlConnectionServiceId}::mssqlConnection'
            subscribe:
                query: 'SELECT @@version'
                interval: 1000Last updated
Was this helpful?

