diff --git a/.changelog/release-v14.0.0.md b/.changelog/release-v14.0.0.md index 405401a51..e7558db9f 100644 --- a/.changelog/release-v14.0.0.md +++ b/.changelog/release-v14.0.0.md @@ -61,7 +61,7 @@ Date | Revision | Description 17. **mojaloop/#2810:** timeout events are being produced for transfers with an internal-state of ABORTED_ERROR ([#907](https://github.com/mojaloop/central-ledger/issues/907)) ([e77de0a](https://github.com/mojaloop/central-ledger/commit/e77de0a8e7dd473d3afbb27df464d27ff5ce98a7)), closes [mojaloop/#2810](https://github.com/mojaloop/project/issues/2810) 18. **mojaloop/#2811:** sdk-scheme-adapter sending incorrect transferState on a PUT transfers Callback ([#331](https://github.com/mojaloop/sdk-scheme-adapter/issues/331)) ([f7e450c](https://github.com/mojaloop/sdk-scheme-adapter/commit/f7e450cc2568f70f6c9abbb39d9c2186787c31b7)), closes [mojaloop/#2811](https://github.com/mojaloop/sdk-scheme-adapter/issues/2811) 19. **mojaloop/#2816:** SDK-Scheme-Adapter is missing/incorrect bulkTransferState on a PUT /bulkTransfer/{id} Callback by the PayeeFSP ([#331](https://github.com/mojaloop/sdk-scheme-adapter/issues/331)) ([f7e450c](https://github.com/mojaloop/sdk-scheme-adapter/commit/f7e450cc2568f70f6c9abbb39d9c2186787c31b7)), closes [mojaloop/#2816](https://github.com/mojaloop/sdk-scheme-adapter/issues/2816) -20. **Testing Toolkit:**: +20. **Testing Toolkit**: 1. Added missing test currencies to FSPIOP apis provisioned in TTK [ml-testing-toolkit/pull/205](https://github.com/mojaloop/ml-testing-toolkit/pull/205) 2. Unable to retain the renamed folder ([ml-testing-toolkit-ui/pull/126](https://github.com/mojaloop/ml-testing-toolkit-ui/pull/126)), closes [mojaloop/#2656](https://github.com/mojaloop/project/issues/2656) 3. TTK does not send callbacks after processing a Callback-Rule with a FIXED_CALLBACK ([ml-testing-toolkit-ui/pull/126](https://github.com/mojaloop/ml-testing-toolkit-ui/pull/126)), closes [mojaloop/#2685](https://github.com/mojaloop/project/issues/2695) @@ -98,7 +98,7 @@ Date | Revision | Description ## 4. Application release notes 1. ml-api-adapter - https://github.com/mojaloop/ml-api-adapter/releases/tag/v14.0.0 -2. central-ledger - https://github.com/mojaloop/central-ledger/releases/tag/v15.1.0 +2. central-ledger - https://github.com/mojaloop/central-ledger/releases/tag/v15.1.2.1 3. account-lookup-service - https://github.com/mojaloop/account-lookup-service/releases/tag/v14.0.0 4. quoting-service - https://github.com/mojaloop/quoting-service/releases/tag/v15.0.2 5. central-settlement- https://github.com/mojaloop/central-settlement/releases/tag/v15.0.0 diff --git a/.changelog/release-v14.1.0.md b/.changelog/release-v14.1.0.md index 523de0017..cd87fc8f2 100644 --- a/.changelog/release-v14.1.0.md +++ b/.changelog/release-v14.1.0.md @@ -2,57 +2,62 @@ Date | Revision | Description ---------|----------|--------- - 2022-10-18 | 0 | Initial draft + 2022-10-20 | 0 | Initial draft - For *BREAKING CHANGES*, please review the section `#5` "Breaking Changes" below. - For *KNOWN ISSUES*, please review the section `#8` "Known Issues" below. ## 1. New Features -1. **mojaloop/#2352:** Mojaloop Helm support for Kubernetes networking.k8s.io/v1 (Ingress) ([mojaloop/helm/pull/#508](https://github.com/mojaloop/helm/pull/508)), closes [mojaloop/#2352](https://github.com/mojaloop/project/issues/2352) +1. **mojaloop/#2352:** Mojaloop Helm support for Kubernetes networking.k8s.io/v1 (Ingress) ([mojaloop/helm/pull/#508](https://github.com/mojaloop/helm/pull/508)), closes [mojaloop/#2352](https://github.com/mojaloop/project/issues/2352) ## 2. Bug Fixes -N/A +1. **mojaloop/#2796** Duplicate transaction not getting callback for post /bulkTransfers ([central-ledger/pull/915](https://github.com/mojaloop/central-ledger/pull/915)), closes [mojaloop/#2796](https://github.com/mojaloop/project/issues/2796) +2. **mojaloop/#2798** No error callback when there's an Inactive participant in the transaction ([central-ledger/pull/#911](https://github.com/mojaloop/central-ledger/pull/911), [central-ledger/pull/#913](https://github.com/mojaloop/central-ledger/pull/913)), closes [mojaloop/#2798](https://github.com/mojaloop/project/issues/2798) +3. **mojaloop/#2800** Invalid dfsp name in header or body does not return any error ([central-ledger/pull/#911](https://github.com/mojaloop/central-ledger/pull/911), [central-ledger/pull/#913](https://github.com/mojaloop/central-ledger/pull/913)), closes [mojaloop/#2800](https://github.com/mojaloop/project/issues/2800) +4. **mojaloop/#2801** Invalid timestamp scenario not shown as failed transaction ([documentation/pull/385](https://github.com/mojaloop/documentation/pull/385), [central-ledger/pull/916](https://github.com/mojaloop/central-ledger/pull/916), [central-services-shared/pull/333](https://github.com/mojaloop/central-services-shared/pull/333), [testing-toolkit-test-cases/pull/81](https://github.com/mojaloop/testing-toolkit-test-cases/pull/81), [helm/pull/492](https://github.com/mojaloop/helm/pull/492)), closes [mojaloop/#2801](https://github.com/mojaloop/project/issues/2801) +5. **Testing-Toolkit**: + 1. **mojaloop/#2995** mobile simulator not responding ([ml-testing-toolkit-ui/pull/141](https://github.com/mojaloop/ml-testing-toolkit-ui/pull/141), [helm/pull/512](https://github.com/mojaloop/helm/pull/512)), closes [mojaloop/#2994](https://github.com/mojaloop/project/issues/2995) ## 3. Application versions -1. ml-api-adapter: v13.0.0 -> **v14.0.0** -2. central-ledger: v13.16.1 -> **v15.1.2.1** -3. account-lookup-service: v13.0.0 -> **v14.0.0** -4. quoting-service: v14.0.0 -> **15.0.2** -5. central-settlement: 13.4.1 -> **v15.0.0** -6. central-event-processor: v11.0.2 -> **v12.0.0** -7. bulk-api-adapter: v13.0.1 -> **v14.0.0** -8. email-notifier: v11.0.2 -> **v12.0.0** -9. als-oracle-pathfinder: v11.0.4 -> **v12.0.0** -10. transaction-requests-service: v13.0.0 -> **v14.0.1** +1. ml-api-adapter: **v14.0.0** +2. central-ledger: v15.1.2.1 -> **v16.3.1** ([Compare](https://github.com/mojaloop/central-ledger/compare/v15.1.2.1...v16.3.1)) +3. account-lookup-service: **v14.0.0** +4. quoting-service: **v15.0.2** +5. central-settlement: **v15.0.0** +6. central-event-processor: **v12.0.0** +7. bulk-api-adapter: v14.0.0 -> **v14.2.0** ([Compare](https://github.com/mojaloop/bulk-api-adapter/compare/v14.0.0...v14.2.0)) +8. email-notifier: **v12.0.0** +9. als-oracle-pathfinder: **v12.0.0** +10. transaction-requests-service: **v14.0.1** 11. finance-portal-ui: **v10.4.3** _(DEPRECATED)_ 12. finance-portal-backend-service: **v15.0.2** _(DEPRECATED)_ 13. settlement-management: **v11.0.0** _(DEPRECATED)_ 14. operator-settlement: **v11.0.0** _(DEPRECATED)_ 15. event-sidecar: **v12.0.0** -16. event-stream-processor: v11.0.0-snapshot -> **v12.0.0-snapshot.7** -17. simulator: 12.0.0 -> **v12.0.0** -18. mojaloop-simulator: v12.1.1 -> **v13.0.1** -19. sdk-scheme-adapter: v11.18.11 -> **v18.0.2** -20. ml-testing-toolkit: v14.0.4 -> **v15.0.0** -21. ml-testing-toolkit-ui: v13.5.5 -> **v15.0.0** +16. event-stream-processor: **v12.0.0-snapshot.7** +17. simulator: **12.0.0** +18. mojaloop-simulator: **v13.0.1** +19. sdk-scheme-adapter: v11.18.11 -> **v21.4.0** ([Compare](https://github.com/mojaloop/sdk-scheme-adapter/compare/v11.18.11...v21.4.0)) +20. ml-testing-toolkit: v15.0.0 -> **v15.2.0** ([Compare](https://github.com/mojaloop/ml-testing-toolkit/compare/v15.0.0...v15.2.0)) +21. ml-testing-toolkit-ui: v15.0.0 -> **v15.0.1** ([Compare](https://github.com/mojaloop/ml-testing-toolkit-ui/compare/v15.0.0...v15.0.1)) 22. ml-testing-toolkit-client-lib: **v1.0.0** -23. auth-service: v11.11.1 -> **v13.0.2** -24. als-consent-service: v0.0.8 -> **v0.2.0** -25. thirdparty-api-svc: v11.21.0 -> **v13.0.2** -26. thirdparty-sdk: v11.55.1 -> **v15.1.0** +23. auth-service: **v13.0.2** +24. als-consent-service: **v0.2.0** +25. thirdparty-api-svc: **v13.0.2** +26. thirdparty-sdk: **v15.1.0** ## 4. Application release notes 1. ml-api-adapter - https://github.com/mojaloop/ml-api-adapter/releases/tag/v14.0.0 -2. central-ledger - https://github.com/mojaloop/central-ledger/releases/tag/v15.1.0 +2. central-ledger - https://github.com/mojaloop/central-ledger/releases/tag/v16.3.1 3. account-lookup-service - https://github.com/mojaloop/account-lookup-service/releases/tag/v14.0.0 4. quoting-service - https://github.com/mojaloop/quoting-service/releases/tag/v15.0.2 5. central-settlement- https://github.com/mojaloop/central-settlement/releases/tag/v15.0.0 6. central-event-processor - https://github.com/mojaloop/central-event-processor/releases/tag/v12.0.0 -7. bulk-api-adapter - https://github.com/mojaloop/bulk-api-adapter/releases/tag/v14.0.0 +7. bulk-api-adapter - https://github.com/mojaloop/bulk-api-adapter/releases/tag/v14.2.0 8. email-notifier - https://github.com/mojaloop/email-notifier/releases/tag/v12.0.0 9. als-oracle-pathfinder - https://github.com/mojaloop/als-oracle-pathfinder/releases/tag/v12.0.0 10. transaction-requests-service - https://github.com/mojaloop/transaction-requests-service/releases/tag/v14.0.1 @@ -64,9 +69,9 @@ N/A 16. event-stream-processor - https://github.com/mojaloop/event-stream-processor/releases/v12.0.0-snapshot.7 17. simulator - https://github.com/mojaloop/simulator/releases/tag/v12.0.0 18. mojaloop-simulator - https://github.com/mojaloop/mojaloop-simulator/releases/tag/v13.0.1 -19. sdk-scheme-adapter - https://github.com/mojaloop/sdk-scheme-adapter/releases/tag/v18.0.2 -20. ml-testing-toolkit - https://github.com/mojaloop/ml-testing-toolkit/releases/tag/v15.0.0 -21. ml-testing-toolkit-ui - https://github.com/mojaloop/ml-testing-toolkit-ui/releases/tag/v15.0.0 +19. sdk-scheme-adapter - https://github.com/mojaloop/sdk-scheme-adapter/releases/tag/v21.4.0 +20. ml-testing-toolkit - https://github.com/mojaloop/ml-testing-toolkit/releases/tag/v15.2.0 +21. ml-testing-toolkit-ui - https://github.com/mojaloop/ml-testing-toolkit-ui/releases/tag/v15.0.1 22. ml-testing-toolkit-client-lib - https://github.com/mojaloop/ml-testing-toolkit-client-lib/releases/tag/v1.0.0 23. auth-service - https://github.com/mojaloop/auth-service/releases/tag/v13.0.2 24. als-consent-service - https://github.com/mojaloop/als-consent-oracle/releases/tag/v0.2.0 @@ -110,8 +115,7 @@ More information can be found here: 1. This release has been tested against the following: - Kubernetes: `v1.24.6` - - Nginx Ingress Controllers: `registry.k8s.io/ingress-nginx/controller:v1.4.0@sha256:34ee929b111ffc7aa426ffd409af44da48e5a0eea1eb2207994d9e0c0882d143` - - Testing Toolkit Test Cases: [v14.0.0.1](https://github.com/mojaloop/testing-toolkit-test-cases/releases/tag/v14.0.0.1) + - Testing Toolkit Test Cases: [v14.1.0](https://github.com/mojaloop/testing-toolkit-test-cases/releases/tag/v14.1.0) 2. It is recommended that all Mojaloop deployments are verified using the [Mojaloop Testing Toolkit](https://docs.mojaloop.io/documentation/mojaloop-technical-overview/ml-testing-toolkit/). More information can be found in the [Mojaloop Deployment Guide](https://docs.mojaloop.io/documentation/deployment-guide). diff --git a/.helmignore b/.helmignore new file mode 100644 index 000000000..5a9d5906e --- /dev/null +++ b/.helmignore @@ -0,0 +1,22 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +*IGNORE* diff --git a/CODEOWNERS b/CODEOWNERS index 1fd0bb102..acaa49966 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -2,4 +2,4 @@ # the repo. Unless a later match takes precedence, # @mdebarros, @elynry-sam-k and @rmothilal will be requested for # review when someone opens a pull request. -* @mdebarros @elnyry-sam-k @rmothilal @vijayg10 +* @mdebarros @elnyry-sam-k @vijayg10 diff --git a/README.md b/README.md index b8a5accf2..3f85964ca 100644 --- a/README.md +++ b/README.md @@ -93,6 +93,14 @@ Refer to [thirdparty/README.md](./thirdparty/README.md) for more information on what pre-requisites are required to enable Thirdparty components and how to manually deploy backend dependencies. +7. Deploy Mojaloop with Bulk-API-Adapter and SDK-TTK Bulk simulators + + *Warning: This will deploy all core Mojaloop charts.*, the Bulk-API-Adapter and additional SDK+TTK simulators + + - `helm --namespace install mojaloop/mojaloop --set mojaloop-bulk.enabled=true --set ml-ttk-test-val-bulk.tests.enabled=true ` + + e.g. `helm --namespace moja install dev mojaloop/mojaloop --set mojaloop-bulk.enabled=true --set ml-ttk-test-val-bulk.tests.enabled=true --set mojaloop-ttk-simulators.enabled=true --set global.kafka.host=-kafka --set global.redis.host=-redis-master --set ml-ttk-test-val-sdk-bulk.tests.enabled=true` + ### Deploying Backends (best practice) It is best practice to deploy External Backend Dependencies (i.e. MySQL, Kafka, MongoDB, etc) as separate deployments. We have provided an example of how this can be done using the [example-mojaloop-backend](./example-mojaloop-backend/README.md) Helm chart. The [example-mojaloop-backend](./example-mojaloop-backend/README.md) is provided purely as an example and should only be used for PoC environments. It is recommended that you deploy each External Backend Dependencies (i.e. MySQL, Kafka, MongoDB, etc) as a separate deployment as to ensure that each deployment is maintainable. @@ -170,6 +178,7 @@ Mojaloop Helm deployments currently include the following tests: - `ml-ttk-test-setup.tests.enabled=true` - `ml-ttk-test-val-gp.tests.enabled=true` - `ml-ttk-test-val-bulk.tests.enabled=true` (_Note: only applicable if `mojaloop-bulk.enabled=true` is set_) + - `ml-ttk-test-val-sdk-bulk.tests.enabled=true` (_Note: only applicable if `mojaloop-bulk.enabled=true`, `mojaloop-ttk-simulators.enabled=true` is set_) Or alternatively add `--set` for each of the above parameters on the install command: diff --git a/account-lookup-service/.helmignore b/account-lookup-service/.helmignore new file mode 100644 index 000000000..d41b925fa --- /dev/null +++ b/account-lookup-service/.helmignore @@ -0,0 +1,25 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +*IGNORE* + +# Ignore child charts from being copied +chart-* diff --git a/bulk-api-adapter/.helmignore b/bulk-api-adapter/.helmignore new file mode 100644 index 000000000..0d560c136 --- /dev/null +++ b/bulk-api-adapter/.helmignore @@ -0,0 +1,27 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +*IGNORE* + +# Ignore child charts from being copied +chart-* +# chart-sim2 +# chart-sim3 \ No newline at end of file diff --git a/bulk-api-adapter/Chart.yaml b/bulk-api-adapter/Chart.yaml index d502f07c9..219b21626 100644 --- a/bulk-api-adapter/Chart.yaml +++ b/bulk-api-adapter/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 description: bulk-api-adapter Helm chart for Kubernetes name: bulk-api-adapter version: 12.1.0 -appVersion: "14.0.0" +appVersion: "14.2.0" home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: diff --git a/bulk-api-adapter/chart-handler-notification/Chart.yaml b/bulk-api-adapter/chart-handler-notification/Chart.yaml index 7f9e24e6f..3daab9ba8 100644 --- a/bulk-api-adapter/chart-handler-notification/Chart.yaml +++ b/bulk-api-adapter/chart-handler-notification/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 description: bulk-api-adapter Handler for Notifications component Helm chart for Kubernetes name: bulk-api-adapter-handler-notification version: 12.1.0 -appVersion: "14.0.0" +appVersion: "14.2.0" home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: diff --git a/bulk-api-adapter/chart-handler-notification/configs/default.json b/bulk-api-adapter/chart-handler-notification/configs/default.json index 3abecdf23..11cf31d9c 100644 --- a/bulk-api-adapter/chart-handler-notification/configs/default.json +++ b/bulk-api-adapter/chart-handler-notification/configs/default.json @@ -17,6 +17,11 @@ "ENDPOINT_SECURITY": { "TLS": { "rejectUnauthorized": {{ .Values.config.security.callback.rejectUnauthorized }} + }, + "JWS": { + "JWS_SIGN": {{ .Values.config.endpointSecurity.jwsSign }}, + "FSPIOP_SOURCE_TO_SIGN": {{ .Values.config.endpointSecurity.fspiopSourceSigningName | quote }}, + "JWS_SIGNING_KEY_PATH": "secrets/jwsSigningKey.key" } }, "MAX_FULFIL_TIMEOUT_DURATION_SECONDS": 300, diff --git a/bulk-api-adapter/chart-handler-notification/templates/deployment.yaml b/bulk-api-adapter/chart-handler-notification/templates/deployment.yaml index dd0b8a30d..0ae4b85a7 100644 --- a/bulk-api-adapter/chart-handler-notification/templates/deployment.yaml +++ b/bulk-api-adapter/chart-handler-notification/templates/deployment.yaml @@ -26,6 +26,9 @@ spec: helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} annotations: checksum/config: {{ include (print $.Template.BasePath "/config.yaml") . | sha256sum }} + {{- if .Values.config.endpointSecurity.jwsSign }} + checksum/secret-jws: {{ include (print $.Template.BasePath "/secret-jws.yaml") . | sha256sum }} + {{- end }} {{- if .Values.metrics.enabled }} prometheus.io/port: "{{ .Values.service.internalPort }}" prometheus.io/scrape: "true" @@ -83,6 +86,10 @@ spec: volumeMounts: - name: {{ template "bulk-api-adapter-handler-notification.fullname" . }}-config-volume mountPath: /opt/app/config + {{- if .Values.config.endpointSecurity.jwsSign }} + - name: jws-signing-key + mountPath: /opt/app/secrets + {{- end }} env: - name: LOG_LEVEL value: {{ .Values.config.log_level }} @@ -107,3 +114,8 @@ spec: items: - key: default.json path: default.json + {{- if .Values.config.endpointSecurity.jwsSign }} + - name: jws-signing-key + secret: + secretName: {{ template "bulk-api-adapter-handler-notification.fullname" . }}-jws-signing-key + {{- end }} diff --git a/bulk-api-adapter/chart-handler-notification/templates/secret-jws.yaml b/bulk-api-adapter/chart-handler-notification/templates/secret-jws.yaml new file mode 100644 index 000000000..71b4b6652 --- /dev/null +++ b/bulk-api-adapter/chart-handler-notification/templates/secret-jws.yaml @@ -0,0 +1,18 @@ +{{- if .Values.config.endpointSecurity.jwsSign }} +{{- if (not .Values.config.endpointSecurity.jwsSigningKey) }} + {{- fail "JWS signing enabled but no jwsSigningKey provided. You will need to supply a JWS signing key in string form .Values.endpointSecurity.jwsSigningKey." }} +{{- end }} +apiVersion: v1 +kind: Secret +metadata: + name: {{ template "bulk-api-adapter-handler-notification.fullname" . }}-jws-signing-key + labels: + app.kubernetes.io/name: {{ include "bulk-api-adapter-handler-notification.name" . }} + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/version: {{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} +type: Opaque +data: + jwsSigningKey.key: {{ .Values.config.endpointSecurity.jwsSigningKey | b64enc }} +{{- end }} diff --git a/bulk-api-adapter/chart-handler-notification/values.yaml b/bulk-api-adapter/chart-handler-notification/values.yaml index 151b43ad7..d960837c7 100644 --- a/bulk-api-adapter/chart-handler-notification/values.yaml +++ b/bulk-api-adapter/chart-handler-notification/values.yaml @@ -4,7 +4,7 @@ replicaCount: 1 image: repository: mojaloop/bulk-api-adapter - tag: v14.0.0 + tag: v14.2.0 command: '["node", "src/handlers/index.js", "handler", "--notification"]' ## Optionally specify an array of imagePullSecrets. ## Secrets must be manually created in the namespace. @@ -89,26 +89,45 @@ config: # Protocol versions used for validating (VALIDATELIST) incoming FSPIOP API Headers (Content-type, Accept), # and for generating requests/callbacks from the Switch itself (DEFAULT value) protocol_versions: { - "CONTENT": { - "DEFAULT": "1.1", - "VALIDATELIST": [ - "1", - "1.0", - "1.1" - ] - }, - "ACCEPT": { - "DEFAULT": "1", - "VALIDATELIST": [ - "1", - "1.0", - "1.1" - ] + "CONTENT": { + "DEFAULT": "1.1", + "VALIDATELIST": [ + "1", + "1.0", + "1.1" + ] + }, + "ACCEPT": { + "DEFAULT": "1", + "VALIDATELIST": [ + "1", + "1.0", + "1.1" + ] + } } -} + ## MongoDB Configuration for Object Store objstore_uri: 'mongodb://$mongodbUsername:$mongodbPassword@$release_name-centralledger-obj:27017/$mongodbDatabase' + # Parameters for JWS signing requests + endpointSecurity: + jwsSign: false + fspiopSourceSigningName: 'switch' + jwsSigningKey: + # To generate this key: + # Private: + # ssh-keygen -t rsa -b 4096 -m PEM -f jwtRS256.key + # Public: + # openssl rsa -in jwtRS256.key -pubout -outform PEM -out jwtRS256.key.pub + # Should look like: + # -----BEGIN RSA PRIVATE KEY----- + # MIIJKQIBAAKCAgEAxfqaZivMPd4MpdBHu0jVMf3MSuSdkSMHn+sNJdDQfl+x4R5R + # .. + # .. + # mBynFpdjO0D3PnLKjnBDn1vFAfANOwVpGXCw5mn+484A/SIXYebWruFd03g4 + # -----END RSA PRIVATE KEY----- + service: type: ClusterIP externalPort: 80 diff --git a/bulk-api-adapter/chart-service/Chart.yaml b/bulk-api-adapter/chart-service/Chart.yaml index d949fe2dc..6f3d8cdcd 100644 --- a/bulk-api-adapter/chart-service/Chart.yaml +++ b/bulk-api-adapter/chart-service/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 description: bulk-api-adapter API component Helm chart for Kubernetes name: bulk-api-adapter-service version: 12.1.0 -appVersion: "14.0.0" +appVersion: "14.2.0" home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: diff --git a/bulk-api-adapter/chart-service/configs/default.json b/bulk-api-adapter/chart-service/configs/default.json index 4882d31ec..420c97a01 100644 --- a/bulk-api-adapter/chart-service/configs/default.json +++ b/bulk-api-adapter/chart-service/configs/default.json @@ -17,6 +17,11 @@ "ENDPOINT_SECURITY": { "TLS": { "rejectUnauthorized": {{ .Values.config.security.callback.rejectUnauthorized }} + }, + "JWS": { + "JWS_SIGN": false, + "FSPIOP_SOURCE_TO_SIGN": "switch", + "JWS_SIGNING_KEY_PATH": "secrets/jwsSigningKey.key" } }, "MAX_FULFIL_TIMEOUT_DURATION_SECONDS": 300, diff --git a/bulk-api-adapter/chart-service/values.yaml b/bulk-api-adapter/chart-service/values.yaml index 351f85ada..fc339eedf 100644 --- a/bulk-api-adapter/chart-service/values.yaml +++ b/bulk-api-adapter/chart-service/values.yaml @@ -4,7 +4,7 @@ replicaCount: 1 image: repository: mojaloop/bulk-api-adapter - tag: v14.0.0 + tag: v14.2.0 command: '["node", "src/api/index.js"]' ## Optionally specify an array of imagePullSecrets. ## Secrets must be manually created in the namespace. @@ -89,23 +89,24 @@ config: # Protocol versions used for validating (VALIDATELIST) incoming FSPIOP API Headers (Content-type, Accept), # and for generating requests/callbacks from the Switch itself (DEFAULT value) protocol_versions: { - "CONTENT": { - "DEFAULT": "1.1", - "VALIDATELIST": [ - "1", - "1.0", - "1.1" - ] - }, - "ACCEPT": { - "DEFAULT": "1", - "VALIDATELIST": [ - "1", - "1.0", - "1.1" - ] + "CONTENT": { + "DEFAULT": "1.1", + "VALIDATELIST": [ + "1", + "1.0", + "1.1" + ] + }, + "ACCEPT": { + "DEFAULT": "1", + "VALIDATELIST": [ + "1", + "1.0", + "1.1" + ] + } } -} + ## MongoDB Configuration for Object Store objstore_uri: 'mongodb://$mongodbUsername:$mongodbPassword@$release_name-centralledger-obj:27017/$mongodbDatabase' diff --git a/bulk-api-adapter/values.yaml b/bulk-api-adapter/values.yaml index fbd260294..82b2024b6 100644 --- a/bulk-api-adapter/values.yaml +++ b/bulk-api-adapter/values.yaml @@ -12,7 +12,7 @@ bulk-api-adapter-service: replicaCount: 1 image: repository: mojaloop/bulk-api-adapter - tag: v14.0.0 + tag: v14.2.0 command: '["node", "src/api/index.js"]' ## Optionally specify an array of imagePullSecrets. ## Secrets must be manually created in the namespace. @@ -85,23 +85,24 @@ bulk-api-adapter-service: # Protocol versions used for validating (VALIDATELIST) incoming FSPIOP API Headers (Content-type, Accept), # and for generating requests/callbacks from the Switch itself (DEFAULT value) protocol_versions: { - "CONTENT": { - "DEFAULT": "1.1", - "VALIDATELIST": [ - "1", - "1.0", - "1.1" - ] - }, - "ACCEPT": { - "DEFAULT": "1", - "VALIDATELIST": [ - "1", - "1.0", - "1.1" - ] - } -} + "CONTENT": { + "DEFAULT": "1.1", + "VALIDATELIST": [ + "1", + "1.0", + "1.1" + ] + }, + "ACCEPT": { + "DEFAULT": "1", + "VALIDATELIST": [ + "1", + "1.0", + "1.1" + ] + } + } + ## MongoDB Configuration for Object Store objstore_uri: 'mongodb://$mongodbUsername:$mongodbPassword@$release_name-centralledger-obj:27017/$mongodbDatabase' @@ -178,7 +179,7 @@ bulk-api-adapter-handler-notification: replicaCount: 1 image: repository: mojaloop/bulk-api-adapter - tag: v14.0.0 + tag: v14.2.0 command: '["node", "src/handlers/index.js", "handler", "--notification"]' ## Optionally specify an array of imagePullSecrets. ## Secrets must be manually created in the namespace. @@ -251,23 +252,24 @@ bulk-api-adapter-handler-notification: # Protocol versions used for validating (VALIDATELIST) incoming FSPIOP API Headers (Content-type, Accept), # and for generating requests/callbacks from the Switch itself (DEFAULT value) protocol_versions: { - "CONTENT": { - "DEFAULT": "1.1", - "VALIDATELIST": [ - "1", - "1.0", - "1.1" - ] - }, - "ACCEPT": { - "DEFAULT": "1", - "VALIDATELIST": [ - "1", - "1.0", - "1.1" - ] - } -} + "CONTENT": { + "DEFAULT": "1.1", + "VALIDATELIST": [ + "1", + "1.0", + "1.1" + ] + }, + "ACCEPT": { + "DEFAULT": "1", + "VALIDATELIST": [ + "1", + "1.0", + "1.1" + ] + } + } + ## MongoDB Configuration for Object Store objstore_uri: 'mongodb://$release_name-centralledger-obj:27017/mlos' diff --git a/bulk-centralledger/.helmignore b/bulk-centralledger/.helmignore new file mode 100644 index 000000000..0d560c136 --- /dev/null +++ b/bulk-centralledger/.helmignore @@ -0,0 +1,27 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +*IGNORE* + +# Ignore child charts from being copied +chart-* +# chart-sim2 +# chart-sim3 \ No newline at end of file diff --git a/bulk-centralledger/Chart.yaml b/bulk-centralledger/Chart.yaml index 6d85e14f7..814c40677 100644 --- a/bulk-centralledger/Chart.yaml +++ b/bulk-centralledger/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 description: Central-Ledger Bulk Services Helm chart for Kubernetes name: bulk-centralledger version: 13.1.0 -appVersion: "15.1.2.1" +appVersion: "16.3.1" home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: diff --git a/bulk-centralledger/chart-handler-bulk-transfer-fulfil/Chart.yaml b/bulk-centralledger/chart-handler-bulk-transfer-fulfil/Chart.yaml index 6112ab220..f625eb0e4 100644 --- a/bulk-centralledger/chart-handler-bulk-transfer-fulfil/Chart.yaml +++ b/bulk-centralledger/chart-handler-bulk-transfer-fulfil/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 description: Central-Ledger Bulk Transfer Fulfil Handler Helm chart for Kubernetes name: cl-handler-bulk-transfer-fulfil version: 13.1.0 -appVersion: "15.1.2.1" +appVersion: "16.3.1" home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: diff --git a/bulk-centralledger/chart-handler-bulk-transfer-fulfil/values.yaml b/bulk-centralledger/chart-handler-bulk-transfer-fulfil/values.yaml index 5939c24f6..f6efe81fa 100644 --- a/bulk-centralledger/chart-handler-bulk-transfer-fulfil/values.yaml +++ b/bulk-centralledger/chart-handler-bulk-transfer-fulfil/values.yaml @@ -11,7 +11,7 @@ containers: api: image: repository: mojaloop/central-ledger - tag: v15.1.2.1 + tag: v16.3.1 pullPolicy: IfNotPresent command: '["node", "src/handlers/index.js", "handler", "--bulkfulfil"]' service: diff --git a/bulk-centralledger/chart-handler-bulk-transfer-get/Chart.yaml b/bulk-centralledger/chart-handler-bulk-transfer-get/Chart.yaml index 21e2e8db5..6ecc3dd38 100644 --- a/bulk-centralledger/chart-handler-bulk-transfer-get/Chart.yaml +++ b/bulk-centralledger/chart-handler-bulk-transfer-get/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 description: Central-Ledger Bulk Transfer Get Handler Helm chart for Kubernetes name: cl-handler-bulk-transfer-get version: 13.1.0 -appVersion: "15.1.2.1" +appVersion: "16.3.1" home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: diff --git a/bulk-centralledger/chart-handler-bulk-transfer-get/values.yaml b/bulk-centralledger/chart-handler-bulk-transfer-get/values.yaml index 38301f93b..e887643e4 100644 --- a/bulk-centralledger/chart-handler-bulk-transfer-get/values.yaml +++ b/bulk-centralledger/chart-handler-bulk-transfer-get/values.yaml @@ -11,7 +11,7 @@ containers: api: image: repository: mojaloop/central-ledger - tag: v15.1.2.1 + tag: v16.3.1 pullPolicy: IfNotPresent command: '["node", "src/handlers/index.js", "handler", "--bulkget"]' service: diff --git a/bulk-centralledger/chart-handler-bulk-transfer-prepare/Chart.yaml b/bulk-centralledger/chart-handler-bulk-transfer-prepare/Chart.yaml index 73936d45a..9c4dcb800 100644 --- a/bulk-centralledger/chart-handler-bulk-transfer-prepare/Chart.yaml +++ b/bulk-centralledger/chart-handler-bulk-transfer-prepare/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 description: Central-Ledger Bulk Transfer Prepare Handler Helm chart for Kubernetes name: cl-handler-bulk-transfer-prepare version: 13.1.0 -appVersion: "15.1.2.1" +appVersion: "16.3.1" home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: diff --git a/bulk-centralledger/chart-handler-bulk-transfer-prepare/values.yaml b/bulk-centralledger/chart-handler-bulk-transfer-prepare/values.yaml index 35a020c59..62babbbe8 100644 --- a/bulk-centralledger/chart-handler-bulk-transfer-prepare/values.yaml +++ b/bulk-centralledger/chart-handler-bulk-transfer-prepare/values.yaml @@ -11,7 +11,7 @@ containers: api: image: repository: mojaloop/central-ledger - tag: v15.1.2.1 + tag: v16.3.1 pullPolicy: IfNotPresent command: '["node", "src/handlers/index.js", "handler", "--bulkprepare"]' service: diff --git a/bulk-centralledger/chart-handler-bulk-transfer-processing/Chart.yaml b/bulk-centralledger/chart-handler-bulk-transfer-processing/Chart.yaml index 73157c026..b58aa2738 100644 --- a/bulk-centralledger/chart-handler-bulk-transfer-processing/Chart.yaml +++ b/bulk-centralledger/chart-handler-bulk-transfer-processing/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 description: Central-Ledger Bulk Transfer Processing Handler Helm chart for Kubernetes name: cl-handler-bulk-transfer-processing version: 13.1.0 -appVersion: "15.1.2.1" +appVersion: "16.3.1" home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: diff --git a/bulk-centralledger/chart-handler-bulk-transfer-processing/values.yaml b/bulk-centralledger/chart-handler-bulk-transfer-processing/values.yaml index 8e9002f48..25cdbccbe 100644 --- a/bulk-centralledger/chart-handler-bulk-transfer-processing/values.yaml +++ b/bulk-centralledger/chart-handler-bulk-transfer-processing/values.yaml @@ -24,7 +24,7 @@ containers: api: image: repository: mojaloop/central-ledger - tag: v15.1.2.1 + tag: v16.3.1 pullPolicy: IfNotPresent command: '["node", "src/handlers/index.js", "handler", "--bulkprocessing"]' service: diff --git a/bulk-centralledger/values.yaml b/bulk-centralledger/values.yaml index 50f23263c..207d1cfc2 100644 --- a/bulk-centralledger/values.yaml +++ b/bulk-centralledger/values.yaml @@ -14,7 +14,7 @@ cl-handler-bulk-transfer-prepare: api: image: repository: mojaloop/central-ledger - tag: v15.1.2.1 + tag: v16.3.1 pullPolicy: IfNotPresent command: '["node", "src/handlers/index.js", "handler", "--bulkprepare"]' service: @@ -225,7 +225,7 @@ cl-handler-bulk-transfer-fulfil: api: image: repository: mojaloop/central-ledger - tag: v15.1.2.1 + tag: v16.3.1 pullPolicy: IfNotPresent command: '["node", "src/handlers/index.js", "handler", "--bulkfulfil"]' service: @@ -433,7 +433,7 @@ cl-handler-bulk-transfer-processing: api: image: repository: mojaloop/central-ledger - tag: v15.1.2.1 + tag: v16.3.1 pullPolicy: IfNotPresent command: '["node", "src/handlers/index.js", "handler", "--bulkprocessing"]' service: @@ -640,7 +640,7 @@ cl-handler-bulk-transfer-get: api: image: repository: mojaloop/central-ledger - tag: v15.1.2.1 + tag: v16.3.1 pullPolicy: IfNotPresent command: '["node", "src/handlers/index.js", "handler", "--bulkget"]' service: diff --git a/central/Chart.yaml b/central/Chart.yaml index 70208d61c..bf77f8cc6 100644 --- a/central/Chart.yaml +++ b/central/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 description: Central Helm chart for Kubernetes name: central version: 14.1.0 -appVersion: "central-ledger: v15.1.2.1; central-settlement: v15.0.0; central-event-processor: v12.0.0" +appVersion: "central-ledger: v16.3.1; central-settlement: v15.0.0; central-event-processor: v12.0.0" home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: diff --git a/central/values.yaml b/central/values.yaml index f27a1c954..b3d9f45a4 100644 --- a/central/values.yaml +++ b/central/values.yaml @@ -22,7 +22,7 @@ centralledger: api: image: repository: mojaloop/central-ledger - tag: v15.1.2.1 + tag: v16.3.1 pullPolicy: IfNotPresent command: '["node", "src/api/index.js"]' service: @@ -226,7 +226,7 @@ centralledger: api: image: repository: mojaloop/central-ledger - tag: v15.1.2.1 + tag: v16.3.1 pullPolicy: IfNotPresent command: '["node", "src/handlers/index.js", "handler", "--prepare"]' service: @@ -440,7 +440,7 @@ centralledger: api: image: repository: mojaloop/central-ledger - tag: v15.1.2.1 + tag: v16.3.1 pullPolicy: IfNotPresent command: '["node", "src/handlers/index.js", "handler", "--position"]' service: @@ -651,7 +651,7 @@ centralledger: api: image: repository: mojaloop/central-ledger - tag: v15.1.2.1 + tag: v16.3.1 pullPolicy: IfNotPresent command: '["node", "src/handlers/index.js", "handler", "--get"]' service: @@ -862,7 +862,7 @@ centralledger: api: image: repository: mojaloop/central-ledger - tag: v15.1.2.1 + tag: v16.3.1 pullPolicy: IfNotPresent command: '["node", "src/handlers/index.js", "handler", "--fulfil"]' service: @@ -1073,7 +1073,7 @@ centralledger: api: image: repository: mojaloop/central-ledger - tag: v15.1.2.1 + tag: v16.3.1 pullPolicy: IfNotPresent command: '["node", "src/handlers/index.js", "handler", "--timeout"]' service: @@ -1289,7 +1289,7 @@ centralledger: api: image: repository: mojaloop/central-ledger - tag: v15.1.2.1 + tag: v16.3.1 pullPolicy: IfNotPresent command: '["node", "src/handlers/index.js", "handler", "--admin"]' service: diff --git a/centralledger/.helmignore b/centralledger/.helmignore index f0c131944..d41b925fa 100644 --- a/centralledger/.helmignore +++ b/centralledger/.helmignore @@ -19,3 +19,7 @@ .project .idea/ *.tmproj +*IGNORE* + +# Ignore child charts from being copied +chart-* diff --git a/centralledger/Chart.yaml b/centralledger/Chart.yaml index 37d86201f..9ce5ce841 100644 --- a/centralledger/Chart.yaml +++ b/centralledger/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 description: Central-Ledger Helm chart for Kubernetes name: centralledger version: 13.1.0 -appVersion: "15.1.2.1" +appVersion: "16.3.1" home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: diff --git a/centralledger/chart-handler-admin-transfer/Chart.yaml b/centralledger/chart-handler-admin-transfer/Chart.yaml index d53cba5db..3c1c95153 100644 --- a/centralledger/chart-handler-admin-transfer/Chart.yaml +++ b/centralledger/chart-handler-admin-transfer/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 description: Central-Ledger Transfer Prepare Handler Helm chart for Kubernetes name: centralledger-handler-admin-transfer version: 13.1.0 -appVersion: "15.1.2.1" +appVersion: "16.3.1" home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: diff --git a/centralledger/chart-handler-admin-transfer/values.yaml b/centralledger/chart-handler-admin-transfer/values.yaml index be9e6de46..81d8c8aab 100644 --- a/centralledger/chart-handler-admin-transfer/values.yaml +++ b/centralledger/chart-handler-admin-transfer/values.yaml @@ -11,7 +11,7 @@ containers: api: image: repository: mojaloop/central-ledger - tag: v15.1.2.1 + tag: v16.3.1 pullPolicy: IfNotPresent command: '["node", "src/handlers/index.js", "handler", "--admin"]' service: diff --git a/centralledger/chart-handler-timeout/Chart.yaml b/centralledger/chart-handler-timeout/Chart.yaml index 8d2065e53..dc4e569ef 100644 --- a/centralledger/chart-handler-timeout/Chart.yaml +++ b/centralledger/chart-handler-timeout/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 description: Central-Ledger Timeout Handler Helm chart for Kubernetes name: centralledger-handler-timeout version: 13.1.0 -appVersion: "15.1.2.1" +appVersion: "16.3.1" home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: diff --git a/centralledger/chart-handler-timeout/values.yaml b/centralledger/chart-handler-timeout/values.yaml index c7edee132..a84211c61 100644 --- a/centralledger/chart-handler-timeout/values.yaml +++ b/centralledger/chart-handler-timeout/values.yaml @@ -11,7 +11,7 @@ containers: api: image: repository: mojaloop/central-ledger - tag: v15.1.2.1 + tag: v16.3.1 pullPolicy: IfNotPresent command: '["node", "src/handlers/index.js", "handler", "--timeout"]' service: diff --git a/centralledger/chart-handler-transfer-fulfil/Chart.yaml b/centralledger/chart-handler-transfer-fulfil/Chart.yaml index faa225c9e..7fd7314ad 100644 --- a/centralledger/chart-handler-transfer-fulfil/Chart.yaml +++ b/centralledger/chart-handler-transfer-fulfil/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 description: Central-Ledger Transfer Fulfil Handler Helm chart for Kubernetes name: centralledger-handler-transfer-fulfil version: 13.1.0 -appVersion: "15.1.2.1" +appVersion: "16.3.1" home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: diff --git a/centralledger/chart-handler-transfer-fulfil/values.yaml b/centralledger/chart-handler-transfer-fulfil/values.yaml index f5b758373..246d154e8 100644 --- a/centralledger/chart-handler-transfer-fulfil/values.yaml +++ b/centralledger/chart-handler-transfer-fulfil/values.yaml @@ -11,7 +11,7 @@ containers: api: image: repository: mojaloop/central-ledger - tag: v15.1.2.1 + tag: v16.3.1 pullPolicy: IfNotPresent command: '["node", "src/handlers/index.js", "handler", "--fulfil"]' service: diff --git a/centralledger/chart-handler-transfer-get/Chart.yaml b/centralledger/chart-handler-transfer-get/Chart.yaml index 1961ae7dd..5197d4366 100644 --- a/centralledger/chart-handler-transfer-get/Chart.yaml +++ b/centralledger/chart-handler-transfer-get/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 description: Central-Ledger Get Transfer Handler Helm chart for Kubernetes name: centralledger-handler-transfer-get version: 13.1.0 -appVersion: "15.1.2.1" +appVersion: "16.3.1" home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: diff --git a/centralledger/chart-handler-transfer-get/values.yaml b/centralledger/chart-handler-transfer-get/values.yaml index f22efe6ef..43ca3da2d 100644 --- a/centralledger/chart-handler-transfer-get/values.yaml +++ b/centralledger/chart-handler-transfer-get/values.yaml @@ -11,7 +11,7 @@ containers: api: image: repository: mojaloop/central-ledger - tag: v15.1.2.1 + tag: v16.3.1 pullPolicy: IfNotPresent command: '["node", "src/handlers/index.js", "handler", "--get"]' service: diff --git a/centralledger/chart-handler-transfer-position/Chart.yaml b/centralledger/chart-handler-transfer-position/Chart.yaml index a7a52dff7..698b6608b 100644 --- a/centralledger/chart-handler-transfer-position/Chart.yaml +++ b/centralledger/chart-handler-transfer-position/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 description: Central-Ledger Transfer Position Handler Helm chart for Kubernetes name: centralledger-handler-transfer-position version: 13.1.0 -appVersion: "15.1.2.1" +appVersion: "16.3.1" home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: diff --git a/centralledger/chart-handler-transfer-position/values.yaml b/centralledger/chart-handler-transfer-position/values.yaml index f29ce74a6..492cee372 100644 --- a/centralledger/chart-handler-transfer-position/values.yaml +++ b/centralledger/chart-handler-transfer-position/values.yaml @@ -11,7 +11,7 @@ containers: api: image: repository: mojaloop/central-ledger - tag: v15.1.2.1 + tag: v16.3.1 pullPolicy: IfNotPresent command: '["node", "src/handlers/index.js", "handler", "--position"]' service: diff --git a/centralledger/chart-handler-transfer-prepare/Chart.yaml b/centralledger/chart-handler-transfer-prepare/Chart.yaml index b48796a86..8b9bd3836 100644 --- a/centralledger/chart-handler-transfer-prepare/Chart.yaml +++ b/centralledger/chart-handler-transfer-prepare/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 description: Central-Ledger Transfer Prepare Handler Helm chart for Kubernetes name: centralledger-handler-transfer-prepare version: 13.1.0 -appVersion: "15.1.2.1" +appVersion: "16.3.1" home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: diff --git a/centralledger/chart-handler-transfer-prepare/values.yaml b/centralledger/chart-handler-transfer-prepare/values.yaml index 92874d0d6..f4ea89cc1 100644 --- a/centralledger/chart-handler-transfer-prepare/values.yaml +++ b/centralledger/chart-handler-transfer-prepare/values.yaml @@ -11,7 +11,7 @@ containers: api: image: repository: mojaloop/central-ledger - tag: v15.1.2.1 + tag: v16.3.1 pullPolicy: IfNotPresent command: '["node", "src/handlers/index.js", "handler", "--prepare"]' service: diff --git a/centralledger/chart-service/Chart.yaml b/centralledger/chart-service/Chart.yaml index 9b447907f..ab1804df9 100644 --- a/centralledger/chart-service/Chart.yaml +++ b/centralledger/chart-service/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 description: Central-Ledger Service Helm chart for Kubernetes name: centralledger-service version: 13.1.0 -appVersion: "15.1.2.1" +appVersion: "16.3.1" home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: diff --git a/centralledger/chart-service/values.yaml b/centralledger/chart-service/values.yaml index fdb58a826..495b9746c 100644 --- a/centralledger/chart-service/values.yaml +++ b/centralledger/chart-service/values.yaml @@ -11,7 +11,7 @@ containers: api: image: repository: mojaloop/central-ledger - tag: v15.1.2.1 + tag: v16.3.1 pullPolicy: IfNotPresent command: '["node", "src/api/index.js"]' service: diff --git a/centralledger/values.yaml b/centralledger/values.yaml index 23dac6dee..e8fd6e7f6 100644 --- a/centralledger/values.yaml +++ b/centralledger/values.yaml @@ -17,7 +17,7 @@ centralledger-service: api: image: repository: mojaloop/central-ledger - tag: v15.1.2.1 + tag: v16.3.1 pullPolicy: IfNotPresent command: '["node", "src/api/index.js"]' service: @@ -222,7 +222,7 @@ centralledger-handler-transfer-prepare: api: image: repository: mojaloop/central-ledger - tag: v15.1.2.1 + tag: v16.3.1 pullPolicy: IfNotPresent command: '["node", "src/handlers/index.js", "handler", "--prepare"]' service: @@ -437,7 +437,7 @@ centralledger-handler-transfer-position: api: image: repository: mojaloop/central-ledger - tag: v15.1.2.1 + tag: v16.3.1 pullPolicy: IfNotPresent command: '["node", "src/handlers/index.js", "handler", "--position"]' service: @@ -649,7 +649,7 @@ centralledger-handler-transfer-get: api: image: repository: mojaloop/central-ledger - tag: v15.1.2.1 + tag: v16.3.1 pullPolicy: IfNotPresent command: '["node", "src/handlers/index.js", "handler", "--get"]' service: @@ -861,7 +861,7 @@ centralledger-handler-transfer-fulfil: api: image: repository: mojaloop/central-ledger - tag: v15.1.2.1 + tag: v16.3.1 pullPolicy: IfNotPresent command: '["node", "src/handlers/index.js", "handler", "--fulfil"]' service: @@ -1073,7 +1073,7 @@ centralledger-handler-timeout: api: image: repository: mojaloop/central-ledger - tag: v15.1.2.1 + tag: v16.3.1 pullPolicy: IfNotPresent command: '["node", "src/handlers/index.js", "handler", "--timeout"]' service: @@ -1290,7 +1290,7 @@ centralledger-handler-admin-transfer: api: image: repository: mojaloop/central-ledger - tag: v15.1.2.1 + tag: v16.3.1 pullPolicy: IfNotPresent command: '["node", "src/handlers/index.js", "handler", "--admin"]' service: diff --git a/centralsettlement/.helmignore b/centralsettlement/.helmignore index f0c131944..d41b925fa 100644 --- a/centralsettlement/.helmignore +++ b/centralsettlement/.helmignore @@ -19,3 +19,7 @@ .project .idea/ *.tmproj +*IGNORE* + +# Ignore child charts from being copied +chart-* diff --git a/lint-charts.sh b/lint-charts.sh index cd5ac306f..122d1cb45 100755 --- a/lint-charts.sh +++ b/lint-charts.sh @@ -18,6 +18,14 @@ if [ "$1" ]; then else declare -a charts=( example-mojaloop-backend + ml-testing-toolkit + ml-testing-toolkit-cli + sdk-scheme-adapter/chart-service + sdk-scheme-adapter + mojaloop-ttk-simulators/chart-sim1 + mojaloop-ttk-simulators/chart-sim2 + mojaloop-ttk-simulators/chart-sim3 + mojaloop-ttk-simulators eventstreamprocessor simulator monitoring/promfana @@ -41,8 +49,6 @@ else bulk-api-adapter/ mojaloop-bulk/ mojaloop-simulator - ml-testing-toolkit - ml-testing-toolkit-cli mojaloop # kube-system/ntpd/ # No longer supported ml-operator diff --git a/ml-api-adapter/.helmignore b/ml-api-adapter/.helmignore index f0c131944..d41b925fa 100644 --- a/ml-api-adapter/.helmignore +++ b/ml-api-adapter/.helmignore @@ -19,3 +19,7 @@ .project .idea/ *.tmproj +*IGNORE* + +# Ignore child charts from being copied +chart-* diff --git a/ml-testing-toolkit-cli/templates/_helpers.tpl b/ml-testing-toolkit-cli/templates/_helpers.tpl index 9f8960210..6633110f8 100644 --- a/ml-testing-toolkit-cli/templates/_helpers.tpl +++ b/ml-testing-toolkit-cli/templates/_helpers.tpl @@ -91,25 +91,25 @@ containers: - secretRef: name: {{ template "ml-testing-toolkit-cli.fullname" . }}-aws-creds volumeMounts: - - name: {{ $serviceFullName }}-volume-testcase-environment-file + - name: {{ $serviceFullName }}-env mountPath: /opt/app/cli-testcase-environment.json subPath: cli-testcase-environment.json - - name: {{ $serviceFullName }}-volume-config-file-defaults + - name: {{ $serviceFullName }}-conf mountPath: /opt/app/cli-default-config.json subPath: cli-default-config.json {{- end }} {{- define "ml-testing-toolkit-cli.template.volumes" }} volumes: -- name: {{ template "ml-testing-toolkit-cli.fullname" . }}-volume-config-file-defaults +- name: {{ template "ml-testing-toolkit-cli.fullname" . }}-conf configMap: - name: {{ template "ml-testing-toolkit-cli.fullname" . }}-config-file-defaults + name: {{ template "ml-testing-toolkit-cli.fullname" . }}-conf items: - key: cli-default-config.json path: cli-default-config.json -- name: {{ template "ml-testing-toolkit-cli.fullname" . }}-volume-testcase-environment-file +- name: {{ template "ml-testing-toolkit-cli.fullname" . }}-env configMap: - name: {{ template "ml-testing-toolkit-cli.fullname" . }}-config-testcase-environment-file + name: {{ template "ml-testing-toolkit-cli.fullname" . }}-env items: - key: cli-testcase-environment.json path: cli-testcase-environment.json diff --git a/ml-testing-toolkit-cli/templates/config.yaml b/ml-testing-toolkit-cli/templates/config.yaml index b614e1a27..c087da2d3 100644 --- a/ml-testing-toolkit-cli/templates/config.yaml +++ b/ml-testing-toolkit-cli/templates/config.yaml @@ -3,7 +3,7 @@ apiVersion: v1 kind: ConfigMap metadata: - name: {{ template "ml-testing-toolkit-cli.fullname" . }}-config-file-defaults + name: {{ template "ml-testing-toolkit-cli.fullname" . }}-conf labels: app.kubernetes.io/name: {{ include "ml-testing-toolkit-cli.name" . }} app.kubernetes.io/instance: {{ .Release.Name }} @@ -17,7 +17,7 @@ data: apiVersion: v1 kind: ConfigMap metadata: - name: {{ template "ml-testing-toolkit-cli.fullname" . }}-config-testcase-environment-file + name: {{ template "ml-testing-toolkit-cli.fullname" . }}-env labels: app.kubernetes.io/name: {{ include "ml-testing-toolkit-cli.name" . }} app.kubernetes.io/instance: {{ .Release.Name }} diff --git a/ml-testing-toolkit/.helmignore b/ml-testing-toolkit/.helmignore new file mode 100644 index 000000000..d41b925fa --- /dev/null +++ b/ml-testing-toolkit/.helmignore @@ -0,0 +1,25 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +*IGNORE* + +# Ignore child charts from being copied +chart-* diff --git a/ml-testing-toolkit/Chart.yaml b/ml-testing-toolkit/Chart.yaml index 1faf8b174..ee9cc6b40 100644 --- a/ml-testing-toolkit/Chart.yaml +++ b/ml-testing-toolkit/Chart.yaml @@ -1,8 +1,8 @@ apiVersion: v2 description: ml-testing-toolkit Helm chart for Kubernetes name: ml-testing-toolkit -version: 15.2.1 -appVersion: "ml-testing-toolkit: v15.1.0 ml-testing-toolkit-ui: v15.0.1" +version: 15.3.0 +appVersion: "ml-testing-toolkit: v15.2.0 ml-testing-toolkit-ui: v15.0.1" home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: @@ -25,7 +25,7 @@ dependencies: repository: "file://./chart-frontend" condition: ml-testing-toolkit-frontend.enabled - name: ml-testing-toolkit-backend - version: 15.2.0 + version: 15.3.0 repository: "file://./chart-backend" condition: ml-testing-toolkit-backend.enabled - name: connection-manager-frontend diff --git a/ml-testing-toolkit/chart-backend/Chart.yaml b/ml-testing-toolkit/chart-backend/Chart.yaml index aba197f52..bb94bcc9e 100644 --- a/ml-testing-toolkit/chart-backend/Chart.yaml +++ b/ml-testing-toolkit/chart-backend/Chart.yaml @@ -1,8 +1,8 @@ apiVersion: v2 description: ml-testing-toolkit-backend Helm chart for Kubernetes name: ml-testing-toolkit-backend -version: 15.2.0 -appVersion: "v15.1.0" +version: 15.3.0 +appVersion: "v15.2.0" home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: diff --git a/ml-testing-toolkit/chart-backend/values.yaml b/ml-testing-toolkit/chart-backend/values.yaml index d47f07d5b..0d0536263 100644 --- a/ml-testing-toolkit/chart-backend/values.yaml +++ b/ml-testing-toolkit/chart-backend/values.yaml @@ -32,7 +32,7 @@ dependencies: replicaCount: 1 image: repository: mojaloop/ml-testing-toolkit - tag: v15.1.0 + tag: v15.2.0 commandPersistence: '["sh", "-c", "cd /opt/default_config; for FILE in *; do newFileName=/opt/app/spec_files/${FILE//__/\\/}; mkdir -p ${newFileName%/*}; firstLine=$(head -n 1 $FILE | tr -d \\\"); regex=\"^(http|https|ftp)://\"; if [[ \"$firstLine\" =~ $regex ]]; then wget $firstLine -O $newFileName; else cp $FILE $newFileName; fi; done; cd /opt/app; if [ -d /opt/ttk-data ]; then if [ ! -d /opt/ttk-data/spec_files ]; then cp -pR spec_files /opt/ttk-data/spec_files; fi; mv spec_files spec_files_bkp; ln -s /opt/ttk-data/spec_files spec_files; fi; npm run start;"]' command: '["sh", "-c", "cd /opt/default_config; for FILE in *; do newFileName=/opt/app/spec_files/${FILE//__/\\/}; mkdir -p ${newFileName%/*}; firstLine=$(head -n 1 $FILE | tr -d \\\"); regex=\"^(http|https|ftp)://\"; if [[ \"$firstLine\" =~ $regex ]]; then wget $firstLine -O $newFileName; else cp $FILE $newFileName; fi; done; cd /opt/app; npm run start;"]' diff --git a/mojaloop-bulk/Chart.yaml b/mojaloop-bulk/Chart.yaml index 2e5c37ed1..746d04faf 100644 --- a/mojaloop-bulk/Chart.yaml +++ b/mojaloop-bulk/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 description: Mojaloop Bulk Helm chart for Kubernetes name: mojaloop-bulk version: 14.1.0 -appVersion: "bulk-api-adapter: v14.0.0; central-ledger: v15.1.2.1" +appVersion: "bulk-api-adapter: v14.2.0; central-ledger: v16.3.1" home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: diff --git a/mojaloop-bulk/values.yaml b/mojaloop-bulk/values.yaml index 1bded6ad5..9a526795f 100644 --- a/mojaloop-bulk/values.yaml +++ b/mojaloop-bulk/values.yaml @@ -13,7 +13,7 @@ bulk-api-adapter: replicaCount: 1 image: repository: mojaloop/bulk-api-adapter - tag: v14.0.0 + tag: v14.2.0 command: '["node", "src/api/index.js"]' ## Optionally specify an array of imagePullSecrets. ## Secrets must be manually created in the namespace. @@ -83,23 +83,24 @@ bulk-api-adapter: # Protocol versions used for validating (VALIDATELIST) incoming FSPIOP API Headers (Content-type, Accept), # and for generating requests/callbacks from the Switch itself (DEFAULT value) protocol_versions: { - "CONTENT": { - "DEFAULT": "1.1", - "VALIDATELIST": [ - "1", - "1.0", - "1.1" - ] - }, - "ACCEPT": { - "DEFAULT": "1", - "VALIDATELIST": [ - "1", - "1.0", - "1.1" - ] - } -} + "CONTENT": { + "DEFAULT": "1.1", + "VALIDATELIST": [ + "1", + "1.0", + "1.1" + ] + }, + "ACCEPT": { + "DEFAULT": "1", + "VALIDATELIST": [ + "1", + "1.0", + "1.1" + ] + } + } + error_handling: include_cause_extension: false truncate_extensions: true @@ -179,7 +180,7 @@ bulk-api-adapter: replicaCount: 1 image: repository: mojaloop/bulk-api-adapter - tag: v14.0.0 + tag: v14.2.0 command: '["node", "src/handlers/index.js", "handler", "--notification"]' ## Optionally specify an array of imagePullSecrets. ## Secrets must be manually created in the namespace. @@ -249,23 +250,24 @@ bulk-api-adapter: # Protocol versions used for validating (VALIDATELIST) incoming FSPIOP API Headers (Content-type, Accept), # and for generating requests/callbacks from the Switch itself (DEFAULT value) protocol_versions: { - "CONTENT": { - "DEFAULT": "1.1", - "VALIDATELIST": [ - "1", - "1.0", - "1.1" - ] - }, - "ACCEPT": { - "DEFAULT": "1", - "VALIDATELIST": [ - "1", - "1.0", - "1.1" - ] - } -} + "CONTENT": { + "DEFAULT": "1.1", + "VALIDATELIST": [ + "1", + "1.0", + "1.1" + ] + }, + "ACCEPT": { + "DEFAULT": "1", + "VALIDATELIST": [ + "1", + "1.0", + "1.1" + ] + } + } + error_handling: include_cause_extension: false truncate_extensions: true @@ -349,7 +351,7 @@ bulk-centralledger: api: image: repository: mojaloop/central-ledger - tag: v15.1.2.1 + tag: v16.3.1 pullPolicy: IfNotPresent command: '["node", "src/handlers/index.js", "handler", "--bulkprepare"]' service: @@ -548,7 +550,7 @@ bulk-centralledger: api: image: repository: mojaloop/central-ledger - tag: v15.1.2.1 + tag: v16.3.1 pullPolicy: IfNotPresent command: '["node", "src/handlers/index.js", "handler", "--bulkfulfil"]' service: @@ -744,7 +746,7 @@ bulk-centralledger: api: image: repository: mojaloop/central-ledger - tag: v15.1.2.1 + tag: v16.3.1 pullPolicy: IfNotPresent command: '["node", "src/handlers/index.js", "handler", "--bulkprocessing"]' service: @@ -940,7 +942,7 @@ bulk-centralledger: api: image: repository: mojaloop/central-ledger - tag: v15.1.2.1 + tag: v16.3.1 pullPolicy: IfNotPresent command: '["node", "src/handlers/index.js", "handler", "--bulkget"]' service: diff --git a/mojaloop-simulator/Chart.yaml b/mojaloop-simulator/Chart.yaml index fbf8f9405..c1d975d29 100644 --- a/mojaloop-simulator/Chart.yaml +++ b/mojaloop-simulator/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 description: "Helm Chart for the Mojaloop (SDK-based) Simulator" name: mojaloop-simulator version: 14.1.0 -appVersion: "sdk-scheme-adapter: v18.0.2; mojaloop-simulator: v13.0.1; thirdparty-sdk: v15.1.0" +appVersion: "sdk-scheme-adapter: v21.4.0; mojaloop-simulator: v13.0.1; thirdparty-sdk: v15.1.0" dependencies: - name: common repository: "https://docs.mojaloop.io/charts/repo" diff --git a/mojaloop-simulator/templates/deployment.yaml b/mojaloop-simulator/templates/deployment.yaml index 588cff125..2292d6e6e 100644 --- a/mojaloop-simulator/templates/deployment.yaml +++ b/mojaloop-simulator/templates/deployment.yaml @@ -72,6 +72,7 @@ spec: - name: scheme-adapter image: "{{ $config.config.schemeAdapter.image.repository }}:{{ $config.config.schemeAdapter.image.tag }}" imagePullPolicy: {{ $config.config.schemeAdapter.image.pullPolicy }} + command: {{ $config.config.schemeAdapter.image.command }} ports: - name: inboundapi containerPort: {{ $config.config.schemeAdapter.env.INBOUND_LISTEN_PORT }} diff --git a/mojaloop-simulator/templates/ingress.yaml b/mojaloop-simulator/templates/ingress.yaml index 569bf16f7..b0eee12fa 100644 --- a/mojaloop-simulator/templates/ingress.yaml +++ b/mojaloop-simulator/templates/ingress.yaml @@ -1,4 +1,4 @@ -{{ if .Values.simulators }} +{{ if (and .Values.simulators (eq .Values.ingress.enabled true))}} {{- $prefix := include "mojaloop-simulator.prefix" . -}} apiVersion: {{ include "common.capabilities.ingress.apiVersion" . }} kind: Ingress diff --git a/mojaloop-simulator/values.yaml b/mojaloop-simulator/values.yaml index 272c8598c..563de61df 100644 --- a/mojaloop-simulator/values.yaml +++ b/mojaloop-simulator/values.yaml @@ -130,6 +130,7 @@ defaultProbes: &defaultProbes failureThreshold: 3 ingress: + enabled: true # If you're using nginx ingress controller >= v0.22.0 set this to (/|$)(.*). Ensure that you set the `"nginx.ingress.kubernetes.io/rewrite-target": "/$2"` # If you're using nginx ingress controller < v0.22.0 set this to an empty string or "/". Ensure that you set the `"nginx.ingress.kubernetes.io/rewrite-target": "/"` # This affects the way your rewrite target will work. @@ -276,8 +277,9 @@ defaults: &defaults publicKey: '' image: repository: mojaloop/sdk-scheme-adapter - tag: v18.0.2 + tag: v21.4.0 pullPolicy: IfNotPresent + command: '[ "yarn", "start:api-svc" ]' <<: *defaultProbes # These will be supplied directly to the init containers array in the deployment for the @@ -440,6 +442,10 @@ defaults: &defaults # The fulfilment will be generated from the provided ILP packet, and must hash to the provided condition. ALLOW_TRANSFER_WITHOUT_QUOTE: false RESOURCE_VERSIONS: transfers=1.1,quotes=1.0 + + ENABLE_FSPIOP_EVENT_HANDLER: false + ENABLE_BACKEND_EVENT_HANDLER: false + backend: image: repository: mojaloop/mojaloop-simulator diff --git a/mojaloop-ttk-simulators/.helmignore b/mojaloop-ttk-simulators/.helmignore new file mode 100644 index 000000000..d41b925fa --- /dev/null +++ b/mojaloop-ttk-simulators/.helmignore @@ -0,0 +1,25 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +*IGNORE* + +# Ignore child charts from being copied +chart-* diff --git a/mojaloop-ttk-simulators/Chart.yaml b/mojaloop-ttk-simulators/Chart.yaml new file mode 100644 index 000000000..f47c792e7 --- /dev/null +++ b/mojaloop-ttk-simulators/Chart.yaml @@ -0,0 +1,39 @@ +apiVersion: v2 +description: mojaloop-ttk-simulator Helm chart for Kubernetes +name: mojaloop-ttk-simulators +version: 1.0.0 +appVersion: "ml-testing-toolkit: v15.2.0, ml-testing-toolkit-ui: v15.0.1, sdk-scheme-adapter: v21.4.0" +home: http://mojaloop.io +icon: http://mojaloop.io/images/logo.png +sources: + - https://github.com/mojaloop/mojaloop + - https://github.com/mojaloop/helm + - https://github.com/mojaloop/sdk-scheme-adapter +maintainers: + - name: Miguel de Barros + email: miguel.debarros@modusbox.com +dependencies: + - name: mojaloop-ttk-sim1-svc + repository: "file://./chart-sim1" + tags: + - mojaloop-simulator + - testing-toolkit + - sdk-scheme-adapter + version: 1.0.0 + condition: mojaloop-ttk-sim1-svc.enabled + - name: mojaloop-ttk-sim2-svc + repository: "file://./chart-sim2" + tags: + - mojaloop-simulator + - testing-toolkit + - sdk-scheme-adapter + version: 1.0.0 + condition: mojaloop-ttk-sim2-svc.enabled + - name: mojaloop-ttk-sim3-svc + repository: "file://./chart-sim3" + tags: + - mojaloop-simulator + - testing-toolkit + - sdk-scheme-adapter + version: 1.0.0 + condition: mojaloop-ttk-sim3-svc.enabled diff --git a/mojaloop-ttk-simulators/README.md b/mojaloop-ttk-simulators/README.md new file mode 100644 index 000000000..98c6b0002 --- /dev/null +++ b/mojaloop-ttk-simulators/README.md @@ -0,0 +1,96 @@ +# Mojaloop-TTK-Simulators Helm Chart + +Helm Chart for deploying Simulators that are based on an [SDK-Scheme-Adapter](https://github.com/mojaloop/sdk-scheme-adapter) with a [Testing-Toolkit](https://github.com/mojaloop/ml-testing-toolkit) backend. + +## Overview + +N/A + +## Sub-Charts + +- [chart-sim1](./chart-sim1) - Test FSP Sim1 +- [chart-sim2](./chart-sim2) - Test FSP Sim2 +- [chart-sim3](./chart-sim3) - Test FSP Sim3 + +## Deployment + +### Pre-requisites + +The following-backend dependencies are required for each of the following services. + +1. Kafka - used as a persistent state store, and for correlating async-to-sync requests/responses using the pub-sub mechanisms. + + An example for installing the [Bitnami Kafka Helm Chart](https://github.com/bitnami/charts/tree/master/bitnami/kafka) can be done as follows: + + ```bash + helm repo add bitnami https://charts.bitnami.com/bitnami + helm -n install bitnami/kafka --set persistence.enabled=false --set zookeeper.persistence.enabled=false + ``` + + _IMPORTANT: The above command includes config changes to deploy a single instance with disable persistence, etc which is not recommended for Production grade installations. Please refer to the [Bitnami Kafka values.yaml](https://github.com/bitnami/charts/blob/master/bitnami/kafka/values.yaml) for available configuration parameters._ + +2. Redis - used for pub-sub all Domain and Command events. + + An example for installing the [Bitnami Redis Helm Chart](https://github.com/bitnami/charts/tree/master/bitnami/redis) can be done as follows: + + ```bash + helm repo add bitnami https://charts.bitnami.com/bitnami + helm -n install bitnami/redis --set architecture=standalone --set master.persistence.enabled=false --set auth.enabled=false + ``` + + _IMPORTANT: The above command includes config changes to deploy a single instance with disable persistence, etc which is not recommended for Production grade installations. Please refer to the [Bitnami Redis values.yaml](https://github.com/bitnami/charts/blob/master/bitnami/kafka/values.yaml) for available configuration parameters._ + +Ensure that you configure the appropriate configurations to match the above in the [values.yaml](./values.yaml): + + ```yaml + global: + kafka: + host: -kafka + port: 9092 + + redis: + host: -redis-master + port: 6379 + ``` + +Or alternatively one can install the chart by adding the following `--set` parameters: + + ```bash + helm install . --set global.kafka.host=-kafka --set global.redis.host=-redis-master + ``` +#### Helm + +The [Example-Mojaloop-Backend](../example-mojaloop-backend/README.md) can be used to deploy the necessary backends as follows: + +```bash +helm -n moja3 install backend ./example-mojaloop-backend --set "centralledger-mysql.enabled=false" --set "account-lookup-mysql.enabled=false" --set "centralledger-obj.enabled=false" --set "cep-mongodb.enabled=false" --set "kafka-console.enabled=false" --set "ttksims-redis.enabled=true" --set "kafka.enabled=true" +``` + +_Note: Take note that all the unnecessary backends are disabled in the above example command, except for Kafka and Redis_ + +### Validation + +#### Helm + +Ensure you enable the following value configs are set when deploying via the main [Mojaloop Helm Chart](../mojaloop/Chart.yaml): + +- mojaloop-bulk.enabled: true <-- Enables deployment of core Mojaloop Bulk Services +- mojaloop-ttk-simulators.enabled: true <-- Enables deployment of TTK-based SIMs +- ml-ttk-test-val-bulk.tests.enabled=true <-- Handles standard Bulk Test-case collection +- ml-ttk-test-setup-sdk-bulk.tests.enabled=true <- Handles provisioning of TTK-based SIMs +- ml-ttk-test-val-sdk-bulk.tests.enabled=true <-- Handles the Functional Validation of the SDK Bulk Test-case collection + +This can either be set as a parameter when running the `helm install` command line, or set directly on a customized [../mojaloop/values.yaml](../mojaloop/values.yaml) file. + +#### Manual + + +- Open TTK UI for SIM1 on http://ttksim1.ttk1.test.mojaloop.live/admin/outbound_request +- Open TTK UI for SIM2 for monitoring the inbound requests as receiver http://ttksim2.ttk1.test.mojaloop.live/admin/monitoring +- Download the following test cases + https://github.com/mojaloop/sdk-scheme-adapter/blob/mvp/feat/%232809-local-end-to-end-func-tests/test/func/ttk-testcases/bulk-happy-path.json +- Import the test cases in TTK SIM1 +- Edit the first test case `TC-BHP1. Happy Path` +- Goto `Editor` tab on each request and deselect the checkbox `Override with Custom URL` +- Run the test cases by clicking on the `Send` button at the top right corner +- You should see all tests passed diff --git a/mojaloop-ttk-simulators/chart-sim1/Chart.yaml b/mojaloop-ttk-simulators/chart-sim1/Chart.yaml new file mode 100644 index 000000000..f2c3faadf --- /dev/null +++ b/mojaloop-ttk-simulators/chart-sim1/Chart.yaml @@ -0,0 +1,36 @@ +apiVersion: v2 +name: mojaloop-ttk-sim1-svc +version: 1.0.0 +description: A Helm chart for Kubernetes +appVersion: "ml-testing-toolkit: v15.2.0, ml-testing-toolkit-ui: v15.0.1, sdk-scheme-adapter: v21.4.0" +home: http://mojaloop.io +icon: http://mojaloop.io/images/logo.png +sources: + - https://github.com/mojaloop/mojaloop + - https://github.com/mojaloop/helm + - https://github.com/mojaloop/sdk-scheme-adapter +maintainers: + - name: Miguel de Barros + email: miguel.debarros@modusbox.com +dependencies: + # TODO: Include the following dependencies: + # - SDK-Scheme-Adapter + # - Testing-Toolkit: Backend & Front-end (disabled by default) + # + - name: sdk-scheme-adapter + repository: "file://../../sdk-scheme-adapter" + tags: + - sdk-scheme-adapter + version: 1.0.0 + condition: sdk-scheme-adapter.enabled + - name: ml-testing-toolkit + repository: "file://../../ml-testing-toolkit" + tags: + - testing-toolkit + version: 15.3.0 + condition: ml-testing-toolkit.enabled + - name: common + repository: "https://docs.mojaloop.io/charts/repo" + tags: + - moja-common + version: 2.0.0 diff --git a/mojaloop-ttk-simulators/chart-sim1/README.md b/mojaloop-ttk-simulators/chart-sim1/README.md new file mode 100644 index 000000000..91560780e --- /dev/null +++ b/mojaloop-ttk-simulators/chart-sim1/README.md @@ -0,0 +1,17 @@ +# Mojaloop-TTK-Simulator-svc Helm Chart + +Helm Chart for the first instance of simulator with ML TTK backend + sdk-scheme-adapter + +## Overview + +TBD. + +## Deployment + +### Pre-requisites + +TBD. + +### Validation + +TBD. diff --git a/mojaloop-ttk-simulators/chart-sim1/templates/NOTES.txt b/mojaloop-ttk-simulators/chart-sim1/templates/NOTES.txt new file mode 100644 index 000000000..3d78d7d08 --- /dev/null +++ b/mojaloop-ttk-simulators/chart-sim1/templates/NOTES.txt @@ -0,0 +1,5 @@ +** Please be patient while the chart is being deployed ** + +%%Instructions to access the application depending on the serviceType and other considerations%% + +{{- include "mojaloop-ttk-simulator-svc.validateValues" . }} diff --git a/mojaloop-ttk-simulators/chart-sim1/templates/_helpers.tpl b/mojaloop-ttk-simulators/chart-sim1/templates/_helpers.tpl new file mode 100644 index 000000000..e68d6b261 --- /dev/null +++ b/mojaloop-ttk-simulators/chart-sim1/templates/_helpers.tpl @@ -0,0 +1,46 @@ +{{/* vim: set filetype=mustache: */}} + +{{/* +Return the proper main image name +*/}} +{{- define "mojaloop-ttk-simulator-svc.image" -}} +{{ include "common.images.image" (dict "imageRoot" .Values.image "global" .Values.global) }} +{{- end -}} + +{{/* +Return the proper image name (for the init container volume-permissions image) +*/}} +{{- define "mojaloop-ttk-simulator-svc.volumePermissions.image" -}} +{{- include "common.images.image" ( dict "imageRoot" .Values.volumePermissions.image "global" .Values.global ) -}} +{{- end -}} + +{{/* +Return the proper Docker Image Registry Secret Names +*/}} +{{- define "mojaloop-ttk-simulator-svc.imagePullSecrets" -}} +{{- include "common.images.pullSecrets" (dict "images" (list .Values.image) "global" .Values.global) -}} +{{- end -}} + +{{/* +Create the name of the service account to use +*/}} +{{- define "mojaloop-ttk-simulator-svc.serviceAccountName" -}} +{{- if .Values.serviceAccount.create -}} + {{ default (printf "%s" (include "common.names.fullname" .)) .Values.serviceAccount.name }} +{{- else -}} + {{ default "default" .Values.serviceAccount.name }} +{{- end -}} +{{- end -}} + +{{/* +Compile all warnings into a single message. +*/}} +{{- define "mojaloop-ttk-simulator-svc.validateValues" -}} +{{- $messages := list -}} +{{- $messages := without $messages "" -}} +{{- $message := join "\n" $messages -}} + +{{- if $message -}} +{{- printf "\nVALUES VALIDATION:\n%s" $message -}} +{{- end -}} +{{- end -}} diff --git a/mojaloop-ttk-simulators/chart-sim1/values.yaml b/mojaloop-ttk-simulators/chart-sim1/values.yaml new file mode 100644 index 000000000..c78542c0e --- /dev/null +++ b/mojaloop-ttk-simulators/chart-sim1/values.yaml @@ -0,0 +1,133 @@ +# This is a YAML-formatted file. + +sdk-scheme-adapter: + enabled: true + + ## Local re-usable configs + config: + simName: &CONFIG_SIM1_NAME ttksim1 + database: &CONFIG_SIM1_DB 1 + + sdk-scheme-adapter-api-svc: + enabled: true + nameOverride: 'ttksim1-sdk-api-svc' + + + redis: + database: *CONFIG_SIM1_DB # This is a number between 0 to 15 + + config: + simName: *CONFIG_SIM1_NAME + + env: + DFSP_ID: '{{ .Values.config.simName }}' + BACKEND_EVENT_CONSUMER_GROUP_ID: '{{ .Values.config.simName }}-domain_events_consumer_api_svc_backend_group' + FSPIOP_EVENT_CONSUMER_GROUP_ID: '{{ .Values.config.simName }}-domain_events_consumer_api_svc_fspiop_group' + BACKEND_EVENT_CONSUMER_TOPICS: '{{ .Values.config.simName }}-topic-sdk-outbound-domain-events' + BACKEND_EVENT_PRODUCER_TOPIC: '{{ .Values.config.simName }}-topic-sdk-outbound-domain-events' + FSPIOP_EVENT_CONSUMER_TOPICS: '{{ .Values.config.simName }}-topic-sdk-outbound-domain-events' + FSPIOP_EVENT_PRODUCER_TOPIC: '{{ .Values.config.simName }}-topic-sdk-outbound-domain-events' + BACKEND_ENDPOINT: '{{ .Release.Name }}-{{ .Values.config.simName }}-ttk-backend:4040' + REQUEST_PROCESSING_TIMEOUT_SECONDS: 20 + + sdk-scheme-adapter-dom-evt-handler: + enabled: true + nameOverride: 'ttksim1-sdk-dom-evt-handler' + + + redis: + database: *CONFIG_SIM1_DB # This is a number between 0 to 15 + + config: + simName: *CONFIG_SIM1_NAME + + env: + DOMAIN_EVENT_CONSUMER_GROUP_ID: '{{ .Values.config.simName }}-domain_events_consumer_group' + DOMAIN_EVENT_CONSUMER_TOPICS: '{{ .Values.config.simName }}-topic-sdk-outbound-domain-events' + COMMAND_EVENT_PRODUCER_TOPIC: '{{ .Values.config.simName }}-topic-sdk-outbound-command-events' + + sdk-scheme-adapter-cmd-evt-handler: + enabled: true + nameOverride: 'ttksim1-sdk-cmd-evt-handler' + + + redis: + database: *CONFIG_SIM1_DB # This is a number between 0 to 15 + + config: + simName: *CONFIG_SIM1_NAME + + env: + COMMAND_EVENT_CONSUMER_GROUP_ID: '{{ .Values.config.simName }}-command_events_consumer_group' + COMMAND_EVENT_CONSUMER_TOPICS: '{{ .Values.config.simName }}-topic-sdk-outbound-command-events' + DOMAIN_EVENT_PRODUCER_TOPIC: '{{ .Values.config.simName }}-topic-sdk-outbound-domain-events' + +ml-testing-toolkit: + enabled: true + + mysql: + ## repo and documentation https://github.com/helm/charts/tree/master/stable/percona-xtradb-cluster + ## disable when connection-manager-backend is disabled + enabled: false + + ml-testing-toolkit-backend: + enabled: true + nameOverride: 'ttksim1-ttk-backend' + config: + user_config.json: + CALLBACK_ENDPOINT: 'http://$release_name-ttksim1-sdk-api-svc:4001' + SCRIPT_TIMEOUT: 60000 + DEFAULT_REQUEST_TIMEOUT: 60000 + CALLBACK_TIMEOUT: 60000 + DEFAULT_ENVIRONMENT_FILE_NAME: 'hub-k8s-default-environment.json' + + system_config.json: { + "API_DEFINITIONS": [ + { + "type": "mojaloop_simulator_inbound", + "version": "1.4", + "folderPath": "mojaloop_simulator_sim_1.4", + "asynchronous": true + }, + { + "type": "scheme_adapter_outbound", + "version": "1.0", + "folderPath": "mojaloop_sdk_outbound_scheme_adapter_1.0", + "hostnames": [], + "prefix": "/sdk-out", + "asynchronous": true + } + ] + } + # TODO: Change the following links to release version instead of master branch + rules_response__default.json: 'https://raw.githubusercontent.com/mojaloop/testing-toolkit-test-cases/mvp/bulk-sdk/rules/sdk-bulk/response_rules.json' + api_definitions__mojaloop_simulator_sim_1.4__api_spec.yaml: 'https://raw.githubusercontent.com/mojaloop/sdk-scheme-adapter/master/test/func/config/ttk-ttksim1/spec_files/api_definitions/mojaloop_simulator_sim_1.4/api_spec.yaml' + api_definitions__mojaloop_sdk_outbound_scheme_adapter_1.0__api_spec.yaml: 'https://raw.githubusercontent.com/mojaloop/sdk-scheme-adapter/master/test/func/config/ttk-ttksim1/spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml' + api_definitions__mojaloop_sdk_outbound_scheme_adapter_1.0__callback_map.json: 'https://raw.githubusercontent.com/mojaloop/sdk-scheme-adapter/master/test/func/config/ttk-ttksim1/spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json' + # ingress: + # enabled: true + # hosts: + # specApi: + # host: ml-testing-toolkit-specapi.local + # adminApi: + # host: ml-testing-toolkit.local + extraEnvironments: + hub-k8s-default-environment.json: { + "inputValues": {} + } + # ml-default-environment.json: { + # "inputValues": { + # "VAR1": "VALUE1" + # } + # } + + ml-testing-toolkit-frontend: + enabled: true + nameOverride: 'ttksim1-ttk-frontend' + # ingress: + # enabled: true + # hosts: + # ui: + # host: ml-testing-toolkit.local + # config: + # API_BASE_URL: http://ml-testing-toolkit.local diff --git a/mojaloop-ttk-simulators/chart-sim2/Chart.yaml b/mojaloop-ttk-simulators/chart-sim2/Chart.yaml new file mode 100644 index 000000000..26bbd35bb --- /dev/null +++ b/mojaloop-ttk-simulators/chart-sim2/Chart.yaml @@ -0,0 +1,36 @@ +apiVersion: v2 +name: mojaloop-ttk-sim2-svc +version: 1.0.0 +description: A Helm chart for Kubernetes +appVersion: "ml-testing-toolkit: v15.2.0, ml-testing-toolkit-ui: v15.0.1, sdk-scheme-adapter: v21.4.0" +home: http://mojaloop.io +icon: http://mojaloop.io/images/logo.png +sources: + - https://github.com/mojaloop/mojaloop + - https://github.com/mojaloop/helm + - https://github.com/mojaloop/sdk-scheme-adapter +maintainers: + - name: Miguel de Barros + email: miguel.debarros@modusbox.com +dependencies: + # TODO: Include the following dependencies: + # - SDK-Scheme-Adapter + # - Testing-Toolkit: Backend & Front-end (disabled by default) + # + - name: sdk-scheme-adapter + repository: "file://../../sdk-scheme-adapter" + tags: + - sdk-scheme-adapter + version: 1.0.0 + condition: sdk-scheme-adapter.enabled + - name: ml-testing-toolkit + repository: "file://../../ml-testing-toolkit" + tags: + - testing-toolkit + version: 15.3.0 + condition: ml-testing-toolkit.enabled + - name: common + repository: "https://docs.mojaloop.io/charts/repo" + tags: + - moja-common + version: 2.0.0 diff --git a/mojaloop-ttk-simulators/chart-sim2/README.md b/mojaloop-ttk-simulators/chart-sim2/README.md new file mode 100644 index 000000000..d96296a8b --- /dev/null +++ b/mojaloop-ttk-simulators/chart-sim2/README.md @@ -0,0 +1,17 @@ +# Mojaloop-TTK-Simulator-svc Helm Chart + +Helm Chart for the second instance of simulator with ML TTK backend + sdk-scheme-adapter + +## Overview + +TBD. + +## Deployment + +### Pre-requisites + +TBD. + +### Validation + +TBD. diff --git a/mojaloop-ttk-simulators/chart-sim2/templates/NOTES.txt b/mojaloop-ttk-simulators/chart-sim2/templates/NOTES.txt new file mode 100644 index 000000000..3d78d7d08 --- /dev/null +++ b/mojaloop-ttk-simulators/chart-sim2/templates/NOTES.txt @@ -0,0 +1,5 @@ +** Please be patient while the chart is being deployed ** + +%%Instructions to access the application depending on the serviceType and other considerations%% + +{{- include "mojaloop-ttk-simulator-svc.validateValues" . }} diff --git a/mojaloop-ttk-simulators/chart-sim2/templates/_helpers.tpl b/mojaloop-ttk-simulators/chart-sim2/templates/_helpers.tpl new file mode 100644 index 000000000..e68d6b261 --- /dev/null +++ b/mojaloop-ttk-simulators/chart-sim2/templates/_helpers.tpl @@ -0,0 +1,46 @@ +{{/* vim: set filetype=mustache: */}} + +{{/* +Return the proper main image name +*/}} +{{- define "mojaloop-ttk-simulator-svc.image" -}} +{{ include "common.images.image" (dict "imageRoot" .Values.image "global" .Values.global) }} +{{- end -}} + +{{/* +Return the proper image name (for the init container volume-permissions image) +*/}} +{{- define "mojaloop-ttk-simulator-svc.volumePermissions.image" -}} +{{- include "common.images.image" ( dict "imageRoot" .Values.volumePermissions.image "global" .Values.global ) -}} +{{- end -}} + +{{/* +Return the proper Docker Image Registry Secret Names +*/}} +{{- define "mojaloop-ttk-simulator-svc.imagePullSecrets" -}} +{{- include "common.images.pullSecrets" (dict "images" (list .Values.image) "global" .Values.global) -}} +{{- end -}} + +{{/* +Create the name of the service account to use +*/}} +{{- define "mojaloop-ttk-simulator-svc.serviceAccountName" -}} +{{- if .Values.serviceAccount.create -}} + {{ default (printf "%s" (include "common.names.fullname" .)) .Values.serviceAccount.name }} +{{- else -}} + {{ default "default" .Values.serviceAccount.name }} +{{- end -}} +{{- end -}} + +{{/* +Compile all warnings into a single message. +*/}} +{{- define "mojaloop-ttk-simulator-svc.validateValues" -}} +{{- $messages := list -}} +{{- $messages := without $messages "" -}} +{{- $message := join "\n" $messages -}} + +{{- if $message -}} +{{- printf "\nVALUES VALIDATION:\n%s" $message -}} +{{- end -}} +{{- end -}} diff --git a/mojaloop-ttk-simulators/chart-sim2/values.yaml b/mojaloop-ttk-simulators/chart-sim2/values.yaml new file mode 100644 index 000000000..56d38caf5 --- /dev/null +++ b/mojaloop-ttk-simulators/chart-sim2/values.yaml @@ -0,0 +1,122 @@ +# This is a YAML-formatted file. + +sdk-scheme-adapter: + enabled: true + + ## Local re-usable configs + config: + simName: &CONFIG_SIM2_NAME ttksim2 + database: &CONFIG_SIM2_DB 2 + + sdk-scheme-adapter-api-svc: + enabled: true + nameOverride: 'ttksim2-sdk-api-svc' + + + redis: + database: *CONFIG_SIM2_DB # This is a number between 0 to 15 + + config: + simName: *CONFIG_SIM2_NAME + + env: + DFSP_ID: '{{ .Values.config.simName }}' + BACKEND_EVENT_CONSUMER_GROUP_ID: '{{ .Values.config.simName }}-domain_events_consumer_api_svc_backend_group' + FSPIOP_EVENT_CONSUMER_GROUP_ID: '{{ .Values.config.simName }}-domain_events_consumer_api_svc_fspiop_group' + BACKEND_EVENT_CONSUMER_TOPICS: '{{ .Values.config.simName }}-topic-sdk-outbound-domain-events' + BACKEND_EVENT_PRODUCER_TOPIC: '{{ .Values.config.simName }}-topic-sdk-outbound-domain-events' + FSPIOP_EVENT_CONSUMER_TOPICS: '{{ .Values.config.simName }}-topic-sdk-outbound-domain-events' + FSPIOP_EVENT_PRODUCER_TOPIC: '{{ .Values.config.simName }}-topic-sdk-outbound-domain-events' + BACKEND_ENDPOINT: '{{ .Release.Name }}-{{ .Values.config.simName }}-ttk-backend:4040' + sdk-scheme-adapter-dom-evt-handler: + enabled: true + + + redis: + database: *CONFIG_SIM2_DB # This is a number between 0 to 15 + + config: + simName: *CONFIG_SIM2_NAME + + nameOverride: 'ttksim2-sdk-dom-evt-handler' + env: + DOMAIN_EVENT_CONSUMER_GROUP_ID: '{{ .Values.config.simName }}-domain_events_consumer_group' + DOMAIN_EVENT_CONSUMER_TOPICS: '{{ .Values.config.simName }}-topic-sdk-outbound-domain-events' + COMMAND_EVENT_PRODUCER_TOPIC: '{{ .Values.config.simName }}-topic-sdk-outbound-command-events' + sdk-scheme-adapter-cmd-evt-handler: + enabled: true + nameOverride: 'ttksim2-sdk-cmd-evt-handler' + + + redis: + database: *CONFIG_SIM2_DB # This is a number between 0 to 15 + + config: + simName: *CONFIG_SIM2_NAME + + env: + COMMAND_EVENT_CONSUMER_GROUP_ID: '{{ .Values.config.simName }}-command_events_consumer_group' + COMMAND_EVENT_CONSUMER_TOPICS: '{{ .Values.config.simName }}-topic-sdk-outbound-command-events' + DOMAIN_EVENT_PRODUCER_TOPIC: '{{ .Values.config.simName }}-topic-sdk-outbound-domain-events' + +ml-testing-toolkit: + enabled: true + + mysql: + ## repo and documentation https://github.com/helm/charts/tree/master/stable/percona-xtradb-cluster + ## disable when connection-manager-backend is disabled + enabled: false + + ml-testing-toolkit-backend: + enabled: true + nameOverride: 'ttksim2-ttk-backend' + config: + user_config.json: + CALLBACK_ENDPOINT: 'http://$release_name-ttksim2-sdk-api-svc:4001' + system_config.json: { + "API_DEFINITIONS": [ + { + "type": "mojaloop_simulator_inbound", + "version": "1.4", + "folderPath": "mojaloop_simulator_sim_1.4", + "asynchronous": true + }, + { + "type": "scheme_adapter_outbound", + "version": "1.0", + "folderPath": "mojaloop_sdk_outbound_scheme_adapter_1.0", + "hostnames": [], + "prefix": "/sdk-out", + "asynchronous": true + } + ] + } + rules_response__default.json: 'https://raw.githubusercontent.com/mojaloop/testing-toolkit-test-cases/master/rules/sdk-bulk/response_rules.json' + api_definitions__mojaloop_simulator_sim_1.4__api_spec.yaml: 'https://raw.githubusercontent.com/mojaloop/sdk-scheme-adapter/master/test/func/config/ttk-ttksim2/spec_files/api_definitions/mojaloop_simulator_sim_1.4/api_spec.yaml' + api_definitions__mojaloop_sdk_outbound_scheme_adapter_1.0__api_spec.yaml: 'https://raw.githubusercontent.com/mojaloop/sdk-scheme-adapter/master/test/func/config/ttk-ttksim2/spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml' + api_definitions__mojaloop_sdk_outbound_scheme_adapter_1.0__callback_map.json: 'https://raw.githubusercontent.com/mojaloop/sdk-scheme-adapter/master/test/func/config/ttk-ttksim2/spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json' + + # ingress: + # enabled: true + # hosts: + # specApi: + # host: ml-testing-toolkit-specapi.local + # adminApi: + # host: ml-testing-toolkit.local + # extraEnvironments: + # ml-default-environment.json: { + # "inputValues": { + # "VAR1": "VALUE1" + # } + # } + + ml-testing-toolkit-frontend: + enabled: true + nameOverride: 'ttksim2-ttk-frontend' + # ingress: + # enabled: true + # hosts: + # ui: + # host: ml-testing-toolkit.local + # config: + # API_BASE_URL: http://ml-testing-toolkit.local diff --git a/mojaloop-ttk-simulators/chart-sim3/Chart.yaml b/mojaloop-ttk-simulators/chart-sim3/Chart.yaml new file mode 100644 index 000000000..87ca617bd --- /dev/null +++ b/mojaloop-ttk-simulators/chart-sim3/Chart.yaml @@ -0,0 +1,36 @@ +apiVersion: v2 +name: mojaloop-ttk-sim3-svc +version: 1.0.0 +description: A Helm chart for Kubernetes +appVersion: "ml-testing-toolkit: v15.2.0, ml-testing-toolkit-ui: v15.0.1, sdk-scheme-adapter: v21.4.0" +home: http://mojaloop.io +icon: http://mojaloop.io/images/logo.png +sources: + - https://github.com/mojaloop/mojaloop + - https://github.com/mojaloop/helm + - https://github.com/mojaloop/sdk-scheme-adapter +maintainers: + - name: Miguel de Barros + email: miguel.debarros@modusbox.com +dependencies: + # TODO: Include the following dependencies: + # - SDK-Scheme-Adapter + # - Testing-Toolkit: Backend & Front-end (disabled by default) + # + - name: sdk-scheme-adapter + repository: "file://../../sdk-scheme-adapter" + tags: + - sdk-scheme-adapter + version: 1.0.0 + condition: sdk-scheme-adapter.enabled + - name: ml-testing-toolkit + repository: "file://../../ml-testing-toolkit" + tags: + - testing-toolkit + version: 15.3.0 + condition: ml-testing-toolkit.enabled + - name: common + repository: "https://docs.mojaloop.io/charts/repo" + tags: + - moja-common + version: 2.0.0 diff --git a/mojaloop-ttk-simulators/chart-sim3/README.md b/mojaloop-ttk-simulators/chart-sim3/README.md new file mode 100644 index 000000000..24bc48e01 --- /dev/null +++ b/mojaloop-ttk-simulators/chart-sim3/README.md @@ -0,0 +1,17 @@ +# Mojaloop-TTK-Simulator-svc Helm Chart + +Helm Chart for the third instance of simulator with ML TTK backend + sdk-scheme-adapter + +## Overview + +TBD. + +## Deployment + +### Pre-requisites + +TBD. + +### Validation + +TBD. diff --git a/mojaloop-ttk-simulators/chart-sim3/templates/NOTES.txt b/mojaloop-ttk-simulators/chart-sim3/templates/NOTES.txt new file mode 100644 index 000000000..3d78d7d08 --- /dev/null +++ b/mojaloop-ttk-simulators/chart-sim3/templates/NOTES.txt @@ -0,0 +1,5 @@ +** Please be patient while the chart is being deployed ** + +%%Instructions to access the application depending on the serviceType and other considerations%% + +{{- include "mojaloop-ttk-simulator-svc.validateValues" . }} diff --git a/mojaloop-ttk-simulators/chart-sim3/templates/_helpers.tpl b/mojaloop-ttk-simulators/chart-sim3/templates/_helpers.tpl new file mode 100644 index 000000000..e68d6b261 --- /dev/null +++ b/mojaloop-ttk-simulators/chart-sim3/templates/_helpers.tpl @@ -0,0 +1,46 @@ +{{/* vim: set filetype=mustache: */}} + +{{/* +Return the proper main image name +*/}} +{{- define "mojaloop-ttk-simulator-svc.image" -}} +{{ include "common.images.image" (dict "imageRoot" .Values.image "global" .Values.global) }} +{{- end -}} + +{{/* +Return the proper image name (for the init container volume-permissions image) +*/}} +{{- define "mojaloop-ttk-simulator-svc.volumePermissions.image" -}} +{{- include "common.images.image" ( dict "imageRoot" .Values.volumePermissions.image "global" .Values.global ) -}} +{{- end -}} + +{{/* +Return the proper Docker Image Registry Secret Names +*/}} +{{- define "mojaloop-ttk-simulator-svc.imagePullSecrets" -}} +{{- include "common.images.pullSecrets" (dict "images" (list .Values.image) "global" .Values.global) -}} +{{- end -}} + +{{/* +Create the name of the service account to use +*/}} +{{- define "mojaloop-ttk-simulator-svc.serviceAccountName" -}} +{{- if .Values.serviceAccount.create -}} + {{ default (printf "%s" (include "common.names.fullname" .)) .Values.serviceAccount.name }} +{{- else -}} + {{ default "default" .Values.serviceAccount.name }} +{{- end -}} +{{- end -}} + +{{/* +Compile all warnings into a single message. +*/}} +{{- define "mojaloop-ttk-simulator-svc.validateValues" -}} +{{- $messages := list -}} +{{- $messages := without $messages "" -}} +{{- $message := join "\n" $messages -}} + +{{- if $message -}} +{{- printf "\nVALUES VALIDATION:\n%s" $message -}} +{{- end -}} +{{- end -}} diff --git a/mojaloop-ttk-simulators/chart-sim3/values.yaml b/mojaloop-ttk-simulators/chart-sim3/values.yaml new file mode 100644 index 000000000..277de86c2 --- /dev/null +++ b/mojaloop-ttk-simulators/chart-sim3/values.yaml @@ -0,0 +1,122 @@ +# This is a YAML-formatted file. + +sdk-scheme-adapter: + enabled: true + + ## Local re-usable configs + config: + simName: &CONFIG_SIM3_NAME ttksim3 + database: &CONFIG_SIM3_DB 3 + + sdk-scheme-adapter-api-svc: + enabled: true + nameOverride: 'ttksim3-sdk-api-svc' + + + redis: + database: *CONFIG_SIM3_DB # This is a number between 0 to 15 + + config: + simName: *CONFIG_SIM3_NAME + + env: + DFSP_ID: '{{ .Values.config.simName }}' + BACKEND_EVENT_CONSUMER_GROUP_ID: '{{ .Values.config.simName }}-domain_events_consumer_api_svc_backend_group' + FSPIOP_EVENT_CONSUMER_GROUP_ID: '{{ .Values.config.simName }}-domain_events_consumer_api_svc_fspiop_group' + BACKEND_EVENT_CONSUMER_TOPICS: '{{ .Values.config.simName }}-topic-sdk-outbound-domain-events' + BACKEND_EVENT_PRODUCER_TOPIC: '{{ .Values.config.simName }}-topic-sdk-outbound-domain-events' + FSPIOP_EVENT_CONSUMER_TOPICS: '{{ .Values.config.simName }}-topic-sdk-outbound-domain-events' + FSPIOP_EVENT_PRODUCER_TOPIC: '{{ .Values.config.simName }}-topic-sdk-outbound-domain-events' + BACKEND_ENDPOINT: '{{ .Release.Name }}-{{ .Values.config.simName }}-ttk-backend:4040' + sdk-scheme-adapter-dom-evt-handler: + enabled: true + + + redis: + database: *CONFIG_SIM3_DB # This is a number between 0 to 15 + + config: + simName: *CONFIG_SIM3_NAME + + nameOverride: 'ttksim3-sdk-dom-evt-handler' + env: + DOMAIN_EVENT_CONSUMER_GROUP_ID: '{{ .Values.config.simName }}-domain_events_consumer_group' + DOMAIN_EVENT_CONSUMER_TOPICS: '{{ .Values.config.simName }}-topic-sdk-outbound-domain-events' + COMMAND_EVENT_PRODUCER_TOPIC: '{{ .Values.config.simName }}-topic-sdk-outbound-command-events' + sdk-scheme-adapter-cmd-evt-handler: + enabled: true + nameOverride: 'ttksim3-sdk-cmd-evt-handler' + + + redis: + database: *CONFIG_SIM3_DB # This is a number between 0 to 15 + + config: + simName: *CONFIG_SIM3_NAME + + env: + COMMAND_EVENT_CONSUMER_GROUP_ID: '{{ .Values.config.simName }}-command_events_consumer_group' + COMMAND_EVENT_CONSUMER_TOPICS: '{{ .Values.config.simName }}-topic-sdk-outbound-command-events' + DOMAIN_EVENT_PRODUCER_TOPIC: '{{ .Values.config.simName }}-topic-sdk-outbound-domain-events' + +ml-testing-toolkit: + enabled: true + + mysql: + ## repo and documentation https://github.com/helm/charts/tree/master/stable/percona-xtradb-cluster + ## disable when connection-manager-backend is disabled + enabled: false + + ml-testing-toolkit-backend: + enabled: true + nameOverride: 'ttksim3-ttk-backend' + config: + user_config.json: + CALLBACK_ENDPOINT: 'http://$release_name-ttksim3-sdk-api-svc:4001' + system_config.json: { + "API_DEFINITIONS": [ + { + "type": "mojaloop_simulator_inbound", + "version": "1.4", + "folderPath": "mojaloop_simulator_sim_1.4", + "asynchronous": true + }, + { + "type": "scheme_adapter_outbound", + "version": "1.0", + "folderPath": "mojaloop_sdk_outbound_scheme_adapter_1.0", + "hostnames": [], + "prefix": "/sdk-out", + "asynchronous": true + } + ] + } + rules_response__default.json: 'https://raw.githubusercontent.com/mojaloop/testing-toolkit-test-cases/master/rules/sdk-bulk/response_rules.json' + api_definitions__mojaloop_simulator_sim_1.4__api_spec.yaml: 'https://raw.githubusercontent.com/mojaloop/sdk-scheme-adapter/master/test/func/config/ttk-ttksim3/spec_files/api_definitions/mojaloop_simulator_sim_1.4/api_spec.yaml' + api_definitions__mojaloop_sdk_outbound_scheme_adapter_1.0__api_spec.yaml: 'https://raw.githubusercontent.com/mojaloop/sdk-scheme-adapter/master/test/func/config/ttk-ttksim3/spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml' + api_definitions__mojaloop_sdk_outbound_scheme_adapter_1.0__callback_map.json: 'https://raw.githubusercontent.com/mojaloop/sdk-scheme-adapter/master/test/func/config/ttk-ttksim3/spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json' + + # ingress: + # enabled: true + # hosts: + # specApi: + # host: ml-testing-toolkit-specapi.local + # adminApi: + # host: ml-testing-toolkit.local + # extraEnvironments: + # ml-default-environment.json: { + # "inputValues": { + # "VAR1": "VALUE1" + # } + # } + + ml-testing-toolkit-frontend: + enabled: true + nameOverride: 'ttksim3-ttk-frontend' + # ingress: + # enabled: true + # hosts: + # ui: + # host: ml-testing-toolkit.local + # config: + # API_BASE_URL: http://ml-testing-toolkit.local diff --git a/mojaloop-ttk-simulators/templates/NOTES.txt b/mojaloop-ttk-simulators/templates/NOTES.txt new file mode 100644 index 000000000..134eab897 --- /dev/null +++ b/mojaloop-ttk-simulators/templates/NOTES.txt @@ -0,0 +1,5 @@ +** Please be patient while the chart is being deployed ** + +%%Instructions to access the application depending on the serviceType and other considerations%% + +{{- include "mojaloop-ttk-simulator.validateValues" . }} diff --git a/mojaloop-ttk-simulators/templates/_helpers.tpl b/mojaloop-ttk-simulators/templates/_helpers.tpl new file mode 100644 index 000000000..8a79a09fc --- /dev/null +++ b/mojaloop-ttk-simulators/templates/_helpers.tpl @@ -0,0 +1,46 @@ +{{/* vim: set filetype=mustache: */}} + +{{/* +Return the proper main image name +*/}} +{{- define "mojaloop-ttk-simulator.image" -}} +{{ include "common.images.image" (dict "imageRoot" .Values.image "global" .Values.global) }} +{{- end -}} + +{{/* +Return the proper image name (for the init container volume-permissions image) +*/}} +{{- define "mojaloop-ttk-simulator.volumePermissions.image" -}} +{{- include "common.images.image" ( dict "imageRoot" .Values.volumePermissions.image "global" .Values.global ) -}} +{{- end -}} + +{{/* +Return the proper Docker Image Registry Secret Names +*/}} +{{- define "mojaloop-ttk-simulator.imagePullSecrets" -}} +{{- include "common.images.pullSecrets" (dict "images" (list .Values.image) "global" .Values.global) -}} +{{- end -}} + +{{/* +Create the name of the service account to use +*/}} +{{- define "mojaloop-ttk-simulator.serviceAccountName" -}} +{{- if .Values.serviceAccount.create -}} + {{ default (printf "%s" (include "common.names.fullname" .)) .Values.serviceAccount.name }} +{{- else -}} + {{ default "default" .Values.serviceAccount.name }} +{{- end -}} +{{- end -}} + +{{/* +Compile all warnings into a single message. +*/}} +{{- define "mojaloop-ttk-simulator.validateValues" -}} +{{- $messages := list -}} +{{- $messages := without $messages "" -}} +{{- $message := join "\n" $messages -}} + +{{- if $message -}} +{{- printf "\nVALUES VALIDATION:\n%s" $message -}} +{{- end -}} +{{- end -}} diff --git a/mojaloop-ttk-simulators/values.yaml b/mojaloop-ttk-simulators/values.yaml new file mode 100644 index 000000000..db70f6e3f --- /dev/null +++ b/mojaloop-ttk-simulators/values.yaml @@ -0,0 +1,240 @@ +# This is a YAML-formatted file. + +global: + kafka: + # host: kafka + ## TODO: Remove this and uncomment the above line when merging to master + host: dep1-kafka + port: 9092 + + redis: + # host: redis + ## TODO: Remove this and uncomment the above line when merging to master + host: dep2-redis-master + port: 6379 + +mojaloop-ttk-sim1-svc: + enabled: true + + ## Local re-usable configs + config: + simName: &CONFIG_SIM1_NAME ttksim1 + database: &CONFIG_SIM1_DB 1 + + sdk-scheme-adapter: + sdk-scheme-adapter-api-svc: + # kafka: + # host: kafka + # port: 9092 + + redis: + # host: redis + # port: 6379 + database: *CONFIG_SIM1_DB # This is a number between 0 to 15 + + config: + simName: *CONFIG_SIM1_NAME + + sdk-scheme-adapter-dom-evt-handler: + # kafka: + # host: kafka + # port: 9092 + + redis: + # host: redis + # port: 6379 + database: *CONFIG_SIM1_DB # This is a number between 0 to 15 + + config: + simName: *CONFIG_SIM1_NAME + + sdk-scheme-adapter-cmd-evt-handler: + # kafka: + # host: kafka + # port: 9092 + + redis: + # host: redis + # port: 6379 + database: *CONFIG_SIM1_DB # This is a number between 0 to 15 + + config: + simName: *CONFIG_SIM1_NAME + + ml-testing-toolkit: + enabled: true + ml-testing-toolkit-backend: + ingress: + enabled: true + hosts: + specApi: + # host: 'ttksim1-specapi.ttk1.local' + ## TODO: Remove this and uncomment the above line when merging to master + host: 'ttksim1-specapi.ttk1.test.mojaloop.live' + adminApi: + # host: 'ttksim1.ttk1.local' + ## TODO: Remove this and uncomment the above line when merging to master + host: 'ttksim1.ttk1.test.mojaloop.live' + ml-testing-toolkit-frontend: + ingress: + enabled: true + hosts: + ui: + # host: ttksim1.ttk1.local + ## TODO: Remove this and uncomment the above line when merging to master + host: ttksim1.ttk1.test.mojaloop.live + config: + # API_BASE_URL: 'http://ttksim1.ttk1.local' + ## TODO: Remove this and uncomment the above line when merging to master + API_BASE_URL: 'http://ttksim1.ttk1.test.mojaloop.live' + +mojaloop-ttk-sim2-svc: + enabled: true + + ## Local re-usable configs + config: + simName: &CONFIG_SIM2_NAME ttksim2 + database: &CONFIG_SIM2_DB 2 + + sdk-scheme-adapter: + sdk-scheme-adapter-api-svc: + # kafka: + # host: kafka + # port: 9092 + + redis: + # host: redis + # port: 6379 + database: *CONFIG_SIM2_DB # This is a number between 0 to 15 + + config: + simName: *CONFIG_SIM2_NAME + + + sdk-scheme-adapter-dom-evt-handler: + # kafka: + # host: kafka + # port: 9092 + + redis: + # host: redis + # port: 6379 + database: *CONFIG_SIM2_DB # This is a number between 0 to 15 + + config: + simName: *CONFIG_SIM2_NAME + + sdk-scheme-adapter-cmd-evt-handler: + # kafka: + # host: kafka + # port: 9092 + + redis: + # host: redis + # port: 6379 + database: *CONFIG_SIM2_DB # This is a number between 0 to 15 + + config: + simName: *CONFIG_SIM2_NAME + + ml-testing-toolkit: + enabled: true + ml-testing-toolkit-backend: + ingress: + enabled: true + hosts: + specApi: + # host: 'ttksim2-specapi.ttk1.local' + ## TODO: Remove this and uncomment the above line when merging to master + host: 'ttksim2-specapi.ttk1.test.mojaloop.live' + adminApi: + # host: 'ttksim2.ttk1.local' + ## TODO: Remove this and uncomment the above line when merging to master + host: 'ttksim2.ttk1.test.mojaloop.live' + ml-testing-toolkit-frontend: + ingress: + enabled: true + hosts: + ui: + # host: 'ttksim2.ttk1.local' + ## TODO: Remove this and uncomment the above line when merging to master + host: 'ttksim2.ttk1.test.mojaloop.live' + config: + # API_BASE_URL: 'http://ttksim2.ttk1.local' + ## TODO: Remove this and uncomment the above line when merging to master + API_BASE_URL: 'http://ttksim2.ttk1.test.mojaloop.live' + +mojaloop-ttk-sim3-svc: + enabled: true + + ## Local re-usable configs + config: + simName: &CONFIG_SIM3_NAME ttksim3 + database: &CONFIG_SIM3_DB 3 + + sdk-scheme-adapter: + sdk-scheme-adapter-api-svc: + # kafka: + # host: kafka + # port: 9092 + + redis: + # host: redis + # port: 6379 + database: *CONFIG_SIM3_DB # This is a number between 0 to 15 + + config: + simName: *CONFIG_SIM3_NAME + + sdk-scheme-adapter-dom-evt-handler: + # kafka: + # host: kafka + # port: 9092 + + redis: + # host: redis + # port: 6379 + database: *CONFIG_SIM3_DB # This is a number between 0 to 15 + + config: + simName: *CONFIG_SIM3_NAME + + sdk-scheme-adapter-cmd-evt-handler: + # kafka: + # host: kafka + # port: 9092 + + redis: + # host: redis + # port: 6379 + database: *CONFIG_SIM3_DB # This is a number between 0 to 15 + + config: + simName: *CONFIG_SIM3_NAME + + ml-testing-toolkit: + enabled: true + ml-testing-toolkit-backend: + ingress: + enabled: true + hosts: + specApi: + # host: 'ttksim3-specapi.ttk1.local' + ## TODO: Remove this and uncomment the above line when merging to master + host: 'ttksim3-specapi.ttk1.test.mojaloop.live' + adminApi: + # host: 'ttksim3.ttk1.local' + ## TODO: Remove this and uncomment the above line when merging to master + host: 'ttksim3.ttk1.test.mojaloop.live' + ml-testing-toolkit-frontend: + ingress: + enabled: true + hosts: + ui: + # host: 'ttksim3.ttk1.local' + ## TODO: Remove this and uncomment the above line when merging to master + host: 'ttksim3.ttk1.test.mojaloop.live' + config: + # API_BASE_URL: 'http://ttksim3.ttk1.local' + ## TODO: Remove this and uncomment the above line when merging to master + API_BASE_URL: 'http://ttksim3.ttk1.test.mojaloop.live' diff --git a/mojaloop/Chart.yaml b/mojaloop/Chart.yaml index 49af7c3a2..033408fb7 100644 --- a/mojaloop/Chart.yaml +++ b/mojaloop/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 description: Mojaloop Helm chart for Kubernetes name: mojaloop version: 14.1.0 -appVersion: "ml-api-adapter: v14.0.0; central-ledger: v15.1.2.1; account-lookup-service: v13.0.0; quoting-service: v15.0.2; central-settlement: v15.0.0; central-event-processor: v12.0.0; bulk-api-adapter: v13.0.1; email-notifier: v12.0.0; als-oracle-pathfinder: v12.0.0; transaction-requests-service: v14.0.1; simulator: v12.0.0; mojaloop-simulator: v13.0.1; sdk-scheme-adapter: v18.0.2; thirdparty-sdk: v15.1.0; ml-testing-toolkit: v15.0.0; ml-testing-toolkit-ui: v15.0.1;" +appVersion: "ml-api-adapter: v14.0.0; central-ledger: v16.3.1; account-lookup-service: v13.0.0; quoting-service: v15.0.2; central-settlement: v15.0.0; central-event-processor: v12.0.0; bulk-api-adapter: v14.2.0; email-notifier: v12.0.0; als-oracle-pathfinder: v12.0.0; transaction-requests-service: v14.0.1; simulator: v12.0.0; mojaloop-simulator: v13.0.1; sdk-scheme-adapter: v21.4.0; thirdparty-sdk: v15.1.0; ml-testing-toolkit: v15.2.0; ml-testing-toolkit-ui: v15.0.1;" home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: @@ -51,7 +51,7 @@ dependencies: repository: "file://../emailnotifier" condition: emailnotifier.enabled - name: ml-testing-toolkit - version: 15.2.1 + version: 15.3.0 repository: "file://../ml-testing-toolkit" condition: ml-testing-toolkit.enabled - name: ml-testing-toolkit-cli @@ -98,6 +98,20 @@ dependencies: version: 2.1.0 repository: "file://../thirdparty" condition: thirdparty.enabled + - name: mojaloop-ttk-simulators + version: 1.0.0 + repository: "file://../mojaloop-ttk-simulators" + condition: mojaloop-ttk-simulators.enabled + - name: ml-testing-toolkit-cli + alias: ml-ttk-test-setup-sdk-bulk + version: 15.1.0 + repository: "file://../ml-testing-toolkit-cli" + condition: ml-ttk-test-setup-sdk-bulk.tests.enabled + - name: ml-testing-toolkit-cli + alias: ml-ttk-test-val-sdk-bulk + version: 15.1.0 + repository: "file://../ml-testing-toolkit-cli" + condition: ml-ttk-test-val-sdk-bulk.tests.enabled - name: common repository: https://docs.mojaloop.io/charts/repo version: 2.0.0 diff --git a/mojaloop/templates/NOTES.txt b/mojaloop/templates/NOTES.txt index 02974bbc3..4833dd7dd 100644 --- a/mojaloop/templates/NOTES.txt +++ b/mojaloop/templates/NOTES.txt @@ -2,10 +2,14 @@ Thank you for installing {{ .Chart.Name }}. Your release is named: {{ .Release.Name }}. -To learn more about Mojaloop: https://mojaloop.io/ -To learn more about Mojaloop deployments: https://docs.mojaloop.io/documentation/deployment-guide +Mojaloop Official Website: https://mojaloop.io + +To learn more about Mojaloop: https://docs.mojaloop.io +To learn more about Mojaloop deployments: https://docs.mojaloop.io/legacy/deployment-guide To learn more about this release: https://github.com/mojaloop/helm/releases/tag/v{{ .Chart.Version }} +This Helm chart lives @ http://github.com/mojaloop/helm + To learn more about this deployment, try: $ helm status {{ .Release.Name }} @@ -36,6 +40,14 @@ Use the following command to execute Test cases and print logs to console: $ helm -n {{ .Release.Namespace }} test {{ .Release.Name }} --logs +Use the following command to execute a specific Test case: + + $ helm -n {{ .Release.Namespace }} test {{ .Release.Name }} --filter "name={{ .Release.Name }}-,name={{ .Release.Name }}-" + +Use the following command to ignore a specific Test case: + + $ helm -n {{ .Release.Namespace }} test {{ .Release.Name }} --filter "!name={{ .Release.Name }}-" + View Test logs with the following commands: {{- if (index .Values "ml-ttk-test-setup" "tests" "enabled") }} @@ -50,6 +62,18 @@ View Test logs with the following commands: $ kubectl -n {{ .Release.Namespace }} logs pod/{{ .Release.Name }}-ml-ttk-test-val-bulk {{- end}} +{{- if (index .Values "ml-ttk-test-setup-sdk-bulk" "tests" "enabled") }} + $ kubectl -n {{ .Release.Namespace }} logs pod/{{ .Release.Name }}-ml-ttk-test-setup-sdk-bulk +{{- end}} + +{{- if (index .Values "ml-ttk-test-val-sdk-bulk" "tests" "enabled") }} + $ kubectl -n {{ .Release.Namespace }} logs pod/{{ .Release.Name }}-ml-ttk-test-val-sdk-bulk +{{- end}} + +{{- if (index .Values "ml-ttk-test-setup-tp" "tests" "enabled") }} + $ kubectl -n {{ .Release.Namespace }} logs pod/{{ .Release.Name }}-ml-ttk-test-setup-tp +{{- end}} + {{- if (index .Values "ml-ttk-test-val-tp" "tests" "enabled") }} $ kubectl -n {{ .Release.Namespace }} logs pod/{{ .Release.Name }}-ml-ttk-test-val-tp {{- end}} diff --git a/mojaloop/values.yaml b/mojaloop/values.yaml index 9dd5c7bb5..164890377 100644 --- a/mojaloop/values.yaml +++ b/mojaloop/values.yaml @@ -51,6 +51,13 @@ CONFIG: cep_mongo_password: &CEP_MONGO_PASSWORD password cep_mongo_database: &CEP_MONGO_DATABASE mlos + ## MOJALOOP-TTK-SIMULATORS Backend + moja_ttk_sim_kafka_host: &MOJA_TTK_SIM_KAFKA_HOST "{{ .Release.Name }}-kafka-headless" + moja_ttk_sim_kafka_port: &MOJA_TTK_SIM_KAFKA_PORT 9092 + # The Redis Instance can be installed using the following command: helm -n install backend ./example-mojaloop-backend --set "kafka.enabled=false" --set "centralledger-mysql.enabled=false" --set "account-lookup-mysql.enabled=false" --set "centralledger-obj.enabled=false" --set "cep-mongodb.enabled=false" --set "kafka-console.enabled=false" --set "ttksims-redis.enabled=true" + moja_ttk_sim_redis_host: &MOJA_TTK_SIM_REDIS_HOST backend-ttksims-redis-master + moja_ttk_sim_redis_port: &MOJA_TTK_SIM_REDIS_PORT 6379 + # Default values for central. # This is a YAML-formatted file. # Declare global configurations @@ -78,7 +85,7 @@ central: api: image: repository: mojaloop/central-ledger - tag: v15.1.2.1 + tag: v16.3.1 pullPolicy: IfNotPresent command: '["node", "src/api/index.js"]' service: @@ -291,7 +298,7 @@ central: api: image: repository: mojaloop/central-ledger - tag: v15.1.2.1 + tag: v16.3.1 pullPolicy: IfNotPresent command: '["node", "src/handlers/index.js", "handler", "--prepare"]' service: @@ -514,7 +521,7 @@ central: api: image: repository: mojaloop/central-ledger - tag: v15.1.2.1 + tag: v16.3.1 pullPolicy: IfNotPresent command: '["node", "src/handlers/index.js", "handler", "--admin"]' service: @@ -734,7 +741,7 @@ central: api: image: repository: mojaloop/central-ledger - tag: v15.1.2.1 + tag: v16.3.1 pullPolicy: IfNotPresent command: '["node", "src/handlers/index.js", "handler", "--position"]' service: @@ -954,7 +961,7 @@ central: api: image: repository: mojaloop/central-ledger - tag: v15.1.2.1 + tag: v16.3.1 pullPolicy: IfNotPresent command: '["node", "src/handlers/index.js", "handler", "--get"]' service: @@ -1174,7 +1181,7 @@ central: api: image: repository: mojaloop/central-ledger - tag: v15.1.2.1 + tag: v16.3.1 pullPolicy: IfNotPresent command: '["node", "src/handlers/index.js", "handler", "--fulfil"]' service: @@ -1394,7 +1401,7 @@ central: api: image: repository: mojaloop/central-ledger - tag: v15.1.2.1 + tag: v16.3.1 pullPolicy: IfNotPresent command: '["node", "src/handlers/index.js", "handler", "--timeout"]' service: @@ -6300,6 +6307,7 @@ mojaloop-simulator: ## Default FSPs for Mojaloop Postman Scripts payerfsp: ingress: + enabled: true hosts: - sim-payerfsp.local config: @@ -6348,6 +6356,7 @@ mojaloop-simulator: -----END PUBLIC KEY----- payeefsp: ingress: + enabled: true hosts: - sim-payeefsp.local config: @@ -6396,6 +6405,7 @@ mojaloop-simulator: -----END PUBLIC KEY----- testfsp1: ingress: + enabled: true hosts: - sim-testfsp1.local config: @@ -6444,6 +6454,7 @@ mojaloop-simulator: -----END PUBLIC KEY----- testfsp2: ingress: + enabled: true hosts: - sim-testfsp2.local config: @@ -6492,6 +6503,7 @@ mojaloop-simulator: -----END PUBLIC KEY----- testfsp3: ingress: + enabled: true hosts: - sim-testfsp3.local config: @@ -6540,6 +6552,7 @@ mojaloop-simulator: -----END PUBLIC KEY----- testfsp4: ingress: + enabled: true hosts: - sim-testfsp4.local config: @@ -6604,6 +6617,7 @@ mojaloop-simulator: failureThreshold: 3 ingress: + enabled: false # If you're using nginx ingress controller >= v0.22.0 set this to (/|$)(.*). Ensure that you set the `"nginx.ingress.kubernetes.io/rewrite-target": "/$2"` # If you're using nginx ingress controller < v0.22.0 set this to an empty string or "/". Ensure that you set the `"nginx.ingress.kubernetes.io/rewrite-target": "/"` # This affects the way your rewrite target will work. @@ -6708,8 +6722,9 @@ mojaloop-simulator: publicKey: '' image: repository: mojaloop/sdk-scheme-adapter - tag: v18.0.2 + tag: v21.4.0 pullPolicy: IfNotPresent + command: '[ "yarn", "start:api-svc" ]' <<: *defaultProbes # These will be supplied directly to the init containers array in the deployment for the @@ -6853,6 +6868,8 @@ mojaloop-simulator: RESERVE_NOTIFICATION: false RESOURCE_VERSIONS: transfers=1.1,quotes=1.1,participants=1.1,parties=1.1,transactionRequests=1.1 + ENABLE_FSPIOP_EVENT_HANDLER: false + ENABLE_BACKEND_EVENT_HANDLER: false backend: image: @@ -7071,6 +7088,155 @@ mojaloop-simulator: ## ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ tolerations: [] +mojaloop-ttk-simulators: + enabled: false + + mojaloop-ttk-sim1-svc: + enabled: true + sdk-scheme-adapter: &MOJA_TTK_SIM_SDK + sdk-scheme-adapter-api-svc: + kafka: + host: *MOJA_TTK_SIM_KAFKA_HOST + port: *MOJA_TTK_SIM_KAFKA_PORT + + redis: + host: *MOJA_TTK_SIM_REDIS_HOST + port: *MOJA_TTK_SIM_REDIS_PORT + + sdk-scheme-adapter-dom-evt-handler: + kafka: + host: *MOJA_TTK_SIM_KAFKA_HOST + port: *MOJA_TTK_SIM_KAFKA_PORT + + redis: + host: *MOJA_TTK_SIM_REDIS_HOST + port: *MOJA_TTK_SIM_REDIS_PORT + + sdk-scheme-adapter-cmd-evt-handler: + kafka: + host: *MOJA_TTK_SIM_KAFKA_HOST + port: *MOJA_TTK_SIM_KAFKA_PORT + + redis: + host: *MOJA_TTK_SIM_REDIS_HOST + port: *MOJA_TTK_SIM_REDIS_PORT + + ml-testing-toolkit: + ml-testing-toolkit-backend: + ingress: + enabled: true + hosts: + specApi: + host: 'ttksim1-specapi.local' + adminApi: + host: 'ttksim1.local' + + config: + ## TODO: Update the below line once the rules have been migrated to https://github.com/mojaloop/sdk-scheme-adapter + rules_response__default.json: 'https://github.com/mojaloop/testing-toolkit-test-cases/raw/v14.1.0/rules/sdk-bulk/response_rules.json' + # rules_response__default.json: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v21.4.0/test/func/config/ttk-ttksim1/spec_files/rules_response/default.json' + api_definitions__mojaloop_simulator_sim_1.4__api_spec.yaml: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v21.4.0/test/func/config/ttk-ttksim1/spec_files/api_definitions/mojaloop_simulator_sim_1.4/api_spec.yaml' + api_definitions__mojaloop_sdk_outbound_scheme_adapter_1.0__api_spec.yaml: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v21.4.0/test/func/config/ttk-ttksim1/spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml' + api_definitions__mojaloop_sdk_outbound_scheme_adapter_1.0__callback_map.json: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v21.4.0/test/func/config/ttk-ttksim1/spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json' + + extraEnvironments: + hub-k8s-default-environment.json: &ttksim1InputValues { + "inputValues": { + "TTKSIM1_FSPID": "ttksim1", + "TTKSIM1_MSISDN_1": "16135551212", + "TTKSIM1_MSISDN_1_FIRST_NAME": "ReceiverFirst", + "TTKSIM1_MSISDN_1_LAST_NAME": "ReceiverLast", + "TTKSIM1_CURRENCY": "TZS", + "TTKSIM2_FSPID": "ttksim2", + "TTKSIM2_MSISDN_1": "4561000001", + "TTKSIM2_MSISDN_1_FIRST_NAME": "ReceiverFirst", + "TTKSIM2_MSISDN_1_LAST_NAME": "ReceiverLast", + "TTKSIM2_MSISDN_2": "4561000002", + "TTKSIM2_MSISDN_2_FIRST_NAME": "ReceiverFirst", + "TTKSIM2_MSISDN_2_LAST_NAME": "ReceiverLast", + "TTKSIM2_PARTY_NOT_FOUND": "partynotfound", + "TTKSIM2_PARTY_TIMES_OUT": "partytimesout", + "TTKSIM2_CURRENCY": "TZS", + "TTKSIM3_FSPID": "ttksim3", + "TTKSIM3_MSISDN_1": "5671000001", + "TTKSIM3_MSISDN_1_FIRST_NAME": "ReceiverFirst", + "TTKSIM3_MSISDN_1_LAST_NAME": "ReceiverLast", + "TTKSIM3_MSISDN_2": "5671000002", + "TTKSIM3_MSISDN_2_FIRST_NAME": "ReceiverFirst", + "TTKSIM3_MSISDN_2_LAST_NAME": "ReceiverLast", + "TTKSIM3_CURRENCY": "TZS", + "TTKSIM2_MSISDN_PREFIX": "4561", + "TTKSIM3_MSISDN_PREFIX": "5671" + } + } + ml-testing-toolkit-frontend: + ingress: + enabled: true + hosts: + ui: + host: ttksim1.local + config: + API_BASE_URL: 'http://ttksim1.local' + + mojaloop-ttk-sim2-svc: + enabled: true + sdk-scheme-adapter: *MOJA_TTK_SIM_SDK + ml-testing-toolkit: + ml-testing-toolkit-backend: + ingress: + enabled: true + hosts: + specApi: + host: 'ttksim2-specapi.local' + adminApi: + host: 'ttksim2.local' + config: + ## TODO: Update the below line once the rules have been migrated to https://github.com/mojaloop/sdk-scheme-adapter + rules_response__default.json: 'https://github.com/mojaloop/testing-toolkit-test-cases/raw/v14.1.0/rules/sdk-bulk/response_rules.json' + # rules_response__default.json: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v21.4.0/test/func/config/ttk-ttksim2/spec_files/rules_response/default.json' + api_definitions__mojaloop_simulator_sim_1.4__api_spec.yaml: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v21.4.0/test/func/config/ttk-ttksim2/spec_files/api_definitions/mojaloop_simulator_sim_1.4/api_spec.yaml' + api_definitions__mojaloop_sdk_outbound_scheme_adapter_1.0__api_spec.yaml: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v21.4.0/test/func/config/ttk-ttksim2/spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml' + api_definitions__mojaloop_sdk_outbound_scheme_adapter_1.0__callback_map.json: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v21.4.0/test/func/config/ttk-ttksim2/spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json' + + ml-testing-toolkit-frontend: + ingress: + enabled: true + hosts: + ui: + host: 'ttksim2.local' + config: + API_BASE_URL: 'http://ttksim2.local' + + mojaloop-ttk-sim3-svc: + enabled: true + sdk-scheme-adapter: *MOJA_TTK_SIM_SDK + ml-testing-toolkit: + ml-testing-toolkit-backend: + ingress: + enabled: true + hosts: + specApi: + host: 'ttksim3-specapi.local' + adminApi: + host: 'ttksim3.local' + config: + ## TODO: Update the below line once the rules have been migrated to https://github.com/mojaloop/sdk-scheme-adapter + rules_response__default.json: 'https://github.com/mojaloop/testing-toolkit-test-cases/raw/v14.1.0/rules/sdk-bulk/response_rules.json' + # rules_response__default.json: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v21.4.0/test/func/config/ttk-ttksim3/spec_files/rules_response/default.json' + api_definitions__mojaloop_simulator_sim_1.4__api_spec.yaml: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v21.4.0/test/func/config/ttk-ttksim3/spec_files/api_definitions/mojaloop_simulator_sim_1.4/api_spec.yaml' + api_definitions__mojaloop_sdk_outbound_scheme_adapter_1.0__api_spec.yaml: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v21.4.0/test/func/config/ttk-ttksim3/spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml' + api_definitions__mojaloop_sdk_outbound_scheme_adapter_1.0__callback_map.json: 'https://github.com/mojaloop/sdk-scheme-adapter/raw/v21.4.0/test/func/config/ttk-ttksim3/spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json' + + ml-testing-toolkit-frontend: + ingress: + enabled: true + hosts: + ui: + host: 'ttksim3.local' + config: + API_BASE_URL: 'http://ttksim3.local' + + mojaloop-bulk: enabled: false @@ -7084,7 +7250,7 @@ mojaloop-bulk: replicaCount: 1 image: repository: mojaloop/bulk-api-adapter - tag: v14.0.0 + tag: v14.2.0 command: '["node", "src/api/index.js"]' ## Optionally specify an array of imagePullSecrets. ## Secrets must be manually created in the namespace. @@ -7246,7 +7412,7 @@ mojaloop-bulk: replicaCount: 1 image: repository: mojaloop/bulk-api-adapter - tag: v14.0.0 + tag: v14.2.0 command: '["node", "src/handlers/index.js", "handler", "--notification"]' ## Optionally specify an array of imagePullSecrets. ## Secrets must be manually created in the namespace. @@ -7412,7 +7578,7 @@ mojaloop-bulk: api: image: repository: mojaloop/central-ledger - tag: v15.1.2.1 + tag: v16.3.1 pullPolicy: IfNotPresent command: '["node", "src/handlers/index.js", "handler", "--bulkprepare"]' service: @@ -7610,7 +7776,7 @@ mojaloop-bulk: api: image: repository: mojaloop/central-ledger - tag: v15.1.2.1 + tag: v16.3.1 pullPolicy: IfNotPresent command: '["node", "src/handlers/index.js", "handler", "--bulkfulfil"]' service: @@ -7805,7 +7971,7 @@ mojaloop-bulk: api: image: repository: mojaloop/central-ledger - tag: v15.1.2.1 + tag: v16.3.1 pullPolicy: IfNotPresent command: '["node", "src/handlers/index.js", "handler", "--bulkprocessing"]' service: @@ -8000,7 +8166,7 @@ mojaloop-bulk: api: image: repository: mojaloop/central-ledger - tag: v15.1.2.1 + tag: v16.3.1 pullPolicy: IfNotPresent command: '["node", "src/handlers/index.js", "handler", "--bulkget"]' service: @@ -8281,477 +8447,258 @@ ml-testing-toolkit: simNameTestfsp3: 'testfsp3' simNameTestfsp4: 'testfsp4' simNameNoResponsePayeefsp: 'noresponsepayeefsp' + simNameTTKSim1: 'ttksim1' + simNameTTKSim2: 'ttksim2' + simNameTTKSim3: 'ttksim3' extraEnvironments: hub-k8s-default-environment.json: &ttkInputValues { - "inputValues": { - "BASE_CENTRAL_LEDGER_ADMIN": "", - "CALLBACK_ENDPOINT_BASE_URL": "http://$release_name-ml-testing-toolkit-backend:4040", - "ENABLE_JWS_SIGNING": true, - "ENABLE_JWS_VALIDATION": false, - "ENABLE_PROTECTED_HEADERS_VALIDATION": true, - "ENABLE_WS_ASSERTIONS": true, - "HOST_ACCOUNT_LOOKUP_ADMIN": "http://$release_name-account-lookup-service-admin", - "HOST_ACCOUNT_LOOKUP_SERVICE": "http://$release_name-account-lookup-service", - "HOST_ACCOUNT_LOOKUP_SERVICE_ADMIN": "http://$release_name-account-lookup-service-admin", - "HOST_BULK_ADAPTER": "http://$release_name-bulk-api-adapter-service", - "HOST_CENTRAL_LEDGER": "http://$release_name-centralledger-service", - "HOST_CENTRAL_SETTLEMENT": "http://$release_name-centralsettlement-service/v2", - "HOST_LEGACY_SIMULATOR": "http://$release_name-simulator", - "HOST_ML_API_ADAPTER": "http://$release_name-ml-api-adapter-service", - "HOST_QUOTING_SERVICE": "http://$release_name-quoting-service", - "HOST_SIMULATOR": "http://$release_name-simulator", - "HOST_TRANSACTION_REQUESTS_SERVICE": "http://$release_name-transaction-requests-service", - "HUB_OPERATOR_BEARER_TOKEN": "NOT_APPLICABLE", - "PAYEEFSP_BACKEND_TESTAPI_URL": "http://$release_name-sim-$param_simNamePayeefsp-backend:3003", - "PAYEEFSP_CALLBACK_URL": "http://$release_name-sim-$param_simNamePayeefsp-scheme-adapter:4000", - "PAYEEFSP_SDK_TESTAPI_URL": "http://$release_name-sim-$param_simNamePayeefsp-scheme-adapter:4002", - "PAYEEFSP_SDK_TESTAPI_WS_URL": "ws://$release_name-sim-$param_simNamePayeefsp-scheme-adapter:4002", - "PAYERFSP_BACKEND_TESTAPI_URL": "http://$release_name-sim-$param_simNamePayerfsp-backend:3003", - "PAYERFSP_CALLBACK_URL": "http://$release_name-sim-$param_simNamePayerfsp-scheme-adapter:4000", - "PAYERFSP_SDK_TESTAPI_URL": "http://$release_name-sim-$param_simNamePayerfsp-scheme-adapter:4002", - "PAYERFSP_SDK_TESTAPI_WS_URL": "ws://$release_name-sim-$param_simNamePayerfsp-scheme-adapter:4002", - "SIMPAYEE_CURRENCY": "USD", - "SIMPAYEE_JWS_PUB_KEY": "-----BEGIN PUBLIC KEY----- - MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzLtduponsAlAk+3+PQdE - sgjxRs5qhkrPa0z25NbHvgQYan4bH5GY+nEUX65YN65nusHtCG9gBeU0C56EgZQw - IpkHDTh166qQGPwdJf5oMlMJn79DSd1I2bghbsNx0a1P6ElH16AyEwvgYtdtMOBW - Ngf7z5/tYgv7bGgmsp3qGlf0nnaux/frJhJ0Hxpd6eUCafwdlrNwc9R6iCKMSxGj - vVTHgx0D7zSZ/+4PXq6gObyIZoC0uOsKKzlY3USx9khAh+96qfFoNKyfGHltpEPJ - LmOLh3BtzDuna2KwtNdVNGcjPdCle3b9mNIdhR5aZ/bP6Zm+t9JuRC6ZwU/6WEy3 - FwIDAQAB - -----END PUBLIC KEY----- - ", - "SIMPAYEE_MSISDN": "17039811902", - "SIMPAYEE_NAME": "$param_simNamePayeefsp", - "SIMPAYER_CURRENCY": "USD", - "SIMPAYER_MSISDN": "17039811901", - "SIMPAYER_NAME": "$param_simNamePayerfsp", - "TESTFSP1_BACKEND_TESTAPI_URL": "http://$release_name-sim-$param_simNameTestfsp1-backend:3003", - "TESTFSP1_CALLBACK_URL": "http://$release_name-sim-$param_simNameTestfsp1-scheme-adapter:4000", - "TESTFSP1_SDK_TESTAPI_URL": "http://$release_name-sim-$param_simNameTestfsp1-scheme-adapter:4002", - "TESTFSP1_SDK_TESTAPI_WS_URL": "ws://$release_name-sim-$param_simNameTestfsp1-scheme-adapter:4002", - "TESTFSP2_BACKEND_TESTAPI_URL": "http://$release_name-sim-$param_simNameTestfsp2-backend:3003", - "TESTFSP2_CALLBACK_URL": "http://$release_name-sim-$param_simNameTestfsp2-scheme-adapter:4000", - "TESTFSP2_SDK_TESTAPI_URL": "http://$release_name-sim-$param_simNameTestfsp2-scheme-adapter:4002", - "TESTFSP2_SDK_TESTAPI_WS_URL": "ws://$release_name-sim-$param_simNameTestfsp2-scheme-adapter:4002", - "TESTFSP3_BACKEND_TESTAPI_URL": "http://$release_name-sim-$param_simNameTestfsp3-backend:3003", - "TESTFSP3_CALLBACK_URL": "http://$release_name-sim-$param_simNameTestfsp3-scheme-adapter:4000", - "TESTFSP3_SDK_TESTAPI_URL": "http://$release_name-sim-$param_simNameTestfsp3-scheme-adapter:4002", - "TESTFSP3_SDK_TESTAPI_WS_URL": "ws://$release_name-sim-$param_simNameTestfsp3-scheme-adapter:4002", - "TESTFSP4_BACKEND_TESTAPI_URL": "http://$release_name-sim-$param_simNameTestfsp4-backend:3003", - "TESTFSP4_CALLBACK_URL": "http://$release_name-sim-$param_simNameTestfsp4-scheme-adapter:4000", - "TESTFSP4_SDK_TESTAPI_URL": "http://$release_name-sim-$param_simNameTestfsp4-scheme-adapter:4002", - "TESTFSP4_SDK_TESTAPI_WS_URL": "ws://$release_name-sim-$param_simNameTestfsp4-scheme-adapter:4002", - "TEST_NOTIFICATIONS": true, - "TTKFSP_JWS_KEY": "-----BEGIN PRIVATE KEY----- - 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 - DktFAP1w3ruycnE/t+/H8rDVJGPTHc8= - -----END PRIVATE KEY----- - ", - "WS_ASSERTION_TIMEOUT": 5000, - "accept": "application/vnd.interoperability.parties+json;version=1.1", - "acceptParties": "application/vnd.interoperability.parties+json;version=1.1", - "acceptPartiesOld": "application/vnd.interoperability.parties+json;version=1.0", - "acceptPartiesNotSupported": "application/vnd.interoperability.parties+json;version=2.0", - "acceptParticipants": "application/vnd.interoperability.participants+json;version=1.1", - "acceptParticipantsOld": "application/vnd.interoperability.participants+json;version=1.0", - "acceptParticipantsNotSupported": "application/vnd.interoperability.participants+json;version=2.0", - "acceptQuotes": "application/vnd.interoperability.quotes+json;version=1.1", - "acceptQuotesOld": "application/vnd.interoperability.quotes+json;version=1.0", - "acceptQuotesNotSupported": "application/vnd.interoperability.quotes+json;version=2.0", - "acceptTransfers": "application/vnd.interoperability.transfers+json;version=1.1", - "acceptTransfersOld": "application/vnd.interoperability.transfers+json;version=1.0", - "acceptTransfersNotSupported": "application/vnd.interoperability.transfers+json;version=2.0", - "acceptTransactionRequests": "application/vnd.interoperability.transactionRequests+json;version=1.1", - "acceptTransactionRequestsOld": "application/vnd.interoperability.transactionRequests+json;version=1.0", - "acceptTransactionRequestsNotSupported": "application/vnd.interoperability.transactionRequests+json;version=2.0", - "acceptAuthorizations": "application/vnd.interoperability.authorizations+json;version=1.1", - "acceptAuthorizationsOld": "application/vnd.interoperability.authorizations+json;version=1.0", - "acceptAuthorizationsNotSupported": "application/vnd.interoperability.authorizations+json;version=2.0", - "acceptBulkTransfers": "application/vnd.interoperability.bulkTransfers+json;version=1.1", - "acceptBulkTransfersOld": "application/vnd.interoperability.bulkTransfers+json;version=1.0", - "acceptBulkTransfersNotSupported": "application/vnd.interoperability.bulkTransfers+json;version=2.0", - "accountId": "6", - "amount": "100", - "batchToIdValue1": "27713803066", - "batchToIdValue2": "27713803067", - "condition": "n2cwS3w4ekGlvNYoXg2uBAqssu3FCoXjADE2mziU5jU", - "contentType": "application/vnd.interoperability.parties+json;version=1.1", - "contentTypeTransfers": "application/vnd.interoperability.transfers+json;version=1.1", - "contentTypeTransfersOld": "application/vnd.interoperability.transfers+json;version=1.0", - "contentTypeTransfersNotSupported": "application/vnd.interoperability.transfers+json;version=2.0", - "contentTypeParties": "application/vnd.interoperability.parties+json;version=1.1", - "contentTypePartiesOld": "application/vnd.interoperability.parties+json;version=1.0", - "contentTypePartiesNotSupported": "application/vnd.interoperability.parties+json;version=2.0", - "contentTypeParticipants": "application/vnd.interoperability.participants+json;version=1.1", - "contentTypeParticipantsOld": "application/vnd.interoperability.participants+json;version=1.0", - "contentTypeParticipantsNotSupported": "application/vnd.interoperability.participants+json;version=2.0", - "contentTypeQuotes": "application/vnd.interoperability.quotes+json;version=1.1", - "contentTypeQuotesOld": "application/vnd.interoperability.quotes+json;version=1.0", - "contentTypeQuotesNotSupported": "application/vnd.interoperability.quotes+json;version=2.0", - "contentTypeTransactionRequests": "application/vnd.interoperability.transactionRequests+json;version=1.1", - "contentTypeTransactionRequestsOld": "application/vnd.interoperability.transactionRequests+json;version=1.0", - "contentTypeTransactionRequestsNotSupported": "application/vnd.interoperability.transactionRequests+json;version=2.0", - "contentTypeAuthorizations": "application/vnd.interoperability.authorizations+json;version=1.1", - "contentTypeAuthorizationsOld": "application/vnd.interoperability.authorizations+json;version=1.0", - "contentTypeAuthorizationsNotSupported": "application/vnd.interoperability.authorizations+json;version=2.0", - "contentBulkTransfers": "application/vnd.interoperability.bulkTransfers+json;version=1.1", - "contentBulkTransfersOld": "application/vnd.interoperability.bulkTransfers+json;version=1.0", - "contentBulkTransfersNotSupported": "application/vnd.interoperability.bulkTransfers+json;version=2.0", - "currency": "USD", - "currency2": "TZS", - "fromDOB": "1984-01-01", - "fromFirstName": "Firstname-Test", - "fromFspId": "testingtoolkitdfsp", - "fromIdType": "MSISDN", - "fromIdValue": "44123456789", - "fromLastName": "Lastname-Test", - "fspiopSignature": "{\"signature\":\"iU4GBXSfY8twZMj1zXX1CTe3LDO8Zvgui53icrriBxCUF_wltQmnjgWLWI4ZUEueVeOeTbDPBZazpBWYvBYpl5WJSUoXi14nVlangcsmu2vYkQUPmHtjOW-yb2ng6_aPfwd7oHLWrWzcsjTF-S4dW7GZRPHEbY_qCOhEwmmMOnE1FWF1OLvP0dM0r4y7FlnrZNhmuVIFhk_pMbEC44rtQmMFv4pm4EVGqmIm3eyXz0GkX8q_O1kGBoyIeV_P6RRcZ0nL6YUVMhPFSLJo6CIhL2zPm54Qdl2nVzDFWn_shVyV0Cl5vpcMJxJ--O_Zcbmpv6lxqDdygTC782Ob3CNMvg\",\"protectedHeader\":\"eyJhbGciOiJSUzI1NiIsIkZTUElPUC1VUkkiOiIvdHJhbnNmZXJzIiwiRlNQSU9QLUhUVFAtTWV0aG9kIjoiUE9TVCIsIkZTUElPUC1Tb3VyY2UiOiJPTUwiLCJGU1BJT1AtRGVzdGluYXRpb24iOiJNVE5Nb2JpbGVNb25leSIsIkRhdGUiOiIifQ\"}", - "homeTransactionId": "123ABC", - "hubEmail": "some.email@gmail.com", - "hub_operator": "NOT_APPLICABLE", - "ilpPacket": "AYIDBQAAAAAAACcQJGcucGF5ZWVmc3AubXNpc2RuLnt7cmVjZWl2ZXJtc2lzZG59fYIC1GV5SjBjbUZ1YzJGamRHbHZia2xrSWpvaVptVXhNREU0Wm1NdE1EaGxZeTAwWWpJM0xUbGpZalF0TnpjMk9URTFNR00zT1dKaklpd2ljWFZ2ZEdWSlpDSTZJbVpsTVRBeE9HWmpMVEE0WldNdE5HSXlOeTA1WTJJMExUYzNOamt4TlRCak56bGlZeUlzSW5CaGVXVmxJanA3SW5CaGNuUjVTV1JKYm1adklqcDdJbkJoY25SNVNXUlVlWEJsSWpvaVRWTkpVMFJPSWl3aWNHRnlkSGxKWkdWdWRHbG1hV1Z5SWpvaWUzdHlaV05sYVhabGNrMVRTVk5FVG4xOUlpd2labk53U1dRaU9pSndZWGxsWldaemNDSjlmU3dpY0dGNVpYSWlPbnNpY0dGeWRIbEpaRWx1Wm04aU9uc2ljR0Z5ZEhsSlpGUjVjR1VpT2lKTlUwbFRSRTRpTENKd1lYSjBlVWxrWlc1MGFXWnBaWElpT2lJeU56Y3hNemd3TXprd05TSXNJbVp6Y0Vsa0lqb2ljR0Y1WlhKbWMzQWlmU3dpY0dWeWMyOXVZV3hKYm1adklqcDdJbU52YlhCc1pYaE9ZVzFsSWpwN0ltWnBjbk4wVG1GdFpTSTZJazFoZEhNaUxDSnNZWE4wVG1GdFpTSTZJa2hoWjIxaGJpSjlMQ0prWVhSbFQyWkNhWEowYUNJNklqRTVPRE10TVRBdE1qVWlmWDBzSW1GdGIzVnVkQ0k2ZXlKaGJXOTFiblFpT2lJeE1EQWlMQ0pqZFhKeVpXNWplU0k2SWxWVFJDSjlMQ0owY21GdWMyRmpkR2x2YmxSNWNHVWlPbnNpYzJObGJtRnlhVzhpT2lKVVVrRk9VMFpGVWlJc0ltbHVhWFJwWVhSdmNpSTZJbEJCV1VWU0lpd2lhVzVwZEdsaGRHOXlWSGx3WlNJNklrTlBUbE5WVFVWU0luMTkA", - "invalidFulfillment": "_3cco-YN5OGpRKVWV3n6x6uNpBTH9tYUdOYmHA-----", - "invalidToIdType": "ACCOUNT_ID", - "invalidToIdValue": "27713803099", - "note": "test", - "payeeIdType": "MSISDN", - "payeeIdentifier": "17039811902", - "payeefsp": "$param_simNamePayeefsp", - "payeefspEmail": "some.email@gmail.com", - "payerIdType": "MSISDN", - "payerIdentifier": "17039811901", - "payerfsp": "testingtoolkitdfsp", - "payerfspEmail": "some.email@gmail.com", - "receiverMSISDN": "27713803912", - "testfsp1Email": "some.email@gmail.com", - "testfsp1IdType": "MSISDN", - "testfsp1Identifier": "17039811903", - "testfsp1MSISDN": "17039811903", - "testfsp2Email": "some.email@gmail.com", - "testfsp2IdType": "MSISDN", - "testfsp2Identifier": "17039811904", - "testfsp2MSISDN": "17039811904", - "toFspId": "$param_simNamePayeefsp", - "toIdType": "MSISDN", - "toIdValue": "27713803912", - "toIdValueDelete": "27713803913", - "toAccentIdType": "MSISDN", - "toAccentIdValue": "97039819999", - "toAccentIdDOB": "2000-01-01", - "toAccentIdFirstName": "Seán", - "toAccentIdMiddleName": "François", - "toAccentIdLastName": "Nuñez", - "toAccentIdFspId": "$param_simNamePayeefsp", - "toBurmeseIdType": "MSISDN", - "toBurmeseIdValue": "2224448888", - "toBurmeseIdDOB": "1990-01-01", - "toBurmeseIdFirstName": "ကောင်းထက်စံ", - "toBurmeseIdMiddleName": "အောင်", - "toBurmeseIdLastName": "ဒေါ်သန္တာထွန်", - "toBurmeseIdFspId": "$param_simNamePayeefsp", - "validCondition": "GRzLaTP7DJ9t4P-a_BA0WA9wzzlsugf00-Tn6kESAfM", - "validCondition2": "kPLCKM62VY2jbekuw3apCTBg5zk_mVs9DD8-XpljQms", - "validFulfillment": "UNlJ98hZTY_dsw0cAqw4i_UN3v4utt7CZFB4yfLbVFA", - "validIlpPacket2": "AYIC9AAAAAAAABdwHWcucGF5ZWVmc3AubXNpc2RuLjIyNTU2OTk5MTI1ggLKZXlKMGNtRnVjMkZqZEdsdmJrbGtJam9pWmpRMFltUmtOV010WXpreE1DMDBZVGt3TFRoa05qa3RaR0ppWVRaaVl6aGxZVFpqSWl3aWNYVnZkR1ZKWkNJNklqVTBaRFZtTURsaUxXRTBOMlF0TkRCa05pMWhZVEEzTFdFNVkyWXpZbUl5TkRsaFpDSXNJbkJoZVdWbElqcDdJbkJoY25SNVNXUkpibVp2SWpwN0luQmhjblI1U1dSVWVYQmxJam9pVFZOSlUwUk9JaXdpY0dGeWRIbEpaR1Z1ZEdsbWFXVnlJam9pTWpJMU5UWTVPVGt4TWpVaUxDSm1jM0JKWkNJNkluQmhlV1ZsWm5Od0luMTlMQ0p3WVhsbGNpSTZleUp3WVhKMGVVbGtTVzVtYnlJNmV5SndZWEowZVVsa1ZIbHdaU0k2SWsxVFNWTkVUaUlzSW5CaGNuUjVTV1JsYm5ScFptbGxjaUk2SWpJeU5UQTNNREE0TVRneElpd2labk53U1dRaU9pSndZWGxsY21aemNDSjlMQ0p3WlhKemIyNWhiRWx1Wm04aU9uc2lZMjl0Y0d4bGVFNWhiV1VpT25zaVptbHljM1JPWVcxbElqb2lUV0YwY3lJc0lteGhjM1JPWVcxbElqb2lTR0ZuYldGdUluMHNJbVJoZEdWUFprSnBjblJvSWpvaU1UazRNeTB4TUMweU5TSjlmU3dpWVcxdmRXNTBJanA3SW1GdGIzVnVkQ0k2SWpZd0lpd2lZM1Z5Y21WdVkza2lPaUpWVTBRaWZTd2lkSEpoYm5OaFkzUnBiMjVVZVhCbElqcDdJbk5qWlc1aGNtbHZJam9pVkZKQlRsTkdSVklpTENKcGJtbDBhV0YwYjNJaU9pSlFRVmxGVWlJc0ltbHVhWFJwWVhSdmNsUjVjR1VpT2lKRFQwNVRWVTFGVWlKOWZRAA", - "NORESPONSE_SIMPAYEE_NAME": "$param_simNameNoResponsePayeefsp", - "SIM1_NAME": "$param_simNameTestfsp1", - "SIM2_NAME": "$param_simNameTestfsp2", - "SIM3_NAME": "$param_simNameTestfsp3", - "SIM4_NAME": "$param_simNameTestfsp4", - "SIM1_MSISDN": "17039811903", - "SIM2_MSISDN": "17039811904", - "SIM3_MSISDN": "17891239873", - "SIM4_MSISDN": "17891239872", - "SIM1_JWS_KEY": "-----BEGIN PRIVATE KEY----- - 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 - DgoQeSng2kt5Z6mkoDIQTs7nEflb4w== - -----END PRIVATE KEY----- - ", - "SIM2_JWS_KEY": "-----BEGIN PRIVATE KEY----- - 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 - Tv4G862WYeqD1fdyZaKQ3b9fAQEq1g== - -----END PRIVATE KEY----- - ", - "SIMPAYEE_JWS_PRIVATE_KEY": "-----BEGIN PRIVATE KEY----- - MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDMu126miewCUCT - 7f49B0SyCPFGzmqGSs9rTPbk1se+BBhqfhsfkZj6cRRfrlg3rme6we0Ib2AF5TQL - noSBlDAimQcNOHXrqpAY/B0l/mgyUwmfv0NJ3UjZuCFuw3HRrU/oSUfXoDITC+Bi - 120w4FY2B/vPn+1iC/tsaCayneoaV/Sedq7H9+smEnQfGl3p5QJp/B2Ws3Bz1HqI - IoxLEaO9VMeDHQPvNJn/7g9erqA5vIhmgLS46worOVjdRLH2SECH73qp8Wg0rJ8Y - eW2kQ8kuY4uHcG3MO6drYrC011U0ZyM90KV7dv2Y0h2FHlpn9s/pmb630m5ELpnB - T/pYTLcXAgMBAAECggEADqk6Qz3SgBeMMYEWYZ4ZdsW6Ktpm+Xqg/kDy4JywOB9z - SikBXeeKH3Z6ltwq2BicDV020Wb8Zt+s3vTOmLhDzC544/hPmtKfjWfR2eHX6gaq - m+8ml+20pQFmb4Kn2MlC/Xzwm/SOXBvPyUmTua95rQExsK12DT0+F4YhLfhYsTh2 - HfkEzdFW4rrd+9ddKG1ZANS4ZaiMyzhtvUWeEBypBtVf+kBk+51t9pLCdjuynb8I - WylSDhikT3/YQ/3g/Sz3SMp1u4x0GQe9FWYrnPzzp5LnM5fm49v8JWVHUvd0TOi0 - dQV+LYlgSD38YPpi4iKQSh0Zf0EBfbA83GsX2ArJ7QKBgQDmvcA6PqPo0OV/7RKY - JuziA3TpucL8iVM1i7/Lv6+VkX88uDvEjwLoNAiYcgIm/CMK7WAwA+Dzn4r38EHB - BKF4KRhP0qQS0KLXsd0tdsmAB0In7+cbKL4ttqNUP98xZAkTLJq9PXqTKN0qtyw4 - SfIsVMjDGoeSdWHObZYbGKICfQKBgQDjJLwolDrVX29V4zVmxQYH5iN+5kwKXHXj - suHBrW02Oj/GQFh3Xj6JQi3mzTWYhHwhA4pdaQtNYqTaz9Ic/O1VNPic2ovtg+cd - 7sh86qdQ4QZYhN3RT4oX///u6+UK90llh9hEBo3GuZ4X47tuByNtD4SFAlULrkSm - fW4XaC3gIwKBgGil6HfCDx65F00UnVlKVicPQEf8ivVz5rwjPIJQ1nZ0PYuxVtIH - tl7PspJJKra5pb7/957vM2fqlOFsIrZCvmS75p3VP7qUyzYeIdzLwgmBwTxRrrP/ - n3kmGx9LtJM29nKuySNIrb3uS5hi6PhCeUYn0cHC13fSKuCvjOOPIXMVAoGBAJg+ - CPdR0tUs8Byq+yH0sIQe1m+5wAG50zJYtUPxD6AnDpO8kQ8A1f19o/JsXJ3rPp+K - FfVh8LdfhIs8e+H+DLztkizftqXtoLzJTQuc46QsDurJszsVisNnTI1BAvWEpWct - 0+BUXDZ0NuhgNUIb+rygh/v2gjYgCddlfqKlqwntAoGBAM5Kpp5R0G0ioAuqGqfZ - sHEdLqJMSepgc6c7RC+3G/svtS2IqCfyNfVMM3qV5MY3J7KnAVjGOw2oJbXcPLXa - uutsVVmPx2d/x2LZdc8dYYcdOQZvrUhmALhAPXM4SRujakxh+Uxi1VOiW+fZL8aW - uu1pxuWD0gTJxFkp6u4YIAhw - -----END PRIVATE KEY----- - ", - "SIMPAYER_JWS_PRIVATE_KEY": "-----BEGIN PRIVATE KEY----- - MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCg9eU66hg4ZAE6 - jM4U8ylXQwUz9cdmzS3JyW+1bbgv77peMKSU/wFsi4QRwmbrYze9baFnGCKnS75E - vCchib5vJxp3MDWzi/TGxmzgWdJRzkyCiI5C6dCgVL71MjsFgN3TN63wEf5sEU2I - eoJ8yXJM0pUG9f9NO7p/IGliDmt6C7EA7D9kQWigufmX0ZTVNKI07fKwC/AEKLp7 - kx99pvsCq8m184EEL15Q/NhA7R/5zKoHvmJa6Jd7tM0i0xn8IKOkNVFu3YIafAEC - QWQwRbanFEeRc3tH3bEoYM8c74r+W+YxCG7nUf16XCk132XVffbHVl+wFgo18YB/ - sAJmcbePAgMBAAECggEAGQGKnsf+gkg7DqMQYx3Rxt5BISzmURjAK9CxG6ETk9Lt - A7QP5ZvmVzwnhPDMN3Z/Et1EzXTo8U+pnBkVBTdWkAMlr+2b8ixklzr9cC9UJuRj - a4YWf9u+TyJLVmF63OSD0cwdKCZLffOENZc+zW8oZDn08BNomdGVLCnXZWXzGY8X - KaJTJr29jEgkKOqFXdAHrsmj7TBtqSLZKx2IHdCmi05+5JCxVLPgnDiCicZ9zEii - yWw57Q1migFIcw6ZQP4RyjgH1o70B+zo3OL7IQEirE17GUgK16XD8xi8hWCYTj5n - xOz9yfVfPuYom/9Xbm5kYJZKE2HOZ3Lg8pUnWncuNQKBgQDbaOoACQPhVxQK1qYR - RbW0I5Rn0EDxzsFPEpu3eXHoIYGXi8u/ew9AzFmGu+tKYJV5V4BCXo5x2ddE+B8B - dXhyHLGfeV8tWKYKBpatolVxxKDL/9fnxoGIAO9cc91ieOm5JxmKscCVP1UnOXHZ - uomSfAbGQwYDtMd2bJKkE1z0qwKBgQC7zacuv1PMaDFksHuNNRG+aZ74pJ77msht - vJoKyaQcktD0xmIXhFfJvK4cclzG7s5jxCsu2ejimgmfVzgXlLEMrJFvSdFkD2SS - gGqoxq5c9g8ssvt7xwr7aJ+VYYWTWRzJrOUny+99UbwHedu0EHL1BYILwy67Lium - sgUeeCEgrQKBgGv+7f7qcRB/jgvvr3oc990dDjUzGmRrQlcrb54Vlu2NYH45fyZW - 6iEY9JAO+zd25tv9J9KDPFXpxb3a61gKfCie2wcF9MUbN08EAzKgDrKa+BKxcZJR - 8PwCic7V8QhBP7m09yt/Zq2PqNhPvCxRVtnVVnhMES/N0cgGlP9R0JVVAoGAHU2/ - kmnEN5bibiWjgasQM7fjWETHkdbbA1R0bM59zv+Rnz/9OlIqKI5KVKH7nAbTKXoI - iuzxi7ohWj2PwQ4wehvLLaRFCenk9X8YJXGq71Jtl7ntx6iNLCFtFS/8WbuD5GwX - 7ZfCrLk+L6RyBayzY0wSuKch+Y8AvKf2aISyFpkCgYEAjSfEjz9Cn+27HdiMoBwa - +fyyoosci/6OBxj/WTKvV6KUYLBfFoAYpb9rqrbvnfyyc0UiAYQeMJAOWQ1kkzY4 - zXs63iPQi2UeGPJZ7RsT+31DSaG9YiQdrInsUrlm8hi1C7Pg/NNt6Y1G0WhWYrvF - iNK0yCENMhSoOTtbT9tmGi0= - -----END PRIVATE KEY----- - ", - "TESTFSP1_JWS_PUB_KEY": "-----BEGIN PUBLIC KEY----- - MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2R3IuEDpqDtsS96emI0v - dCJpeb/lnCxR2Nw5x6Z3GjC9PRFCJ2gsS2Zq70NaUQ5yWrrrZ9DZ8PjgCXqftUKG - 42uFsibLFpN09IjQuZCDuAkCdEjMgm+xies47ajRzl6evOc0ClkQBZVGybl9RAr6 - NRTFOYkYjJ0xS0MNkfRkDiOEu5BA/XKb5oLbyVMjGyvLgyS1g41x4fA+Ccb5PENa - h9dqkFJ3j218Rs+bGytrVqrrCCjV1FiI+Y9YjKuTRRo7U/jcGHLfEc7YRcP2U9os - xQxFvhHxR7W0e74fAU8B8YIJzwjaQvrEh9SJRc2IZsh6EdBAXXmbk4sHKyhoX0by - UQIDAQAB - -----END PUBLIC KEY----- - ", - "TESTFSP2_JWS_PUB_KEY": "-----BEGIN PUBLIC KEY----- - MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv7k0Mqy0jSXFpHD9/a+Y - l5djXq6HdyC+BsSA/sRKczEBKQyW8mEJVILAKkOibWzK7e+SJjQPbFjgqiUZvRI5 - +ggHkSJXEV28Bi2sF58A15sQjwaSkE2vBwLAL5GftSmao0QSozSfQ+RFw2N+loRG - YedXZpRMsYFr1uA1qavcBjoj7JqPpID7UaTgXwwHWbV+j2uhQfotqRvOQ5KTmx5H - Ja+VjPu+xAC7mmcL+dxmeBpbJJD5Li8B8ggJXGJUk+En6XSIgZkQ6vKvC9HyasE6 - WZLXU+JJoCp2wkCPNTRxzPE2PGnlI0a4ZP2/y/2yacc4HQGBhEMc+SVT/VSZaMS+ - AQIDAQAB - -----END PUBLIC KEY----- - ", - "payerfspSettlementAccountId": "", - "payerfspSettlementAccountBalanceBeforeFundsIn": "", - "payerfspSettlementAccountBalanceAfterFundsIn": "", - "fundsInPrepareTransferId": "", - "fundsInPrepareAmount": "", - "SIMPLE_ROUTING_MODE_ENABLED": true, - "mobileSimPayerFsp": "pinkbankfsp", - "mobileSimPayeeFsp": "greenbankfsp", - "ON_US_TRANSFERS_ENABLED": false, - "expectedPartiesVersion": "1.1", - "expectedParticipantsVersion": "1.1", - "expectedQuotesVersion": "1.1", - "expectedTransfersVersion": "1.1", - "expectedAuthorizationsVersion": "1.1", - "expectedTransactionRequestsVersion": "1.1", - "toSubIdValue": "30", - "fromSubIdValue": "30", - "cgscurrency": "INR", - "settlementtestfsp2bankMSISDN": "27713813915", - "settlementtestfsp1bankMSISDN": "27713813914", - "settlementtestfsp4bankMSISDN": "27713813917", - "settlementtestfsp3bankMSISDN": "27713813916", - "DELAY_CGS": 5000, - "settlementpayeefspNoExtensionMSISDN": "27714923918", - "NORESPONSE_NAME": "$param_simNameNoResponsePayeefsp", - "payeefspMSISDN": "17039811907", - "payerfspMSISDN": "17891239876", - "settlementtestNonExistingMSISDN": "22244803917", - "NET_DEBIT_CAP": "50000", - "HOST_ORACLE_CONSENT": "http://consent-oracle:3000", - "DFSPA_NAME": "dfspa", - "DFSPA_CB_FSPIOP": "http://$release_name-sim-tp-dfspa-scheme-adapter:4000", - "DFSPA_CB_THIRDPARTY": "http://$release_name-sim-tp-dfspa-thirdparty-sdk:4005", - "DFSPB_NAME": "dfspb", - "DFSPB_CB_FSPIOP": "http://$release_name-sim-tp-dfspb-scheme-adapter:4000", - "DFSPB_CB_THIRDPARTY": "http://$release_name-sim-tp-dfspb-thirdparty-sdk:4005", - "PISP_NAME": "pisp", - "PISP_CB_FSPIOP": "http://$release_name-sim-tp-pisp-scheme-adapter:4000", - "PISP_CB_THIRDPARTY": "http://$release_name-sim-tp-pisp-thirdparty-sdk:4005", - "CENTRALAUTH_NAME": "centralauth", - "CENTRALAUTH_CB_FSPIOP": "http://auth-svc:4004", - "PISP_THIRDPARTY_SDK_OUTBOUND_URL": "http://$release_name-sim-tp-pisp-thirdparty-sdk:4006", - "PISP_BACKEND_TESTAPI_URL": "http://$release_name-sim-tp-pisp-backend:3003", - "PISP_CALLBACK_URL": "http://$release_name-sim-tp-pisp-scheme-adapter:4000", - "PISP_SDK_TESTAPI_URL": "http://$release_name-sim-tp-pisp-scheme-adapter:4002", - "PISP_SDK_TESTAPI_WS_URL": "ws://$release_name-sim-tp-pisp-scheme-adapter:4002", - "DFSPA_BACKEND_TESTAPI_URL": "http://$release_name-sim-tp-dfspa-backend:3003", - "DFSPA_CALLBACK_URL": "http://$release_name-sim-tp-dfspa-scheme-adapter:4000", - "DFSPA_SDK_TESTAPI_URL": "http://$release_name-sim-tp-dfspa-scheme-adapter:4002", - "DFSPA_SDK_TESTAPI_WS_URL": "ws://$release_name-sim-tp-dfspa-scheme-adapter:4002", - "DFSPB_BACKEND_TESTAPI_URL": "http://$release_name-sim-tp-dfspb-backend:3003", - "DFSPB_CALLBACK_URL": "http://$release_name-sim-tp-dfspb-scheme-adapter:4000", - "DFSPB_SDK_TESTAPI_URL": "http://$release_name-sim-tp-dfspb-scheme-adapter:4002", - "DFSPB_SDK_TESTAPI_WS_URL": "ws://$release_name-sim-tp-dfspb-scheme-adapter:4002" - } - } + "inputValues": { + "BASE_CENTRAL_LEDGER_ADMIN": "", + "CALLBACK_ENDPOINT_BASE_URL": "http://$release_name-ml-testing-toolkit-backend:4040", + "ENABLE_JWS_SIGNING": true, + "ENABLE_JWS_VALIDATION": false, + "ENABLE_PROTECTED_HEADERS_VALIDATION": true, + "ENABLE_WS_ASSERTIONS": true, + "HOST_ACCOUNT_LOOKUP_ADMIN": "http://$release_name-account-lookup-service-admin", + "HOST_ACCOUNT_LOOKUP_SERVICE": "http://$release_name-account-lookup-service", + "HOST_ACCOUNT_LOOKUP_SERVICE_ADMIN": "http://$release_name-account-lookup-service-admin", + "HOST_BULK_ADAPTER": "http://$release_name-bulk-api-adapter-service", + "HOST_CENTRAL_LEDGER": "http://$release_name-centralledger-service", + "HOST_CENTRAL_SETTLEMENT": "http://$release_name-centralsettlement-service/v2", + "HOST_LEGACY_SIMULATOR": "http://$release_name-simulator", + "HOST_ML_API_ADAPTER": "http://$release_name-ml-api-adapter-service", + "HOST_QUOTING_SERVICE": "http://$release_name-quoting-service", + "HOST_SIMULATOR": "http://$release_name-simulator", + "HOST_TRANSACTION_REQUESTS_SERVICE": "http://$release_name-transaction-requests-service", + "HUB_OPERATOR_BEARER_TOKEN": "NOT_APPLICABLE", + "PAYEEFSP_BACKEND_TESTAPI_URL": "http://$release_name-sim-$param_simNamePayeefsp-backend:3003", + "PAYEEFSP_CALLBACK_URL": "http://$release_name-sim-$param_simNamePayeefsp-scheme-adapter:4000", + "PAYEEFSP_SDK_TESTAPI_URL": "http://$release_name-sim-$param_simNamePayeefsp-scheme-adapter:4002", + "PAYEEFSP_SDK_TESTAPI_WS_URL": "ws://$release_name-sim-$param_simNamePayeefsp-scheme-adapter:4002", + "PAYERFSP_BACKEND_TESTAPI_URL": "http://$release_name-sim-$param_simNamePayerfsp-backend:3003", + "PAYERFSP_CALLBACK_URL": "http://$release_name-sim-$param_simNamePayerfsp-scheme-adapter:4000", + "PAYERFSP_SDK_TESTAPI_URL": "http://$release_name-sim-$param_simNamePayerfsp-scheme-adapter:4002", + "PAYERFSP_SDK_TESTAPI_WS_URL": "ws://$release_name-sim-$param_simNamePayerfsp-scheme-adapter:4002", + "SIMPAYEE_CURRENCY": "USD", + "SIMPAYEE_JWS_PUB_KEY": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzLtduponsAlAk+3+PQdE\nsgjxRs5qhkrPa0z25NbHvgQYan4bH5GY+nEUX65YN65nusHtCG9gBeU0C56EgZQw\nIpkHDTh166qQGPwdJf5oMlMJn79DSd1I2bghbsNx0a1P6ElH16AyEwvgYtdtMOBW\nNgf7z5/tYgv7bGgmsp3qGlf0nnaux/frJhJ0Hxpd6eUCafwdlrNwc9R6iCKMSxGj\nvVTHgx0D7zSZ/+4PXq6gObyIZoC0uOsKKzlY3USx9khAh+96qfFoNKyfGHltpEPJ\nLmOLh3BtzDuna2KwtNdVNGcjPdCle3b9mNIdhR5aZ/bP6Zm+t9JuRC6ZwU/6WEy3\nFwIDAQAB\n-----END PUBLIC KEY-----\n", + "SIMPAYEE_MSISDN": "17039811902", + "SIMPAYEE_NAME": "$param_simNamePayeefsp", + "SIMPAYER_CURRENCY": "USD", + "SIMPAYER_MSISDN": "17039811901", + "SIMPAYER_NAME": "$param_simNamePayerfsp", + "TESTFSP1_BACKEND_TESTAPI_URL": "http://$release_name-sim-$param_simNameTestfsp1-backend:3003", + "TESTFSP1_CALLBACK_URL": "http://$release_name-sim-$param_simNameTestfsp1-scheme-adapter:4000", + "TESTFSP1_SDK_TESTAPI_URL": "http://$release_name-sim-$param_simNameTestfsp1-scheme-adapter:4002", + "TESTFSP1_SDK_TESTAPI_WS_URL": "ws://$release_name-sim-$param_simNameTestfsp1-scheme-adapter:4002", + "TESTFSP2_BACKEND_TESTAPI_URL": "http://$release_name-sim-$param_simNameTestfsp2-backend:3003", + "TESTFSP2_CALLBACK_URL": "http://$release_name-sim-$param_simNameTestfsp2-scheme-adapter:4000", + "TESTFSP2_SDK_TESTAPI_URL": "http://$release_name-sim-$param_simNameTestfsp2-scheme-adapter:4002", + "TESTFSP2_SDK_TESTAPI_WS_URL": "ws://$release_name-sim-$param_simNameTestfsp2-scheme-adapter:4002", + "TESTFSP3_BACKEND_TESTAPI_URL": "http://$release_name-sim-$param_simNameTestfsp3-backend:3003", + "TESTFSP3_CALLBACK_URL": "http://$release_name-sim-$param_simNameTestfsp3-scheme-adapter:4000", + "TESTFSP3_SDK_TESTAPI_URL": "http://$release_name-sim-$param_simNameTestfsp3-scheme-adapter:4002", + "TESTFSP3_SDK_TESTAPI_WS_URL": "ws://$release_name-sim-$param_simNameTestfsp3-scheme-adapter:4002", + "TESTFSP4_BACKEND_TESTAPI_URL": "http://$release_name-sim-$param_simNameTestfsp4-backend:3003", + "TESTFSP4_CALLBACK_URL": "http://$release_name-sim-$param_simNameTestfsp4-scheme-adapter:4000", + "TESTFSP4_SDK_TESTAPI_URL": "http://$release_name-sim-$param_simNameTestfsp4-scheme-adapter:4002", + "TESTFSP4_SDK_TESTAPI_WS_URL": "ws://$release_name-sim-$param_simNameTestfsp4-scheme-adapter:4002", + "TEST_NOTIFICATIONS": true, + "TTKFSP_JWS_KEY": "-----BEGIN PRIVATE KEY-----\n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\nDktFAP1w3ruycnE/t+/H8rDVJGPTHc8=\n-----END PRIVATE KEY-----\n", + "WS_ASSERTION_TIMEOUT": 5000, + "accept": "application/vnd.interoperability.parties+json;version=1.1", + "acceptParties": "application/vnd.interoperability.parties+json;version=1.1", + "acceptPartiesOld": "application/vnd.interoperability.parties+json;version=1.0", + "acceptPartiesNotSupported": "application/vnd.interoperability.parties+json;version=2.0", + "acceptParticipants": "application/vnd.interoperability.participants+json;version=1.1", + "acceptParticipantsOld": "application/vnd.interoperability.participants+json;version=1.0", + "acceptParticipantsNotSupported": "application/vnd.interoperability.participants+json;version=2.0", + "acceptQuotes": "application/vnd.interoperability.quotes+json;version=1.1", + "acceptQuotesOld": "application/vnd.interoperability.quotes+json;version=1.0", + "acceptQuotesNotSupported": "application/vnd.interoperability.quotes+json;version=2.0", + "acceptTransfers": "application/vnd.interoperability.transfers+json;version=1.1", + "acceptTransfersOld": "application/vnd.interoperability.transfers+json;version=1.0", + "acceptTransfersNotSupported": "application/vnd.interoperability.transfers+json;version=2.0", + "acceptTransactionRequests": "application/vnd.interoperability.transactionRequests+json;version=1.1", + "acceptTransactionRequestsOld": "application/vnd.interoperability.transactionRequests+json;version=1.0", + "acceptTransactionRequestsNotSupported": "application/vnd.interoperability.transactionRequests+json;version=2.0", + "acceptAuthorizations": "application/vnd.interoperability.authorizations+json;version=1.1", + "acceptAuthorizationsOld": "application/vnd.interoperability.authorizations+json;version=1.0", + "acceptAuthorizationsNotSupported": "application/vnd.interoperability.authorizations+json;version=2.0", + "acceptBulkTransfers": "application/vnd.interoperability.bulkTransfers+json;version=1.1", + "acceptBulkTransfersOld": "application/vnd.interoperability.bulkTransfers+json;version=1.0", + "acceptBulkTransfersNotSupported": "application/vnd.interoperability.bulkTransfers+json;version=2.0", + "accountId": "6", + "amount": "100", + "batchToIdValue1": "27713803066", + "batchToIdValue2": "27713803067", + "condition": "n2cwS3w4ekGlvNYoXg2uBAqssu3FCoXjADE2mziU5jU", + "contentType": "application/vnd.interoperability.parties+json;version=1.1", + "contentTypeTransfers": "application/vnd.interoperability.transfers+json;version=1.1", + "contentTypeTransfersOld": "application/vnd.interoperability.transfers+json;version=1.0", + "contentTypeTransfersNotSupported": "application/vnd.interoperability.transfers+json;version=2.0", + "contentTypeParties": "application/vnd.interoperability.parties+json;version=1.1", + "contentTypePartiesOld": "application/vnd.interoperability.parties+json;version=1.0", + "contentTypePartiesNotSupported": "application/vnd.interoperability.parties+json;version=2.0", + "contentTypeParticipants": "application/vnd.interoperability.participants+json;version=1.1", + "contentTypeParticipantsOld": "application/vnd.interoperability.participants+json;version=1.0", + "contentTypeParticipantsNotSupported": "application/vnd.interoperability.participants+json;version=2.0", + "contentTypeQuotes": "application/vnd.interoperability.quotes+json;version=1.1", + "contentTypeQuotesOld": "application/vnd.interoperability.quotes+json;version=1.0", + "contentTypeQuotesNotSupported": "application/vnd.interoperability.quotes+json;version=2.0", + "contentTypeTransactionRequests": "application/vnd.interoperability.transactionRequests+json;version=1.1", + "contentTypeTransactionRequestsOld": "application/vnd.interoperability.transactionRequests+json;version=1.0", + "contentTypeTransactionRequestsNotSupported": "application/vnd.interoperability.transactionRequests+json;version=2.0", + "contentTypeAuthorizations": "application/vnd.interoperability.authorizations+json;version=1.1", + "contentTypeAuthorizationsOld": "application/vnd.interoperability.authorizations+json;version=1.0", + "contentTypeAuthorizationsNotSupported": "application/vnd.interoperability.authorizations+json;version=2.0", + "contentBulkTransfers": "application/vnd.interoperability.bulkTransfers+json;version=1.1", + "contentBulkTransfersOld": "application/vnd.interoperability.bulkTransfers+json;version=1.0", + "contentBulkTransfersNotSupported": "application/vnd.interoperability.bulkTransfers+json;version=2.0", + "currency": "USD", + "currency2": "TZS", + "fromDOB": "1984-01-01", + "fromFirstName": "Firstname-Test", + "fromFspId": "testingtoolkitdfsp", + "fromIdType": "MSISDN", + "fromIdValue": "44123456789", + "fromLastName": "Lastname-Test", + "fspiopSignature": "{\"signature\":\"iU4GBXSfY8twZMj1zXX1CTe3LDO8Zvgui53icrriBxCUF_wltQmnjgWLWI4ZUEueVeOeTbDPBZazpBWYvBYpl5WJSUoXi14nVlangcsmu2vYkQUPmHtjOW-yb2ng6_aPfwd7oHLWrWzcsjTF-S4dW7GZRPHEbY_qCOhEwmmMOnE1FWF1OLvP0dM0r4y7FlnrZNhmuVIFhk_pMbEC44rtQmMFv4pm4EVGqmIm3eyXz0GkX8q_O1kGBoyIeV_P6RRcZ0nL6YUVMhPFSLJo6CIhL2zPm54Qdl2nVzDFWn_shVyV0Cl5vpcMJxJ--O_Zcbmpv6lxqDdygTC782Ob3CNMvg\\\",\\\"protectedHeader\\\":\\\"eyJhbGciOiJSUzI1NiIsIkZTUElPUC1VUkkiOiIvdHJhbnNmZXJzIiwiRlNQSU9QLUhUVFAtTWV0aG9kIjoiUE9TVCIsIkZTUElPUC1Tb3VyY2UiOiJPTUwiLCJGU1BJT1AtRGVzdGluYXRpb24iOiJNVE5Nb2JpbGVNb25leSIsIkRhdGUiOiIifQ\"}", + "homeTransactionId": "123ABC", + "hubEmail": "some.email@gmail.com", + "hub_operator": "NOT_APPLICABLE", + "ilpPacket": "AYIDBQAAAAAAACcQJGcucGF5ZWVmc3AubXNpc2RuLnt7cmVjZWl2ZXJtc2lzZG59fYIC1GV5SjBjbUZ1YzJGamRHbHZia2xrSWpvaVptVXhNREU0Wm1NdE1EaGxZeTAwWWpJM0xUbGpZalF0TnpjMk9URTFNR00zT1dKaklpd2ljWFZ2ZEdWSlpDSTZJbVpsTVRBeE9HWmpMVEE0WldNdE5HSXlOeTA1WTJJMExUYzNOamt4TlRCak56bGlZeUlzSW5CaGVXVmxJanA3SW5CaGNuUjVTV1JKYm1adklqcDdJbkJoY25SNVNXUlVlWEJsSWpvaVRWTkpVMFJPSWl3aWNHRnlkSGxKWkdWdWRHbG1hV1Z5SWpvaWUzdHlaV05sYVhabGNrMVRTVk5FVG4xOUlpd2labk53U1dRaU9pSndZWGxsWldaemNDSjlmU3dpY0dGNVpYSWlPbnNpY0dGeWRIbEpaRWx1Wm04aU9uc2ljR0Z5ZEhsSlpGUjVjR1VpT2lKTlUwbFRSRTRpTENKd1lYSjBlVWxrWlc1MGFXWnBaWElpT2lJeU56Y3hNemd3TXprd05TSXNJbVp6Y0Vsa0lqb2ljR0Y1WlhKbWMzQWlmU3dpY0dWeWMyOXVZV3hKYm1adklqcDdJbU52YlhCc1pYaE9ZVzFsSWpwN0ltWnBjbk4wVG1GdFpTSTZJazFoZEhNaUxDSnNZWE4wVG1GdFpTSTZJa2hoWjIxaGJpSjlMQ0prWVhSbFQyWkNhWEowYUNJNklqRTVPRE10TVRBdE1qVWlmWDBzSW1GdGIzVnVkQ0k2ZXlKaGJXOTFiblFpT2lJeE1EQWlMQ0pqZFhKeVpXNWplU0k2SWxWVFJDSjlMQ0owY21GdWMyRmpkR2x2YmxSNWNHVWlPbnNpYzJObGJtRnlhVzhpT2lKVVVrRk9VMFpGVWlJc0ltbHVhWFJwWVhSdmNpSTZJbEJCV1VWU0lpd2lhVzVwZEdsaGRHOXlWSGx3WlNJNklrTlBUbE5WVFVWU0luMTkA", + "invalidFulfillment": "_3cco-YN5OGpRKVWV3n6x6uNpBTH9tYUdOYmHA-----", + "invalidToIdType": "ACCOUNT_ID", + "invalidToIdValue": "27713803099", + "note": "test", + "payeeIdType": "MSISDN", + "payeeIdentifier": "17039811902", + "payeefsp": "$param_simNamePayeefsp", + "payeefspEmail": "some.email@gmail.com", + "payerIdType": "MSISDN", + "payerIdentifier": "17039811901", + "payerfsp": "testingtoolkitdfsp", + "payerfspEmail": "some.email@gmail.com", + "receiverMSISDN": "27713803912", + "testfsp1Email": "some.email@gmail.com", + "testfsp1IdType": "MSISDN", + "testfsp1Identifier": "17039811903", + "testfsp1MSISDN": "17039811903", + "testfsp2Email": "some.email@gmail.com", + "testfsp2IdType": "MSISDN", + "testfsp2Identifier": "17039811904", + "testfsp2MSISDN": "17039811904", + "toFspId": "$param_simNamePayeefsp", + "toIdType": "MSISDN", + "toIdValue": "27713803912", + "toIdValueDelete": "27713803913", + "toAccentIdType": "MSISDN", + "toAccentIdValue": "97039819999", + "toAccentIdDOB": "2000-01-01", + "toAccentIdFirstName": "Seán", + "toAccentIdMiddleName": "François", + "toAccentIdLastName": "Nuñez", + "toAccentIdFspId": "$param_simNamePayeefsp", + "toBurmeseIdType": "MSISDN", + "toBurmeseIdValue": "2224448888", + "toBurmeseIdDOB": "1990-01-01", + "toBurmeseIdFirstName": "ကောင်းထက်စံ", + "toBurmeseIdMiddleName": "အောင်", + "toBurmeseIdLastName": "ဒေါ်သန္တာထွန်", + "toBurmeseIdFspId": "$param_simNamePayeefsp", + "validCondition": "GRzLaTP7DJ9t4P-a_BA0WA9wzzlsugf00-Tn6kESAfM", + "validCondition2": "kPLCKM62VY2jbekuw3apCTBg5zk_mVs9DD8-XpljQms", + "validFulfillment": "UNlJ98hZTY_dsw0cAqw4i_UN3v4utt7CZFB4yfLbVFA", + "validIlpPacket2": "AYIC9AAAAAAAABdwHWcucGF5ZWVmc3AubXNpc2RuLjIyNTU2OTk5MTI1ggLKZXlKMGNtRnVjMkZqZEdsdmJrbGtJam9pWmpRMFltUmtOV010WXpreE1DMDBZVGt3TFRoa05qa3RaR0ppWVRaaVl6aGxZVFpqSWl3aWNYVnZkR1ZKWkNJNklqVTBaRFZtTURsaUxXRTBOMlF0TkRCa05pMWhZVEEzTFdFNVkyWXpZbUl5TkRsaFpDSXNJbkJoZVdWbElqcDdJbkJoY25SNVNXUkpibVp2SWpwN0luQmhjblI1U1dSVWVYQmxJam9pVFZOSlUwUk9JaXdpY0dGeWRIbEpaR1Z1ZEdsbWFXVnlJam9pTWpJMU5UWTVPVGt4TWpVaUxDSm1jM0JKWkNJNkluQmhlV1ZsWm5Od0luMTlMQ0p3WVhsbGNpSTZleUp3WVhKMGVVbGtTVzVtYnlJNmV5SndZWEowZVVsa1ZIbHdaU0k2SWsxVFNWTkVUaUlzSW5CaGNuUjVTV1JsYm5ScFptbGxjaUk2SWpJeU5UQTNNREE0TVRneElpd2labk53U1dRaU9pSndZWGxsY21aemNDSjlMQ0p3WlhKemIyNWhiRWx1Wm04aU9uc2lZMjl0Y0d4bGVFNWhiV1VpT25zaVptbHljM1JPWVcxbElqb2lUV0YwY3lJc0lteGhjM1JPWVcxbElqb2lTR0ZuYldGdUluMHNJbVJoZEdWUFprSnBjblJvSWpvaU1UazRNeTB4TUMweU5TSjlmU3dpWVcxdmRXNTBJanA3SW1GdGIzVnVkQ0k2SWpZd0lpd2lZM1Z5Y21WdVkza2lPaUpWVTBRaWZTd2lkSEpoYm5OaFkzUnBiMjVVZVhCbElqcDdJbk5qWlc1aGNtbHZJam9pVkZKQlRsTkdSVklpTENKcGJtbDBhV0YwYjNJaU9pSlFRVmxGVWlJc0ltbHVhWFJwWVhSdmNsUjVjR1VpT2lKRFQwNVRWVTFGVWlKOWZRAA", + "NORESPONSE_SIMPAYEE_NAME": "$param_simNameNoResponsePayeefsp", + "SIM1_NAME": "$param_simNameTestfsp1", + "SIM2_NAME": "$param_simNameTestfsp2", + "SIM3_NAME": "$param_simNameTestfsp3", + "SIM4_NAME": "$param_simNameTestfsp4", + "SIM1_MSISDN": "17039811903", + "SIM2_MSISDN": "17039811904", + "SIM3_MSISDN": "17891239873", + "SIM4_MSISDN": "17891239872", + "SIM1_JWS_KEY": "-----BEGIN PRIVATE KEY-----\nMIIJQgIBADANBgkqhkiG9w0BAQEFAASCCSwwggkoAgEAAoICAQDF7BOa5uMtMcyk\nhEuHXNw1/q7YTaRwyyJZLXAOl3lHnSJKPp7+USY7mSkSuyNwf6lpKaZZ6q0AnuLY\nNarkr376osEE1KNjKWUFMSPeJKqrYx7bgZOnbqvnO/XRPBnA7N8WG0JIis+N4MGt\n4YVXzojDMxU3Ghpj0Li6U8dJ6uuXYELpeiX0DV+/LcRtyb9QJr69Ezpa5x1ROly1\nmqJlfMth82NXKpQWGpRlmsBsMpxJJANL7K9672zWgmXWvClrCy4hRy7wBOLSevOI\np3shfDXYBC0Kxay/EX4SY4geHOqyAxlEQp2zbAMo/IKtDwMfepm92dtA12vo/bfc\nyjoqM62ssrSSElQpXH3yKBYAA3lg4NAXkOWhetk6siEtYAMM+kWMqzNC9rZj0Trj\ngsxir7tHPyTxRfQxXCRSDQWCSKmFnXixWN1dj/b0CGIavG74NkSD3rh3JwPmRG1C\n5DFrFq9Oh+SlGNDdQMAYG+UWJyYIJq2e9RaXOipNIAliD7YHofWpqMnjsldPz4v2\nYsYNFL1FUd9XwpnMx+PS1Vn57QGbiJZgbp75xhkfA01mgc7MINWI/ZCmqcpu0RQJ\nqsY2JSL0Iyt7cprwok4rLp8z0GO18kpa3HwyQFhCJoUQ895egPajEfxfvY+mp9im\nH88Dn/837leIsnKL9qx8JpPv8dUqwwIDAQABAoICAAOA3KK27VS5TuMgTCcCqK0c\noXJNkHore8wcn1BDpnK2ilUbQvlQtyVt+TBpN0hgV5dIXsRxbEuwCwjXIYJ5nFs1\nzz/mRY5SQ7rs5vYaxq4vHGW33TClDGJzLgvw4YHs/OuaJiGG6B6QNx8eIMR6cNfs\niWXcxJSbM64YO4s0M0Y2oHbl17eCdU3+OVjHhXt1Pw+adhsuw12c+nvd66Quqmxt\nYhs/W4l6hS0yZcpLPVxvi9w77N/jGIfwxZU7iCatzqr3Ls8k7pNS5Aj81sl9vTRb\nZpDqgruz7THw+ZvIh/0V7bFbC+Fbh9Ua5T13tEveS9k4FZ6Orj9PLExcJiEAXsF9\n/WGN9pAXmjbULu0Usxe/0KaG3BTfzmQPH8n6Y6yNZgnhStQOdZn5dIFiIT/nfscw\nS3IDCwZZktptWG6pBgGtoTUSiWZfSDbR0mj57+VDeG3Dg+5k016KCwR4H1y3q6NV\nJKaOJlKadWgh7wCaH8Dg8Y+lHEV5TOAIPdg7nx1D/U+cNbXKbjZZ84D8CSi2Afk0\nCuR3WTXPncpsugvehyfiOBy26kmcxBz6fyi2QAKxFfZBeO9Wao1VcWnd8G9mZs6K\nVZ3qjzRODMZ8pEk8/13U3G5TqKNpFgdOzb64dMoFmTMc2fxPM9WFX+iy9n5irSdA\nbdW0sugAMrRF7Tmor1apAoIBAQDwU1I/xJWR4J/+7Z174HfrmusIFg5wu+4souVO\nFWQE903KDHbrX8DnEf4GdElDJ3qwZq1e27hSVhpwqlSMkBS0frBvyQfX3tAeevmE\nnNKFpLQiBQwQWeWV9bbXKUDEvSwxGBHEKKhAAgKRM9EJgWAkWOfMBfj/98Qo390p\nske4ZR28w2XDrW7Ycqdo6NDjte+ziDmeMNCU7Wv5StlAt0eRJ7fXOi9lN4BSw649\n0YTNwq+3G5yHpWkdG6e4EWKuCjXz8/4vW+pPatlWXEtrZgSJwAYe3HSZw3ds/Tcw\nYHdPULoWpOHkdUOqXZ9abWPQ4bI9v1EmtRy2z6/G+tYhwud3AoIBAQDS1MDy29PM\nbbLG9oLU3dZTL+UnZ0Bp+GTSao92EOCHvco6w+/Y1+rAN7e2F5tbMMWkc1ozIQn/\nTrXvX9W75+CPsj5umj/ZXmv2o9UHurj3ENQ+jRA15uBNNdKOYyrHCWLZWi3TyKqm\nco0KSQOjk0qrn3c2asU1OwiHA7CYP0baO9X6h/kBcaRYxpdPP0XUbKlAqHiaQTdM\nVex9J+LuIO9qnchRFuD1DYKcKJwLYeXs6tSRfh4mO+9qWpYaA3nKBsyjBvo1szak\nmmCA4DiFGZgta+2+rVCUY3tXHn52X64+JKHgd4NA/QEf/GXsgO4rvW0is6T3bKCo\nn2dKa0GOEMIVAoIBABmS5EfA5aG2Y5A/POj3xAsgWy5rGnJIrVm2o+whPpmAr5h2\npxj5AZAVTBDnwvwQcW/gHUbg3sZ0PzAKECE9G9bxPFlI7Tq9jSwRLgg8n/J0ym5s\nVxJOXq4Mjb5rt2a4MsGurAVRxkW5cQh+mRoH2HFFvLTrVcn3Vbp7yA8t14/5wqZZ\nrLSb+hWybbouPDxfGfji4C7DRw7yDPFkU6YdWtJJhbizimOc+lzUUfBmIVm8A/La\nT1fn9D2SudBOmU+n6oHhTwU/JLn6xtH31FbDbmwyMPSLxSSvtj+02nCdc1TPZF4Q\ngbFMAT1Z5SE8Tsjlm5ASkdIqp7mUdEIaYzsIgJUCggEAKn/ewVYU9OGsJzVsHDL3\n0F8YR4Al2PbMhCoc70TprhNRH9V9lO25kbPpoZhSpehH/yWNqj7fwAqC3FUqRa2x\nc+YPdcY8VroU82wFNoCqZouK7W0MNoFq98WAw1k0N1kqBvyJvmZ2GAWBbvBW/nNj\nmwMTSfHt/RQAXQ8eWyJuSvHC6bTdOjBJW+f0enIbxn19BN6xKQ86cXXkrToMIcqb\n2Jcj2UzOXjex+36oLhc2/TI9VXLh6v0r/vlxxp6qv1HtkHOInqiYvEeuamxImHQX\nXBiknUpcsvz20RIBliUlf7tssk4FNGWMA4GinjFDUafmxxcFiybnn/Y6ISNL3LJ+\nHQKCAQEA2q493viIsIujsyDVUeW5CB94Zox30nINvOGxQ+Zt67ltyLYOLaQCp4Di\nP1GBmB5Pc78Bd7uIPzmZFvp6M1XPpA8HL2BbHaehEiRojBP8ytafMFbOAFfK7r7R\nbBHGBV2TLcuucQb5iMWCg/l5GTfX5PYUBq1nj/8QFYeflcSs8G4ndxGtl8qN2j8o\nsqBrbDbBJFidLxou0bwD7twX1fY3bOdTFxpO0cSMCxZ3wFeVoUR8mBeP87Jkno7x\nYBhb5j1KM+MPkast7nE2dczxfvzjDhr1rnsY9Yq8UHCIsFOf5krsNac1+k9zipR8\nDgoQeSng2kt5Z6mkoDIQTs7nEflb4w==\n-----END PRIVATE KEY-----\n", + "SIM2_JWS_KEY": "-----BEGIN PRIVATE KEY-----\n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\nTv4G862WYeqD1fdyZaKQ3b9fAQEq1g==\n-----END PRIVATE KEY-----\n", + "SIMPAYEE_JWS_PRIVATE_KEY": "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDMu126miewCUCT\n7f49B0SyCPFGzmqGSs9rTPbk1se+BBhqfhsfkZj6cRRfrlg3rme6we0Ib2AF5TQL\nnoSBlDAimQcNOHXrqpAY/B0l/mgyUwmfv0NJ3UjZuCFuw3HRrU/oSUfXoDITC+Bi\n120w4FY2B/vPn+1iC/tsaCayneoaV/Sedq7H9+smEnQfGl3p5QJp/B2Ws3Bz1HqI\nIoxLEaO9VMeDHQPvNJn/7g9erqA5vIhmgLS46worOVjdRLH2SECH73qp8Wg0rJ8Y\neW2kQ8kuY4uHcG3MO6drYrC011U0ZyM90KV7dv2Y0h2FHlpn9s/pmb630m5ELpnB\nT/pYTLcXAgMBAAECggEADqk6Qz3SgBeMMYEWYZ4ZdsW6Ktpm+Xqg/kDy4JywOB9z\nSikBXeeKH3Z6ltwq2BicDV020Wb8Zt+s3vTOmLhDzC544/hPmtKfjWfR2eHX6gaq\nm+8ml+20pQFmb4Kn2MlC/Xzwm/SOXBvPyUmTua95rQExsK12DT0+F4YhLfhYsTh2\nHfkEzdFW4rrd+9ddKG1ZANS4ZaiMyzhtvUWeEBypBtVf+kBk+51t9pLCdjuynb8I\nWylSDhikT3/YQ/3g/Sz3SMp1u4x0GQe9FWYrnPzzp5LnM5fm49v8JWVHUvd0TOi0\ndQV+LYlgSD38YPpi4iKQSh0Zf0EBfbA83GsX2ArJ7QKBgQDmvcA6PqPo0OV/7RKY\nJuziA3TpucL8iVM1i7/Lv6+VkX88uDvEjwLoNAiYcgIm/CMK7WAwA+Dzn4r38EHB\nBKF4KRhP0qQS0KLXsd0tdsmAB0In7+cbKL4ttqNUP98xZAkTLJq9PXqTKN0qtyw4\nSfIsVMjDGoeSdWHObZYbGKICfQKBgQDjJLwolDrVX29V4zVmxQYH5iN+5kwKXHXj\nsuHBrW02Oj/GQFh3Xj6JQi3mzTWYhHwhA4pdaQtNYqTaz9Ic/O1VNPic2ovtg+cd\n7sh86qdQ4QZYhN3RT4oX///u6+UK90llh9hEBo3GuZ4X47tuByNtD4SFAlULrkSm\nfW4XaC3gIwKBgGil6HfCDx65F00UnVlKVicPQEf8ivVz5rwjPIJQ1nZ0PYuxVtIH\ntl7PspJJKra5pb7/957vM2fqlOFsIrZCvmS75p3VP7qUyzYeIdzLwgmBwTxRrrP/\nn3kmGx9LtJM29nKuySNIrb3uS5hi6PhCeUYn0cHC13fSKuCvjOOPIXMVAoGBAJg+\nCPdR0tUs8Byq+yH0sIQe1m+5wAG50zJYtUPxD6AnDpO8kQ8A1f19o/JsXJ3rPp+K\nFfVh8LdfhIs8e+H+DLztkizftqXtoLzJTQuc46QsDurJszsVisNnTI1BAvWEpWct\n0+BUXDZ0NuhgNUIb+rygh/v2gjYgCddlfqKlqwntAoGBAM5Kpp5R0G0ioAuqGqfZ\nsHEdLqJMSepgc6c7RC+3G/svtS2IqCfyNfVMM3qV5MY3J7KnAVjGOw2oJbXcPLXa\nuutsVVmPx2d/x2LZdc8dYYcdOQZvrUhmALhAPXM4SRujakxh+Uxi1VOiW+fZL8aW\nuu1pxuWD0gTJxFkp6u4YIAhw\n-----END PRIVATE KEY-----\n", + "SIMPAYER_JWS_PRIVATE_KEY": "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCg9eU66hg4ZAE6\njM4U8ylXQwUz9cdmzS3JyW+1bbgv77peMKSU/wFsi4QRwmbrYze9baFnGCKnS75E\nvCchib5vJxp3MDWzi/TGxmzgWdJRzkyCiI5C6dCgVL71MjsFgN3TN63wEf5sEU2I\neoJ8yXJM0pUG9f9NO7p/IGliDmt6C7EA7D9kQWigufmX0ZTVNKI07fKwC/AEKLp7\nkx99pvsCq8m184EEL15Q/NhA7R/5zKoHvmJa6Jd7tM0i0xn8IKOkNVFu3YIafAEC\nQWQwRbanFEeRc3tH3bEoYM8c74r+W+YxCG7nUf16XCk132XVffbHVl+wFgo18YB/\nsAJmcbePAgMBAAECggEAGQGKnsf+gkg7DqMQYx3Rxt5BISzmURjAK9CxG6ETk9Lt\nA7QP5ZvmVzwnhPDMN3Z/Et1EzXTo8U+pnBkVBTdWkAMlr+2b8ixklzr9cC9UJuRj\na4YWf9u+TyJLVmF63OSD0cwdKCZLffOENZc+zW8oZDn08BNomdGVLCnXZWXzGY8X\nKaJTJr29jEgkKOqFXdAHrsmj7TBtqSLZKx2IHdCmi05+5JCxVLPgnDiCicZ9zEii\nyWw57Q1migFIcw6ZQP4RyjgH1o70B+zo3OL7IQEirE17GUgK16XD8xi8hWCYTj5n\nxOz9yfVfPuYom/9Xbm5kYJZKE2HOZ3Lg8pUnWncuNQKBgQDbaOoACQPhVxQK1qYR\nRbW0I5Rn0EDxzsFPEpu3eXHoIYGXi8u/ew9AzFmGu+tKYJV5V4BCXo5x2ddE+B8B\ndXhyHLGfeV8tWKYKBpatolVxxKDL/9fnxoGIAO9cc91ieOm5JxmKscCVP1UnOXHZ\nuomSfAbGQwYDtMd2bJKkE1z0qwKBgQC7zacuv1PMaDFksHuNNRG+aZ74pJ77msht\nvJoKyaQcktD0xmIXhFfJvK4cclzG7s5jxCsu2ejimgmfVzgXlLEMrJFvSdFkD2SS\ngGqoxq5c9g8ssvt7xwr7aJ+VYYWTWRzJrOUny+99UbwHedu0EHL1BYILwy67Lium\nsgUeeCEgrQKBgGv+7f7qcRB/jgvvr3oc990dDjUzGmRrQlcrb54Vlu2NYH45fyZW\n6iEY9JAO+zd25tv9J9KDPFXpxb3a61gKfCie2wcF9MUbN08EAzKgDrKa+BKxcZJR\n8PwCic7V8QhBP7m09yt/Zq2PqNhPvCxRVtnVVnhMES/N0cgGlP9R0JVVAoGAHU2/\nkmnEN5bibiWjgasQM7fjWETHkdbbA1R0bM59zv+Rnz/9OlIqKI5KVKH7nAbTKXoI\niuzxi7ohWj2PwQ4wehvLLaRFCenk9X8YJXGq71Jtl7ntx6iNLCFtFS/8WbuD5GwX\n7ZfCrLk+L6RyBayzY0wSuKch+Y8AvKf2aISyFpkCgYEAjSfEjz9Cn+27HdiMoBwa\n+fyyoosci/6OBxj/WTKvV6KUYLBfFoAYpb9rqrbvnfyyc0UiAYQeMJAOWQ1kkzY4\nzXs63iPQi2UeGPJZ7RsT+31DSaG9YiQdrInsUrlm8hi1C7Pg/NNt6Y1G0WhWYrvF\niNK0yCENMhSoOTtbT9tmGi0=\n-----END PRIVATE KEY-----\n", + "TESTFSP1_JWS_PUB_KEY": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2R3IuEDpqDtsS96emI0v\ndCJpeb/lnCxR2Nw5x6Z3GjC9PRFCJ2gsS2Zq70NaUQ5yWrrrZ9DZ8PjgCXqftUKG\n42uFsibLFpN09IjQuZCDuAkCdEjMgm+xies47ajRzl6evOc0ClkQBZVGybl9RAr6\nNRTFOYkYjJ0xS0MNkfRkDiOEu5BA/XKb5oLbyVMjGyvLgyS1g41x4fA+Ccb5PENa\nh9dqkFJ3j218Rs+bGytrVqrrCCjV1FiI+Y9YjKuTRRo7U/jcGHLfEc7YRcP2U9os\nxQxFvhHxR7W0e74fAU8B8YIJzwjaQvrEh9SJRc2IZsh6EdBAXXmbk4sHKyhoX0by\nUQIDAQAB\n-----END PUBLIC KEY-----\n", + "TESTFSP2_JWS_PUB_KEY": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv7k0Mqy0jSXFpHD9/a+Y\nl5djXq6HdyC+BsSA/sRKczEBKQyW8mEJVILAKkOibWzK7e+SJjQPbFjgqiUZvRI5\n+ggHkSJXEV28Bi2sF58A15sQjwaSkE2vBwLAL5GftSmao0QSozSfQ+RFw2N+loRG\nYedXZpRMsYFr1uA1qavcBjoj7JqPpID7UaTgXwwHWbV+j2uhQfotqRvOQ5KTmx5H\nJa+VjPu+xAC7mmcL+dxmeBpbJJD5Li8B8ggJXGJUk+En6XSIgZkQ6vKvC9HyasE6\nWZLXU+JJoCp2wkCPNTRxzPE2PGnlI0a4ZP2/y/2yacc4HQGBhEMc+SVT/VSZaMS+\nAQIDAQAB\n-----END PUBLIC KEY-----", + "payerfspSettlementAccountId": "", + "payerfspSettlementAccountBalanceBeforeFundsIn": "", + "payerfspSettlementAccountBalanceAfterFundsIn": "", + "fundsInPrepareTransferId": "", + "fundsInPrepareAmount": "", + "SIMPLE_ROUTING_MODE_ENABLED": true, + "mobileSimPayerFsp": "pinkbankfsp", + "mobileSimPayeeFsp": "greenbankfsp", + "ON_US_TRANSFERS_ENABLED": false, + "expectedPartiesVersion": "1.1", + "expectedParticipantsVersion": "1.1", + "expectedQuotesVersion": "1.1", + "expectedTransfersVersion": "1.1", + "expectedAuthorizationsVersion": "1.1", + "expectedTransactionRequestsVersion": "1.1", + "toSubIdValue": "30", + "fromSubIdValue": "30", + "cgscurrency": "INR", + "settlementtestfsp2bankMSISDN": "27713813915", + "settlementtestfsp1bankMSISDN": "27713813914", + "settlementtestfsp4bankMSISDN": "27713813917", + "settlementtestfsp3bankMSISDN": "27713813916", + "DELAY_CGS": 5000, + "settlementpayeefspNoExtensionMSISDN": "27714923918", + "NORESPONSE_NAME": "$param_simNameNoResponsePayeefsp", + "payeefspMSISDN": "17039811907", + "payerfspMSISDN": "17891239876", + "settlementtestNonExistingMSISDN": "22244803917", + "NET_DEBIT_CAP": "50000", + "HOST_ORACLE_CONSENT": "http://consent-oracle:3000", + "DFSPA_NAME": "dfspa", + "DFSPA_CB_FSPIOP": "http://$release_name-sim-tp-dfspa-scheme-adapter:4000", + "DFSPA_CB_THIRDPARTY": "http://$release_name-sim-tp-dfspa-thirdparty-sdk:4005", + "DFSPB_NAME": "dfspb", + "DFSPB_CB_FSPIOP": "http://$release_name-sim-tp-dfspb-scheme-adapter:4000", + "DFSPB_CB_THIRDPARTY": "http://$release_name-sim-tp-dfspb-thirdparty-sdk:4005", + "PISP_NAME": "pisp", + "PISP_CB_FSPIOP": "http://$release_name-sim-tp-pisp-scheme-adapter:4000", + "PISP_CB_THIRDPARTY": "http://$release_name-sim-tp-pisp-thirdparty-sdk:4005", + "CENTRALAUTH_NAME": "centralauth", + "CENTRALAUTH_CB_FSPIOP": "http://auth-svc:4004", + "PISP_THIRDPARTY_SDK_OUTBOUND_URL": "http://$release_name-sim-tp-pisp-thirdparty-sdk:4006", + "PISP_BACKEND_TESTAPI_URL": "http://$release_name-sim-tp-pisp-backend:3003", + "PISP_CALLBACK_URL": "http://$release_name-sim-tp-pisp-scheme-adapter:4000", + "PISP_SDK_TESTAPI_URL": "http://$release_name-sim-tp-pisp-scheme-adapter:4002", + "PISP_SDK_TESTAPI_WS_URL": "ws://$release_name-sim-tp-pisp-scheme-adapter:4002", + "DFSPA_BACKEND_TESTAPI_URL": "http://$release_name-sim-tp-dfspa-backend:3003", + "DFSPA_CALLBACK_URL": "http://$release_name-sim-tp-dfspa-scheme-adapter:4000", + "DFSPA_SDK_TESTAPI_URL": "http://$release_name-sim-tp-dfspa-scheme-adapter:4002", + "DFSPA_SDK_TESTAPI_WS_URL": "ws://$release_name-sim-tp-dfspa-scheme-adapter:4002", + "DFSPB_BACKEND_TESTAPI_URL": "http://$release_name-sim-tp-dfspb-backend:3003", + "DFSPB_CALLBACK_URL": "http://$release_name-sim-tp-dfspb-scheme-adapter:4000", + "DFSPB_SDK_TESTAPI_URL": "http://$release_name-sim-tp-dfspb-scheme-adapter:4002", + "DFSPB_SDK_TESTAPI_WS_URL": "ws://$release_name-sim-tp-dfspb-scheme-adapter:4002", + "TTKSIM1_NAME": "$param_simNameTTKSim1", + "TTKSIM2_NAME": "$param_simNameTTKSim2", + "TTKSIM3_NAME": "$param_simNameTTKSim3", + "TTKSIM1_MSISDN": "16135551212", + "TTKSIM2_MSISDN_PREFIX": "4561", + "TTKSIM3_MSISDN_PREFIX": "5671", + "TTKSIM1_CALLBACK_URL": "http://$release_name-$param_simNameTTKSim1-sdk-api-svc:4000", + "TTKSIM1_SDK_TESTAPI_URL": "http://$release_name-$param_simNameTTKSim1-sdk-api-svc:4002", + "TTKSIM1_SDK_TESTAPI_WS_URL": "ws://$release_name-$param_simNameTTKSim1-sdk-api-svc:4002", + "TTKSIM2_CALLBACK_URL": "http://$release_name-$param_simNameTTKSim2-sdk-api-svc:4000", + "TTKSIM2_SDK_TESTAPI_URL": "http://$release_name-$param_simNameTTKSim2-sdk-api-svc:4002", + "TTKSIM2_SDK_TESTAPI_WS_URL": "ws://$release_name-$param_simNameTTKSim2-sdk-api-svc:4002", + "TTKSIM3_CALLBACK_URL": "http://$release_name-$param_simNameTTKSim3-sdk-api-svc:4000", + "TTKSIM3_SDK_TESTAPI_URL": "http://$release_name-$param_simNameTTKSim3-sdk-api-svc:4002", + "TTKSIM3_SDK_TESTAPI_WS_URL": "ws://$release_name-$param_simNameTTKSim3-sdk-api-svc:4002", + "TTKSIM2_PARTY_NOT_FOUND": "partynotfound", + "TTKSIM2_PARTY_TIMES_OUT": "partytimesout" + } + } ml-testing-toolkit-frontend: ingress: @@ -8768,8 +8715,8 @@ ml-ttk-posthook-setup: weight: -5 config: ## Test-case archive zip for test-cases: https://github.com/mojaloop/testing-toolkit-test-cases - testCasesZipUrl: &ttkGitUrl https://github.com/mojaloop/testing-toolkit-test-cases/archive/v14.0.0.1.zip - testCasesPathInZip: &ttkGitPathSetup testing-toolkit-test-cases-14.0.0.1/collections/hub/provisioning + testCasesZipUrl: &ttkGitUrl https://github.com/mojaloop/testing-toolkit-test-cases/archive/v14.1.0.zip + testCasesPathInZip: &ttkGitPathSetup testing-toolkit-test-cases-14.1.0/collections/hub/provisioning ttkBackendURL: http://$release_name-ml-testing-toolkit-backend:5050 parameters: <<: *simNames @@ -8782,7 +8729,7 @@ ml-ttk-posthook-tests: config: ## Test-case archive zip for test-cases: https://github.com/mojaloop/testing-toolkit-test-cases testCasesZipUrl: *ttkGitUrl - testCasesPathInZip: &ttkGitPathGP testing-toolkit-test-cases-14.0.0.1/collections/hub/golden_path + testCasesPathInZip: &ttkGitPathGP testing-toolkit-test-cases-14.1.0/collections/hub/golden_path # awsS3BucketName: aws-s3-bucket-name # awsS3FilePath: ttk-tests/reports ttkBackendURL: http://$release_name-ml-testing-toolkit-backend:5050 @@ -8795,8 +8742,8 @@ ml-ttk-posthook-tests: # AWS_REGION: 'us-west-2' # SLACK_WEBHOOK_URL: 'slack_inbound_webhook' - ## Optionally specify the config file defaults for TTK CLI - ## You should specify at least mode here + ## Optionally specify the config file defaults for TTK CLI + ## You should specify at least mode here # configFileDefaults: { # "mode": "outbound", # "reportFormat": "html", @@ -8844,8 +8791,8 @@ ml-ttk-cronjob-tests: # AWS_REGION: 'us-west-2' # SLACK_WEBHOOK_URL: 'slack_inbound_webhook' - ## Optionally specify the config file defaults for TTK CLI - ## You should specify at least mode here + ## Optionally specify the config file defaults for TTK CLI + ## You should specify at least mode here # configFileDefaults: { # "mode": "outbound", # "reportFormat": "html", @@ -8864,7 +8811,7 @@ ml-ttk-cronjob-tests: ml-ttk-test-setup: tests: enabled: true - weight: -6 + weight: -7 config: ## Test-case archive zip for test-cases: https://github.com/mojaloop/testing-toolkit-test-cases testCasesZipUrl: *ttkGitUrl @@ -8877,7 +8824,7 @@ ml-ttk-test-setup: ml-ttk-test-val-gp: tests: enabled: true - weight: -5 + weight: -6 config: ## Test-case archive zip for test-cases: https://github.com/mojaloop/testing-toolkit-test-cases testCasesZipUrl: *ttkGitUrl @@ -8895,8 +8842,8 @@ ml-ttk-test-val-gp: # AWS_REGION: 'us-west-2' # SLACK_WEBHOOK_URL: 'slack_inbound_webhook' - ## Optionally specify the config file defaults for TTK CLI - ## You should specify at least mode here + ## Optionally specify the config file defaults for TTK CLI + ## You should specify at least mode here # configFileDefaults: { # "mode": "outbound", # "reportFormat": "html", @@ -8915,11 +8862,11 @@ ml-ttk-test-val-gp: ml-ttk-test-val-bulk: tests: enabled: false - weight: -4 + weight: -5 config: ## Test-case archive zip for test-cases: https://github.com/mojaloop/testing-toolkit-test-cases testCasesZipUrl: *ttkGitUrl - testCasesPathInZip: testing-toolkit-test-cases-14.0.0.1/collections/hub/other_tests/bulk_transfers + testCasesPathInZip: testing-toolkit-test-cases-14.1.0/collections/hub/other_tests/bulk_transfers ## Optional config for uploading reports to S3 Buckets. If enabled: WS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_REGION under the 'configCreds' is required. # awsS3BucketName: aws-s3-bucket-name # awsS3FilePath: ttk-tests/reports @@ -8933,8 +8880,8 @@ ml-ttk-test-val-bulk: # AWS_REGION: 'us-west-2' # SLACK_WEBHOOK_URL: 'slack_inbound_webhook' - ## Optionally specify the config file defaults for TTK CLI - ## You should specify at least mode here + ## Optionally specify the config file defaults for TTK CLI + ## You should specify at least mode here # configFileDefaults: { # "mode": "outbound", # "reportFormat": "html", @@ -8953,11 +8900,11 @@ ml-ttk-test-val-bulk: ml-ttk-test-setup-tp: tests: enabled: false - weight: -3 + weight: -4 config: ## Test-case archive zip for test-cases: https://github.com/mojaloop/testing-toolkit-test-cases testCasesZipUrl: *ttkGitUrl - testCasesPathInZip: testing-toolkit-test-cases-14.0.0.1/collections/hub/provisioning_thirdparty + testCasesPathInZip: testing-toolkit-test-cases-14.1.0/collections/hub/provisioning_thirdparty ## Optional config for uploading reports to S3 Buckets. If enabled: WS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_REGION under the 'configCreds' is required. # awsS3BucketName: aws-s3-bucket-name # awsS3FilePath: ttk-tests/reports @@ -8971,8 +8918,8 @@ ml-ttk-test-setup-tp: # AWS_REGION: 'us-west-2' # SLACK_WEBHOOK_URL: 'slack_inbound_webhook' - ## Optionally specify the config file defaults for TTK CLI - ## You should specify at least mode here + ## Optionally specify the config file defaults for TTK CLI + ## You should specify at least mode here # configFileDefaults: { # "mode": "outbound", # "reportFormat": "html", @@ -8991,11 +8938,11 @@ ml-ttk-test-setup-tp: ml-ttk-test-val-tp: tests: enabled: false - weight: -2 + weight: -3 config: ## Test-case archive zip for test-cases: https://github.com/mojaloop/testing-toolkit-test-cases testCasesZipUrl: *ttkGitUrl - testCasesPathInZip: testing-toolkit-test-cases-14.0.0.1/collections/hub/thirdparty + testCasesPathInZip: testing-toolkit-test-cases-14.1.0/collections/hub/thirdparty ## Optional config for uploading reports to S3 Buckets. If enabled: WS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_REGION under the 'configCreds' is required. # awsS3BucketName: aws-s3-bucket-name # awsS3FilePath: ttk-tests/reports @@ -9009,8 +8956,46 @@ ml-ttk-test-val-tp: # AWS_REGION: 'us-west-2' # SLACK_WEBHOOK_URL: 'slack_inbound_webhook' - ## Optionally specify the config file defaults for TTK CLI - ## You should specify at least mode here + ## Optionally specify the config file defaults for TTK CLI + ## You should specify at least mode here + # configFileDefaults: { + # "mode": "outbound", + # "reportFormat": "html", + # "baseURL": "", + # "reportTarget": "", + # "reportAutoFilenameEnable": true, + # "slackWebhookUrl": "", + # "slackPassedImage": "", + # "slackFailedImage": "", + # "logLevel": "2" + # } + parameters: + <<: *simNames + testCaseEnvironmentFile: *ttkInputValues + +ml-ttk-test-setup-sdk-bulk: + tests: + enabled: false + weight: -2 + config: + ## Test-case archive zip for test-cases: https://github.com/mojaloop/testing-toolkit-test-cases + testCasesZipUrl: *ttkGitUrl + testCasesPathInZip: testing-toolkit-test-cases-14.1.0/collections/hub/provisioning_sdkbulk + ## Optional config for uploading reports to S3 Buckets. If enabled: WS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_REGION under the 'configCreds' is required. + # awsS3BucketName: aws-s3-bucket-name + # awsS3FilePath: ttk-tests/reports + ttkBackendURL: http://$release_name-ml-testing-toolkit-backend:5050 + testSuiteName: SDK Bulk Provisioning Collection + environmentName: Development + + # configCreds: + # AWS_ACCESS_KEY_ID: 'some_aws_access_key' + # AWS_SECRET_ACCESS_KEY: 'some_aws_secret_key' + # AWS_REGION: 'us-west-2' + # SLACK_WEBHOOK_URL: 'slack_inbound_webhook' + + ## Optionally specify the config file defaults for TTK CLI + ## You should specify at least mode here # configFileDefaults: { # "mode": "outbound", # "reportFormat": "html", @@ -9025,3 +9010,41 @@ ml-ttk-test-val-tp: parameters: <<: *simNames testCaseEnvironmentFile: *ttkInputValues + +ml-ttk-test-val-sdk-bulk: + tests: + enabled: false + weight: -1 + config: + ## Test-case archive zip for test-cases: https://github.com/mojaloop/testing-toolkit-test-cases + testCasesZipUrl: *ttkGitUrl + testCasesPathInZip: testing-toolkit-test-cases-14.1.0/collections/hub/sdk-bulk + ## Optional config for uploading reports to S3 Buckets. If enabled: WS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_REGION under the 'configCreds' is required. + # awsS3BucketName: aws-s3-bucket-name + # awsS3FilePath: ttk-tests/reports + ttkBackendURL: http://$release_name-ttksim1-ttk-backend:5050 + testSuiteName: SDK Bulk Tests + environmentName: Development + + # configCreds: + # AWS_ACCESS_KEY_ID: 'some_aws_access_key' + # AWS_SECRET_ACCESS_KEY: 'some_aws_secret_key' + # AWS_REGION: 'us-west-2' + # SLACK_WEBHOOK_URL: 'slack_inbound_webhook' + + ## Optionally specify the config file defaults for TTK CLI + ## You should specify at least mode here + # configFileDefaults: { + # "mode": "outbound", + # "reportFormat": "html", + # "baseURL": "", + # "reportTarget": "", + # "reportAutoFilenameEnable": true, + # "slackWebhookUrl": "", + # "slackPassedImage": "", + # "slackFailedImage": "", + # "logLevel": "2" + # } + parameters: + <<: *simNames + testCaseEnvironmentFile: *ttksim1InputValues diff --git a/package.sh b/package.sh index a1fb01908..fa2c4d8c3 100755 --- a/package.sh +++ b/package.sh @@ -20,6 +20,14 @@ if [ "$1" ]; then else declare -a charts=( example-mojaloop-backend + ml-testing-toolkit + ml-testing-toolkit-cli + sdk-scheme-adapter/chart-service + sdk-scheme-adapter + mojaloop-ttk-simulators/chart-sim1 + mojaloop-ttk-simulators/chart-sim2 + mojaloop-ttk-simulators/chart-sim3 + mojaloop-ttk-simulators eventstreamprocessor simulator monitoring/promfana @@ -43,8 +51,6 @@ else bulk-api-adapter/ mojaloop-bulk/ mojaloop-simulator - ml-testing-toolkit - ml-testing-toolkit-cli thirdparty/chart-auth-svc thirdparty/chart-consent-oracle thirdparty/chart-tp-api-svc diff --git a/sdk-scheme-adapter/.helmignore b/sdk-scheme-adapter/.helmignore new file mode 100644 index 000000000..d41b925fa --- /dev/null +++ b/sdk-scheme-adapter/.helmignore @@ -0,0 +1,25 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +*IGNORE* + +# Ignore child charts from being copied +chart-* diff --git a/sdk-scheme-adapter/Chart.yaml b/sdk-scheme-adapter/Chart.yaml new file mode 100644 index 000000000..0cf0e0e9a --- /dev/null +++ b/sdk-scheme-adapter/Chart.yaml @@ -0,0 +1,41 @@ +apiVersion: v2 +description: sdk-scheme-adapter Helm chart for Kubernetes +name: sdk-scheme-adapter +version: 1.0.0 +appVersion: "v21.4.0" +home: http://mojaloop.io +icon: http://mojaloop.io/images/logo.png +sources: + - https://github.com/mojaloop/mojaloop + - https://github.com/mojaloop/helm + - https://github.com/mojaloop/sdk-scheme-adapter +maintainers: + - name: Miguel de Barros + email: miguel.debarros@modusbox.com +dependencies: + - name: sdk-scheme-adapter-svc + alias: sdk-scheme-adapter-api-svc + repository: "file://./chart-service" + tags: + - sdk-scheme-adapter + version: 1.0.0 + condition: sdk-scheme-adapter-api-svc.enabled + - name: sdk-scheme-adapter-svc + alias: sdk-scheme-adapter-dom-evt-handler + repository: "file://./chart-service" + tags: + - sdk-scheme-adapter + version: 1.0.0 + condition: sdk-scheme-adapter-dom-evt-handler.enabled + - name: sdk-scheme-adapter-svc + alias: sdk-scheme-adapter-cmd-evt-handler + repository: "file://./chart-service" + tags: + - sdk-scheme-adapter + version: 1.0.0 + condition: sdk-scheme-adapter-cmd-evt-handler.enabled + - name: common + repository: "https://docs.mojaloop.io/charts/repo" + tags: + - moja-common + version: 2.0.0 diff --git a/sdk-scheme-adapter/README.md b/sdk-scheme-adapter/README.md new file mode 100644 index 000000000..7f5df2243 --- /dev/null +++ b/sdk-scheme-adapter/README.md @@ -0,0 +1,69 @@ +# SDK-Scheme-Adapter Helm Chart + +Helm Chart for the [SDK-Scheme-Adapter](https://github.com/mojaloop/sdk-scheme-adapter) service. + +## Overview + +The [SDK-Scheme-Adapter](https://github.com/mojaloop/sdk-scheme-adapter) provides an interoperable connector (i.e. a Mojaloop-Connector) hosted by a DFSP (Digital Financial Service Provider) between the DFSP's Backend and the Mojaloop Switch, simplifying API interactions for synchronous request-response patterns. + +It comprises of three distinct micro-services: + +1. API-SVC - The standard SDK-Scheme-Adapter offering two APIs + 1. Outbound - API used by the DFSP's Backend to make outgoing requests + 2. Inbound - API used for receiving incoming requests from a Mojaloop Switch +2. Outbound-Domain-Event-Handler - Handles and reacts to any Domain Events - Optional, required for Bulk-Transacts. +3. Outbound-Command-Event-Handler - Process any Command Events - Optional, required for Bulk-Transactions. + +## Sub-Charts + +- [chart-service](./chart-service/) - Template Service to use for all SDK-Scheme-Adapter deployments + +## Deployment + +### Pre-requisites + +The following-backend dependency are required for each of the following services. + +1. Kafka - used as a persistent state store, and for correlating async-to-sync requests/responses using the pub-sub mechanisms. + + An example for installing the [Bitnami Kafka Helm Chart](https://github.com/bitnami/charts/tree/master/bitnami/kafka) can be done as follows: + + ```bash + helm repo add bitnami https://charts.bitnami.com/bitnami + helm -n install bitnami/kafka --set persistence.enabled=false --set zookeeper.persistence.enabled=false + ``` + + _IMPORTANT: The above command includes config changes to deploy a single instance with disable persistence, etc which is not recommended for Production grade installations. Please refer to the [Bitnami Kafka values.yaml](https://github.com/bitnami/charts/blob/master/bitnami/kafka/values.yaml) for available configuration parameters._ + +2. Redis - used for pub-sub all Domain and Command events. + + An example for installing the [Bitnami Redis Helm Chart](https://github.com/bitnami/charts/tree/master/bitnami/redis) can be done as follows: + + ```bash + helm repo add bitnami https://charts.bitnami.com/bitnami + helm -n install bitnami/redis --set architecture=standalone --set master.persistence.enabled=false --set auth.enabled=false + ``` + + _IMPORTANT: The above command includes config changes to deploy a single instance with disable persistence, etc which is not recommended for Production grade installations. Please refer to the [Bitnami Redis values.yaml](https://github.com/bitnami/charts/blob/master/bitnami/kafka/values.yaml) for available configuration parameters._ + +Ensure that you configure the appropriate configurations to match the above in the [values.yaml](./values.yaml): + + ```yaml + kafka: + host: -kafka + port: 9092 + + redis: + host: -redis-master + port: 6379 + ``` + +Or alternatively one can install the chart by adding the following `--set` parameters: + + ```bash + helm install . --set global.kafka.host=-kafka --set global.redis.host=-redis-master + ``` + +### Validation + +Not available at this time. diff --git a/sdk-scheme-adapter/chart-service/Chart.yaml b/sdk-scheme-adapter/chart-service/Chart.yaml new file mode 100644 index 000000000..0436b450d --- /dev/null +++ b/sdk-scheme-adapter/chart-service/Chart.yaml @@ -0,0 +1,20 @@ +apiVersion: v2 +name: sdk-scheme-adapter-svc +version: 1.0.0 +description: A Helm chart for Kubernetes +appVersion: "v21.4.0" +home: http://mojaloop.io +icon: http://mojaloop.io/images/logo.png +sources: + - https://github.com/mojaloop/mojaloop + - https://github.com/mojaloop/helm + - https://github.com/mojaloop/sdk-scheme-adapter +maintainers: + - name: Miguel de Barros + email: miguel.debarros@modusbox.com +dependencies: + - name: common + repository: "https://docs.mojaloop.io/charts/repo" + tags: + - moja-common + version: 2.0.0 diff --git a/sdk-scheme-adapter/chart-service/templates/NOTES.txt b/sdk-scheme-adapter/chart-service/templates/NOTES.txt new file mode 100644 index 000000000..598d2e3db --- /dev/null +++ b/sdk-scheme-adapter/chart-service/templates/NOTES.txt @@ -0,0 +1,28 @@ +** Please be patient while the chart is being deployed ** + +{{- if .Values.diagnosticMode.enabled }} +The chart has been deployed in diagnostic mode. All probes have been disabled and the command has been overwritten with: + + command: {{- include "common.tplvalues.render" (dict "value" .Values.diagnosticMode.command "context" $) | nindent 4 }} + args: {{- include "common.tplvalues.render" (dict "value" .Values.diagnosticMode.args "context" $) | nindent 4 }} + +Get the list of pods by executing: + + kubectl get pods --namespace {{ .Release.Namespace }} -l app.kubernetes.io/instance={{ .Release.Name }} + +Access the pod you want to debug by executing + + kubectl exec --namespace {{ .Release.Namespace }} -ti -- bash + +In order to replicate the container startup scripts execute this command: + + %%ENTRYPOINT and CMD from main container%% + +{{- else }} + +%%Instructions to access the application depending on the serviceType and other considerations%% + +{{- end }} + +{{- include "common.warnings.rollingTag" .Values.image }} +{{- include "sdk-scheme-adapter-svc.validateValues" . }} diff --git a/sdk-scheme-adapter/chart-service/templates/_helpers.tpl b/sdk-scheme-adapter/chart-service/templates/_helpers.tpl new file mode 100644 index 000000000..690217375 --- /dev/null +++ b/sdk-scheme-adapter/chart-service/templates/_helpers.tpl @@ -0,0 +1,46 @@ +{{/* vim: set filetype=mustache: */}} + +{{/* +Return the proper main image name +*/}} +{{- define "sdk-scheme-adapter-svc.image" -}} +{{ include "common.images.image" (dict "imageRoot" .Values.image "global" .Values.global) }} +{{- end -}} + +{{/* +Return the proper image name (for the init container volume-permissions image) +*/}} +{{- define "sdk-scheme-adapter-svc.volumePermissions.image" -}} +{{- include "common.images.image" ( dict "imageRoot" .Values.volumePermissions.image "global" .Values.global ) -}} +{{- end -}} + +{{/* +Return the proper Docker Image Registry Secret Names +*/}} +{{- define "sdk-scheme-adapter-svc.imagePullSecrets" -}} +{{- include "common.images.pullSecrets" (dict "images" (list .Values.image) "global" .Values.global) -}} +{{- end -}} + +{{/* +Create the name of the service account to use +*/}} +{{- define "sdk-scheme-adapter-svc.serviceAccountName" -}} +{{- if .Values.serviceAccount.create -}} + {{ default (printf "%s" (include "common.names.fullname" .)) .Values.serviceAccount.name }} +{{- else -}} + {{ default "default" .Values.serviceAccount.name }} +{{- end -}} +{{- end -}} + +{{/* +Compile all warnings into a single message. +*/}} +{{- define "sdk-scheme-adapter-svc.validateValues" -}} +{{- $messages := list -}} +{{- $messages := without $messages "" -}} +{{- $message := join "\n" $messages -}} + +{{- if $message -}} +{{- printf "\nVALUES VALIDATION:\n%s" $message -}} +{{- end -}} +{{- end -}} \ No newline at end of file diff --git a/sdk-scheme-adapter/chart-service/templates/deployment.yaml b/sdk-scheme-adapter/chart-service/templates/deployment.yaml new file mode 100644 index 000000000..14533aa30 --- /dev/null +++ b/sdk-scheme-adapter/chart-service/templates/deployment.yaml @@ -0,0 +1,156 @@ +apiVersion: {{ include "common.capabilities.deployment.apiVersion" . }} +kind: Deployment +metadata: + name: {{ template "common.names.fullname" . }} + namespace: {{ .Release.Namespace | quote }} + labels: {{- include "common.labels.standard" . | nindent 4 }} + app.kubernetes.io/component: {{ .Chart.Name }} + {{- if .Values.commonLabels }} + {{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }} + {{- end }} + {{- if .Values.commonAnnotations }} + annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }} + {{- end }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: {{- include "common.labels.matchLabels" . | nindent 6 }} + app.kubernetes.io/component: {{ .Chart.Name }} + template: + metadata: + annotations: + checksum/config: {{ .Values.env | toString | sha256sum }} + checksum/secret-jws-signing-key: {{ .Values.config.jwsSigningKey | sha256sum }} + checksum/secret-jws-verification-keys: {{ .Values.config.jwsVerificationKeys | toString | sha256sum }} + {{- if .Values.podAnnotations }} + {{- include "common.tplvalues.render" (dict "value" .Values.podAnnotations "context" $) | nindent 8 }} + {{- end }} + {{- if .Values.metrics.enabled }} + prometheus.io/port: {{ include "common.tplvalues.render" (dict "value" .Values.metrics.config.port "context" $) | quote }} + prometheus.io/scrape: "true" + {{- end }} + labels: {{- include "common.labels.standard" . | nindent 8 }} + app.kubernetes.io/component: {{ .Chart.Name }} + app.kubernetes.io/version: {{ .Chart.Version }} + {{- if .Values.podLabels }} + {{- include "common.tplvalues.render" (dict "value" .Values.podLabels "context" $) | nindent 8 }} + {{- end }} + spec: + serviceAccountName: {{ template "sdk-scheme-adapter-svc.serviceAccountName" . }} + {{- include "sdk-scheme-adapter-svc.imagePullSecrets" . | nindent 6 }} + {{- if .Values.hostAliases }} + hostAliases: {{- include "common.tplvalues.render" (dict "value" .Values.hostAliases "context" $) | nindent 8 }} + {{- end }} + {{- if .Values.affinity }} + affinity: {{- include "common.tplvalues.render" ( dict "value" .Values.affinity "context" $) | nindent 8 }} + {{- else }} + affinity: + podAffinity: {{- include "common.affinities.pods" (dict "type" .Values.podAffinityPreset "component" "sdk-scheme-adapter-svc" "context" $) | nindent 10 }} + podAntiAffinity: {{- include "common.affinities.pods" (dict "type" .Values.podAntiAffinityPreset "component" "sdk-scheme-adapter-svc" "context" $) | nindent 10 }} + nodeAffinity: {{- include "common.affinities.nodes" (dict "type" .Values.nodeAffinityPreset.type "key" .Values.nodeAffinityPreset.key "values" .Values.nodeAffinityPreset.values) | nindent 10 }} + {{- end }} + {{- if .Values.nodeSelector }} + nodeSelector: {{- include "common.tplvalues.render" ( dict "value" .Values.nodeSelector "context" $) | nindent 8 }} + {{- end }} + {{- if .Values.tolerations }} + tolerations: {{- include "common.tplvalues.render" (dict "value" .Values.tolerations "context" .) | nindent 8 }} + {{- end }} + {{- if .Values.priorityClassName }} + priorityClassName: {{ .Values.priorityClassName | quote }} + {{- end }} + {{- if .Values.podSecurityContext.enabled }} + securityContext: {{- omit .Values.podSecurityContext "enabled" | toYaml | nindent 8 }} + {{- end }} + initContainers: + {{- if .Values.initContainers }} + {{- include "common.tplvalues.render" (dict "value" .Values.initContainers "context" $) | nindent 8 }} + {{- end }} + volumes: + {{- if .Values.env.JWS_SIGN }} + - name: jws-private-key + secret: + secretName: {{ template "common.names.fullname" . }}-jws-priv-key + {{- end }} + {{- if .Values.env.VALIDATE_INBOUND_JWS }} + - name: jws-public-keys + secret: + secretName: {{ template "common.names.fullname" . }}-jws-public-keys + {{- end }} + containers: + - name: {{ .Chart.Name }} + image: {{ template "sdk-scheme-adapter-svc.image" . }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + {{- if .Values.containerSecurityContext.enabled }} + securityContext: {{- omit .Values.containerSecurityContext "enabled" | toYaml | nindent 12 }} + {{- end }} + {{- if .Values.diagnosticMode.enabled }} + command: {{- include "common.tplvalues.render" (dict "value" .Values.diagnosticMode.command "context" $) | nindent 12 }} + {{- else if .Values.command }} + command: {{- include "common.tplvalues.render" (dict "value" .Values.command "context" $) | nindent 12 }} + {{- end }} + {{- if .Values.diagnosticMode.enabled }} + args: {{- include "common.tplvalues.render" (dict "value" .Values.diagnosticMode.args "context" $) | nindent 12 }} + {{- else if .Values.args }} + args: {{- include "common.tplvalues.render" (dict "value" .Values.args "context" $) | nindent 12 }} + {{- end }} + ports: + {{- if (hasKey .Values.service "internalPort") }} + - name: http + containerPort: {{ .Values.service.internalPort }} + {{- end }} + {{- if (hasKey .Values.env "INBOUND_LISTEN_PORT") }} + - name: inboundapi + containerPort: {{ .Values.env.INBOUND_LISTEN_PORT }} + protocol: TCP + {{- end }} + {{- if (hasKey .Values.env "OUTBOUND_LISTEN_PORT") }} + - name: outboundapi + containerPort: {{ .Values.env.OUTBOUND_LISTEN_PORT }} + protocol: TCP + {{- end }} + {{- if (hasKey .Values.env "TEST_LISTEN_PORT") }} + - name: testapi + containerPort: {{ .Values.env.TEST_LISTEN_PORT }} + protocol: TCP + {{- end }} + {{- if (hasKey .Values.env "WS_PORT") }} + - name: websocket + containerPort: {{ .Values.env.WS_PORT }} + protocol: TCP + {{- end }} + {{- if (hasKey .Values.env "METRICS_SERVER_LISTEN_PORT") }} + - name: metrics + containerPort: {{ .Values.env.METRICS_SERVER_LISTEN_PORT }} + protocol: TCP + {{- end }} + {{- if .Values.diagnosticMode.enabled }} + - name: debug + containerPort: {{ .Values.diagnosticMode.debug.internalPort }} + {{- end }} + {{- if .Values.readinessProbe }} + readinessProbe: + {{- include "common.tplvalues.render" (dict "value" .Values.readinessProbe "context" $) | nindent 12 }} + {{- end }} + {{- if .Values.livenessProbe }} + livenessProbe: + {{- include "common.tplvalues.render" (dict "value" .Values.livenessProbe "context" $) | nindent 12 }} + {{- end }} + env: + {{- if not (hasKey .Values.env "BACKEND_ENDPOINT") }} + - name: BACKEND_ENDPOINT + value: {{ printf "%s-backend:3000" (include "common.names.fullname" . ) }} + {{- end }} + {{- range $k, $v := .Values.env }} + - name: {{ $k }} + value: {{ include "common.tplvalues.render" (dict "value" $v "context" $) | quote }} + {{- end }} + volumeMounts: + {{- if .Values.env.JWS_SIGN }} + - name: jws-private-key + mountPath: "/jwsSigningKey.key" + subPath: private.key + {{- end }} + {{- if .Values.env.VALIDATE_INBOUND_JWS }} + - name: jws-public-keys + mountPath: "/jwsVerificationKeys/" + {{- end }} diff --git a/sdk-scheme-adapter/chart-service/templates/ingress.yaml b/sdk-scheme-adapter/chart-service/templates/ingress.yaml new file mode 100644 index 000000000..f17c032d6 --- /dev/null +++ b/sdk-scheme-adapter/chart-service/templates/ingress.yaml @@ -0,0 +1,63 @@ +{{- if .Values.ingress.enabled }} +apiVersion: {{ include "common.capabilities.ingress.apiVersion" . }} +kind: Ingress +metadata: + name: {{ template "common.names.fullname" . }} + namespace: {{ .Release.Namespace | quote }} + labels: {{- include "common.labels.standard" . | nindent 4 }} + app.kubernetes.io/component: {{ .Chart.Name }} + {{- if .Values.commonLabels }} + {{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }} + {{- end }} + {{- if or .Values.ingress.annotations .Values.commonAnnotations .Values.ingress.certManager }} + annotations: + {{- if .Values.ingress.certManager }} + kubernetes.io/tls-acme: "true" + {{- end }} + {{- if .Values.ingress.annotations }} + {{- include "common.tplvalues.render" ( dict "value" .Values.ingress.annotations "context" $) | nindent 4 }} + {{- end }} + {{- if .Values.commonAnnotations }} + {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }} + {{- end }} + {{- end }} +spec: + {{- if and .Values.ingress.className (semverCompare ">=1.22-0" .Capabilities.KubeVersion.GitVersion) }} + ingressClassName: {{ .Values.ingress.className }} + {{- end }} + rules: + {{- if .Values.ingress.hostname }} + - host: {{ .Values.ingress.hostname }} + http: + paths: + {{- if .Values.ingress.extraPaths }} + {{- include "common.tplvalues.render" (dict "value" .Values.ingress.extraPaths "context" $) | nindent 10 }} + {{- end }} + - path: {{ .Values.ingress.path }} + {{- if eq "true" (include "common.ingress.supportsPathType" .) }} + pathType: {{ .Values.ingress.pathType }} + {{- end }} + backend: {{- include "common.ingress.backend" (dict "serviceName" (include "common.names.fullname" .) "servicePort" "http" "context" $) | nindent 14 }} + {{- end }} + {{- range .Values.ingress.extraHosts }} + - host: {{ .name | quote }} + http: + paths: + - path: {{ default "/" .path }} + {{- if eq "true" (include "common.ingress.supportsPathType" $) }} + pathType: {{ default "ImplementationSpecific" .pathType }} + {{- end }} + backend: {{- include "common.ingress.backend" (dict "serviceName" (include "common.names.fullname" .) "servicePort" "http" "context" $) | nindent 14 }} + {{- end }} + {{- if or (and .Values.ingress.tls (or .Values.ingress.certManager .Values.ingress.selfSigned)) .Values.ingress.extraTls }} + tls: + {{- if and .Values.ingress.tls (or .Values.ingress.certManager .Values.ingress.selfSigned) }} + - hosts: + - {{ .Values.ingress.hostname | quote }} + secretName: {{ printf "%s-tls" .Values.ingress.hostname }} + {{- end }} + {{- if .Values.ingress.extraTls }} + {{- include "common.tplvalues.render" (dict "value" .Values.ingress.extraTls "context" $) | nindent 4 }} + {{- end }} + {{- end }} +{{- end }} diff --git a/sdk-scheme-adapter/chart-service/templates/secret.yaml b/sdk-scheme-adapter/chart-service/templates/secret.yaml new file mode 100644 index 000000000..af6e6cf6c --- /dev/null +++ b/sdk-scheme-adapter/chart-service/templates/secret.yaml @@ -0,0 +1,46 @@ +{{- if .Values.env.JWS_SIGN }} +apiVersion: v1 +kind: Secret +metadata: + name: {{ template "common.names.fullname" . }}-jws-priv-key + namespace: {{ .Release.Namespace | quote }} + labels: {{- include "common.labels.standard" . | nindent 4 }} + app.kubernetes.io/component: {{ .Chart.Name }} + {{- if .Values.commonLabels }} + {{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }} + {{- end }} + {{- if .Values.commonAnnotations }} + annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }} + {{- end }} +data: + # Note that due to a bug with helm 2.9.1 the `required` function in combination with a missing + # key will not work in place of this if statement. + {{- if eq .Values.config.jwsSigningKey "" }} + {{ fail (printf "JWS_SIGN enabled- JWS private key required. You need to specify .Values.config.jwsSigningKey.") }} + {{- end }} + "private.key": {{ .Values.config.jwsSigningKey | b64enc }} +--- +{{- end }} + +{{- if .Values.env.VALIDATE_INBOUND_JWS }} +apiVersion: v1 +kind: Secret +metadata: + name: {{ template "common.names.fullname" . }}-jws-public-keys + namespace: {{ .Release.Namespace | quote }} + labels: {{- include "common.labels.standard" . | nindent 4 }} + app.kubernetes.io/component: {{ .Chart.Name }} + {{- if .Values.commonLabels }} + {{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }} + {{- end }} + {{- if .Values.commonAnnotations }} + annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }} + {{- end }} +data: + {{- if (not .Values.config.jwsVerificationKeys) }} + {{- fail (printf "VALIDATE_INBOUND_JWS enabled and jws public key not specified. You need to specify .Values.config.jwsVerificationKeys") }} + {{- end }} + {{- range $name, $key := .Values.config.jwsVerificationKeys }} + {{ $name }}.pem: {{ $key | b64enc }} + {{- end }} +{{- end }} diff --git a/sdk-scheme-adapter/chart-service/templates/service.yaml b/sdk-scheme-adapter/chart-service/templates/service.yaml new file mode 100644 index 000000000..39c3d7bd0 --- /dev/null +++ b/sdk-scheme-adapter/chart-service/templates/service.yaml @@ -0,0 +1,69 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ template "common.names.fullname" . }} + namespace: {{ .Release.Namespace | quote }} + labels: {{- include "common.labels.standard" . | nindent 4 }} + app.kubernetes.io/component: {{ .Chart.Name }} + {{- if .Values.commonLabels }} + {{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }} + {{- end }} + {{- if .Values.commonAnnotations }} + annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }} + {{- end }} +spec: + type: {{ .Values.service.type }} + {{- if (or (eq .Values.service.type "LoadBalancer") (eq .Values.service.type "NodePort")) }} + externalTrafficPolicy: {{ .Values.service.externalTrafficPolicy | quote }} + {{- end }} + {{- if eq .Values.service.type "LoadBalancer" }} + loadBalancerSourceRanges: {{ .Values.service.loadBalancerSourceRanges }} + {{- end }} + {{- if (and (eq .Values.service.type "LoadBalancer") (not (empty .Values.service.loadBalancerIP))) }} + loadBalancerIP: {{ .Values.service.loadBalancerIP }} + {{- end }} + ports: + {{- if (hasKey .Values.service "internalPort") }} + - name: http + port: {{ .Values.service.port }} + targetPort: {{ .Values.service.internalPort }} + protocol: TCP + {{- end }} + {{- if (hasKey .Values.env "INBOUND_LISTEN_PORT") }} + - port: {{ .Values.env.INBOUND_LISTEN_PORT }} + protocol: TCP + name: inboundapi + targetPort: inboundapi + {{- end }} + {{- if (hasKey .Values.env "OUTBOUND_LISTEN_PORT") }} + - port: {{ .Values.env.OUTBOUND_LISTEN_PORT }} + protocol: TCP + name: outboundapi + targetPort: outboundapi + {{- end }} + {{- if (hasKey .Values.env "TEST_LISTEN_PORT") }} + - port: {{ .Values.env.TEST_LISTEN_PORT }} + protocol: TCP + name: testapi + targetPort: testapi + {{- end }} + {{- if (hasKey .Values.env "WS_PORT") }} + - port: {{ .Values.env.WS_PORT }} + protocol: TCP + name: websocket + targetPort: websocket + {{- end }} + {{- if (hasKey .Values.env "METRICS_SERVER_LISTEN_PORT") }} + - port: {{ .Values.env.METRICS_SERVER_LISTEN_PORT }} + protocol: TCP + name: metrics + targetPort: metrics + {{- end }} + {{- if .Values.diagnosticMode.enabled }} + - name: debug + port: {{ .Values.diagnosticMode.debug.port }} + targetPort: {{ .Values.diagnosticMode.debug.internalPort }} + protocol: TCP + {{- end }} + selector: {{- include "common.labels.matchLabels" . | nindent 4 }} + app.kubernetes.io/component: {{ .Chart.Name }} diff --git a/sdk-scheme-adapter/chart-service/values.yaml b/sdk-scheme-adapter/chart-service/values.yaml new file mode 100644 index 000000000..c9b0280fc --- /dev/null +++ b/sdk-scheme-adapter/chart-service/values.yaml @@ -0,0 +1,614 @@ +# Default values for sdk-scheme-adapter-svc. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +# @section Global parameters +## Global Docker image parameters +## Please, note that this will override the image parameters, including dependencies, configured to use the global value +## Current available global Docker image parameters: imageRegistry, imagePullSecrets and storageClass + +## @param global.imageRegistry Global Docker image registry +## @param global.imagePullSecrets Global Docker registry secret names as an array +## @param global.storageClass Global StorageClass for Persistent Volume(s) +## +global: + # kafka: {} + kafka: + host: kafka + port: 9092 + + # redis: {} + redis: + host: redis + port: 6379 + database: 0 # This is a number between 0 to 15 + +## Set this if you want to use the global override +kafka: {} +## Set this to override this specifically +# kafka: +# host: kafka +# port: 9092 + +## Set this if you want to use the global override +redis: {} +## Set this to override this specifically +# redis: +# host: redis +# port: 6379 +# database: 0 # This is a number between 0 to 15 + +config: + simName: testFsp + ## JWS configuration + jwsSigningKey: "" + jwsVerificationKeys: {} + + +env: + ## API-SVC general config + # Port number that the inbound (Mojaloop API) HTTP server will listen on + INBOUND_LISTEN_PORT: 4000 + + # Port number that the outbound (simplified DFSP outbound API) HTTP server will listen on + OUTBOUND_LISTEN_PORT: 4001 + + # Enable mutual TLS authentication. Useful when not running in a secure + # environment, i.e. when you're running it locally against your own implementation. + INBOUND_MUTUAL_TLS_ENABLED: false + OUTBOUND_MUTUAL_TLS_ENABLED: false + + # Enable verification or incoming JWS signatures + # Note that signatures will be required on incoming messages + # and will be validated against a public key. + VALIDATE_INBOUND_JWS: false + + # applicable only if VALIDATE_INBOUND_JWS is "true" + # allows disabling of validation on incoming PUT /parties/{idType}/{idValue} requests + VALIDATE_INBOUND_PUT_PARTIES_JWS: false + + # Enable signing of outgoing requests + JWS_SIGN: false + + # applicable only if JWS_SIGN is "true" + # allows disabling of signing on outgoing PUT /parties/{idType}/{idValue} requests + JWS_SIGN_PUT_PARTIES: false + + # Path to JWS signing key (private key of THIS DFSP) + ## TODO: Uncomment the following lines if JWS_SIGN is enabled + # JWS_SIGNING_KEY_PATH: /jwsSigningKey.key + # JWS_VERIFICATION_KEYS_DIRECTORY: /jwsVerificationKeys + JWS_SIGNING_KEY_PATH: secrets/jwsSigningKey.key + JWS_VERIFICATION_KEYS_DIRECTORY: secrets/jwsVerificationKeys + + # Location of certs and key required for TLS + # IN_CA_CERT_PATH:./secrets/cacert.pem + # IN_SERVER_CERT_PATH:./secrets/servercert.pem + # IN_SERVER_KEY_PATH:./secrets/serverkey.pem + + # OUT_CA_CERT_PATH:./secrets/cacert.pem + # OUT_CLIENT_CERT_PATH:./secrets/servercert.pem + # OUT_CLIENT_KEY_PATH:./secrets/serverkey.pem + + # The number of space characters by which to indent pretty-printed logs. If set to zero, log events + # will each be printed on a single line. + LOG_INDENT: 0 + + # REDIS CACHE CONNECTION + CACHE_URL: redis://{{ include "common.tplvalues.render" (dict "value" .Values.redis.host "context" $) | default (include "common.tplvalues.render" (dict "value" .Values.global.redis.host "context" $)) }}:{{ .Values.redis.port | default .Values.global.redis.port }}/{{ .Values.redis.database | default .Values.global.redis.database }} + CACHE_SHOULD_EXPIRE: false + CACHE_EXPIRY_SECONDS: 3600 + + # SWITCH ENDPOINT + # The option 'PEER_ENDPOINT' has no effect if the remaining options 'ALS_ENDPOINT', 'QUOTES_ENDPOINT', + # 'BULK_QUOTES_ENDPOINT', 'TRANSFERS_ENDPOINT', 'BULK_TRANSFERS_ENDPOINT', 'TRANSACTION_REQUESTS_ENDPOINT' are specified. + PEER_ENDPOINT: localhost:4000 + + ### Set each Mojaloop Switch endpoint service individually + ALS_ENDPOINT: '{{ .Release.Name }}-account-lookup-service' + QUOTES_ENDPOINT: '{{ .Release.Name }}-quoting-service' + BULK_QUOTES_ENDPOINT: '{{ .Release.Name }}-quoting-service' + TRANSACTION_REQUESTS_ENDPOINT: '{{ .Release.Name }}-transaction-requests-service' + TRANSFERS_ENDPOINT: '{{ .Release.Name }}-api-adapter-service' + BULK_TRANSFERS_ENDPOINT: '{{ .Release.Name }}-bulk-api-adapter-service' + + # BACKEND ENDPOINT + BACKEND_ENDPOINT: localhost:4000 + + # FSPID of this DFSP + DFSP_ID: '{{ .Values.config.simName }}' + + # Secret used for generation and verification of secure ILP + ILP_SECRET: Quaixohyaesahju3thivuiChai5cahng + + # expiry period in seconds for quote and transfers issued by the SDK + EXPIRY_SECONDS: 60 + + # if set to false the SDK will not automatically accept all returned quotes + # but will halt the transfer after a quote response is received. A further + # confirmation call will be required to complete the final transfer stage. + AUTO_ACCEPT_QUOTES: false + + # if set to false the SDK will not automatically accept a resolved party + # but will halt the transer after a party lookup response is received. A further + # cnofirmation call will be required to progress the transfer to quotes state. + AUTO_ACCEPT_PARTY: false + + # when set to true, when sending money via the outbound API, the SDK will use the value + # of FSPIOP-Source header from the received quote response as the payeeFsp value in the + # transfer prepare request body instead of the value received in the payee party lookup. + # This behaviour should be enabled when the SDK user DFSP is in a forex enabled switch + # ecosystem and expects quotes and transfers to be rerouted by the switch to forex + # entities i.e. forex providing DFSPs. Please see the SDK documentation and switch + # operator documentation for more information on forex use cases. + USE_QUOTE_SOURCE_FSP_AS_TRANSFER_PAYEE_FSP: false + + # set to true to validate ILP, otherwise false to ignore ILP + CHECK_ILP: true + + # set to true to enable test features such as request cacheing and retrieval endpoints + ENABLE_TEST_FEATURES: false + + # set to true to mock WSO2 oauth2 token endpoint + ENABLE_OAUTH_TOKEN_ENDPOINT: false + OAUTH_TOKEN_ENDPOINT_CLIENT_KEY: test-client-key + OAUTH_TOKEN_ENDPOINT_CLIENT_SECRET: test-client-secret + OAUTH_TOKEN_ENDPOINT_LISTEN_PORT: 6000 + + # WSO2 Bearer Token specific to golden-fsp instance and environment + WSO2_BEARER_TOKEN: 7718fa9b-be13-3fe7-87f0-a12cf1628168 + + # OAuth2 data used to obtain WSO2 bearer token + OAUTH_TOKEN_ENDPOINT: + OAUTH_CLIENT_KEY: + OAUTH_CLIENT_SECRET: + OAUTH_REFRESH_SECONDS: 3600 + + # Set to true to respect expirity timestamps + REJECT_EXPIRED_QUOTE_RESPONSES: false + REJECT_TRANSFERS_ON_EXPIRED_QUOTES: false + REJECT_EXPIRED_TRANSFER_FULFILS: false + + # Timeout for GET/POST/DELETE - PUT flow processing + REQUEST_PROCESSING_TIMEOUT_SECONDS: 4 + + # To allow transfer without a previous quote request, set this value to true. + # The incoming transfer request should consists of an ILP packet and a matching condition in this case. + # The fulfilment will be generated from the provided ILP packet, and must hash to the provided condition. + ALLOW_TRANSFER_WITHOUT_QUOTE: false + + # To enable request for notification on fulfiled transfer + RESERVE_NOTIFICATION: true + # resources API versions should be string in format: "resourceOneName=1.0,resourceTwoName=1.1" + RESOURCE_VERSIONS: transfers=1.1,participants=1.1 + + # Management API websocket connection settings. + # The Management API uses this for exchanging connector management messages. + MGMT_API_WS_URL: 127.0.0.1 + MGMT_API_WS_PORT: 4005 + + # Set to true to enable the use of PM4ML-related services e.g MCM, Management API service + # when running the scheme-adapter as a mojaloop connector component within Payment Manager for Mojaloop. + PM4ML_ENABLED: false + + ## API-SVC kafka config + BACKEND_EVENT_CONSUMER_BROKER_LIST: '{{ include "common.tplvalues.render" (dict "value" .Values.kafka.host "context" $) | default (include "common.tplvalues.render" (dict "value" .Values.global.kafka.host "context" $)) }}:{{ .Values.kafka.port | default .Values.global.kafka.port }}' + BACKEND_EVENT_PRODUCER_BROKER_LIST: '{{ include "common.tplvalues.render" (dict "value" .Values.kafka.host "context" $) | default (include "common.tplvalues.render" (dict "value" .Values.global.kafka.host "context" $)) }}:{{ .Values.kafka.port | default .Values.global.kafka.port }}' + FSPIOP_EVENT_CONSUMER_BROKER_LIST: '{{ include "common.tplvalues.render" (dict "value" .Values.kafka.host "context" $) | default (include "common.tplvalues.render" (dict "value" .Values.global.kafka.host "context" $)) }}:{{ .Values.kafka.port | default .Values.global.kafka.port }}' + FSPIOP_EVENT_PRODUCER_BROKER_LIST: '{{ include "common.tplvalues.render" (dict "value" .Values.kafka.host "context" $) | default (include "common.tplvalues.render" (dict "value" .Values.global.kafka.host "context" $)) }}:{{ .Values.kafka.port | default .Values.global.kafka.port }}' + BACKEND_EVENT_CONSUMER_GROUP_ID: '{{ .Values.config.simName }}-sdk_api_backend_consumer_group' + FSPIOP_EVENT_CONSUMER_GROUP_ID: '{{ .Values.config.simName }}-sdk_api_fspiop_consumer_group' + BACKEND_EVENT_CONSUMER_TOPICS: '{{ .Values.config.simName }}-topic-sdk-outbound-domain-events' + BACKEND_EVENT_PRODUCER_TOPIC: '{{ .Values.config.simName }}-topic-sdk-outbound-domain-events' + FSPIOP_EVENT_CONSUMER_TOPICS: '{{ .Values.config.simName }}-topic-sdk-outbound-domain-events' + FSPIOP_EVENT_PRODUCER_TOPIC: '{{ .Values.config.simName }}-topic-sdk-outbound-domain-events' + + ## outbound-command-event-handler + # LOG_LEVEL: info + COMMAND_EVENT_API_SERVER_ENABLED: true + COMMAND_EVENT_API_SERVER_PORT: 8000 + REDIS_CONNECTION_URL: redis://{{ include "common.tplvalues.render" (dict "value" .Values.redis.host "context" $) | default (include "common.tplvalues.render" (dict "value" .Values.global.redis.host "context" $)) }}:{{ .Values.redis.port | default .Values.global.redis.port }}/{{ .Values.redis.database | default .Values.global.redis.database }} + COMMAND_EVENT_CONSUMER_BROKER_LIST: '{{ include "common.tplvalues.render" (dict "value" .Values.kafka.host "context" $) | default (include "common.tplvalues.render" (dict "value" .Values.global.kafka.host "context" $)) }}:{{ .Values.kafka.port | default .Values.global.kafka.port }}' + DOMAIN_EVENT_PRODUCER_BROKER_LIST: '{{ include "common.tplvalues.render" (dict "value" .Values.kafka.host "context" $) | default (include "common.tplvalues.render" (dict "value" .Values.global.kafka.host "context" $)) }}:{{ .Values.kafka.port | default .Values.global.kafka.port }}' + MAX_ITEMS_PER_BATCH: 1000 + COMMAND_EVENT_CONSUMER_GROUP_ID: '{{ .Values.config.simName }}-sdk-command_events_consumer_group' + COMMAND_EVENT_CONSUMER_TOPICS: '{{ .Values.config.simName }}-topic-sdk-outbound-command-events' + DOMAIN_EVENT_PRODUCER_TOPIC: '{{ .Values.config.simName }}-topic-sdk-outbound-domain-events' + + ## outbound-domain-event-handler + # LOG_LEVEL: info + DOMAIN_EVENT_API_SERVER_ENABLED: true + DOMAIN_EVENT_API_SERVER_PORT: 8001 + # REDIS_CONNECTION_URL: redis://{{ include "common.tplvalues.render" (dict "value" .Values.redis.host "context" $) | default (include "common.tplvalues.render" (dict "value" .Values.global.redis.host "context" $)) }}:{{ .Values.redis.port | default .Values.global.redis.port }}/{{ .Values.redis.database | default .Values.global.redis.database }} + DOMAIN_EVENT_CONSUMER_BROKER_LIST: '{{ include "common.tplvalues.render" (dict "value" .Values.kafka.host "context" $) | default (include "common.tplvalues.render" (dict "value" .Values.global.kafka.host "context" $)) }}:{{ .Values.kafka.port | default .Values.global.kafka.port }}' + COMMAND_EVENT_PRODUCER_BROKER_LIST: '{{ include "common.tplvalues.render" (dict "value" .Values.kafka.host "context" $) | default (include "common.tplvalues.render" (dict "value" .Values.global.kafka.host "context" $)) }}:{{ .Values.kafka.port | default .Values.global.kafka.port }}' + DOMAIN_EVENT_CONSUMER_GROUP_ID: '{{ .Values.config.simName }}-sdk-domain_events_consumer_group' + DOMAIN_EVENT_CONSUMER_TOPICS: '{{ .Values.config.simName }}-topic-sdk-outbound-domain-events' + COMMAND_EVENT_PRODUCER_TOPIC: '{{ .Values.config.simName }}-topic-sdk-outbound-command-events' + +podAffinityPreset: "" +## @param podAntiAffinityPreset Pod anti-affinity preset. Ignored if `main.affinity` is set. Allowed values: `soft` or `hard` +## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-anti-affinity +## +podAntiAffinityPreset: soft +## Node affinity preset +## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity +## + +nodeAffinityPreset: + ## @param nodeAffinityPreset.type Node affinity preset type. Ignored if `main.affinity` is set. Allowed values: `soft` or `hard` + ## + type: "" + ## @param nodeAffinityPreset.key Node label key to match. Ignored if `main.affinity` is set + ## + key: "" + ## @param nodeAffinityPreset.values Node label values to match. Ignored if `main.affinity` is set + ## E.g. + ## values: + ## - e2e-az1 + ## - e2e-az2 + ## + values: [] +## @param affinity Affinity for %%MAIN_CONTAINER_NAME%% pods assignment +## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity +## NOTE: `podAffinityPreset`, `main.podAntiAffinityPreset`, and `main.nodeAffinityPreset` will be ignored when it's set +## + +## Pod scheduling preferences. +## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity +affinity: {} + +## Node labels for pod assignment +## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#nodeselector +nodeSelector: {} + +## Set toleration for scheduler +## ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ +tolerations: [] + +## Configure Pods Security Context +## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod +## @param podSecurityContext.enabled Enabled %%MAIN_CONTAINER_NAME%% pods' Security Context +## @param podSecurityContext.fsGroup Set %%MAIN_CONTAINER_NAME%% pod's Security Context fsGroup +## +podSecurityContext: + enabled: true + fsGroup: 1001 +## Configure Container Security Context +## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod +## @param containerSecurityContext.enabled Enabled %%MAIN_CONTAINER_NAME%% containers' Security Context +## @param containerSecurityContext.runAsUser Set %%MAIN_CONTAINER_NAME%% containers' Security Context runAsUser +## +containerSecurityContext: + enabled: true + runAsUser: 1001 + +image: + registry: docker.io + repository: mojaloop/sdk-scheme-adapter + tag: v21.4.0 + ## Specify a imagePullPolicy + ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' + ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images + ## + pullPolicy: IfNotPresent + ## Optionally specify an array of imagePullSecrets. + ## Secrets must be manually created in the namespace. + ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/ + ## e.g: + ## pullSecrets: + ## - myRegistryKeySecretName + ## + pullSecrets: [] + ## Enable debug mode + ## + debug: false + +replicaCount: 1 +command: + - yarn + ## Start ALL APIs and Handlers + - start + ## Start only the SDK-Scheme-Adapter API Service + # - start:api-svc + ## Start only the Outbound Domain Event Handler + # - start:event-handler + ## Start only the Outbound Command Event Handler + # - start:command-handler + + +## Enable diagnostic mode in the deployment +## +diagnosticMode: + ## @param diagnosticMode.enabled Enable diagnostic mode (all probes will be disabled and the command will be overridden) + ## + enabled: false + ## @param diagnosticMode.command Command to override all containers in the deployment + ## + command: + - yarn + - start + ## @param diagnosticMode.args Args to override all containers in the deployment + ## + args: + - --inspect=0.0.0.0:{{ .Values.diagnosticMode.debug.port }} + + ## @param diagnosticMode.debug config to override all debug information + ## + debug: + internalPort: 9229 + port: 9229 + +## @param initContainers Add additional init containers to the %%MAIN_CONTAINER_NAME%% pod(s) +## ref: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ +## e.g: +## initContainers: +## - name: your-image-name +## image: your-image +## imagePullPolicy: Always +## command: ['sh', '-c', 'echo "hello world"'] +## +# initContainers: [] +initContainers: | + - name: wait-for-kafka + image: solsson/kafka:2.8.1 + imagePullPolicy: IfNotPresent + command: + - sh + - -c + - until ./bin/kafka-broker-api-versions.sh --bootstrap-server ${KAFKA_HOST}:${KAFKA_PORT}; + do + echo --------------------; + echo Waiting for Kafka...; + sleep 2; + done; + echo ====================; + echo Kafka ok!; + env: + - name: KAFKA_HOST + value: {{ .Values.kafka.host | default .Values.global.kafka.host | quote }} + - name: KAFKA_PORT + value: {{ .Values.kafka.port | default .Values.global.kafka.port | quote }} + - name: kafka-topics-create + image: docker.io/bitnami/kafka:3.2 + imagePullPolicy: IfNotPresent + command: + - sh + - -c + - kafka-topics.sh --bootstrap-server ${KAFKA_HOST}:${KAFKA_PORT} --list; + echo 'Creating kafka topics'; + kafka-topics.sh --bootstrap-server ${KAFKA_HOST}:${KAFKA_PORT} --create --if-not-exists --topic ${SIM_NAME}-topic-sdk-outbound-command-events --replication-factor 1 --partitions 1; + kafka-topics.sh --bootstrap-server ${KAFKA_HOST}:${KAFKA_PORT} --create --if-not-exists --topic ${SIM_NAME}-topic-sdk-outbound-domain-events --replication-factor 1 --partitions 1; + echo -e 'Successfully created the following topics:'; + kafka-topics.sh --bootstrap-server ${KAFKA_HOST}:${KAFKA_PORT} --list; + env: + - name: KAFKA_HOST + value: {{ .Values.kafka.host | default .Values.global.kafka.host | quote }} + - name: KAFKA_PORT + value: {{ .Values.kafka.port | default .Values.global.kafka.port | quote }} + - name: SIM_NAME + value: {{ .Values.config.simName }} + - name: wait-for-redis + image: redis:7.0.5 + imagePullPolicy: IfNotPresent + command: + - sh + - -c + - until redis-cli -h ${REDIS_HOST} -p ${REDIS_PORT} ping; + do + echo --------------------; + echo Waiting for Redis...; + sleep 2; + done; + echo ====================; + echo Redis ok!; + env: + - name: REDIS_HOST + value: {{ .Values.redis.host | default .Values.global.redis.host | quote }} + - name: REDIS_PORT + value: {{ .Values.redis.port | default .Values.global.redis.port | quote }} + +readinessProbe: | + httpGet: + path: / + port: {{ .Values.env.OUTBOUND_LISTEN_PORT }} + initialDelaySeconds: 15 + periodSeconds: 15 +livenessProbe: | + httpGet: + path: / + port: {{ .Values.env.OUTBOUND_LISTEN_PORT }} + initialDelaySeconds: 15 + periodSeconds: 15 + +## metric configuration for prometheus instrumentation +metrics: + ## flag to enable/disable the metrics end-points + enabled: true + config: + timeout: 5000 + port: "{{ .Values.env.METRICS_SERVER_LISTEN_PORT }}" + prefix: moja_ + defaultLabels: + serviceName: sdk-scheme-adapter-api-svc + +service: + ## Not used by the SDK-Scheme-Adapter + # internalPort: 3000 + ## @param service.type %%MAIN_CONTAINER_NAME%% service type + ## + type: ClusterIP + ## @param service.port %%MAIN_CONTAINER_NAME%% service HTTP port + ## + port: 80 + ## @param service.httpsPort %%MAIN_CONTAINER_NAME%% service HTTPS port + ## + httpsPort: 443 + ## Node ports to expose + ## @param service.nodePorts.http Node port for HTTP + ## @param service.nodePorts.https Node port for HTTPS + ## NOTE: choose port between <30000-32767> + ## + nodePorts: + http: + https: + ## @param service.clusterIP %%MAIN_CONTAINER_NAME%% service Cluster IP + ## e.g.: + ## clusterIP: None + ## + clusterIP: + ## @param service.loadBalancerIP %%MAIN_CONTAINER_NAME%% service Load Balancer IP + ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer + ## + loadBalancerIP: + ## @param service.loadBalancerSourceRanges %%MAIN_CONTAINER_NAME%% service Load Balancer sources + ## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service + ## e.g: + ## loadBalancerSourceRanges: + ## - 10.10.10.0/24 + ## + loadBalancerSourceRanges: [] + ## @param service.externalTrafficPolicy %%MAIN_CONTAINER_NAME%% service external traffic policy + ## ref http://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-client-source-ip + ## + externalTrafficPolicy: Cluster + ## @param service.annotations Additional custom annotations for %%MAIN_CONTAINER_NAME%% service + ## + annotations: {} + +ingress: + ## @param ingress.enabled Enable ingress record generation for %%MAIN_CONTAINER_NAME%% + ## + enabled: true + ## @param ingress.pathType Ingress path type + ## + pathType: ImplementationSpecific + ## @param ingress.apiVersion Force Ingress API version (automatically detected if not set) + ## + apiVersion: + ## @param ingress.hostname Default host for the ingress record + ## + hostname: sdk-scheme-adapter.local + ## @param ingress.path Default path for the ingress record + ## NOTE: You may need to set this to '/*' in order to use this with ALB ingress controllers + ## + path: / + ## @param ingress.annotations Additional custom annotations for the ingress record + ## NOTE: If `ingress.certManager=true`, annotation `kubernetes.io/tls-acme: "true"` will automatically be added + ## + annotations: {} + ## Example annotations for ingress class and rewrite-targets + ## https://kubernetes.github.io/ingress-nginx/examples/rewrite/ + # nginx.ingress.kubernetes.io/rewrite-target: '/' + # nginx.ingress.kubernetes.io/rewrite-target: '/$2' + ## https://kubernetes.github.io/ingress-nginx/user-guide/multiple-ingress/ + # kubernetes.io/ingress.class: nginx + ## https://kubernetes.github.io/ingress-nginx/user-guide/tls/#automated-certificate-management-with-kube-lego + # kubernetes.io/tls-acme: "true"" + + ## @param ingress.tls Enable TLS configuration for the host defined at `ingress.hostname` parameter + ## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" .Values.ingress.hostname }}` + ## You can: + ## - Use the `ingress.secrets` parameter to create this TLS secret + ## - Relay on cert-manager to create it by setting `ingress.certManager=true` + ## - Relay on Helm to create self-signed certificates by setting `ingress.selfSigned=true` + ## + tls: false + ## @param ingress.certManager Add the corresponding annotations for cert-manager integration + ## + certManager: false + ## @param ingress.selfSigned Create a TLS secret for this ingress record using self-signed certificates generated by Helm + ## + selfSigned: false + ## @param ingress.extraHosts An array with additional hostname(s) to be covered with the ingress record + ## e.g: + ## extraHosts: + ## - name: transfer-api-svc.local + ## path: / + ## + ## @param ingress.extraPaths An array with additional arbitrary paths that may need to be added to the ingress under the main host + ## e.g: + ## extraPaths: + ## - path: /* + ## backend: + ## serviceName: ssl-redirect + ## servicePort: use-annotation + ## + # extraPaths: [] + extraPaths: + - path: /inbound/ + pathType: ImplementationSpecific + backend: + service: + name: '{{ include "common.names.fullname" . }}' + port: + name: inboundapi + # serviceName: '{{ include "common.names.fullname" . }}' + # servicePort: inboundapi + - path: /outbound/ + pathType: ImplementationSpecific + backend: + service: + name: '{{ include "common.names.fullname" . }}' + port: + name: outboundapi + # serviceName: '{{ include "common.names.fullname" . }}' + # servicePort: outboundapi + - path: /sdktest/ + pathType: ImplementationSpecific + backend: + service: + name: '{{ include "common.names.fullname" . }}' + port: + name: testapi + ## This is required for + # serviceName: '{{ include "common.names.fullname" . }}' + # servicePort: testapi + ## @param ingress.extraTls TLS configuration for additional hostname(s) to be covered with this ingress record + ## ref: https://kubernetes.io/docs/concepts/services-networking/ingress/#tls + ## e.g: + ## extraTls: + ## - hosts: + ## - transfer-api-svc.local + ## secretName: transfer-api-svc.local-tls + ## + extraTls: [] + ## @param ingress.secrets Custom TLS certificates as secrets + ## NOTE: 'key' and 'certificate' are expected in PEM format + ## NOTE: 'name' should line up with a 'secretName' set further up + ## If it is not set and you're using cert-manager, this is unneeded, as it will create a secret for you with valid certificates + ## If it is not set and you're NOT using cert-manager either, self-signed certificates will be created valid for 365 days + ## It is also possible to create and manage the certificates outside of this helm chart + ## Please see README.md for more information + ## e.g: + ## secrets: + ## - name: transfer-api-svc.local-tls + ## key: |- + ## -----BEGIN RSA PRIVATE KEY----- + ## ... + ## -----END RSA PRIVATE KEY----- + ## certificate: |- + ## -----BEGIN CERTIFICATE----- + ## ... + ## -----END CERTIFICATE----- + ## + secrets: [] + className: "nginx" + +## RBAC configuration +## +rbac: + ## @param rbac.create Specifies whether RBAC resources should be created + ## + create: false + +## ServiceAccount configuration +## +serviceAccount: + ## @param serviceAccount.create Specifies whether a ServiceAccount should be created + ## + create: false + ## @param serviceAccount.name The name of the ServiceAccount to use. + ## If not set and create is true, a name is generated using the common.names.fullname template + ## + name: "" diff --git a/sdk-scheme-adapter/templates/NOTES.txt b/sdk-scheme-adapter/templates/NOTES.txt new file mode 100644 index 000000000..81760bc26 --- /dev/null +++ b/sdk-scheme-adapter/templates/NOTES.txt @@ -0,0 +1,5 @@ +** Please be patient while the chart is being deployed ** + +%%Instructions to access the application depending on the serviceType and other considerations%% + +{{- include "sdk-scheme-adapter.validateValues" . }} diff --git a/sdk-scheme-adapter/templates/_helpers.tpl b/sdk-scheme-adapter/templates/_helpers.tpl new file mode 100644 index 000000000..9a4d0fa89 --- /dev/null +++ b/sdk-scheme-adapter/templates/_helpers.tpl @@ -0,0 +1,46 @@ +{{/* vim: set filetype=mustache: */}} + +{{/* +Return the proper main image name +*/}} +{{- define "sdk-scheme-adapter.image" -}} +{{ include "common.images.image" (dict "imageRoot" .Values.image "global" .Values.global) }} +{{- end -}} + +{{/* +Return the proper image name (for the init container volume-permissions image) +*/}} +{{- define "sdk-scheme-adapter.volumePermissions.image" -}} +{{- include "common.images.image" ( dict "imageRoot" .Values.volumePermissions.image "global" .Values.global ) -}} +{{- end -}} + +{{/* +Return the proper Docker Image Registry Secret Names +*/}} +{{- define "sdk-scheme-adapter.imagePullSecrets" -}} +{{- include "common.images.pullSecrets" (dict "images" (list .Values.image) "global" .Values.global) -}} +{{- end -}} + +{{/* +Create the name of the service account to use +*/}} +{{- define "sdk-scheme-adapter.serviceAccountName" -}} +{{- if .Values.serviceAccount.create -}} + {{ default (printf "%s" (include "common.names.fullname" .)) .Values.serviceAccount.name }} +{{- else -}} + {{ default "default" .Values.serviceAccount.name }} +{{- end -}} +{{- end -}} + +{{/* +Compile all warnings into a single message. +*/}} +{{- define "sdk-scheme-adapter.validateValues" -}} +{{- $messages := list -}} +{{- $messages := without $messages "" -}} +{{- $message := join "\n" $messages -}} + +{{- if $message -}} +{{- printf "\nVALUES VALIDATION:\n%s" $message -}} +{{- end -}} +{{- end -}} diff --git a/sdk-scheme-adapter/values.yaml b/sdk-scheme-adapter/values.yaml new file mode 100644 index 000000000..eeaf68084 --- /dev/null +++ b/sdk-scheme-adapter/values.yaml @@ -0,0 +1,1418 @@ +# This is a YAML-formatted file. + +# Default values for sdk-scheme-adapter-svc. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +# @section Global parameters +## Global Docker image parameters +## Please, note that this will override the image parameters, including dependencies, configured to use the global value +## Current available global Docker image parameters: imageRegistry, imagePullSecrets and storageClass + +## @param global.imageRegistry Global Docker image registry +## @param global.imagePullSecrets Global Docker registry secret names as an array +## @param global.storageClass Global StorageClass for Persistent Volume(s) +## +global: + kafka: + host: kafka + port: 9092 + + redis: + host: redis + port: 6379 + database: 0 # This is a number between 0 to 15 + +## Local re-usable configs +config: + simName: &CONFIG_SIM_NAME testSimFSP + +sdk-scheme-adapter-api-svc: + enabled: true + + ## Set this if you want to use the global override + kafka: {} + ## Set this to override this specifically + # kafka: + # host: kafka + # port: 9092 + + ## Set this if you want to use the global override + redis: {} + ## Set this to override this specifically + # redis: + # host: redis + # port: 6379 + # database: 0 # This is a number between 0 to 15 + + config: + simName: *CONFIG_SIM_NAME + ## JWS configuration + jwsSigningKey: "" + jwsVerificationKeys: {} + + env: + ## API-SVC general config + # Port number that the inbound (Mojaloop API) HTTP server will listen on + INBOUND_LISTEN_PORT: 4000 + + # Port number that the outbound (simplified DFSP outbound API) HTTP server will listen on + OUTBOUND_LISTEN_PORT: 4001 + + # Enable mutual TLS authentication. Useful when not running in a secure + # environment, i.e. when you're running it locally against your own implementation. + INBOUND_MUTUAL_TLS_ENABLED: false + OUTBOUND_MUTUAL_TLS_ENABLED: false + + # Enable verification or incoming JWS signatures + # Note that signatures will be required on incoming messages + # and will be validated against a public key. + VALIDATE_INBOUND_JWS: false + + # applicable only if VALIDATE_INBOUND_JWS is "true" + # allows disabling of validation on incoming PUT /parties/{idType}/{idValue} requests + VALIDATE_INBOUND_PUT_PARTIES_JWS: false + + # Enable signing of outgoing requests + JWS_SIGN: false + + # applicable only if JWS_SIGN is "true" + # allows disabling of signing on outgoing PUT /parties/{idType}/{idValue} requests + JWS_SIGN_PUT_PARTIES: false + + # Path to JWS signing key (private key of THIS DFSP) + ## TODO: Uncomment the following lines if JWS_SIGN is enabled + # JWS_SIGNING_KEY_PATH: /jwsSigningKey.key + # JWS_VERIFICATION_KEYS_DIRECTORY: /jwsVerificationKeys + JWS_SIGNING_KEY_PATH: secrets/jwsSigningKey.key + JWS_VERIFICATION_KEYS_DIRECTORY: secrets/jwsVerificationKeys + + # Location of certs and key required for TLS + # IN_CA_CERT_PATH:./secrets/cacert.pem + # IN_SERVER_CERT_PATH:./secrets/servercert.pem + # IN_SERVER_KEY_PATH:./secrets/serverkey.pem + + # OUT_CA_CERT_PATH:./secrets/cacert.pem + # OUT_CLIENT_CERT_PATH:./secrets/servercert.pem + # OUT_CLIENT_KEY_PATH:./secrets/serverkey.pem + + # The number of space characters by which to indent pretty-printed logs. If set to zero, log events + # will each be printed on a single line. + LOG_INDENT: 0 + + # REDIS CACHE CONNECTION + CACHE_URL: redis://{{ include "common.tplvalues.render" (dict "value" .Values.redis.host "context" $) | default (include "common.tplvalues.render" (dict "value" .Values.global.redis.host "context" $)) }}:{{ .Values.redis.port | default .Values.global.redis.port }}/{{ .Values.redis.database | default .Values.global.redis.database }} + CACHE_SHOULD_EXPIRE: false + CACHE_EXPIRY_SECONDS: 3600 + + # SWITCH ENDPOINT + # The option 'PEER_ENDPOINT' has no effect if the remaining options 'ALS_ENDPOINT', 'QUOTES_ENDPOINT', + # 'BULK_QUOTES_ENDPOINT', 'TRANSFERS_ENDPOINT', 'BULK_TRANSFERS_ENDPOINT', 'TRANSACTION_REQUESTS_ENDPOINT' are specified. + PEER_ENDPOINT: localhost:4000 + + ### Set each Mojaloop Switch endpoint service individually + ALS_ENDPOINT: '{{ .Release.Name }}-account-lookup-service' + QUOTES_ENDPOINT: '{{ .Release.Name }}-quoting-service' + BULK_QUOTES_ENDPOINT: '{{ .Release.Name }}-quoting-service' + TRANSACTION_REQUESTS_ENDPOINT: '{{ .Release.Name }}-transaction-requests-service' + TRANSFERS_ENDPOINT: '{{ .Release.Name }}-api-adapter-service' + BULK_TRANSFERS_ENDPOINT: '{{ .Release.Name }}-bulk-api-adapter-service' + + # BACKEND ENDPOINT + BACKEND_ENDPOINT: localhost:4000 + + # FSPID of this DFSP + DFSP_ID: '{{ .Values.config.simName }}' + + # Secret used for generation and verification of secure ILP + ILP_SECRET: Quaixohyaesahju3thivuiChai5cahng + + # expiry period in seconds for quote and transfers issued by the SDK + EXPIRY_SECONDS: 60 + + # if set to false the SDK will not automatically accept all returned quotes + # but will halt the transfer after a quote response is received. A further + # confirmation call will be required to complete the final transfer stage. + AUTO_ACCEPT_QUOTES: false + + # if set to false the SDK will not automatically accept a resolved party + # but will halt the transer after a party lookup response is received. A further + # cnofirmation call will be required to progress the transfer to quotes state. + AUTO_ACCEPT_PARTY: false + + # when set to true, when sending money via the outbound API, the SDK will use the value + # of FSPIOP-Source header from the received quote response as the payeeFsp value in the + # transfer prepare request body instead of the value received in the payee party lookup. + # This behaviour should be enabled when the SDK user DFSP is in a forex enabled switch + # ecosystem and expects quotes and transfers to be rerouted by the switch to forex + # entities i.e. forex providing DFSPs. Please see the SDK documentation and switch + # operator documentation for more information on forex use cases. + USE_QUOTE_SOURCE_FSP_AS_TRANSFER_PAYEE_FSP: false + + # set to true to validate ILP, otherwise false to ignore ILP + CHECK_ILP: true + + # set to true to enable test features such as request cacheing and retrieval endpoints + ENABLE_TEST_FEATURES: false + + # set to true to mock WSO2 oauth2 token endpoint + ENABLE_OAUTH_TOKEN_ENDPOINT: false + OAUTH_TOKEN_ENDPOINT_CLIENT_KEY: test-client-key + OAUTH_TOKEN_ENDPOINT_CLIENT_SECRET: test-client-secret + OAUTH_TOKEN_ENDPOINT_LISTEN_PORT: 6000 + + # WSO2 Bearer Token specific to golden-fsp instance and environment + WSO2_BEARER_TOKEN: 7718fa9b-be13-3fe7-87f0-a12cf1628168 + + # OAuth2 data used to obtain WSO2 bearer token + # OAUTH_TOKEN_ENDPOINT: + # OAUTH_CLIENT_KEY: + # OAUTH_CLIENT_SECRET: + # OAUTH_REFRESH_SECONDS: 3600 + + # Set to true to respect expirity timestamps + REJECT_EXPIRED_QUOTE_RESPONSES: false + REJECT_TRANSFERS_ON_EXPIRED_QUOTES: false + REJECT_EXPIRED_TRANSFER_FULFILS: false + + # Timeout for GET/POST/DELETE - PUT flow processing + REQUEST_PROCESSING_TIMEOUT_SECONDS: 4 + + # To allow transfer without a previous quote request, set this value to true. + # The incoming transfer request should consists of an ILP packet and a matching condition in this case. + # The fulfilment will be generated from the provided ILP packet, and must hash to the provided condition. + ALLOW_TRANSFER_WITHOUT_QUOTE: false + + # To enable request for notification on fulfiled transfer + RESERVE_NOTIFICATION: true + # resources API versions should be string in format: "resourceOneName=1.0,resourceTwoName=1.1" + RESOURCE_VERSIONS: transfers=1.1,participants=1.1 + + # Management API websocket connection settings. + # The Management API uses this for exchanging connector management messages. + MGMT_API_WS_URL: 127.0.0.1 + MGMT_API_WS_PORT: 4005 + + # Set to true to enable the use of PM4ML-related services e.g MCM, Management API service + # when running the scheme-adapter as a mojaloop connector component within Payment Manager for Mojaloop. + PM4ML_ENABLED: false + + ## API-SVC kafka config + BACKEND_EVENT_CONSUMER_BROKER_LIST: '{{ include "common.tplvalues.render" (dict "value" .Values.kafka.host "context" $) | default (include "common.tplvalues.render" (dict "value" .Values.global.kafka.host "context" $)) }}:{{ .Values.kafka.port | default .Values.global.kafka.port }}' + BACKEND_EVENT_PRODUCER_BROKER_LIST: '{{ include "common.tplvalues.render" (dict "value" .Values.kafka.host "context" $) | default (include "common.tplvalues.render" (dict "value" .Values.global.kafka.host "context" $)) }}:{{ .Values.kafka.port | default .Values.global.kafka.port }}' + FSPIOP_EVENT_CONSUMER_BROKER_LIST: '{{ include "common.tplvalues.render" (dict "value" .Values.kafka.host "context" $) | default (include "common.tplvalues.render" (dict "value" .Values.global.kafka.host "context" $)) }}:{{ .Values.kafka.port | default .Values.global.kafka.port }}' + FSPIOP_EVENT_PRODUCER_BROKER_LIST: '{{ include "common.tplvalues.render" (dict "value" .Values.kafka.host "context" $) | default (include "common.tplvalues.render" (dict "value" .Values.global.kafka.host "context" $)) }}:{{ .Values.kafka.port | default .Values.global.kafka.port }}' + BACKEND_EVENT_CONSUMER_GROUP_ID: '{{ .Values.config.simName }}-sdk_api_backend_consumer_group' + FSPIOP_EVENT_CONSUMER_GROUP_ID: '{{ .Values.config.simName }}-sdk_api_fspiop_consumer_group' + BACKEND_EVENT_CONSUMER_TOPICS: '{{ .Values.config.simName }}-topic-sdk-outbound-domain-events' + BACKEND_EVENT_PRODUCER_TOPIC: '{{ .Values.config.simName }}-topic-sdk-outbound-domain-events' + FSPIOP_EVENT_CONSUMER_TOPICS: '{{ .Values.config.simName }}-topic-sdk-outbound-domain-events' + FSPIOP_EVENT_PRODUCER_TOPIC: '{{ .Values.config.simName }}-topic-sdk-outbound-domain-events' + + podAffinityPreset: "" + ## @param podAntiAffinityPreset Pod anti-affinity preset. Ignored if `main.affinity` is set. Allowed values: `soft` or `hard` + ## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-anti-affinity + ## + podAntiAffinityPreset: soft + ## Node affinity preset + ## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity + ## + + nodeAffinityPreset: + ## @param nodeAffinityPreset.type Node affinity preset type. Ignored if `main.affinity` is set. Allowed values: `soft` or `hard` + ## + type: "" + ## @param nodeAffinityPreset.key Node label key to match. Ignored if `main.affinity` is set + ## + key: "" + ## @param nodeAffinityPreset.values Node label values to match. Ignored if `main.affinity` is set + ## E.g. + ## values: + ## - e2e-az1 + ## - e2e-az2 + ## + values: [] + ## @param affinity Affinity for %%MAIN_CONTAINER_NAME%% pods assignment + ## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity + ## NOTE: `podAffinityPreset`, `main.podAntiAffinityPreset`, and `main.nodeAffinityPreset` will be ignored when it's set + ## + + ## Pod scheduling preferences. + ## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity + affinity: {} + + ## Node labels for pod assignment + ## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#nodeselector + nodeSelector: {} + + ## Set toleration for scheduler + ## ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ + tolerations: [] + + ## Configure Pods Security Context + ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod + ## @param podSecurityContext.enabled Enabled %%MAIN_CONTAINER_NAME%% pods' Security Context + ## @param podSecurityContext.fsGroup Set %%MAIN_CONTAINER_NAME%% pod's Security Context fsGroup + ## + podSecurityContext: + enabled: true + fsGroup: 1001 + ## Configure Container Security Context + ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod + ## @param containerSecurityContext.enabled Enabled %%MAIN_CONTAINER_NAME%% containers' Security Context + ## @param containerSecurityContext.runAsUser Set %%MAIN_CONTAINER_NAME%% containers' Security Context runAsUser + ## + containerSecurityContext: + enabled: true + runAsUser: 1001 + + image: + registry: docker.io + repository: mojaloop/sdk-scheme-adapter + tag: v21.4.0 + ## Specify a imagePullPolicy + ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' + ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images + ## + pullPolicy: IfNotPresent + ## Optionally specify an array of imagePullSecrets. + ## Secrets must be manually created in the namespace. + ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/ + ## e.g: + ## pullSecrets: + ## - myRegistryKeySecretName + ## + pullSecrets: [] + ## Enable debug mode + ## + debug: false + + replicaCount: 1 + command: + - yarn + - start:api-svc + + ## Enable diagnostic mode in the deployment + ## + diagnosticMode: + ## @param diagnosticMode.enabled Enable diagnostic mode (all probes will be disabled and the command will be overridden) + ## + enabled: false + ## @param diagnosticMode.command Command to override all containers in the deployment + ## + command: + - yarn + - start + ## @param diagnosticMode.args Args to override all containers in the deployment + ## + args: + - --inspect=0.0.0.0:{{ .Values.diagnosticMode.debug.port }} + + ## @param diagnosticMode.debug config to override all debug information + ## + debug: + internalPort: 9229 + port: 9229 + + ## @param initContainers Add additional init containers to the %%MAIN_CONTAINER_NAME%% pod(s) + ## ref: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ + ## e.g: + ## initContainers: + ## - name: your-image-name + ## image: your-image + ## imagePullPolicy: Always + ## command: ['sh', '-c', 'echo "hello world"'] + ## + # initContainers: [] + initContainers: | + - name: wait-for-kafka + image: solsson/kafka:2.8.1 + imagePullPolicy: IfNotPresent + command: + - sh + - -c + - until ./bin/kafka-broker-api-versions.sh --bootstrap-server ${KAFKA_HOST}:${KAFKA_PORT}; + do + echo --------------------; + echo Waiting for Kafka...; + sleep 2; + done; + echo ====================; + echo Kafka ok!; + env: + - name: KAFKA_HOST + value: {{ include "common.tplvalues.render" (dict "value" .Values.kafka.host "context" $) | default (include "common.tplvalues.render" (dict "value" .Values.global.kafka.host "context" $)) | quote }} + - name: KAFKA_PORT + value: {{ .Values.kafka.port | default .Values.global.kafka.port | quote }} + - name: kafka-topics-create + image: docker.io/bitnami/kafka:3.2 + imagePullPolicy: IfNotPresent + command: + - sh + - -c + - kafka-topics.sh --bootstrap-server ${KAFKA_HOST}:${KAFKA_PORT} --list; + echo 'Creating kafka topics'; + kafka-topics.sh --bootstrap-server ${KAFKA_HOST}:${KAFKA_PORT} --create --if-not-exists --topic ${SIM_NAME}-topic-sdk-outbound-command-events --replication-factor 1 --partitions 1; + kafka-topics.sh --bootstrap-server ${KAFKA_HOST}:${KAFKA_PORT} --create --if-not-exists --topic ${SIM_NAME}-topic-sdk-outbound-domain-events --replication-factor 1 --partitions 1; + echo -e 'Successfully created the following topics:'; + kafka-topics.sh --bootstrap-server ${KAFKA_HOST}:${KAFKA_PORT} --list; + env: + - name: KAFKA_HOST + value: {{ include "common.tplvalues.render" (dict "value" .Values.kafka.host "context" $) | default (include "common.tplvalues.render" (dict "value" .Values.global.kafka.host "context" $)) | quote }} + - name: KAFKA_PORT + value: {{ .Values.kafka.port | default .Values.global.kafka.port | quote }} + - name: SIM_NAME + value: {{ .Values.config.simName }} + - name: wait-for-redis + image: redis:7.0.5 + imagePullPolicy: IfNotPresent + command: + - sh + - -c + - until redis-cli -h ${REDIS_HOST} -p ${REDIS_PORT} ping; + do + echo --------------------; + echo Waiting for Redis...; + sleep 2; + done; + echo ====================; + echo Redis ok!; + env: + - name: REDIS_HOST + value: {{ include "common.tplvalues.render" (dict "value" .Values.redis.host "context" $) | default (include "common.tplvalues.render" (dict "value" .Values.global.redis.host "context" $)) | quote }} + - name: REDIS_PORT + value: {{ .Values.redis.port | default .Values.global.redis.port | quote }} + + readinessProbe: | + httpGet: + path: / + port: {{ .Values.env.OUTBOUND_LISTEN_PORT }} + initialDelaySeconds: 15 + periodSeconds: 15 + livenessProbe: | + httpGet: + path: / + port: {{ .Values.env.OUTBOUND_LISTEN_PORT }} + initialDelaySeconds: 15 + periodSeconds: 15 + + ## metric configuration for prometheus instrumentation + metrics: + ## flag to enable/disable the metrics end-points + enabled: true + config: + timeout: 5000 + port: "{{ .Values.env.METRICS_SERVER_LISTEN_PORT }}" + prefix: moja_ + defaultLabels: + serviceName: sdk-scheme-adapter-api-svc + + service: + ## Not used by the SDK-Scheme-Adapter + # internalPort: 3000 + ## @param service.type %%MAIN_CONTAINER_NAME%% service type + ## + type: ClusterIP + ## @param service.port %%MAIN_CONTAINER_NAME%% service HTTP port + ## + port: 80 + ## @param service.httpsPort %%MAIN_CONTAINER_NAME%% service HTTPS port + ## + httpsPort: 443 + ## Node ports to expose + ## @param service.nodePorts.http Node port for HTTP + ## @param service.nodePorts.https Node port for HTTPS + ## NOTE: choose port between <30000-32767> + ## + nodePorts: + http: + https: + ## @param service.clusterIP %%MAIN_CONTAINER_NAME%% service Cluster IP + ## e.g.: + ## clusterIP: None + ## + clusterIP: + ## @param service.loadBalancerIP %%MAIN_CONTAINER_NAME%% service Load Balancer IP + ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer + ## + loadBalancerIP: + ## @param service.loadBalancerSourceRanges %%MAIN_CONTAINER_NAME%% service Load Balancer sources + ## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service + ## e.g: + ## loadBalancerSourceRanges: + ## - 10.10.10.0/24 + ## + loadBalancerSourceRanges: [] + ## @param service.externalTrafficPolicy %%MAIN_CONTAINER_NAME%% service external traffic policy + ## ref http://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-client-source-ip + ## + externalTrafficPolicy: Cluster + ## @param service.annotations Additional custom annotations for %%MAIN_CONTAINER_NAME%% service + ## + annotations: {} + + ingress: + ## @param ingress.enabled Enable ingress record generation for %%MAIN_CONTAINER_NAME%% + ## + enabled: true + ## @param ingress.pathType Ingress path type + ## + pathType: ImplementationSpecific + ## @param ingress.apiVersion Force Ingress API version (automatically detected if not set) + ## + apiVersion: + ## @param ingress.hostname Default host for the ingress record + ## + hostname: sdk-scheme-adapter.local + ## @param ingress.path Default path for the ingress record + ## NOTE: You may need to set this to '/*' in order to use this with ALB ingress controllers + ## + path: / + ## @param ingress.annotations Additional custom annotations for the ingress record + ## NOTE: If `ingress.certManager=true`, annotation `kubernetes.io/tls-acme: "true"` will automatically be added + ## + annotations: {} + ## Example annotations for ingress class and rewrite-targets + ## https://kubernetes.github.io/ingress-nginx/examples/rewrite/ + # nginx.ingress.kubernetes.io/rewrite-target: '/' + # nginx.ingress.kubernetes.io/rewrite-target: '/$2' + ## https://kubernetes.github.io/ingress-nginx/user-guide/multiple-ingress/ + # kubernetes.io/ingress.class: nginx + ## https://kubernetes.github.io/ingress-nginx/user-guide/tls/#automated-certificate-management-with-kube-lego + # kubernetes.io/tls-acme: "true"" + + ## @param ingress.tls Enable TLS configuration for the host defined at `ingress.hostname` parameter + ## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" .Values.ingress.hostname }}` + ## You can: + ## - Use the `ingress.secrets` parameter to create this TLS secret + ## - Relay on cert-manager to create it by setting `ingress.certManager=true` + ## - Relay on Helm to create self-signed certificates by setting `ingress.selfSigned=true` + ## + tls: false + ## @param ingress.certManager Add the corresponding annotations for cert-manager integration + ## + certManager: false + ## @param ingress.selfSigned Create a TLS secret for this ingress record using self-signed certificates generated by Helm + ## + selfSigned: false + ## @param ingress.extraHosts An array with additional hostname(s) to be covered with the ingress record + ## e.g: + ## extraHosts: + ## - name: transfer-api-svc.local + ## path: / + ## + ## @param ingress.extraPaths An array with additional arbitrary paths that may need to be added to the ingress under the main host + ## e.g: + ## extraPaths: + ## - path: /* + ## backend: + ## serviceName: ssl-redirect + ## servicePort: use-annotation + ## + # extraPaths: [] + extraPaths: + - path: /inbound/ + pathType: ImplementationSpecific + backend: + service: + name: '{{ include "common.names.fullname" . }}' + port: + name: inboundapi + # serviceName: '{{ include "common.names.fullname" . }}' + # servicePort: inboundapi + - path: /outbound/ + pathType: ImplementationSpecific + backend: + service: + name: '{{ include "common.names.fullname" . }}' + port: + name: outboundapi + # serviceName: '{{ include "common.names.fullname" . }}' + # servicePort: outboundapi + - path: /sdktest/ + pathType: ImplementationSpecific + backend: + service: + name: '{{ include "common.names.fullname" . }}' + port: + name: testapi + ## This is required for + # serviceName: '{{ include "common.names.fullname" . }}' + # servicePort: testapi + ## @param ingress.extraTls TLS configuration for additional hostname(s) to be covered with this ingress record + ## ref: https://kubernetes.io/docs/concepts/services-networking/ingress/#tls + ## e.g: + ## extraTls: + ## - hosts: + ## - transfer-api-svc.local + ## secretName: transfer-api-svc.local-tls + ## + extraTls: [] + ## @param ingress.secrets Custom TLS certificates as secrets + ## NOTE: 'key' and 'certificate' are expected in PEM format + ## NOTE: 'name' should line up with a 'secretName' set further up + ## If it is not set and you're using cert-manager, this is unneeded, as it will create a secret for you with valid certificates + ## If it is not set and you're NOT using cert-manager either, self-signed certificates will be created valid for 365 days + ## It is also possible to create and manage the certificates outside of this helm chart + ## Please see README.md for more information + ## e.g: + ## secrets: + ## - name: transfer-api-svc.local-tls + ## key: |- + ## -----BEGIN RSA PRIVATE KEY----- + ## ... + ## -----END RSA PRIVATE KEY----- + ## certificate: |- + ## -----BEGIN CERTIFICATE----- + ## ... + ## -----END CERTIFICATE----- + ## + secrets: [] + className: "nginx" + + ## RBAC configuration + ## + rbac: + ## @param rbac.create Specifies whether RBAC resources should be created + ## + create: false + + ## ServiceAccount configuration + ## + serviceAccount: + ## @param serviceAccount.create Specifies whether a ServiceAccount should be created + ## + create: false + ## @param serviceAccount.name The name of the ServiceAccount to use. + ## If not set and create is true, a name is generated using the common.names.fullname template + ## + name: "" + +sdk-scheme-adapter-dom-evt-handler: + enabled: true + + ## Set this if you want to use the global override + kafka: {} + ## Set this to override this specifically + # kafka: + # host: kafka + # port: 9092 + + ## Set this if you want to use the global override + redis: {} + ## Set this to override this specifically + # redis: + # host: redis + # port: 6379 + # database: 0 # This is a number between 0 to 15 + + config: + simName: *CONFIG_SIM_NAME + + env: + ## outbound-domain-event-handler + # LOG_LEVEL: info + DOMAIN_EVENT_API_SERVER_ENABLED: true + DOMAIN_EVENT_API_SERVER_PORT: 8001 + REDIS_CONNECTION_URL: redis://{{ include "common.tplvalues.render" (dict "value" .Values.redis.host "context" $) | default (include "common.tplvalues.render" (dict "value" .Values.global.redis.host "context" $)) }}:{{ .Values.redis.port | default .Values.global.redis.port }}/{{ .Values.redis.database | default .Values.global.redis.database }} + COMMAND_EVENT_CONSUMER_BROKER_LIST: '{{ include "common.tplvalues.render" (dict "value" .Values.kafka.host "context" $) | default (include "common.tplvalues.render" (dict "value" .Values.global.kafka.host "context" $)) }}:{{ .Values.kafka.port | default .Values.global.kafka.port }}' + DOMAIN_EVENT_PRODUCER_BROKER_LIST: '{{ include "common.tplvalues.render" (dict "value" .Values.kafka.host "context" $) | default (include "common.tplvalues.render" (dict "value" .Values.global.kafka.host "context" $)) }}:{{ .Values.kafka.port | default .Values.global.kafka.port }}' + DOMAIN_EVENT_CONSUMER_GROUP_ID: '{{ .Values.config.simName }}-domain_events_consumer_group' + DOMAIN_EVENT_CONSUMER_TOPICS: '{{ .Values.config.simName }}-topic-sdk-outbound-domain-events' + COMMAND_EVENT_PRODUCER_TOPIC: '{{ .Values.config.simName }}-topic-sdk-outbound-command-events' + + podAffinityPreset: "" + ## @param podAntiAffinityPreset Pod anti-affinity preset. Ignored if `main.affinity` is set. Allowed values: `soft` or `hard` + ## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-anti-affinity + ## + podAntiAffinityPreset: soft + ## Node affinity preset + ## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity + ## + + nodeAffinityPreset: + ## @param nodeAffinityPreset.type Node affinity preset type. Ignored if `main.affinity` is set. Allowed values: `soft` or `hard` + ## + type: "" + ## @param nodeAffinityPreset.key Node label key to match. Ignored if `main.affinity` is set + ## + key: "" + ## @param nodeAffinityPreset.values Node label values to match. Ignored if `main.affinity` is set + ## E.g. + ## values: + ## - e2e-az1 + ## - e2e-az2 + ## + values: [] + ## @param affinity Affinity for %%MAIN_CONTAINER_NAME%% pods assignment + ## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity + ## NOTE: `podAffinityPreset`, `main.podAntiAffinityPreset`, and `main.nodeAffinityPreset` will be ignored when it's set + ## + + ## Pod scheduling preferences. + ## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity + affinity: {} + + ## Node labels for pod assignment + ## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#nodeselector + nodeSelector: {} + + ## Set toleration for scheduler + ## ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ + tolerations: [] + + ## Configure Pods Security Context + ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod + ## @param podSecurityContext.enabled Enabled %%MAIN_CONTAINER_NAME%% pods' Security Context + ## @param podSecurityContext.fsGroup Set %%MAIN_CONTAINER_NAME%% pod's Security Context fsGroup + ## + podSecurityContext: + enabled: true + fsGroup: 1001 + ## Configure Container Security Context + ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod + ## @param containerSecurityContext.enabled Enabled %%MAIN_CONTAINER_NAME%% containers' Security Context + ## @param containerSecurityContext.runAsUser Set %%MAIN_CONTAINER_NAME%% containers' Security Context runAsUser + ## + containerSecurityContext: + enabled: true + runAsUser: 1001 + + image: + registry: docker.io + repository: mojaloop/sdk-scheme-adapter + tag: v21.4.0 + ## Specify a imagePullPolicy + ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' + ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images + ## + pullPolicy: IfNotPresent + ## Optionally specify an array of imagePullSecrets. + ## Secrets must be manually created in the namespace. + ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/ + ## e.g: + ## pullSecrets: + ## - myRegistryKeySecretName + ## + pullSecrets: [] + ## Enable debug mode + ## + debug: false + + replicaCount: 1 + command: + - yarn + - start:event-handler + + ## Enable diagnostic mode in the deployment + ## + diagnosticMode: + ## @param diagnosticMode.enabled Enable diagnostic mode (all probes will be disabled and the command will be overridden) + ## + enabled: false + ## @param diagnosticMode.command Command to override all containers in the deployment + ## + command: + - yarn + - start + ## @param diagnosticMode.args Args to override all containers in the deployment + ## + args: + - --inspect=0.0.0.0:{{ .Values.diagnosticMode.debug.port }} + + ## @param diagnosticMode.debug config to override all debug information + ## + debug: + internalPort: 9229 + port: 9229 + + ## @param initContainers Add additional init containers to the %%MAIN_CONTAINER_NAME%% pod(s) + ## ref: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ + ## e.g: + ## initContainers: + ## - name: your-image-name + ## image: your-image + ## imagePullPolicy: Always + ## command: ['sh', '-c', 'echo "hello world"'] + ## + # initContainers: [] + initContainers: | + - name: wait-for-kafka + image: solsson/kafka:2.8.1 + imagePullPolicy: IfNotPresent + command: + - sh + - -c + - until ./bin/kafka-broker-api-versions.sh --bootstrap-server ${KAFKA_HOST}:${KAFKA_PORT}; + do + echo --------------------; + echo Waiting for Kafka...; + sleep 2; + done; + echo ====================; + echo Kafka ok!; + env: + - name: KAFKA_HOST + value: {{ include "common.tplvalues.render" (dict "value" .Values.kafka.host "context" $) | default (include "common.tplvalues.render" (dict "value" .Values.global.kafka.host "context" $)) | quote }} + - name: KAFKA_PORT + value: {{ .Values.kafka.port | default .Values.global.kafka.port | quote }} + - name: kafka-topics-create + image: docker.io/bitnami/kafka:3.2 + imagePullPolicy: IfNotPresent + command: + - sh + - -c + - kafka-topics.sh --bootstrap-server ${KAFKA_HOST}:${KAFKA_PORT} --list; + echo 'Creating kafka topics'; + kafka-topics.sh --bootstrap-server ${KAFKA_HOST}:${KAFKA_PORT} --create --if-not-exists --topic ${SIM_NAME}-topic-sdk-outbound-command-events --replication-factor 1 --partitions 1; + kafka-topics.sh --bootstrap-server ${KAFKA_HOST}:${KAFKA_PORT} --create --if-not-exists --topic ${SIM_NAME}-topic-sdk-outbound-domain-events --replication-factor 1 --partitions 1; + echo -e 'Successfully created the following topics:'; + kafka-topics.sh --bootstrap-server ${KAFKA_HOST}:${KAFKA_PORT} --list; + env: + - name: KAFKA_HOST + value: {{ include "common.tplvalues.render" (dict "value" .Values.kafka.host "context" $) | default (include "common.tplvalues.render" (dict "value" .Values.global.kafka.host "context" $)) | quote }} + - name: KAFKA_PORT + value: {{ .Values.kafka.port | default .Values.global.kafka.port | quote }} + - name: SIM_NAME + value: {{ .Values.config.simName }} + - name: wait-for-redis + image: redis:7.0.5 + imagePullPolicy: IfNotPresent + command: + - sh + - -c + - until redis-cli -h ${REDIS_HOST} -p ${REDIS_PORT} ping; + do + echo --------------------; + echo Waiting for Redis...; + sleep 2; + done; + echo ====================; + echo Redis ok!; + env: + - name: REDIS_HOST + value: {{ include "common.tplvalues.render" (dict "value" .Values.redis.host "context" $) | default (include "common.tplvalues.render" (dict "value" .Values.global.redis.host "context" $)) | quote }} + - name: REDIS_PORT + value: {{ .Values.redis.port | default .Values.global.redis.port | quote }} + + readinessProbe: | + httpGet: + path: /health + port: {{ .Values.env.DOMAIN_EVENT_API_SERVER_PORT }} + initialDelaySeconds: 15 + periodSeconds: 15 + livenessProbe: | + httpGet: + path: /health + port: {{ .Values.env.DOMAIN_EVENT_API_SERVER_PORT }} + initialDelaySeconds: 15 + periodSeconds: 15 + + ## metric configuration for prometheus instrumentation + ## TODO: NOT SUPPORTED + metrics: + ## flag to enable/disable the metrics end-points + enabled: false + config: + timeout: 5000 + port: "{{ .Values.env.DOMAIN_EVENT_API_SERVER_PORT }}" + prefix: moja_ + defaultLabels: + serviceName: sdk-scheme-adapter-dom-evt-handler + + service: + ## Not used by the SDK-Scheme-Adapter + internalPort: 8001 + ## @param service.type %%MAIN_CONTAINER_NAME%% service type + ## + type: ClusterIP + ## @param service.port %%MAIN_CONTAINER_NAME%% service HTTP port + ## + port: 80 + ## @param service.httpsPort %%MAIN_CONTAINER_NAME%% service HTTPS port + ## + httpsPort: 443 + ## Node ports to expose + ## @param service.nodePorts.http Node port for HTTP + ## @param service.nodePorts.https Node port for HTTPS + ## NOTE: choose port between <30000-32767> + ## + nodePorts: + http: + https: + ## @param service.clusterIP %%MAIN_CONTAINER_NAME%% service Cluster IP + ## e.g.: + ## clusterIP: None + ## + clusterIP: + ## @param service.loadBalancerIP %%MAIN_CONTAINER_NAME%% service Load Balancer IP + ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer + ## + loadBalancerIP: + ## @param service.loadBalancerSourceRanges %%MAIN_CONTAINER_NAME%% service Load Balancer sources + ## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service + ## e.g: + ## loadBalancerSourceRanges: + ## - 10.10.10.0/24 + ## + loadBalancerSourceRanges: [] + ## @param service.externalTrafficPolicy %%MAIN_CONTAINER_NAME%% service external traffic policy + ## ref http://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-client-source-ip + ## + externalTrafficPolicy: Cluster + ## @param service.annotations Additional custom annotations for %%MAIN_CONTAINER_NAME%% service + ## + annotations: {} + + ingress: + ## @param ingress.enabled Enable ingress record generation for %%MAIN_CONTAINER_NAME%% + ## + enabled: false + ## @param ingress.pathType Ingress path type + ## + pathType: ImplementationSpecific + ## @param ingress.apiVersion Force Ingress API version (automatically detected if not set) + ## + apiVersion: + ## @param ingress.hostname Default host for the ingress record + ## + hostname: sdk-scheme-adapter.local + ## @param ingress.path Default path for the ingress record + ## NOTE: You may need to set this to '/*' in order to use this with ALB ingress controllers + ## + path: / + ## @param ingress.annotations Additional custom annotations for the ingress record + ## NOTE: If `ingress.certManager=true`, annotation `kubernetes.io/tls-acme: "true"` will automatically be added + ## + annotations: {} + ## Example annotations for ingress class and rewrite-targets + ## https://kubernetes.github.io/ingress-nginx/examples/rewrite/ + # nginx.ingress.kubernetes.io/rewrite-target: '/' + # nginx.ingress.kubernetes.io/rewrite-target: '/$2' + ## https://kubernetes.github.io/ingress-nginx/user-guide/multiple-ingress/ + # kubernetes.io/ingress.class: nginx + ## https://kubernetes.github.io/ingress-nginx/user-guide/tls/#automated-certificate-management-with-kube-lego + # kubernetes.io/tls-acme: "true"" + + ## @param ingress.tls Enable TLS configuration for the host defined at `ingress.hostname` parameter + ## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" .Values.ingress.hostname }}` + ## You can: + ## - Use the `ingress.secrets` parameter to create this TLS secret + ## - Relay on cert-manager to create it by setting `ingress.certManager=true` + ## - Relay on Helm to create self-signed certificates by setting `ingress.selfSigned=true` + ## + tls: false + ## @param ingress.certManager Add the corresponding annotations for cert-manager integration + ## + certManager: false + ## @param ingress.selfSigned Create a TLS secret for this ingress record using self-signed certificates generated by Helm + ## + selfSigned: false + ## @param ingress.extraHosts An array with additional hostname(s) to be covered with the ingress record + ## e.g: + ## extraHosts: + ## - name: transfer-api-svc.local + ## path: / + ## + ## @param ingress.extraPaths An array with additional arbitrary paths that may need to be added to the ingress under the main host + ## e.g: + ## extraPaths: + ## - path: /* + ## backend: + ## serviceName: ssl-redirect + ## servicePort: use-annotation + ## + # extraPaths: [] + ## TODO: REMOVE + # extraPaths: + # - path: /inbound/ + # pathType: ImplementationSpecific + # backend: + # service: + # name: '{{ include "common.names.fullname" . }}' + # port: + # name: inboundapi + # # serviceName: '{{ include "common.names.fullname" . }}' + # # servicePort: inboundapi + # - path: /outbound/ + # pathType: ImplementationSpecific + # backend: + # service: + # name: '{{ include "common.names.fullname" . }}' + # port: + # name: outboundapi + # # serviceName: '{{ include "common.names.fullname" . }}' + # # servicePort: outboundapi + # - path: /sdktest/ + # pathType: ImplementationSpecific + # backend: + # service: + # name: '{{ include "common.names.fullname" . }}' + # port: + # name: testapi + ## This is required for + # serviceName: '{{ include "common.names.fullname" . }}' + # servicePort: testapi + ## @param ingress.extraTls TLS configuration for additional hostname(s) to be covered with this ingress record + ## ref: https://kubernetes.io/docs/concepts/services-networking/ingress/#tls + ## e.g: + ## extraTls: + ## - hosts: + ## - transfer-api-svc.local + ## secretName: transfer-api-svc.local-tls + ## + extraTls: [] + ## @param ingress.secrets Custom TLS certificates as secrets + ## NOTE: 'key' and 'certificate' are expected in PEM format + ## NOTE: 'name' should line up with a 'secretName' set further up + ## If it is not set and you're using cert-manager, this is unneeded, as it will create a secret for you with valid certificates + ## If it is not set and you're NOT using cert-manager either, self-signed certificates will be created valid for 365 days + ## It is also possible to create and manage the certificates outside of this helm chart + ## Please see README.md for more information + ## e.g: + ## secrets: + ## - name: transfer-api-svc.local-tls + ## key: |- + ## -----BEGIN RSA PRIVATE KEY----- + ## ... + ## -----END RSA PRIVATE KEY----- + ## certificate: |- + ## -----BEGIN CERTIFICATE----- + ## ... + ## -----END CERTIFICATE----- + ## + secrets: [] + className: "nginx" + + ## RBAC configuration + ## + rbac: + ## @param rbac.create Specifies whether RBAC resources should be created + ## + create: false + + ## ServiceAccount configuration + ## + serviceAccount: + ## @param serviceAccount.create Specifies whether a ServiceAccount should be created + ## + create: false + ## @param serviceAccount.name The name of the ServiceAccount to use. + ## If not set and create is true, a name is generated using the common.names.fullname template + ## + name: "" + +sdk-scheme-adapter-cmd-evt-handler: + enabled: true + + ## Set this if you want to use the global override + kafka: {} + ## Set this to override this specifically + # kafka: + # host: kafka + # port: 9092 + + ## Set this if you want to use the global override + redis: {} + ## Set this to override this specifically + # redis: + # host: redis + # port: 6379 + # database: 0 # This is a number between 0 to 15 + + config: + simName: *CONFIG_SIM_NAME + + env: + ## outbound-command-event-handler + # LOG_LEVEL: info + COMMAND_EVENT_API_SERVER_ENABLED: true + COMMAND_EVENT_API_SERVER_PORT: 8000 + REDIS_CONNECTION_URL: redis://{{ include "common.tplvalues.render" (dict "value" .Values.redis.host "context" $) | default (include "common.tplvalues.render" (dict "value" .Values.global.redis.host "context" $)) }}:{{ .Values.redis.port | default .Values.global.redis.port }}/{{ .Values.redis.database | default .Values.global.redis.database }} + COMMAND_EVENT_CONSUMER_BROKER_LIST: '{{ include "common.tplvalues.render" (dict "value" .Values.kafka.host "context" $) | default (include "common.tplvalues.render" (dict "value" .Values.global.kafka.host "context" $)) }}:{{ .Values.kafka.port | default .Values.global.kafka.port }}' + DOMAIN_EVENT_PRODUCER_BROKER_LIST: '{{ include "common.tplvalues.render" (dict "value" .Values.kafka.host "context" $) | default (include "common.tplvalues.render" (dict "value" .Values.global.kafka.host "context" $)) }}:{{ .Values.kafka.port | default .Values.global.kafka.port }}' + MAX_ITEMS_PER_BATCH: 1000 + COMMAND_EVENT_CONSUMER_GROUP_ID: '{{ .Values.config.simName }}-command_events_consumer_group' + COMMAND_EVENT_CONSUMER_TOPICS: '{{ .Values.config.simName }}-topic-sdk-outbound-command-events' + DOMAIN_EVENT_PRODUCER_TOPIC: '{{ .Values.config.simName }}-topic-sdk-outbound-domain-events' + + podAffinityPreset: "" + ## @param podAntiAffinityPreset Pod anti-affinity preset. Ignored if `main.affinity` is set. Allowed values: `soft` or `hard` + ## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-anti-affinity + ## + podAntiAffinityPreset: soft + ## Node affinity preset + ## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity + ## + + nodeAffinityPreset: + ## @param nodeAffinityPreset.type Node affinity preset type. Ignored if `main.affinity` is set. Allowed values: `soft` or `hard` + ## + type: "" + ## @param nodeAffinityPreset.key Node label key to match. Ignored if `main.affinity` is set + ## + key: "" + ## @param nodeAffinityPreset.values Node label values to match. Ignored if `main.affinity` is set + ## E.g. + ## values: + ## - e2e-az1 + ## - e2e-az2 + ## + values: [] + ## @param affinity Affinity for %%MAIN_CONTAINER_NAME%% pods assignment + ## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity + ## NOTE: `podAffinityPreset`, `main.podAntiAffinityPreset`, and `main.nodeAffinityPreset` will be ignored when it's set + ## + + ## Pod scheduling preferences. + ## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity + affinity: {} + + ## Node labels for pod assignment + ## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#nodeselector + nodeSelector: {} + + ## Set toleration for scheduler + ## ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ + tolerations: [] + + ## Configure Pods Security Context + ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod + ## @param podSecurityContext.enabled Enabled %%MAIN_CONTAINER_NAME%% pods' Security Context + ## @param podSecurityContext.fsGroup Set %%MAIN_CONTAINER_NAME%% pod's Security Context fsGroup + ## + podSecurityContext: + enabled: true + fsGroup: 1001 + ## Configure Container Security Context + ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod + ## @param containerSecurityContext.enabled Enabled %%MAIN_CONTAINER_NAME%% containers' Security Context + ## @param containerSecurityContext.runAsUser Set %%MAIN_CONTAINER_NAME%% containers' Security Context runAsUser + ## + containerSecurityContext: + enabled: true + runAsUser: 1001 + + image: + registry: docker.io + repository: mojaloop/sdk-scheme-adapter + tag: v21.4.0 + ## Specify a imagePullPolicy + ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' + ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images + ## + pullPolicy: IfNotPresent + ## Optionally specify an array of imagePullSecrets. + ## Secrets must be manually created in the namespace. + ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/ + ## e.g: + ## pullSecrets: + ## - myRegistryKeySecretName + ## + pullSecrets: [] + ## Enable debug mode + ## + debug: false + + replicaCount: 1 + command: + - yarn + - start:command-handler + + ## Enable diagnostic mode in the deployment + ## + diagnosticMode: + ## @param diagnosticMode.enabled Enable diagnostic mode (all probes will be disabled and the command will be overridden) + ## + enabled: false + ## @param diagnosticMode.command Command to override all containers in the deployment + ## + command: + - yarn + - start + ## @param diagnosticMode.args Args to override all containers in the deployment + ## + args: + - --inspect=0.0.0.0:{{ .Values.diagnosticMode.debug.port }} + + ## @param diagnosticMode.debug config to override all debug information + ## + debug: + internalPort: 9229 + port: 9229 + + ## @param initContainers Add additional init containers to the %%MAIN_CONTAINER_NAME%% pod(s) + ## ref: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ + ## e.g: + ## initContainers: + ## - name: your-image-name + ## image: your-image + ## imagePullPolicy: Always + ## command: ['sh', '-c', 'echo "hello world"'] + ## + # initContainers: [] + initContainers: | + - name: wait-for-kafka + image: solsson/kafka:2.8.1 + imagePullPolicy: IfNotPresent + command: + - sh + - -c + - until ./bin/kafka-broker-api-versions.sh --bootstrap-server ${KAFKA_HOST}:${KAFKA_PORT}; + do + echo --------------------; + echo Waiting for Kafka...; + sleep 2; + done; + echo ====================; + echo Kafka ok!; + env: + - name: KAFKA_HOST + value: {{ include "common.tplvalues.render" (dict "value" .Values.kafka.host "context" $) | default (include "common.tplvalues.render" (dict "value" .Values.global.kafka.host "context" $)) | quote }} + - name: KAFKA_PORT + value: {{ .Values.kafka.port | default .Values.global.kafka.port | quote }} + - name: kafka-topics-create + image: docker.io/bitnami/kafka:3.2 + imagePullPolicy: IfNotPresent + command: + - sh + - -c + - kafka-topics.sh --bootstrap-server ${KAFKA_HOST}:${KAFKA_PORT} --list; + echo 'Creating kafka topics'; + kafka-topics.sh --bootstrap-server ${KAFKA_HOST}:${KAFKA_PORT} --create --if-not-exists --topic ${SIM_NAME}-topic-sdk-outbound-command-events --replication-factor 1 --partitions 1; + kafka-topics.sh --bootstrap-server ${KAFKA_HOST}:${KAFKA_PORT} --create --if-not-exists --topic ${SIM_NAME}-topic-sdk-outbound-domain-events --replication-factor 1 --partitions 1; + echo -e 'Successfully created the following topics:'; + kafka-topics.sh --bootstrap-server ${KAFKA_HOST}:${KAFKA_PORT} --list; + env: + - name: KAFKA_HOST + value: {{ include "common.tplvalues.render" (dict "value" .Values.kafka.host "context" $) | default (include "common.tplvalues.render" (dict "value" .Values.global.kafka.host "context" $)) | quote }} + - name: KAFKA_PORT + value: {{ .Values.kafka.port | default .Values.global.kafka.port | quote }} + - name: SIM_NAME + value: {{ .Values.config.simName }} + - name: wait-for-redis + image: redis:7.0.5 + imagePullPolicy: IfNotPresent + command: + - sh + - -c + - until redis-cli -h ${REDIS_HOST} -p ${REDIS_PORT} ping; + do + echo --------------------; + echo Waiting for Redis...; + sleep 2; + done; + echo ====================; + echo Redis ok!; + env: + - name: REDIS_HOST + value: {{ include "common.tplvalues.render" (dict "value" .Values.redis.host "context" $) | default (include "common.tplvalues.render" (dict "value" .Values.global.redis.host "context" $)) | quote }} + - name: REDIS_PORT + value: {{ .Values.redis.port | default .Values.global.redis.port | quote }} + + readinessProbe: | + httpGet: + path: /health + port: {{ .Values.env.COMMAND_EVENT_API_SERVER_PORT }} + initialDelaySeconds: 15 + periodSeconds: 15 + livenessProbe: | + httpGet: + path: /health + port: {{ .Values.env.COMMAND_EVENT_API_SERVER_PORT }} + initialDelaySeconds: 15 + periodSeconds: 15 + + ## metric configuration for prometheus instrumentation + ## TODO: NOT SUPPORTED + metrics: + ## flag to enable/disable the metrics end-points + enabled: false + config: + timeout: 5000 + port: "{{ .Values.env.COMMAND_EVENT_API_SERVER_PORT }}" + prefix: moja_ + defaultLabels: + serviceName: sdk-scheme-adapter-cmd-evt-handler + + service: + ## Not used by the SDK-Scheme-Adapter + internalPort: 8000 + ## @param service.type %%MAIN_CONTAINER_NAME%% service type + ## + type: ClusterIP + ## @param service.port %%MAIN_CONTAINER_NAME%% service HTTP port + ## + port: 80 + ## @param service.httpsPort %%MAIN_CONTAINER_NAME%% service HTTPS port + ## + httpsPort: 443 + ## Node ports to expose + ## @param service.nodePorts.http Node port for HTTP + ## @param service.nodePorts.https Node port for HTTPS + ## NOTE: choose port between <30000-32767> + ## + nodePorts: + http: + https: + ## @param service.clusterIP %%MAIN_CONTAINER_NAME%% service Cluster IP + ## e.g.: + ## clusterIP: None + ## + clusterIP: + ## @param service.loadBalancerIP %%MAIN_CONTAINER_NAME%% service Load Balancer IP + ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer + ## + loadBalancerIP: + ## @param service.loadBalancerSourceRanges %%MAIN_CONTAINER_NAME%% service Load Balancer sources + ## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service + ## e.g: + ## loadBalancerSourceRanges: + ## - 10.10.10.0/24 + ## + loadBalancerSourceRanges: [] + ## @param service.externalTrafficPolicy %%MAIN_CONTAINER_NAME%% service external traffic policy + ## ref http://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-client-source-ip + ## + externalTrafficPolicy: Cluster + ## @param service.annotations Additional custom annotations for %%MAIN_CONTAINER_NAME%% service + ## + annotations: {} + + ingress: + ## @param ingress.enabled Enable ingress record generation for %%MAIN_CONTAINER_NAME%% + ## + enabled: false + ## @param ingress.pathType Ingress path type + ## + pathType: ImplementationSpecific + ## @param ingress.apiVersion Force Ingress API version (automatically detected if not set) + ## + apiVersion: + ## @param ingress.hostname Default host for the ingress record + ## + hostname: sdk-scheme-adapter.local + ## @param ingress.path Default path for the ingress record + ## NOTE: You may need to set this to '/*' in order to use this with ALB ingress controllers + ## + path: / + ## @param ingress.annotations Additional custom annotations for the ingress record + ## NOTE: If `ingress.certManager=true`, annotation `kubernetes.io/tls-acme: "true"` will automatically be added + ## + annotations: {} + ## Example annotations for ingress class and rewrite-targets + ## https://kubernetes.github.io/ingress-nginx/examples/rewrite/ + # nginx.ingress.kubernetes.io/rewrite-target: '/' + # nginx.ingress.kubernetes.io/rewrite-target: '/$2' + ## https://kubernetes.github.io/ingress-nginx/user-guide/multiple-ingress/ + # kubernetes.io/ingress.class: nginx + ## https://kubernetes.github.io/ingress-nginx/user-guide/tls/#automated-certificate-management-with-kube-lego + # kubernetes.io/tls-acme: "true"" + + ## @param ingress.tls Enable TLS configuration for the host defined at `ingress.hostname` parameter + ## TLS certificates will be retrieved from a TLS secret with name: `{{- printf "%s-tls" .Values.ingress.hostname }}` + ## You can: + ## - Use the `ingress.secrets` parameter to create this TLS secret + ## - Relay on cert-manager to create it by setting `ingress.certManager=true` + ## - Relay on Helm to create self-signed certificates by setting `ingress.selfSigned=true` + ## + tls: false + ## @param ingress.certManager Add the corresponding annotations for cert-manager integration + ## + certManager: false + ## @param ingress.selfSigned Create a TLS secret for this ingress record using self-signed certificates generated by Helm + ## + selfSigned: false + ## @param ingress.extraHosts An array with additional hostname(s) to be covered with the ingress record + ## e.g: + ## extraHosts: + ## - name: transfer-api-svc.local + ## path: / + ## + ## @param ingress.extraPaths An array with additional arbitrary paths that may need to be added to the ingress under the main host + ## e.g: + ## extraPaths: + ## - path: /* + ## backend: + ## serviceName: ssl-redirect + ## servicePort: use-annotation + ## + # extraPaths: [] + ## TODO: REMOVE + # extraPaths: + # - path: /inbound/ + # pathType: ImplementationSpecific + # backend: + # service: + # name: '{{ include "common.names.fullname" . }}' + # port: + # name: inboundapi + # # serviceName: '{{ include "common.names.fullname" . }}' + # # servicePort: inboundapi + # - path: /outbound/ + # pathType: ImplementationSpecific + # backend: + # service: + # name: '{{ include "common.names.fullname" . }}' + # port: + # name: outboundapi + # # serviceName: '{{ include "common.names.fullname" . }}' + # # servicePort: outboundapi + # - path: /sdktest/ + # pathType: ImplementationSpecific + # backend: + # service: + # name: '{{ include "common.names.fullname" . }}' + # port: + # name: testapi + ## This is required for + # serviceName: '{{ include "common.names.fullname" . }}' + # servicePort: testapi + ## @param ingress.extraTls TLS configuration for additional hostname(s) to be covered with this ingress record + ## ref: https://kubernetes.io/docs/concepts/services-networking/ingress/#tls + ## e.g: + ## extraTls: + ## - hosts: + ## - transfer-api-svc.local + ## secretName: transfer-api-svc.local-tls + ## + extraTls: [] + ## @param ingress.secrets Custom TLS certificates as secrets + ## NOTE: 'key' and 'certificate' are expected in PEM format + ## NOTE: 'name' should line up with a 'secretName' set further up + ## If it is not set and you're using cert-manager, this is unneeded, as it will create a secret for you with valid certificates + ## If it is not set and you're NOT using cert-manager either, self-signed certificates will be created valid for 365 days + ## It is also possible to create and manage the certificates outside of this helm chart + ## Please see README.md for more information + ## e.g: + ## secrets: + ## - name: transfer-api-svc.local-tls + ## key: |- + ## -----BEGIN RSA PRIVATE KEY----- + ## ... + ## -----END RSA PRIVATE KEY----- + ## certificate: |- + ## -----BEGIN CERTIFICATE----- + ## ... + ## -----END CERTIFICATE----- + ## + secrets: [] + className: "nginx" + + ## RBAC configuration + ## + rbac: + ## @param rbac.create Specifies whether RBAC resources should be created + ## + create: false + + ## ServiceAccount configuration + ## + serviceAccount: + ## @param serviceAccount.create Specifies whether a ServiceAccount should be created + ## + create: false + ## @param serviceAccount.name The name of the ServiceAccount to use. + ## If not set and create is true, a name is generated using the common.names.fullname template + ## + name: "" diff --git a/thirdparty/.helmignore b/thirdparty/.helmignore new file mode 100644 index 000000000..0d560c136 --- /dev/null +++ b/thirdparty/.helmignore @@ -0,0 +1,27 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +*IGNORE* + +# Ignore child charts from being copied +chart-* +# chart-sim2 +# chart-sim3 \ No newline at end of file diff --git a/thirdparty/Chart.yaml b/thirdparty/Chart.yaml index 730f8c02a..21d85ebc4 100644 --- a/thirdparty/Chart.yaml +++ b/thirdparty/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 name: thirdparty version: 2.1.0 description: Third Party API Support for Mojaloop -appVersion: "1.0.0" +appVersion: "1.1.0" home: http://mojaloop.io icon: http://mojaloop.io/images/logo.png sources: diff --git a/thirdparty/README.md b/thirdparty/README.md index b1c8b6854..db487b2df 100644 --- a/thirdparty/README.md +++ b/thirdparty/README.md @@ -40,7 +40,7 @@ In addition to enabling the above charts, a few options must be configured to al For the `mojaloop/mojaloop` helm chart, enable the following in your `values.yaml`: ```yaml -... +... account-lookup-service: account-lookup-service: config: @@ -102,9 +102,9 @@ Or alternatively add `--set` for each of the above parameters on the install com ```bash helm install ... \ # enabled Thirdparty setup - --set ml-ttk-test-setup-tk.tests.enabled=true \ + --set ml-ttk-test-setup-tp.tests.enabled=true \ # enabled Thirdparty validation tests - --set ml-ttk-test-val-tk.tests.enabled=true + --set ml-ttk-test-val-tp.tests.enabled=true ``` 2. Run Tests diff --git a/thirdparty/values.yaml b/thirdparty/values.yaml index 0461fd3d8..4bced5fce 100644 --- a/thirdparty/values.yaml +++ b/thirdparty/values.yaml @@ -1514,8 +1514,9 @@ thirdparty-simulator: publicKey: '' image: repository: mojaloop/sdk-scheme-adapter - tag: v18.0.2 + tag: v21.4.0 pullPolicy: IfNotPresent + command: '[ "yarn", "start:api-svc" ]' <<: *defaultProbes # These will be supplied directly to the init containers array in the deployment for the @@ -1660,6 +1661,8 @@ thirdparty-simulator: RESERVE_NOTIFICATION: false RESOURCE_VERSIONS: transfers=1.1,quotes=1.1,participants=1.1,parties=1.1,transactionRequests=1.1 + ENABLE_FSPIOP_EVENT_HANDLER: false + ENABLE_BACKEND_EVENT_HANDLER: false backend: image: repository: mojaloop/mojaloop-simulator diff --git a/update-charts-dep.sh b/update-charts-dep.sh index dfbe97b9c..9c33835b6 100755 --- a/update-charts-dep.sh +++ b/update-charts-dep.sh @@ -16,6 +16,14 @@ declare -a charts=( example-mojaloop-backend ml-operator simulator + ml-testing-toolkit + ml-testing-toolkit-cli + sdk-scheme-adapter/chart-service + sdk-scheme-adapter + mojaloop-ttk-simulators/chart-sim1 + mojaloop-ttk-simulators/chart-sim2 + mojaloop-ttk-simulators/chart-sim3 + mojaloop-ttk-simulators eventstreamprocessor monitoring/promfana monitoring/efk @@ -38,7 +46,6 @@ declare -a charts=( bulk-api-adapter mojaloop-bulk mojaloop-simulator - ml-testing-toolkit thirdparty/chart-auth-svc thirdparty/chart-consent-oracle thirdparty/chart-tp-api-svc