Skip to content

Commit

Permalink
Fb/cds onboard metadata (#57)
Browse files Browse the repository at this point in the history
* change cli options for cds onboard metadata

* implement metadata param for cdsot

* add new onboard docs

* fixes
  • Loading branch information
rlindner81 authored Jan 24, 2024
1 parent f9803d9 commit 8e29635
Show file tree
Hide file tree
Showing 5 changed files with 72 additions and 37 deletions.
47 changes: 36 additions & 11 deletions docs/cap-multitenancy/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,16 +33,17 @@ Commands for this area are:

```
=== cap multitenancy (cds) ===
~ cdsl --cds-list [TENANT] list all cds-mtx tenant names
~ cdsll --cds-long-list [TENANT] long list all cds-mtx tenants
cdsot --cds-onboard-tenant TENANT_ID SUBDOMAIN onboard specific tenant
cdsut --cds-upgrade-tenant TENANT_ID upgrade specific tenant
cdsua --cds-upgrade-all upgrade all tenants
* --cds-offboard-tenant TENANT_ID offboard specific tenant
* --cds-offboard-all offboard all tenants
... [TENANT] filter list for tenant id or subdomain
... --auto-undeploy upgrade with auto undeploy
... --time list includes timestamps
~ cdsl --cds-list [TENANT] list all cds-mtx tenant names
~ cdsll --cds-long-list [TENANT] long list all cds-mtx tenants
cdsot --cds-onboard-tenant TENANT_ID [METADATA] onboard specific tenant
cdsut --cds-upgrade-tenant TENANT_ID upgrade specific tenant
cdsua --cds-upgrade-all upgrade all tenants
* --cds-offboard-tenant TENANT_ID offboard specific tenant
* --cds-offboard-all offboard all tenants
... [METADATA] onboard subscription metadata
... [TENANT] filter list for tenant id or subdomain
... --auto-undeploy upgrade with auto undeploy
... --time list includes timestamps
~ are read-only commands
* are potentially _dangerous_ commands
Expand Down Expand Up @@ -74,7 +75,31 @@ Be mindful that onboarding _only_ through CAP is usually not a good idea, since
BTP subaccount. This can be useful for testing or mocking purposes.

{: .warn}
In most cases, the BTP cockpit's subaccount _subscribe_ funcationality should be used instead.
In most cases, the BTP cockpit's subaccount _subscribe_ functionality should be used instead.

The onboard command takes the tenant id as a required argument, and it takes a metadata object as an optional argument.
For this metadata, the following are potential fields that can be set:

| Property | Purpose |
| :--------------------- | :-------------------------------------------------------------------------------------- |
| subscriptionAppId | The application ID of the main subscribed application. |
| | Generated by Authorization and Trust Management service (xsuaa) based on the xsappname. |
| subscriptionAppName | The application name of the main subscribed application. |
| subscribedTenantId | ID of the subscription tenant. |
| subscribedSubaccountId | ID of the subscription subaccount. |
| subscribedSubdomain | The subdomain of the subscription tenant (hostname for the identityzone). |
| globalAccountGUID | ID of the global account. |
| subscribedLicenseType | The license type of the subscription tenant. |

Common options are:

```
{ "subscriptionAppName": "<value>", "globalAccountGUID": "<value>", "subscribedSubaccountId": "<value>", "subscribedSubdomain": "<value>" }
```

{: .info}
For more details see
[https://help.sap.com/docs/btp/sap-business-technology-platform/develop-multitenant-application#procedure](https://help.sap.com/docs/btp/sap-business-technology-platform/develop-multitenant-application#procedure)

## Upgrade Tenant

Expand Down
21 changes: 11 additions & 10 deletions docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,16 +72,17 @@ commands:
... --skip-unchanged skip update for unchanged dependencies
=== cap multitenancy (cds) ===
~ cdsl --cds-list [TENANT] list all cds-mtx tenant names
~ cdsll --cds-long-list [TENANT] long list all cds-mtx tenants
cdsot --cds-onboard-tenant TENANT_ID SUBDOMAIN onboard specific tenant
cdsut --cds-upgrade-tenant TENANT_ID upgrade specific tenant
cdsua --cds-upgrade-all upgrade all tenants
* --cds-offboard-tenant TENANT_ID offboard specific tenant
* --cds-offboard-all offboard all tenants
... [TENANT] filter list for tenant id or subdomain
... --auto-undeploy upgrade with auto undeploy
... --time list includes timestamps
~ cdsl --cds-list [TENANT] list all cds-mtx tenant names
~ cdsll --cds-long-list [TENANT] long list all cds-mtx tenants
cdsot --cds-onboard-tenant TENANT_ID [METADATA] onboard specific tenant
cdsut --cds-upgrade-tenant TENANT_ID upgrade specific tenant
cdsua --cds-upgrade-all upgrade all tenants
* --cds-offboard-tenant TENANT_ID offboard specific tenant
* --cds-offboard-all offboard all tenants
... [METADATA] onboard subscription metadata
... [TENANT] filter list for tenant id or subdomain
... --auto-undeploy upgrade with auto undeploy
... --time list includes timestamps
=== hana management (hdi) ===
~ hdil --hdi-list [TENANT_ID] list all hdi container instances
Expand Down
21 changes: 11 additions & 10 deletions src/cli.js
Original file line number Diff line number Diff line change
Expand Up @@ -47,16 +47,17 @@ commands:
... --skip-unchanged skip update for unchanged dependencies
=== cap multitenancy (cds) ===
~ cdsl --cds-list [TENANT] list all cds-mtx tenant names
~ cdsll --cds-long-list [TENANT] long list all cds-mtx tenants
cdsot --cds-onboard-tenant TENANT_ID SUBDOMAIN onboard specific tenant
cdsut --cds-upgrade-tenant TENANT_ID upgrade specific tenant
cdsua --cds-upgrade-all upgrade all tenants
* --cds-offboard-tenant TENANT_ID offboard specific tenant
* --cds-offboard-all offboard all tenants
... [TENANT] filter list for tenant id or subdomain
... --auto-undeploy upgrade with auto undeploy
... --time list includes timestamps
~ cdsl --cds-list [TENANT] list all cds-mtx tenant names
~ cdsll --cds-long-list [TENANT] long list all cds-mtx tenants
cdsot --cds-onboard-tenant TENANT_ID [METADATA] onboard specific tenant
cdsut --cds-upgrade-tenant TENANT_ID upgrade specific tenant
cdsua --cds-upgrade-all upgrade all tenants
* --cds-offboard-tenant TENANT_ID offboard specific tenant
* --cds-offboard-all offboard all tenants
... [METADATA] onboard subscription metadata
... [TENANT] filter list for tenant id or subdomain
... --auto-undeploy upgrade with auto undeploy
... --time list includes timestamps
=== hana management (hdi) ===
~ hdil --hdi-list [TENANT_ID] list all hdi container instances
Expand Down
4 changes: 3 additions & 1 deletion src/cliOptions.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ const PASS_ARG = Object.freeze({
APP_NAME: "APP_NAME",
APP_INSTANCE: "APP_INSTANCE",
PARAMS: "PARAMS",
METADATA: "METADATA",
});

const FLAG_ARG = Object.freeze({
Expand Down Expand Up @@ -147,7 +148,8 @@ module.exports = {
},
CDS_ONBOARD_TENANT: {
commandVariants: ["cdsot", "--cds-onboard-tenant"],
requiredPassArgs: [PASS_ARG.TENANT_ID, PASS_ARG.SUBDOMAIN],
requiredPassArgs: [PASS_ARG.TENANT_ID],
optionalPassArgs: [PASS_ARG.METADATA],
callback: cds.cdsOnboardTenant,
},
CDS_UPGRADE_TENANT: {
Expand Down
16 changes: 11 additions & 5 deletions src/submodules/capMultitenancy.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ const {
balancedSplit,
limiter,
formatTimestampsWithRelativeDays,
isObject,
} = require("../shared/static");
const { assert, assertAll } = require("../shared/error");
const { request, requestTry } = require("../shared/request");
Expand Down Expand Up @@ -99,7 +100,7 @@ const cdsLongList = async (context, [tenant]) => {
return JSON.stringify(data, null, 2);
};

const _cdsOnboard = async (context, tenantId, subdomain) => {
const _cdsOnboard = async (context, tenantId, metadata = {}) => {
const { cfRouteUrl } = await context.getCdsInfo();
await request({
method: "PUT",
Expand All @@ -111,14 +112,19 @@ const _cdsOnboard = async (context, tenantId, subdomain) => {
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({ subscribedSubdomain: subdomain, eventType: "CREATE" }),
body: JSON.stringify({ ...metadata, eventType: "CREATE" }),
});
};

const cdsOnboardTenant = async (context, [tenantId, subdomain]) => {
const cdsOnboardTenant = async (context, [tenantId, rawMetadata]) => {
let metadata;
assert(isUUID(tenantId), "TENANT_ID is not a uuid", tenantId);
assert(isDashedWord(subdomain), "SUBDOMAIN is not a valid subdomain", subdomain);
return _cdsOnboard(context, tenantId, subdomain);
if (rawMetadata) {
metadata = tryJsonParse(rawMetadata);
assert(isObject(metadata), "METADATA is not a JSON object");
console.log("using onboarding metadata: %O", metadata);
}
return _cdsOnboard(context, tenantId, metadata);
};

const _cdsUpgradeBuildLogFilepath = (tenantId) => `cds-upgrade-buildlog-${tenantId}.txt`;
Expand Down

0 comments on commit 8e29635

Please sign in to comment.