8 Configuring REST Services
Learn how to integrate external applications with your Oracle Communications Billing and Revenue Management (BRM) cloud native environment by using the BRM and PDC REST services.
Topics in this document:
Configuring BRM REST Services Manager
You use BRM REST Services Manager to integrate an external customer experience application with BRM. This allows you to manage billing and rating in BRM and then view your customers' account balances and bills in your external client. For more information, see REST Services Manager API for Billing and Revenue Management.
To configure BRM REST Services Manager in BRM cloud native:
-
Generate an SSL certificate. See "Generating an SSL Certificate for BRM REST Services Manager".
-
Optionally, configure the BRM REST Services Manager SDK. See "Configuring the SDK (Optional)".
-
If BRM and REST Services Manager are located in separate clusters, connect BRM REST Services Manager to BRM. See "Connecting to a Separate BRM Cluster".
-
Override the BRM REST Services Manager-specific keys in the values.yaml file. See "Adding BRM REST Services Manager Keys".
-
Optionally, configure policies for authorizing calls to the BRM REST Services Manager REST API endpoints. See "Configuring Policies for API Authorization".
-
Optionally, override the default mappings between BRM REST Services Manager JSON payload objects and BRM opcode flists. See "Configuring and Adding Custom Mapper Files".
-
Optionally, the Kafka notification framework for BRM REST Services Manager. See "Publishing Notifications for External Applications".
Generating an SSL Certificate for BRM REST Services Manager
The following shows the steps for generating a sample SSL certificate:
-
Create a directory named rsm_keystore under the oc-cn-helm-chart/rsm directory.
-
Generate an SSL certificate. For example:
openssl req -x509 -newkey rsa:4096 -keyout openSSLKey.pem -out cert.pem -days 365 -nodes -
Generate a PKCS12 KeyStore file. For example, this creates a KeyStore file named keystore.p12:
openssl pkcs12 -export -out keyStore.p12 -inkey openSSLKey.pem -in cert.pem -
Copy your SSL certificate file to the oc-cn-helm-chart/rsm/rsm_keystore directory.
Configuring the SDK (Optional)
To integrate the SDK with BRM REST Services Manager, generate an SDK image as follows:
-
Copy your extended SDK JAR oc-cn-docker-files-15.2.x.x.x/oc-cn-docker-files/ocrsm/brm_rest_services_manager/SDK/libs to the oc-cn-docker-files-15.2.x.x.x/oc-cn-docker-files/ocrsm/brm_rest_services_manager/SDK directory.
Note:
The SDK JAR can be used directly from oc-cn-docker-files-15.2.x.x.x/oc-cn-docker-files/ocrsm/brm_rest_services_manager/SDK/libs if no changes are required. If you need to make further customizations, follow the instructions in REST Services Manager API for Billing and Revenue Management and then copy the updated SDK JAR to the oc-cn-docker-files-15.2.x.x.x/oc-cn-docker-files/ocrsm/brm_rest_services_manager/SDK directory.
-
In your override-values.yaml file for oc-cn-helm-chart, set the ocrsm.rsm.configEnv.rsmExtensionJar key to the name of your extended SDK JAR file, such as BRMRESTExtension.jar.
-
Go to the oc-cn-docker-files-15.2.x.x.x/oc-cn-docker-files/ocrsm/brm_rest_services_manager/SDK directory.
-
Build the Podman image by running this command:
podman build --format docker --tag imagerepo/brm-rest-services-manager-extension:1 . -
Push the SDK image to the repository by running this command:
podman login --username user --password password imagerepo podman push imagerepo/brm-rest-services-manager-extension:1
Connecting to a Separate BRM Cluster
If BRM is located in a separate cluster from BRM REST Services Manager, do the following to connect BRM REST Services Manager to BRM:
-
Open the configmap_env_brmrsm.yaml file in a text editor.
-
Set BRM_HOST_NAME to the host name of the cluster on which BRM is located. The default value is cm.
-
Save and close the file.
Adding BRM REST Services Manager Keys
Table 8-1 lists the keys that directly impact BRM REST Services Manager. Add these keys to your override-values.yaml file with the same path hierarchy.
Caution:
Keys with the path ocrsm.rsm.secretVal hold sensitive data. Handle them carefully with controlled access to the override file containing their values. Encode all of these values in Base64. See "Secrets" in Kubernetes Concepts.
Table 8-1 BRM REST Services Manager Keys
| Key | Path in Values.yaml File | Description |
|---|---|---|
|
isEnabled |
ocrsm.rsm |
Whether to deploy BRM REST Services Manager with BRM cloud native (true) or not (false). The default is true. |
|
labels.* |
ocrsm.rsm |
The string used to form the names of BRM REST Services Manager. |
|
deployment.* |
ocrsm.rsm |
The details for deploying BRM REST Services Manager.
|
|
sdk.* |
ocrsm.rsm.deployment |
The details about the BRM REST Services Manager SDK.
|
|
probe.ready.* |
ocrsm.rsm.deployment |
The configuration for the readiness probe.
|
|
REST Services Manager Volumes |
ocrsm.rsm.deployment |
The details about the REST Services Manager volumes.
|
|
configEnv.* |
ocrsm.rsm |
The configuration details for the BRM REST Services Manager API.
|
|
infranet.* |
ocrsm.rsm.configEnv |
The details for connecting to BRM cloud native.
|
|
brmSSLWalletFileName |
ocrsm.rsm.configEnv |
The BRM SSL wallet file name. The default is cwallet.sso. |
|
rsmExtensionJar |
ocrsm.rsm.configEnv |
The file name of the BRM REST Service Manager SDK JAR, such as BRMRESTExtension.jar. |
|
bipURL |
ocrsm.rsm.configEnv |
The Oracle Analytics Publisher URL. |
|
bipUserId |
ocrsm.rsm.configEnv |
The Oracle Analytics Publisher user ID. |
|
Zipkin Tracing Details |
ocrsm.rsm.configEnv |
The Zipkin tracing details.
|
|
BRM REST Services Manager Cache Details |
ocrsm.rsm.configEnv |
The cache details.
|
|
securityEnabled |
ocrsm.rsm.configEnv |
The flag to indicate if token-based authentication is enabled for BRM REST Services Manager (true) or not (false). The default is true. |
|
oidc.* |
ocrsm.rsm.configEnv |
The Identity Provider (IdP) authentication details.
|
|
roleMapperName |
ocrsm.rsm.configEnv |
To authorize requests, specify a mapper based on your Identity Provider (IdP): use idcs-role-mapper for Oracle IDCS or oam-role-mapper for Oracle Access Manager. This step is necessary when your JSON Web Tokens (JWTs) do not adhere to the MicroProfile JWT RBAC v2.1 specification and lack a "groups" claim because it enables fetching user/client groups and roles. If your JWTs conform to the JWT RBAC v2.1 specification, leave this key empty. |
|
oam.* |
ocrsm.rsm.configEnv |
The Oracle Access Manager authentication details. These keys ensure backward compatibility for users who have not yet migrated to the latest versions of Oracle Access Management, where roles and groups are included in the JWT token. Note: This section is enabled only if roleMapperName is set to oam-role-mapper.
|
|
Log Level Details |
ocrsm.rsm.configEnv |
The logging level. The possible values for these keys are: SEVERE, WARNING, INFO, CONFIG, FINE, FINER, FINEST.
|
|
jvmOpts |
ocrsm.rsm.configEnv |
The Java options to configure when setting resources for the containers, such as heap memory. For example: -XX:InitialRAMPercentage=25.0 -XX:MaxRAMPercentage=50.0. |
|
extKeystoreSecret |
ocrsm.rsm.secretKeyStore |
The name of the external Kubernetes Secret containing the Identity and Trust files. Note: Override the rsmCertificateFileName, trustStoreFileName, and keyStoreFileName with the respective names of the TrustStore and KeyStore. See "Secrets" in Kubernetes Concepts, and "About Using External Kubernetes Secrets" in BRM Cloud Native System Administrator's Guide. |
|
secretVal.* |
ocrsm.rsm |
The credentials for accessing the system.
|
|
secret.* |
ocrsm.rsm |
The details about BRM REST Services Manager Secrets:
See "About Using External Kubernetes Secrets" in BRM Cloud Native System Administrator’s Guide. |
|
affinity |
ocrsm.rsm |
The rules for scheduling pods on particular nodes using more powerful selectors using affinity rules. |
|
nodeSelector |
ocrsm.rsm |
The rules for deploying the pod on specific nodes. |
|
addOnPodSpec |
ocrsm.rsm |
The details for extending pod specification or overriding features. By default, this key is empty. |
|
resources.* |
ocrsm.rsm |
The minimum and maximum CPU and memory resources that containers can use. See "Setting Minimum and Maximum CPU and Memory Values" in BRM Cloud Native System Administrator's Guide. |
|
hpa.* |
ocrsm.rsm |
The details for scaling up or down the number of pod replicas in your deployment based on a pod's CPU or memory utilization. By default, the Horizontal Pod Autoscaler is disabled. See "Setting Up Autoscaling of BRM Pods" in BRM Cloud Native System Administrator's Guide. |
|
service.* |
ocrsm.rsm |
The brm-rest-services-manager service's details.
|
|
mapperConfiguration |
ocrsm.rsm |
This contains the Mapper Configuration keys which are required for the APIs and events that use mapper framework. See "Configuring and Adding Custom Mapper Files" for more information. |
|
consumers.* |
ocrsm.rsm |
The required consumers details of kafka and data base for consuming the events respectively. Note: Uncomment or add the required configurations to work with event notifications. |
|
producer.* |
ocrsm.rsm |
The required producer details of kafka connection in order to get the event messages. Note: Uncomment or add the required configurations in order to work with event notifications. |
|
connection-profiles.* |
ocrsm.rsm |
The required coonnection-profile details of kafka and data base for secure connection. Note: uncomment or add the required configurations in order to work with event notifications |
You can use the following commands to encode and decode passwords in Base64 format:
-
To encode strings in Linux:
echo -n 'password' | base64
-
To decode strings in Linux:
echo 'encoded_password' | base64 --decode
Configuring Policies for API Authorization
To configure the policies for API authorization:
-
Define the API authorization rules in a policy file.
You can use the sample authorization policy ConfigMap (configmap_auth_policy_brmrsm.yaml) as a template for defining API authorization rules.
-
For any new BRM REST Services Manager API endpoints, ensure that appropriate policy statements are added to the file. This is essential for enforcing proper authorization and access restrictions for each new API.
-
Run the helm upgrade command to update the Helm release:
helm upgrade BrmReleaseName oc-cn-helm-chart --values OverrideValuesFile --namespace BrmNameSpace
Configuring and Adding Custom Mapper Files
By default, BRM REST Services Manager uses predefined mapper files to translate between JSON payload objects and BRM opcode flists for the latest versions of account and inventory management. However, you can customize this mapping by creating and adding your own mapper files. This allows you to extend or override the default mappings to meet your specific integration needs.
-
Draft your customization as one or more YAML files. Follow the same structure as the sample files in oc-cn-helm-chart/rsm/referenceMappers.
The following example shows how to map a custom payload field (PIN_FLD_CUSTOM) for the Create a Product REST API request:
mapper: custom: v5: tmf637: productCreateEvent: product: request: jsonCustomField: field: PIN_FLD_CUSTOM_FIELD fieldValue: "" optional: false validation: "enum:[inactive, active, cancelled]" -
Add your custom YAML files to the BRM REST Services Manager deployment by doing one of the following:
-
Create a ConfigMap from a single YAML file:
kubectl create configmap ConfigMapName --from-file=YamlFileName -n BrmNameSpace
where:-
ConfigMapName is the name of the ConfigMap to create.
-
YamlFileName is the path to your custom YAML file.
-
BrmNameSpace is the BRM Kubernetes namespace.
-
-
Create a ConfigMap from all YAML files in a directory:
kubectl create configmap ConfigMapName --from-file=. -n BrmNameSpace
Note:
Run all commands from the directory containing the file.
-
Add your custom YAML files to the BRM REST Services Manager deployment without pre-creating a ConfigMap. Place files of size upto 1 MiB in the oc-cn-helm-chart/rsm/extendedMappers. Place larger files in SDK/extendedMappers within the SDK project, and supply the SDK image to REST Services Manager. Use the existing REST Services Manager packaging steps to build and provide the SDK image to RSM.
Note:
All methods are for mapper files less than 1MiB. You can use SDK to create custom mapper files larger than 1 MiB.
-
-
Provide the path from your custom mapper files as requests, responses, or execute respectively. Update the override_values.yaml:
ocrsm: rsm: mapperConfiguration: config: paths: event: v5: ProductCreateEvent: mapper-specification-keys: default: Product Event: execute: - "mapper.brm.v5.tmf637.productCreateEvent.execute" request: - "mapper.brm.v5.tmf637.productCreateEvent.request" response: - "mapper.brm.v5.tmf637.productCreateEvent.response" - "mapper.custom.v5.tmf637.productCreateEvent.response" Product: request: - "mapper.brm.v5.tmf637.post.request.product" - "mapper.brm.v5.tmf637.post.request.extendedProduct" - "mapper.custom.v5.tmf637.post.request.product" response: - "mapper.brm.v5.tmf637.post.response.product" - "mapper.brm.v5.tmf637.post.response.extendedProduct" - "mapper.custom.v5.tmf637.post.response.product"where:- ProductCreateEvent defines the type of event.
- mapper-specification-keys specifies logical profiles or mapping variants.
- default is used when no explicit profile is provided.
- execute, request, and response designate the mapping configuration files to be applied for execution opcode, request transformation, and response transformation respectively.
-
Update the following keys in your override_values.yaml file for oc-cn-helm-chart:
-
ocrsm.rsm.externalExtendedMapper: If you created a ConfigMap, set this to the name of the ConfigMap you created in step 2.
-
ocrsm.rsm.configEnv.restartVersion: Increment this value by one and run the helm upgrade to force restart and initialize the changes.
Note:
For more information on Mapper keys, refer to Table 8-1.
-
-
Run the helm upgrade command for oc-cn-helm-chart:
helm upgrade BrmReleaseName oc-cn-helm-chart --values OverrideValuesFile --namespace BrmNameSpace
Publishing Notifications for External Applications
Use the BRM REST Services Manager notification framework to publish TM Forum (TMF) events to Apache Kafka topics so downstream applications, such as Siebel CRM or Order and Service Management (OSM), can retrieve and process them.
-
A billing account is created or deleted.
-
A billing account’s state or attributes have changed.
-
A party account is created or deleted.
-
A party account’s state or attributes have changed.
-
A product is created or deleted.
-
A product’s state or attributes have changed.
For details about the notification event content, see REST Services Manager API for Billing and Revenue Management.
Before you begin, ensure that your system meets the notification framework prerequisites. See "Notification Framework Prerequisites".
To configure BRM REST Services Manager to publish notifications:
-
Open your override-values.yaml file for oc-cn-helm-chart.
-
Configure the connection profiles for Kafka brokers and the Oracle AQ database by uncommenting and setting the keys under ocrsm.rsm.connection-profiles. See "Setting Up Connection Profiles".
-
Configure one or more consumers to read messages from Kafka topics by uncommenting and setting the keys in ocrsm.rsm.consumers. See "Configuring Consumers for Kafka Topics".
-
Configure one or more consumers to read messages from the Oracle AQ database queue by uncommenting and setting the keys under ocrsm.rsm.consumers. See "Configuring Consumers for Database Queues".
-
Configure one or more producers to write messages to Kafka topics by uncommenting and setting the keys under ocrsm.rsm.producer. See "Setting Up Producers".
-
Store secrets in Base64-encoded format in the override-values.yaml file so they can be added to the wallet at runtime.
-
Save the configuration and verify that all folder paths referenced in the override-values.yaml file exist and are accessible to the REST Services Manager process.
-
Validate that topics, partitions, security settings, and service connections are correct. See "Performing Verification and Sanity Checks".
-
Use the helm upgrade command to deploy and start the REST Services Manager notification services.
-
Validate the service by reviewing logs and performing functional checks. If needed, customize event handling with mapper overrides. Follow the approved restart procedure for the REST Services Manager Notification Service after configuration updates.
-
Confirm that the service connects to the Kafka brokers and joins the expected consumer groups.
-
Restart REST Services Manager cloud native after applying configuration or credential changes.
Note:
-
Enter SSL configurations (KeyStore and TrustStore locations and types, and passwords) in override-values.yaml using wallet references.
-
Do not store plain-text credentials in configuration files.
Notification Framework Prerequisites
-
Create your Kafka cluster and topics. Ensure that the configuration aligns with your environment and security standards. To do so, follow the instructions in "Configuring Your AQ Database Queues" in BRM System Administrator’s Guide.
-
Provision a Kafka cluster with sufficient brokers to meet your throughput and high availability requirements.
-
Define all topics required for the REST Services Manager Notification Service, including source, sink, retry, and dead-letter queue (DLQ) topics.
-
Set the required number of partitions for each topic and apply appropriate access control lists (ACLs).
-
Record the host names and port numbers of all Kafka brokers.
-
Monitor Kafka server logs to validate connectivity and detect errors.
-
-
Configure the Enterprise Application Integration (EAI) Framework to convert TMF-related data into business events that can be sent to the Oracle Data Manager (DM).
-
Map BRM events to opcodes by using the event notification file. The default file (BRM_home/sys/data/config/pin_notify) includes TMF-related events. Update the event list as needed and load the file into the database. See "Using Event Notification" in BRM Developer's Guide.
-
Configure the Payload Generator External Module (EM) to assemble complete business events, generate required data, and send business events to the Oracle DM. The default file (BRM_home/sys/eai_js/payloadconfig_crm_sync) defines TMF-related business events. Update the list as needed. See "Configuring Business Events" in BRM Developer's Guide.
-
-
Create an Oracle Database Wallet for sensitive values.
-
Configure an Oracle Database Wallet to securely store sensitive credentials, such as SSL/TLS passphrases, KeyStore and TrustStore files, and database schema credentials.
-
The wallet contents and certificate requirements depend on the database listener and instance being preconfigured for SSL/TLS. Ensure database encryption is enabled before mapping KeyStore and TrustStore locations in the wallet.
-
Store wallet, KeyStore, and TrustStore files in a secure location with restrictive file permissions.
-
Do not place passwords or secrets in plain-text configuration files.
-
Setting Up Connection Profiles
Note:
Store the KeyStore, TrustStore, and wallet files in the oc-cn-helm-chart/rsm/rsm_keystore directory. Store secrets in Base64-encoded format in the override-values.yaml file so they can be added to the wallet at runtime.
Table 8-2 Connection Profile Keys
| Key Name | Description |
|---|---|
|
id |
A unique identifier for the connection profile. |
|
profile-type |
Whether the profile contains connection information for the Kafka broker (kafka) or database (database). |
|
host |
The host name or IP address of the Kafka broker or database. |
|
port |
The network port to connect to the Kafka broker or database. |
|
username |
The authentication user name, if required for SASL or similar mechanisms (often empty for SSL-only setups). |
|
password |
The key that references the Base64-encoded password (for example, stored in the Wallet) for authenticating this profile. |
|
truststore-type |
The type of TrustStore file used for SSL/TLS connections: PKCS12 or JKS. |
|
truststore-name |
The TrustStore file name that contains the trusted certificate authorities. |
|
truststore-password |
The Base64-encoded password key used to retrieve the TrustStore (for example, stored in the wallet) for secure access. |
|
keystore-type |
The type of the KeyStore file that holds client SSL certificates: PKCS12 or JKS. |
|
keystore-name |
The KeyStore file name that contains the client SSL certificate and private key. |
|
keystore-password |
The key used to retrieve the Base64-encoded password (for example, stored in the wallet) for secure access. |
|
properties.* |
(Kafka profile only) The Kafka client properties for offsets, timeouts, batching, and so on. Keys and values must follow standard Kafka property names and guidelines.
|
|
properties.service-name |
(Database profile only) The specific name of the database service (or SID) for establishing a connection. |
The following shows sample settings for a Kafka profile:
connection-profiles:
- id: "cp1"
profile-type: "kafka"
host: "host"
port: port
username: ""
password: "base64EncodedPassword"
truststore-type: PKCS12
truststore-name: "truststore.p12"
truststore-password: "base64EncodedPassword"
keystore-type: PKCS12
keystore-name: "keystore.p12"
keystore-password: "base64EncodedPassword"
properties:
auto.offset.reset: latest
enable.auto.commit: false
session.timeout.ms: 60000
heartbeat.interval.ms: 10000
connections.max.idle.ms: 3600000
max:
poll:
records: 10
interval.ms: 600000
partition.fetch.bytes: 1048576
acks: all
retries: 3
batch.size: 16384
linger.ms: 1
buffer.memory: 33554432
compression.type: none
The following shows sample settings for a database profile:
- id: "cp2"
profile-type: "database"
host: "host"
port: port
truststore-type: PKCS12
truststore-name: "truststore.p12"
truststore-password: "base64EncodedPassword"
keystore-type: PKCS12
keystore-name: "keystore.p12"
keystore-password: "base64EncodedPassword"
properties:
service-name: pindb.us.example.comConfiguring Consumers for Kafka Topics
Configure Kafka consumers by defining consumer properties, runtime behavior, and topic-event mappings under ocrsm.rsm.consumers. Table 8-3 lists the override-values.yaml keys for configuring consumers to read messages from Kafka topics.
Note:
When using multiple REST Services Manager replicas, ensure the number of partitions for each downstream consumer chain aligns with the parent consumer’s partitions to maintain ordering and parallelism.
Table 8-3 Kafka Consumer Keys
| Key Name | Description |
|---|---|
|
connection-profile-id |
The unique ID for the consumer profile instance. |
|
properties.group.id |
The unique ID for the consumer group managing coordination and offsets. Note: Use a distinct consumer group ID for each independent consumer. Consumers in the same downstream chain may share a group ID as required. |
|
configuration.* |
The configuration for the consumer profile instance:
|
|
topic-event-config.* |
The configuration for a Kafka topic to consume messages from:
|
|
topic-event-config.downstream-consumers.* |
A list of additional consumer stages for retry or DLQ handling, each with its own configuration. |
The following shows keys for a sample Kafka consumer named cp1:
consumers:
- connection-profile-id: "cp1"
properties:
group.id: cgroup-brmrsm-productInventory
configuration:
max-retries: 3
retry-delay-interval-ms: 1000
record-fetch-timeout-ms: 1000
brm-connection-retry-interval-ms: 30000
strict-ordering: false
buffer-strategy:
topic-event-config:
source-topic: productInventory
sink-topic: productInventoryRetry
key-state-topic: keyStateTopic
consumer-thread-count: 1
worker-thread-count: 2
downstream-consumers:
- connection-profile-id: "cp1"
properties:
group.id: cgroup-brmrsm-productInventory
configuration:
max-retries: 3
retry-delay-interval-ms: 1000
record.fetch.timeout.ms: 1000
brm.connection.retry.interval.ms: 30000
topic-event-config:
source-topic: productInventoryRetry
sink-topic: productInventoryDLQ
consumer-thread-count: 1
worker-thread-count: 2
events:
- ProductCreateEvent
- ProductAttributeValueChangeEvent
- ProductStateChangeEvent
- ProductDeleteEvent
events:
- ProductCreateEvent
- ProductAttributeValueChangeEvent
- ProductStateChangeEvent
- ProductDeleteEvent
- connection-profile-id: "cp1"
properties:
group.id: cgroup-brmrsm-partyAccountInventory
configuration:
max-retries: 1
retry-delay-interval-ms: 1000
record-fetch-timeout-ms: 1000
brm-connection-retry-interval-ms: 30000
strict-ordering: false
buffer-strategy:
topic-event-config:
source-topic: partyAccountInventory
sink-topic: partyAccountInventoryRetry
key-state-topic: keyStateTopic
consumer-thread-count: 1
worker-thread-count: 2
downstream-consumers:
- connection-profile-id: "cp1"
properties:
group.id: cgroup-brmrsm-partyAccountInventory
configuration:
max-retries: 1
retry-delay-interval-ms: 1000
record-fetch-timeout-ms: 1000
brm-connection-retry-interval-ms: 30000
topic-event-config:
source-topic: partyAccountInventoryRetry
sink-topic: partyAccountInventoryDLQ
key-state-topic:
consumer-thread-count: 1
worker-thread-count: 2
events:
- PartyAccountCreateEvent
- PartyAccountAttributeValueChangeEvent
- PartyAccountStateChangeEvent
- PartyAccountDeleteEvent
events:
- PartyAccountCreateEvent
- PartyAccountAttributeValueChangeEvent
- PartyAccountStateChangeEvent
- PartyAccountDeleteEvent
- connection-profile-id: "cp1"
properties:
group.id: cgroup-brmrsm-billingAccountInventory
configuration:
max-retries: 1
retry-delay-interval-ms: 1000
record-fetch-timeout-ms: 1000
brm-connection-retry-interval-ms: 30000
strict-ordering: false
buffer-strategy:
topic-event-config:
source-topic: billingAccountInventory
sink-topic: billingAccountInventoryRetry
key-state-topic: keyStateTopic
consumer-thread-count: 1
worker-thread-count: 2
downstream-consumers:
- connection-profile-id: "cp1"
properties:
group.id: cgroup-brmrsm-billingAccountInventory
configuration:
max-retries: 1
retry-delay-interval-ms: 1000
record-fetch-timeout-ms: 1000
brm-connection-retry-interval-ms: 30000
topic-event-config:
source-topic: billingAccountInventoryRetry
sink-topic: billingAccountInventoryDLQ
key-state-topic:
consumer-thread-count: 1
worker-thread-count: 2
events:
- BillingAccountCreateEvent
- BillingAccountAttributeValueChangeEvent
- BillingAccountStateChangeEvent
- BillingAccountDeleteEvent
events:
- BillingAccountCreateEvent
- BillingAccountAttributeValueChangeEvent
- BillingAccountStateChangeEvent
- BillingAccountDeleteEventConfiguring Consumers for Database Queues
Table 8-4 Consumer Keys for Database Queues
| Parameter | Explanation |
|---|---|
|
connection-profile-id |
The ID for the database connection profile. This value must exactly match the ID of a profile with profile-type set to database. |
|
properties.* |
The properties for connecting to the database queue.
|
|
wallet-name |
The name of the wallet or credential store used for secure connections to the database. If provided, wallet credentials take precedence over TrustStores and KeyStore files. Place the wallet in rsm/rsm_keystore. |
|
configuration.worker-thread-count |
The number of worker threads to process events from the database queue. |
The following example shows a Kafka consumer configuration in the REST_home/scripts/override-values.yaml:
- connection-profile-id: "cp2"
properties:
username: ""
password: "base64EncodedPassword"
queue-name: OPEN_API_QUEUE
wallet-name: db_wallet
configuration:
worker-thread-count: 1Setting Up Producers
Table 8-5 Producer Keys
| Parameter | Explanation |
|---|---|
|
connection-profile-id |
The name of the connection profile to use. |
|
properties |
The Kafka properties to override or producer-specific properties to add. |
|
event-topics-config.* |
The business events to publish to each Kafka topic.
|
producer:
connection-profile-id: "cp1"
properties:
event-topics-config:
- event-name: "ProductCreateEvent"
topic-names: [ "productCreateTopic", "productCreateTopic2" ]
- event-name: "ProductDeleteEvent"
topic-names: [ "ProductDeleteTopic" ]
- event-name: "ProductAttributeValueChangeEvent"
topic-names: [ "productAttributeValueTopic" ]
- event-name: "ProductStateChangeEvent"
topic-names: [ "productStateChangeTopic" ]
- event-name: "PartyAccountCreateEvent"
topic-names: [ "partyAccountNotificationTopic" ]
- event-name: "PartyAccountAttributeValueChangeEvent"
topic-names: [ "partyAccountNotificationTopic" ]
- event-name: "PartyAccountStateChangeEvent"
topic-names: [ "partyAccountNotificationTopic" ]
- event-name: "PartyAccountDeleteEvent"
topic-names: [ "partyAccountNotificationTopic" ]
- event-name: "BillingAccountCreateEvent"
topic-names: [ "partyAccountNotificationTopic" ]
- event-name: "BillingAccountAttributeValueChangeEvent"
topic-names: [ "partyAccountNotificationTopic" ]
- event-name: "BillingAccountStateChangeEvent"
topic-names: [ "partyAccountNotificationTopic" ]
- event-name: "BillingAccountDeleteEvent"
topic-names: [ "partyAccountNotificationTopic" ]Performing Verification and Sanity Checks
Perform checks to ensure topics, partitions, security settings, and service connections are correct. Verify functional connectivity and end-to-end message flow.
-
Confirm that all required topics exist with the correct partition counts and ACLs.
-
Ensure that consumers join the correct consumer groups and receive expected partition assignments.
-
Verify that SSL or SASL connections to brokers are successfully established and validated.
-
Publish test messages and verify end-to-end flow from producers through consumers, including retry and DLQ paths.
-
Use provided scripts and logs to verify wallet entry references and KeyStore/TrustStore integrity.
Configuring PDC REST Services Manager
You use PDC REST Services Manager to integrate an enterprise product catalog, such as Oracle Digital Experience for Communications Launch Experience, with PDC. This enables you to create a variety of product offerings in your enterprise product catalog and then have all of the rating and billing performed by PDC and BRM. For more information, see "About PDC REST Services Manager" in PDC REST Services Manager Integration Guide.
To configure PDC REST Services Manager in BRM cloud native:
-
Override the PDC REST Services Manager-specific keys in the values.yaml file. See "Adding PDC REST Services Manager Keys".
-
Configure OAuth authentication:
-
If you are using Oracle Access Management for OAuth, create an identity domain, resource server, and OAuth client for PDC REST Services Manager in Oracle Access Management as described in "Setting Up OAuth for PDC REST Services Manager with Oracle Access Management" in BRM Security Guide.
-
Configure the keys in the override-values.yaml file for OAuth with either Oracle Identity Cloud Service or Oracle Access Management as described in "Configuring OAuth Authentication in PDC REST Services Manager".
-
-
Configure outbound communication to the enterprise product catalog. See "Configuring Requests to the Enterprise Product Catalog".
-
Enable TLS encryption in PDC REST Services Manager to secure the communications it receives from your enterprise product catalog. See "Enabling TLS in PDC REST Services Manager".
-
Enable the T3S protocol in PDC REST Services Manager to secure its communications to PDC. See "Enabling T3S in PDC REST Services Manager".
-
Map TMF620 priceType values to BRM events to ensure that PDC REST Services Manager triggers the correct charging events for your pricing components. See "Configuring Mapping of TMF620 priceType to BRM Events".
Adding PDC REST Services Manager Keys
Table 8-6 lists the keys that directly impact PDC REST Services Manager. Add these keys to your override-values.yaml file with the same path hierarchy.
Caution:
Keys with the path ocpdcrsm.secretValue hold sensitive data. Handle them carefully with controlled access to the override file containing their values. Encode all of these values in Base64. See "Secrets" in Kubernetes Concepts.
Table 8-6 PDC REST Services Manager Keys
| Key | Path in Values.yaml File | Description |
|---|---|---|
|
isEnabled |
ocpdcrsm |
Whether to enable and deploy PDC REST Services Manager with BRM cloud native (true) or not (false). The default is false. |
|
labels.name |
ocpdcrsm |
The string used to form the names of PDC REST Services Manager. The default is pdcrsm. |
|
deployment.* |
ocpdcrsm |
The details for deploying PDC REST Services Manager.
|
|
resources.* |
ocpdcrsm.deployment |
The minimum and maximum CPU and memory resources that containers can use. See "Setting Minimum and Maximum CPU and Memory Values" in BRM Cloud Native System Administrator's Guide. |
|
configEnv.* |
ocpdcrsm |
The configuration details for the PDC REST Services Manager.
|
| idcs.* |
ocpdcrsm.configEnv |
The Oracle Identity Cloud Service (IDCS) authentication details.
|
|
oam.* |
ocpdcrsm.configEnv |
The Oracle Access Manager authentication details.
|
|
isTracingEnabled |
ocpdcrsm.configEnv |
Whether to enable tracing for the PDC REST Services Manager API (true) or not (false). The default is false. |
|
isTlsEnabled |
ocpdcrsm.configEnv |
Whether to enable TLS encryption for PDC REST Services Manager (true) or not (false). The default is false. |
|
tlsVersions |
ocpdcrsm.configEnv |
The list of supported TLS versions, such as TLSv1.2,TLSv1.3. |
|
tlsCertificateFile |
ocpdcrsm.configEnv |
The path to the TLS certificate bundle relative to the Helm chart. The certificate must be in PKCS12 format. Ensure that the certificate file in the rsm directory. |
|
extPDCRSMTlsSecret |
ocpdcrsm.configEnv |
The name of the pre-created Kubernetes Secret for the custom TLS certificate. See "About Using External Kubernetes Secrets" in BRM Cloud Native System Administrator's Guide. |
|
httpClients.* |
ocpdcrsm.configEnv |
The details for configuring the HTTP client. |
|
nodeSelector |
ocpdcrsm.configEnv |
The rules for deploying the pod on specific nodes. |
|
affinity |
ocpdcrsm.configEnv |
The rules for running the pod on specific nodes. Set this key if you want to constrain the pod to run only on the nodes that meet your criteria. For more information about this key, see "Node Affinity" in the Kubernetes documentation. |
|
addOnPodSpec |
ocpdcrsm.configEnv |
The details for extending pod specification or overriding features. By default, this key is empty. |
|
monitoring.prometheus* |
ocpdcrsm.configEnv |
The details for monitoring PDC REST Services Manager.
|
|
secretValue.* |
ocpdcrsm.rsm |
The credentials for accessing the system.
|
|
extPdcrsmSecret |
ocpdcrsm.secret |
The name of the external Kubernetes Secret for the PDC REST Services Manager. See "About Using External Kubernetes Secrets" in BRM Cloud Native System Administrator's Guide. |
|
service.* |
ocpdcrsm |
Details about the pdcrsm service:
|
Sample PDC REST Services Manager override-values.yaml Entries
The following shows sample content in the override-values.yaml for PDC REST Services Manager, when Oracle Access Management is used for OAuth authentication:
ocpdcrsm:
isEnabled: true
labels:
name: "pdcrsm"
deployment:
deadlineSeconds: 60
revisionHistLimit: 10
imageName: "oracle/pdcrsm"
imageTag: ":15.2.0.0.0"
imagePullPolicy: IfNotPresent
rootLogLevel: INFO
appLogLevel: INFO
configEnv:
name: "pdcrsm-configmap-env"
rsmListenerPort: 8080
baseURL: xxxxx.xxx.xxxxx.xxx
useT3s: true
securityEnabled: true
securityType: oam
resources:
requests:
cpu: "50m"
memory: "256Mi"
limits:
cpu: "1000m"
memory: "2Gi"
oam:
domainName: PDCRSMDomain
audience: PDCRSMResourceServer
endpointURL: http://oam_host:oam_port/oauth2/rest/token
introspectendpointuri: http://oam_host:oam_port/oauth2/rest/token/info
scopeaudience: http://oam_host:oam_port/
authorizationendpointuri: http://oam_host:oam_port/oauth2/authorize
proxyhost: http://proxyhost:proxyport/
frontenduri: http://oam_host:oam_port
secretValue:
name: "pdcrsm-secret-env"
service:
name: "pdcrsm"
type: "ClusterIP"
Configuring OAuth Authentication in PDC REST Services Manager
PDC REST Services Manager uses the OAuth 2.0 protocol to authenticate an enterprise product catalog's identity and to authorize the enterprise product catalog to access the PDC REST Services Manager API. It does this by validating an OAuth access token that is passed in the header of every HTTP/HTTPS request to the PDC REST Services Manager API.
To configure OAuth authentication in PDC REST Services Manager:
- Add these keys to your override-values.yaml file for
oc-cn-helm-chart:
- If you are using Oracle Identity Cloud Service (IDCS) for OAuth:
- ocpdcrsm.configEnv.isInboundOauthEnabled: Set this to true to enable OAuth authentication.
- ocpdcrsm.configEnv.inboundOauthUri: Set this to
the base URL of your Oracle Identity Cloud Service (IDCS) instance
in this
format:
https://idcs-TenantID.identity.oraclecloud.com - ocpdcrsm.configEnv.inboundOauthClientId: Set this to the client ID of your confidential application.
- ocpdcrsm.secretValue.inboundOauthClientSecret: Set this to the Base64-encrypted client secret obtained from your IDCS application.
- ocpdcrsm.configEnv.inboundOauthFrontendUri: Set this to the base URL of your confidential application when run, such as http://myapp.example.com:8080.
- ocpdcrsm.configEnv.inboundOauthAudience: Set this to the primary audience as provisioned for the PDC REST Services Manager application in IDCS.
- ocpdcrsm.configEnv.inboundOauthProxyHost: Set this to the host name of your proxy server, if required.
- ocpdcrsm.configEnv.inboundOauthPubEventScope: Set this to the name of the scope for accessing the TMF620 Publish Event endpoint for inbound OAuth authentication, such as pubevent.
- ocpdcrsm.configEnv.inboundOauthMetricsScope: Set this to the name of the scope for accessing the metrics endpoint for inbound OAuth authentication, such as metrics.
- If you are using Oracle Access Management for OAuth:
- ocpdcrsm.configEnv.oam.domainName: Set this to the name of the OAuth identity domain created in Oracle Access Management for PDC REST Services Manager.
- ocpdcrsm.configEnv.oam.audience: Set this to the name of the OAuth resource server created in Oracle Access Management for PDC REST Services Manager.
- ocpdcrsm.configEnv.oam.endpointURL: Set this to the URL for requesting an OAuth token from Oracle Access Management.
- ocpdcrsm.configEnv.oam.introspectendpointuri: Set this to the URL for validating an OAuth token from Oracle Access Management.
- ocpdcrsm.configEnv.oam.scopeaudience: Set this to the primary audience for PDC REST Services Manager in the Oracle Access Management resource, used for error handling. This is the same as ocpdcrsm.configEnv.oam.frontenduri, ending with /.
- ocpdcrsm.configEnv.oam.authorizationendpointuri: The URL for authorizing role-based access. PDC REST Services Manager does not support role-based access, so this will not be used.
- ocpdcrsm.configEnv.oam.proxyhost: Set this to the URL for your Oracle Access Management proxy server, if needed.
- ocpdcrsm.configEnv.oam.frontenduri: Set this to the URL for of the OAuth client created in Oracle Access Management for PDC REST Services Manager.
- If you are using Oracle Identity Cloud Service (IDCS) for OAuth:
-
Run the helm upgrade command to update the Helm release:
helm upgrade BrmReleaseName oc-cn-helm-chart --values OverrideValuesFile --namespace BrmNameSpace
- Restart the PDC REST Services Manager pods. If downtime is not a
concern, both pods can be deleted and re-created by running the following command.
Otherwise, delete one pod at a time, waiting for its replacement pod to become
"Running" before deleting the next
one.
kubectl -n BrmNameSpace delete pods --selector=app.kubernetes.io/name=pdcrsm
Configuring Requests to the Enterprise Product Catalog
PDC REST Services Manager sends requests to the enterprise product catalog when calling the enterprise product catalog's REST API and when publishing acknowledgment notifications.
To configure PDC REST Services Manager to send requests to the enterprise product catalog:
-
Open the override-values.yaml file for oc-cn-helm-chart.
-
Edit the keys in the file based on the type of authentication required by your enterprise product catalog:
-
For OAuth 2.0 authentication, edit the keys in Table 8-7.
Table 8-7 OAuth 2.0 Keys
Key Path in Values.yaml file Description tokenEndpoint
ocpdcrsm.configEnv.httpClients.security.oauth2
The endpoint used to retrieve a token from.
clientId
ocpdcrsm.configEnv.httpClients.security.oauth2
The client ID used to authenticate the request from PDC REST Services Manager.
scope
ocpdcrsm.configEnv.httpClients.security.oauth2
The scopes required by the enterprise product catalog.
grantType
ocpdcrsm.configEnv.httpClients.security.oauth2
The grant type to be used for the OAuth flow: client_credentials or password.
clientSecret
ocpdcrsm.secretValue.httpClients.security.oauth2
The encrypted client secret used to authenticate the request from PDC REST Services Manager.
password
ocpdcrsm.secretValue.httpClients.security.oauth2
The encrypted password required for accessing the enterprise product catalog.
-
For basic authentication, edit the keys in Table 8-8.
Table 8-8 basicAuth Keys
Key Path in Values.yaml file Description username
ocpdcrsm.configEnv.httpClients.security.basicAuth
The user name required for accessing the enterprise product catalog.
password
ocpdcrsm.secretValue.httpClients.security.basicAuth
The password required for accessing the enterprise product catalog.
-
-
Run the helm upgrade command to update the Helm release:
helm upgrade BrmReleaseName oc-cn-helm-chart --values OverrideValuesFile --namespace BrmNameSpace
-
Restart the PDC REST Services Manager pods. If downtime is not a concern, both pods can be deleted and re-created by running the following command. Otherwise, delete one pod at a time, waiting for its replacement pod to have a "Running" status before deleting the next one.
kubectl --namespace BrmNameSpace delete pods --selector=app.kubernetes.io/name=pdcrsm
The following shows an example configuration for OAuth 2.0 authentication.
Note:
All urlRegex values in the file must be properly escaped with \\. The characters that must be escaped are: \.[]{}()<>*+-=!? ^$|.
configEnv:
httpClients:
- urlRegex: "http://hostname:port/mobile/custom/catalogManagement/.*"
security:
oauth2:
tokenEndpoint: "https://idcs_hostname/oauth2/v1/token"
clientId: "fcb3443f6c504ed789ba38a78341b88a"
scope: "https://hostnameurn:opc:resource:consumer::all"
grantType: EncryptedPassword
secretValue:
httpClients:
- urlRegex: "http://hostname:port/mobile/custom/catalogManagement/.*"
security:
oauth2:
clientSecret: client_secret
password: EncryptedPasswordThe following shows an example configuration for Basic authentication:
Note:
All urlRegex values in the file must be properly escaped with \\. The characters that must be escaped are: \.[]{}()<>*+-=!? ^$|.
configEnv:
httpClients:
- urlRegex: "http://hostname:port/mobile/custom/PublishingAPI.*"
security:
basicAuth:
username: eccUser
secretValue:
httpClients:
- urlRegex: "http://hostname:port/mobile/custom/PublishingAPI.*"
security:
basicAuth:
password: EncryptedPasswordEnabling TLS in PDC REST Services Manager
You can enable TLS encryption in PDC REST Services Manager to secure the communications it receives from your enterprise product catalog.
To enable TLS in PDC REST Services Manager:
-
Generate a self-signed SSL certificate:
-
Create a directory for storing your SSL certificate that is accessible by the BRM Helm chart, such as oc-cn-helm-chart/rsm_cert.
-
Generate an SSL certificate. For example, this creates a certificate file named cert.pem:
openssl req -x509 -newkey rsa:4096 -keyout openSSLKey.pem -out cert.pem -days 365 -nodes -
Generate a PKCS12 KeyStore file. For example, this creates a KeyStore file named keystore.p12:
openssl pkcs12 -export -out keyStore.p12 -inkey openSSLKey.pem -in cert.pem
-
-
Add these keys to your override-values.yaml file for oc-cn-helm-chart:
-
ocpdcrsm.configEnv.isTlsEnabled: Set this to true to enable TLS encryption for PDC REST Services Manager.
-
ocpdcrsm.configEnv.tlsVersions: Set this to the list of supported TLS versions, such as TLSv1.2,TLSv1.3.
-
ocpdcrsm.configEnv.tlsCertificateFile: Set this to the path to the TLS certificate bundle in the Helm chart. The certificate must be in PKCS12 format.
-
ocpdcrsm.secretValue.tlsCertificatePassphrase: Set this to the Base64-encrypted passphrase for the TLS certificate.
-
-
Run the helm upgrade command to update the Helm release:
helm upgrade BrmReleaseName oc-cn-helm-chart --values OverrideValuesFile --namespace BrmNameSpace
-
To apply the changes, re-create any previously existing PDC REST Services Manager pods:
kubectl --namespace BrmNameSpace delete pods --selector=app.kubernetes.io/name=pdcrsm
After you enable TLS, connect to PDC REST Services Manager services using HTTPS only.
Enabling T3S in PDC REST Services Manager
Enable the T3S protocol in PDC REST Services Manager to secure its communications to PDC.
To enable T3S in PDC REST Services Manager:
-
Add these keys to your override-values.yaml file for oc-cn-helm-chart:
-
ocpdcrsm.configEnv.useT3s: Set this to true.
-
-
Run the helm upgrade command to update the Helm release:
helm upgrade BrmReleaseName oc-cn-helm-chart --values OverrideValuesFile --namespace BrmNameSpace
-
To apply the changes, re-create any previously existing PDC REST Services Manager pods:
kubectl --namespace BrmNameSpace delete pods --selector=app.kubernetes.io/name=pdcrsm
Configuring Mapping of TMF620 priceType to BRM Events
If you are using PDC REST Services Manager, you must configure the mappings of BRM event names to the values your enterprise product catalog sends in the priceType property of the ProductOfferingPrice element of the TMF 620 payload.
The mappings are configured in configmap_pdcrsm_appeventCfg.yaml. You can add mappings as needed for your deployment or use the default mappings provided at installation.
To add or edit mappings:
-
Open the configmap_pdcrsm_appeventCfg.yaml file.
-
Edit the existing mappings, or use them as templates to add new ones. Use the following format:
pricetype : "eventname"
where:
-
pricetype is the value sent in the priceType property of the ProductOfferingPrice element of the TMF620 payload.
-
eventname is the name of the BRM event the price type should be mapped to.
For example, the default mappings for one-time fees and usage events are:
ONE_TIME : "EventBillingProductFeePurchase" ONE_TIME_PRICE_PLAN : "EventBillingProductFeePurchase" USAGE : "EventSession" USAGE_PRICE_PLAN : "EventSession"
-
-
Run the helm upgrade command to update the Helm release:
helm upgrade BrmReleaseName oc-cn-helm-chart --values OverrideValuesFile --namespace BrmNameSpace
-
Restart the PDC REST Services Manager pods. If downtime is not a concern, both pods can be deleted and re-created by running the following command. Otherwise, delete one pod at a time, waiting for its replacement pod to become "Running" before deleting the next one.
kubectl --namespace BrmNameSpace delete pods --selector=app.kubernetes.io/name=pdcrsm