Make a Cosmo Tech Simulator cloud-ready
In this tutorial we will take our updated Brewery Simulator project as we left it in the previous tutorial
and add modification to get it ready to be used inside a Cosmo Tech Platform.
Requirements
docker
- A Cosmo Tech Platform minimal version of 3.0
- A Cosmo Tech SDK minimal version of 10.0
- Installed SDK package must include
csmcli
The Cosmo Tech Platform will run pre-registered docker
images based on the definition of Solutions
in its API.
In the API you can define a Solution
that will refer to a specific version of a docker
image in a given repository.
That Solution
defines sets of Parameters
and Run Templates
.
Then Workspaces
are defined in the API and point to a given Solution
allowing you to create a Scenario
which will tie together Datasets
, Parameters
,
and a Run Template
which will then be run by the API.
Datasets
are a description of how and where data are stored, Parameters
can be simple types
or full Datasets
allowing you to update the main Dataset
of your Scenario
, therefore
changing its initial state or behavior (or both).
Running your Scenario
will create a ScenarioRun
into the API
and that ScenarioRun
will make use of the docker
image your previously defined.
The API will call the image with an Entrypoint
called entrypoint.py
and that call should be your full orchestration.
Why entrypoint.py
and not csm-orc
?
The definition of the Entrypoint
being entrypoint.py
is left for compatibility with old images on the Cosmo Tech API (pre 3.0).
It will be changed in the future, but for now csm-orc
comes bundled with
a script called entrypoint.py
that allows both legacy and new runs of
the docker
image.
How does entrypoint.py
works?
The entrypoint.py
command (and its equivalent csm-orc entrypoint
) works using some Environment variables to switch between 3 modes:
- The general entrypoint with no special configuration that allow to run your
run templates
requiring the environment variable CSM_RUN_TEMPLATE_ID
to be set with your run template name.
- The legacy entrypoint activated by setting the environment variable
CSM_ENTRYPOINT_LEGACY
to true
which is made available for compatibility with pre 3.0 Cosmo Tech API.
- The direct simulator mode which requires the environment variable
CSM_RUN_TEMPLATE_ID
to not be set, and will then run the simulator by passing it any argument of the command.
Every Environment Variable
passed to the command will be forwarded to the
csm-orc run
command inside, and the command will be run with the working directory set to /pkg/share
.
Which Environment Variables
are made available by the API?
The Cosmo Tech API will forward a set of environment variables to any Simulator containers. You can find the full list in the following table.
List of environment variables
Environment Variable |
Description |
AZURE_CLIENT_ID |
An identifier to an Azure identity defined during the installation of the platform |
AZURE_CLIENT_SECRET |
A secret tied to the given client ID allowing to connect with it |
AZURE_TENANT_ID |
An identifier of your Azure tenant to be able to connect to it |
IDENTITY_PROVIDER |
Will be set to azure in an Azure based API |
CSM_API_URL |
The url to the Cosmo Tech API your are connecting to |
CSM_API_SCOPE |
An identifier scope used to get permission to your API |
CSM_DATASET_ABSOLUTE_PATH |
A local folder path to which an external volume is mounted to and in which you can write datasets |
CSM_PARAMETERS_ABSOLUTE_PATH |
A local folder path to which an external volume is mounted to and in which you can write parameters |
TWIN_CACHE_HOST |
The URL to the twin cache service inside the platform (deprecated) |
TWIN_CACHE_PORT |
The port to the twin cache service inside the platform (deprecated) |
TWIN_CACHE_PASSWORD |
The password to the twin cache service inside the platform (deprecated) |
TWIN_CACHE_USERNAME |
The username to the twin cache service inside the platform (deprecated) |
CSM_SIMULATION_ID |
The Simulation ID for your current scenario run |
AZURE_DATA_EXPLORER_RESOURCE_URI |
The URI used to query an Azure Data Explorer Cluster tied to your Workspace |
AZURE_DATA_EXPLORER_RESOURCE_INGEST_URI |
The URI used to send data to an Azure Data Explorer Cluster tied to your Workspace |
AZURE_DATA_EXPLORER_DATABASE_NAME |
The name of the database of your Workspace in Azure Data Explorer |
CSM_ORGANIZATION_ID |
The ID of your Organization in the Cosmo Tech API |
CSM_WORKSPACE_ID |
The ID of your Workspace in the Cosmo Tech API |
CSM_SCENARIO_ID |
The ID of your Scenario in the Cosmo Tech API |
CSM_RUN_TEMPLATE_ID |
The ID of your Run Template in the Cosmo Tech API (as defined in your Solution) |
CSM_CONTAINER_MODE |
Will always be csm-orc left for compatibility with pre 3.0 API |
CSM_ENTRYPOINT_LEGACY |
Will always be false |
CSM_PROBES_MEASURES_TOPIC |
An amqp address used by the simulator to send your probe data to ADX via Event Hub |
CSM_CONTROL_PLANE_TOPIC |
An amqp address used by the simulator to send your control info to ADX via Event Hub (mostly number of measures sent) |
CSM_SIMULATION |
The Simulation file that should be used to run your simulation (this value is defined in your Run Template and targets one of the files in the Simulation/ folder) |
Connect to the API to get our Scenario
data
Multiple ways exists to connect to the API and query some data, but for simplicity there exists a command in csm-data
that will make use of known API environment variables and do the work for you.
What is csm-data
csm-data
is a data oriented CLI part of the library CosmoTech-Acceleration-Library
(abreviated as CoAL
)
It is made to have pre-made commands to facilitate use of most of the services a modelisator/integrator could require while working on a run template
You can get it by installing CoAL
starting with version 0.7.0
How to install CoAL and csm-datapip install CosmoTech-Acceleration-Library~=0.7.0
That command is csm-data api scenariorun-load-data
(documentation of the command is available here).
The command makes use of 5 environment variables set by the API (as described in the previous section):
CSM_ORGANIZATION_ID
CSM_WORKSPACE_ID
CSM_SCENARIO_ID
CSM_DATASET_ABSOLUTE_PATH
CSM_PARAMETERS_ABSOLUTE_PATH
And uses 3 control environment variables:
WRITE_JSON
: If set to true
will write a parameters.json
file in CSM_PARAMETERS_ABSOLUTE_PATH
.
WRITE_CSV
: If set to true
will write a parameters.csv
file in CSM_PARAMETERS_ABSOLUTE_PATH
.
FETCH_DATASET
: If set to true
will download all the Datasets
tied to your scenario,
will write the main ones (not defined as a Parameter
) in CSM_DATASET_ABSOLUTE_PATH
and will write the others in CSM_PARAMETERS_ABSOLUTE_PATH/[parameter name]
where [parameter name]
is the name of the Parameter
targeting the Dataset
(with a type set to %DATASETID%
).
With that command one can easily download any dataset defined in the Cosmo Tech API,
as long as those datasets use one of the standard connections defined in the API
(as of version 3.0: Azure Blob Storage
, Azure Digital Twin
, TwinGraph Storage
).
Combine everything in a Run Template
Using all those new information we can see that most of the actions needed to run our code based on API data are already prepackaged.
We can:
- Download our scenario information using
csm-data api scenariorun-load-data
.
- Apply our parameters with our
apply_parameters.py
.
- Run our simulation using
csm-orc run-step
.
- And send our simulation results to an external system (here Azure Data Explorer) by setting environment variables during the
run-step
.
It is then easy to update our previous run.json
to take those changes into account.
New code/run_templates/orchestrator_tutorial_2
folder
To keep a clean distinction on the code of the previous tutorial and this one,
we will refer to the folder code/run_templates/orchestrator_tutorial_2
which is an exact copy of the folder code/run_templates/orchestrator_tutorial_1
.
You can create it by using the following command:
copy `orchestrator_tutorial_1`cp -r code/run_templates/orchestrator_tutorial_1 code/run_templates/orchestrator_tutorial_2
code/run_templates/orchestrator_tutorial2/run.json |
---|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84 | {
"steps": [
{
"id": "DownloadScenarioData",
"command": "csm-data",
"description": "Connect to the Cosmo Tech API to download dataset and parameters",
"arguments": [
"api",
"scenariorun-load-data",
"--write-json"
],
"useSystemEnvironment": true,
"environment": {
"CSM_API_URL": {
"description": "The URL used to query your Cosmo Tech API instance"
},
"CSM_API_SCOPE": {
"description": "The scope of identification used to request access token for your Cosmo Tech API instance"
},
"CSM_ORGANIZATION_ID": {
"description": "The id of the organization in the Cosmo Tech API"
},
"CSM_WORKSPACE_ID": {
"description": "The id of the workspace in the Cosmo Tech API"
},
"CSM_SCENARIO_ID": {
"description": "The id of the scenario in the Cosmo Tech API"
},
"CSM_DATASET_ABSOLUTE_PATH": {
"description": "The path used to store the datasets of the scenario"
},
"CSM_PARAMETERS_ABSOLUTE_PATH": {
"description": "The path used to store the parameters of the scenario"
}
}
},
{
"id": "ApplyParameters",
"command": "python",
"arguments": [
"code/run_templates/orchestrator_tutorial_2/apply_parameters.py",
"$CSM_DATASET_ABSOLUTE_PATH",
"$CSM_DATASET_ABSOLUTE_PATH",
"$CSM_PARAMETERS_ABSOLUTE_PATH/parameters.json"
],
"description": "Apply our parameters to the dataset",
"environment": {
"CSM_DATASET_ABSOLUTE_PATH": {
"description": "The path to the dataset to update",
"defaultValue": "Simulation/Resource/scenariorun-data"
},
"CSM_PARAMETERS_ABSOLUTE_PATH": {
"description": "The path to a folder containing our parameters.json file",
"defaultValue": "code/run_templates/orchestrator_tutorial_2"
}
},
"precedents": [
"DownloadScenarioData"
]
},
{
"id": "SimulationRun",
"command": "csm-orc",
"arguments": [
"run-step",
"--template",
"orchestrator_tutorial_2",
"--steps",
"engine"
],
"description": "Runs the simulation targeted by CSM_SIMULATION",
"useSystemEnvironment": true,
"environment": {
"CSM_SIMULATION": {
"description": "The simulation file to run",
"defaultValue": "BusinessApp_Simulation"
}
},
"precedents": [
"ApplyParameters"
]
}
]
}
|
We can see a few changes and additions compared to the previous run.json
file:
- We created a new
step
called DownloadScenarioData
that makes use of csm-data api scenariorun-load-data
:
- In this step we defined a few environment variables required to run it,
but we still added
useSystemEnvironment
to true
to ensure any environment variable required
to connect to the API is made available as well.
- In the
ApplyParameters
we made a few changes:
DATASET/PARAMETERS_PATH
became CSM_DATASET/PARAMETERS_ABSOLUTE_PATH
.
- We added
/parameters.json
in the arguments for the parameters path.
- We added a precendent step to schedule it after the
DownloadScenarioData
.
- In the
SimulatorRun
step changes are minimal:
- The template targeted is the new
orchestrator_tutorial_2
.
- The default value of
CSM_SIMULATION
has been changed to BusinessApp_Simulation
since docker
simulation can't make use of visual consumers.
Build a docker image
Now that we have our run.json
ready we can build our docker image.
Build a docker image using csmcli# First we will clean everything to ensure a correct generation of the project
csm clean
# Now we can build our full project
csm flow
# The simulator is now ready to be packaged
csm docker build
After running those commands we end up with a docker image cosmotech/mybrewery_simulator
ready to be used.
A simple test can be made with the following command:
Test the docker imagedocker run -e CSM_RUN_TEMPLATE_ID=orchestrator_tutorial_1 -e CSM_SIMULATION=BusinessApp_Simulation -v ./Simulation/Resource/scenariorun-data:/mnt/scenariorun-data cosmotech/mybrewery_simulator
About the parameters of the command docker run
-e
sets an environment variable during the docker run, here we set our run template id and our simulation.
-v
sets a volume during the docker run,
here we mount our local Simulation/Resource/scenariorun-data
folder to the path /mnt/scenariorun-data
in the docker
container, allowing us to use our existing dataset during the run.
Define API items
The following sections give you simple examples of .yaml
files used to define resources in the Cosmo Tech API.
Define a Solution
An example of Solution.yaml
(a file used by the Cosmo Tech API) for our current solution would be:
Solution.yamlkey: "brewery"
name: "Demo Brewery Solution, csm-orc tutorial"
description: "A simple example of a Cosmo Tech solution built using the Brewery model"
tags:
- "csm-orc"
- "Brewery"
repository: "mybrewery_simulator"
version: "0.0.1"
parameters:
- id: "Stock"
varType: "int"
defaultValue: 100
- id: "RestockQty"
varType: "int"
defaultValue: 25
- id: "NbWaiters"
varType: "int"
defaultValue: 5
parameterGroups:
- id: bar_parameters
parameters:
- Stock
- RestockQty
- NbWaiters
runTemplates:
- id: "orchestrator_tutorial_2"
name: "Basic what-if"
description: "Basic what-if simulation"
parameterGroups:
- bar_parameters
csmSimulation: BusinessApp_Simulation
Full Open API description of a Solution
is available here.
Open API description of a Solution (components.schemas
)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343 | Solution:
type: object
x-class-extra-annotation: "@com.redis.om.spring.annotations.Document"
description: a version of a Solution
properties:
id:
type: string
x-field-extra-annotation: "@org.springframework.data.annotation.Id"
readOnly: true
description: the Solution version unique identifier
organizationId:
x-field-extra-annotation: "@com.redis.om.spring.annotations.Indexed"
type: string
readOnly: true
description: the Organization unique identifier
key:
type: string
description: the Solution key which group Solution versions
name:
type: string
x-field-extra-annotation: "@com.redis.om.spring.annotations.Searchable"
description: the Solution name
description:
type: string
description: the Solution description
repository:
type: string
description: the registry repository containing the image
csmSimulator:
type: string
description: the main Cosmo Tech simulator name used in standard Run Template
version:
type: string
description: the Solution version MAJOR.MINOR.PATCH. Must be aligned with an existing repository tag
ownerId:
type: string
readOnly: true
description: the User id which own this Solution
sdkVersion:
type: string
description: the MAJOR.MINOR version used to build this solution
url:
type: string
description: an optional URL link to solution page
tags:
type: array
description: the list of tags
items:
type: string
parameters:
type: array
description: the list of Run Template Parameters
items:
$ref: '#/components/schemas/RunTemplateParameter'
parameterGroups:
type: array
description: the list of parameters groups for the Run Templates
items:
$ref: '#/components/schemas/RunTemplateParameterGroup'
runTemplates:
type: array
description: list of Run Template
items:
$ref: '#/components/schemas/RunTemplate'
security:
x-field-extra-annotation: "@com.redis.om.spring.annotations.Indexed"
allOf:
- $ref: '#/components/schemas/SolutionSecurity'
# required:
# - key
# - name
# - repository
# - version
# - runTemplates
SolutionSecurity:
type: object
description: the Solution security information
properties:
default:
type: string
x-field-extra-annotation: "@com.redis.om.spring.annotations.Indexed"
description: the role by default
accessControlList:
type: array
x-field-extra-annotation: "@com.redis.om.spring.annotations.Indexed"
description: the list which can access this Solution with detailed access control information
items:
$ref: '#/components/schemas/SolutionAccessControl'
required:
- default
- accessControlList
SolutionAccessControl:
type: object
description: a Solution access control item
properties:
id:
type: string
x-field-extra-annotation: "@com.redis.om.spring.annotations.Indexed"
description: the identity id
role:
type: string
description: a role
required:
- id
- role
SolutionRole:
type: object
description: the Solution Role
properties:
role:
type: string
description: the Solution Role
required:
- role
RunTemplate:
type: object
description: a Solution Run Template
properties:
id:
type: string
description: the Solution Run Template id
name:
type: string
description: the Run Template name
deprecated: true
labels:
$ref: '#/components/schemas/TranslatedLabels'
description:
type: string
description: the Run Template description
csmSimulation:
type: string
description: the Cosmo Tech simulation name. This information is send to the Engine. Mandatory information if no Engine is defined
tags:
type: array
description: the list of Run Template tags
items:
type: string
computeSize:
type: string
description: the compute size needed for this Run Template. Standard sizes are basic and highcpu. Default is basic
runSizing:
description: definition of resources needed for the scenario run
$ref: "#/components/schemas/RunTemplateResourceSizing"
noDataIngestionState:
type: boolean
description: set to true if the run template does not want to check data ingestion state (no probes or not control plane)
fetchDatasets:
type: boolean
description: whether or not the fetch dataset step is done
scenarioDataDownloadTransform:
type: boolean
description: whether or not the scenario data download transform step step is done
fetchScenarioParameters:
type: boolean
description: whether or not the fetch parameters step is done
applyParameters:
type: boolean
description: whether or not the apply parameter step is done
validateData:
type: boolean
description: whether or not the validate step is done
sendDatasetsToDataWarehouse:
type: boolean
description: whether or not the Datasets values are send to the DataWarehouse prior to Simulation Run. If not set follow the Workspace setting
sendInputParametersToDataWarehouse:
type: boolean
description: whether or not the input parameters values are send to the DataWarehouse prior to Simulation Run. If not set follow the Workspace setting
preRun:
type: boolean
description: whether or not the pre-run step is done
run:
type: boolean
description: whether or not the run step is done
postRun:
type: boolean
description: whether or not the post-run step is done
parametersJson:
type: boolean
description: whether or not to store the scenario parameters in json instead of csv
parametersHandlerSource:
$ref: "#/components/schemas/RunTemplateStepSource"
datasetValidatorSource:
$ref: "#/components/schemas/RunTemplateStepSource"
preRunSource:
$ref: "#/components/schemas/RunTemplateStepSource"
runSource:
$ref: "#/components/schemas/RunTemplateStepSource"
postRunSource:
$ref: "#/components/schemas/RunTemplateStepSource"
scenariodataTransformSource:
$ref: "#/components/schemas/RunTemplateStepSource"
parameterGroups:
type: array
description: the ordered list of parameters groups for the Run Template
items:
type: string
description: a Run Template Group Parameter id
stackSteps:
type: boolean
description: whether or not to stack adjacent scenario run steps in one container run which will chain steps
gitRepositoryUrl:
type: string
description: an optional URL to the git repository
gitBranchName:
type: string
description: an optional git branch name
runTemplateSourceDir:
type: string
description: an optional directory where to find the run template source
orchestratorType:
$ref: "#/components/schemas/RunTemplateOrchestrator"
executionTimeout:
type: integer
description: an optional duration in seconds in which a workflow is allowed to run
deleteHistoricalData:
$ref: "#/components/schemas/DeleteHistoricalData"
required:
- id
# - name
DeleteHistoricalData:
type: object
description: Configuration of scenario runs deletion automatic mecanism
properties:
enable:
type: boolean
description: Activate or Deactivate historical data deletion
default: true
pollFrequency:
type: integer
description: define the polling frequency of scenario run status (in millis)
default: 10000
timeOut:
type: integer
description: define the polling timeout
default: 28800
required:
- enable
RunTemplateOrchestrator:
type: string
description: the Orchestrator to use for the Run Template
enum:
- argoWorkflow
- csmOrc
RunTemplateHandlerId:
type: string
description: the Run Template step handler identifier
enum: ["parameters_handler","validator","prerun","engine","postrun","scenariodata_transform"]
RunTemplateStepSource:
type: string
description: the source local, cloud or git repository
enum: ["cloud","git","local","platform"]
RunTemplateResourceSizing:
type: object
description: a description object for resource requests and limits (default same configuration as basic sizing)
properties:
requests:
$ref: '#/components/schemas/ResourceSizeInfo'
limits:
$ref: '#/components/schemas/ResourceSizeInfo'
required:
- requests
- limits
ResourceSizeInfo:
type: object
description: define cpus and memory needs
properties:
cpu:
type: string
description: define cpu needs
memory:
type: string
description: define memory needs
required:
- cpu
- memory
RunTemplateParameterGroup:
type: object
description: a Parameter Group for a Run Template
properties:
id:
type: string
description: the Parameter Group id
labels:
$ref: '#/components/schemas/TranslatedLabels'
isTable:
type: boolean
description: does the group define a table
options:
type: object
description: freeform options
additionalProperties: true
parentId:
type: string
description: the Run Template Group parent Id
parameters:
type: array
description: an ordered list of Run Template Parameters
items:
type: string
description: a Run Template Parameter id
required:
- id
#Â - labels
#Â - parameters
RunTemplateParameter:
type: object
description: a Run Template Parameter
properties:
id:
type: string
description: the Parameter id
labels:
$ref: '#/components/schemas/TranslatedLabels'
varType:
type: string
description: the variable type for the parameter. Basic types or special type %DATASETID%
defaultValue:
type: string
description: the default value for this parameter
minValue:
type: string
description: the minimum value for this parameter
maxValue:
type: string
description: the maximum value for this parameter
regexValidation:
type: string
description: a regex to validate the value
options:
type: object
description: freeform options
additionalProperties: true
required:
- id
# - labels
# - varType
TranslatedLabels:
type: object
description: a translated label with key as ISO 639-1 code
additionalProperties:
type: string
|
Once this file is sent to a Cosmo Tech API we will get a Solution ID
of the form sol-xxxxxxxx
which will allow us to create further elements inside the API referencing our solution.
Now let's look deeper at how to create our Solution.yaml
.
Solution
description
Solution.yaml - descriptionkey: "brewery"
name: "Demo Brewery Solution, csm-orc tutorial"
description: "A simple example of a Cosmo Tech solution built using the Brewery model"
tags:
- "csm-orc"
- "Brewery"
repository: "mybrewery_simulator"
version: "0.0.1"
We can see a few important properties in this part of the Solution
file:
key
: it is a "grouping" value used to make multiple Solution
using the same base but different versions together.
name
: a simple name given to the Solution
.
description
: a simple description of the Solution
.
tags
: a list of tags used in the API to filter Solution
resources.
repository
: the name of the docker
image inside the image registry.
version
: the version of the docker
image tied to the Solution
.
parameters
and parameterGroups
Solution.yaml - parametersparameters:
- id: "Stock"
varType: "int"
defaultValue: 100
- id: "RestockQty"
varType: "int"
defaultValue: 25
- id: "NbWaiters"
varType: "int"
defaultValue: 5
parameterGroups:
- id: bar_parameters
parameters:
- Stock
- RestockQty
- NbWaiters
In this part we declare our scenario parameters. As previously decided we need three parameters:
NbWaiters
RestockQty
Stock
Each parameter can be given a type (property varType
) and a default value (property 'defaultValue').
Then we grouped our parameters
in a parametersGroup
"bar_parameters". Parameter groups will make our parameters available in further part of the Solution
.
runTemplates
Solution.yaml - runTemplatesrunTemplates:
- id: "orchestrator_tutorial_2"
name: "Basic what-if"
description: "Basic what-if simulation"
parameterGroups:
- bar_parameters
csmSimulation: BusinessApp_Simulation
In this part we finally define our Run Template
for the API. We have three main elements to define:
id
: the id
of a run template is the name of a folder inside code/run_templates
that will contain a run.json
file, along with one sub-folder for each step in the run template.
parameterGroups
: list of parameter groups available for the run template. Parameters declared in those groups can be changed by users in order to create new scenarios.
csmSimulation
: the name of a simulation file (without the .sml.xml
suffix), to be set in the CSM_SIMULATION_ID
environment variable. This simulation will run as part of the run template execution.
Define a Workspace
An example of Workspace.yaml
which is a file used by the Cosmo Tech API for our current solution would be:
Workspace.yamlkey: brewery_orchestrator_tutorial
name: Brewery tutorial workspace
solution:
solutionId: "sol-xxxxxxxx"
Full Open API description of a Workspace
is available here.
Open API description of a Workspace (components.schemas
)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178 | Workspace:
type: object
x-class-extra-annotation: "@com.redis.om.spring.annotations.Document"
description: a Workspace
properties:
id:
type: string
x-field-extra-annotation: "@org.springframework.data.annotation.Id"
readOnly: true
description: Workspace unique identifier generated by the API
example: "w-0123456789ab"
organizationId:
x-field-extra-annotation: "@com.redis.om.spring.annotations.Indexed"
type: string
readOnly: true
description: Organization unique identifier under which the workspace resides
example: "o-0123456789ab"
key:
type: string
description: technical key for resource name convention and version grouping. Must be unique
example: "MyKey"
name:
type: string
x-field-extra-annotation: "@com.redis.om.spring.annotations.Searchable"
description: Workspace name. This name is display in the sample webApp
example: "FranceOffice"
description:
type: string
description: the Workspace description
linkedDatasetIdList:
type: array
description: list of dataset linked to this dataset
items:
type: string
version:
type: string
description: the Workspace version MAJOR.MINOR.PATCH.
example: "1.0.0"
tags:
type: array
description: the list of tags
items:
type: string
ownerId:
type: string
readOnly: true
description: the user id which own this workspace. set by the API from Authentification service receved id
solution:
$ref: '#/components/schemas/WorkspaceSolution'
webApp:
$ref: '#/components/schemas/WorkspaceWebApp'
sendInputToDataWarehouse:
type: boolean
description: default setting for all Scenarios and Run Templates to set whether or not the Dataset values and the input parameters values are send to the DataWarehouse prior to the ScenarioRun
useDedicatedEventHubNamespace:
type: boolean
default: false
description: Set this property to true to use a dedicated Azure Event Hub Namespace for this Workspace.
The Event Hub Namespace must be named \'<organization_id\>-<workspace_id\>\' (in lower case).
This Namespace must also contain two Event Hubs named \'probesmeasures\' and \'scenariorun\'.
dedicatedEventHubSasKeyName:
type: string
description: the Dedicated Event Hub SAS key name, default to RootManageSharedAccessKey. Use the /secret endpoint to set the key value
dedicatedEventHubAuthenticationStrategy:
type: string
description: the Event Hub authentication strategy, SHARED_ACCESS_POLICY or TENANT_CLIENT_CREDENTIALS. Default to the one defined for the tenant.
sendScenarioRunToEventHub:
type: boolean
default : true
description: default setting for all Scenarios and Run Templates to set whether or not the ScenarioRun is send to the Event Hub
sendScenarioMetadataToEventHub:
type: boolean
default: false
description: Set this property to false to not send scenario metada to Azure Event Hub Namespace for this Workspace.
The Event Hub Namespace must be named \'<organization_id\>-<workspace_id\>\' (in lower case).
This Namespace must also contain two Event Hubs named \'scenariometadata\' and \'scenariorunmetadata\'.
datasetCopy:
type: boolean
default: true
description: Activate the copy of dataset on scenario creation, meaning that each scenario created in this workspace
will make this copy. when false, scenario use directly the dataset specified.
security:
x-field-extra-annotation: "@com.redis.om.spring.annotations.Indexed"
allOf:
- $ref: '#/components/schemas/WorkspaceSecurity'
required:
- key
- name
- solution
WorkspaceSecurity:
type: object
description: the workspace security information
properties:
default:
type: string
x-field-extra-annotation: "@com.redis.om.spring.annotations.Indexed"
description: the role by default
accessControlList:
type: array
x-field-extra-annotation: "@com.redis.om.spring.annotations.Indexed"
description: the list which can access this Workspace with detailed access control information
items:
$ref: '#/components/schemas/WorkspaceAccessControl'
required:
- default
- accessControlList
WorkspaceAccessControl:
type: object
description: a Workspace access control item
properties:
id:
type: string
x-field-extra-annotation: "@com.redis.om.spring.annotations.Indexed"
description: the identity id
role:
type: string
description: a role
required:
- id
- role
WorkspaceRole:
type: object
description: the Workspace Role
properties:
role:
type: string
description: the Workspace Role
required:
- role
WorkspaceFile:
type: object
description: a Workspace File resource
properties:
fileName:
type: string
description: the Workspace File name
WorkspaceWebApp:
type: object
description: a Workspace Web Application
properties:
url:
type: string
description: the Workspace Web Application URL
iframes:
type: object
description: a map of iframeKey/iframeURL
additionalProperties: true
options:
type: object
description: free form options for Web Application
additionalProperties: true
required:
- url
WorkspaceSolution:
type: object
description: the Workspace Solution configuration
properties:
solutionId:
type: string
description: the Solution Id attached to this workspace
runTemplateFilter:
type: array
description: the list of Solution Run Template Id to filter
items:
type: string
defaultRunTemplateDataset:
type: object
description: a map of RunTemplateId/DatasetId to set a default dataset for a Run Template
additionalProperties: true
# required:
# - solutionId
WorkspaceSecret:
type: object
description: the secret definition
properties:
dedicatedEventHubKey:
type: string
description: the dedicated event hub shared access key
|
After creating a Workspace
resource using the API you will need to create additional resources for it in your platform if you want to run scenarios.
Once your Workspace
is created you will get a workspace identifier of the form w-xxxxxxxx
. It will allow you to connect to your workspace and reference it in other resources.
We have 3 required parts in a Workspace
:
key
: a unique identifier for your workspace which will be used during resource creation.
name
: the name of your Workspace
.
solution.solutionId
: the solution identifier (sol-xxxxxxxx
) for the solution you want to use in your workspace.
Define a Dataset
An example of Dataset.yaml
which is a file used by the Cosmo Tech API for our current solution would be:
Dataset.yamlname: Orchestrator Tutorial Dataset
description: Example dataset defined during the Orchestrator Tutorial
tags:
- Brewery
- Tutorial
Full Open API description of a Dataset
is available here.
Open API description of a Dataset (components.schemas
)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409 | FileUploadValidation:
type: object
description: files read on upload
properties:
nodes:
type: array
description: list of filename found on nodes folder
items:
$ref: '#/components/schemas/FileUploadMetadata'
edges:
type: array
description: list of filename found on edges folder
items:
$ref: '#/components/schemas/FileUploadMetadata'
FileUploadMetadata:
type: object
properties:
name:
type: string
size:
type: integer
DatasetSearch:
type: object
description: the search options
properties:
datasetTags:
type: array
description: the dataset tag list to search
items:
type: string
required:
- datasetTags
Dataset:
type: object
x-class-extra-annotation: "@com.redis.om.spring.annotations.Document"
description: a Dataset
properties:
id:
x-field-extra-annotation: "@org.springframework.data.annotation.Id"
type: string
readOnly: true
description: the Dataset unique identifier
name:
x-field-extra-annotation: "@com.redis.om.spring.annotations.Searchable"
type: string
description: the Dataset name
description:
type: string
description: the Dataset description
ownerId:
type: string
readOnly: true
description: the User id which own this Dataset
ownerName:
type: string
readOnly: true
description: the name of the owner
organizationId:
x-field-extra-annotation: "@com.redis.om.spring.annotations.Indexed"
type: string
readOnly: true
description: the Organization Id related to this Dataset
parentId:
type: string
description: the Dataset id which is the parent of this Dataset
linkedWorkspaceIdList:
type: array
description: list of workspace linked to this dataset
items:
type: string
twingraphId:
type: string
description: the twin graph id
main:
type: boolean
description: is this the main dataset
creationDate:
type: integer
format: int64
readOnly: true
description: the Dataset creation date
refreshDate:
type: integer
format: int64
readOnly: true
description: the last time a refresh was done
sourceType:
$ref: '#/components/schemas/DatasetSourceType'
source:
$ref: '#/components/schemas/SourceInfo'
ingestionStatus:
type: string
description: the Dataset ingestion status
enum:
- NONE
- PENDING
- ERROR
- SUCCESS
twincacheStatus:
type: string
description: the twincache data status
enum:
- EMPTY
- FULL
queries:
type: array
description: the list of queries
items:
type: string
tags:
x-field-extra-annotation: "@com.redis.om.spring.annotations.Indexed"
type: array
description: the list of tags
items:
type: string
connector:
x-field-extra-annotation: "@com.redis.om.spring.annotations.Indexed"
type: object
description: the Connector setup bound to a Dataset
properties:
id:
type: string
x-field-extra-annotation: "@com.redis.om.spring.annotations.Indexed"
description: the Connector id
name:
type: string
x-field-extra-annotation: "@com.redis.om.spring.annotations.Indexed"
description: the Connector name
version:
type: string
description: the Connector version
parametersValues:
type: object
additionalProperties:
type: string
# required:
# - id
fragmentsIds:
type: array
description: the list of other Datasets ids to compose as fragments
items:
type: string
validatorId:
type: string
description: the validator id
compatibility:
type: array
description: the list of compatible Solutions versions
items:
$ref: '#/components/schemas/DatasetCompatibility'
security:
x-field-extra-annotation: "@com.redis.om.spring.annotations.Indexed"
allOf:
- $ref: '#/components/schemas/DatasetSecurity'
# required:
# - name
# - connector
DatasetSecurity:
type: object
description: the dataset security information
properties:
default:
type: string
x-field-extra-annotation: "@com.redis.om.spring.annotations.Indexed"
description: the role by default
accessControlList:
type: array
x-field-extra-annotation: "@com.redis.om.spring.annotations.Indexed"
description: the list which can access this Dataset with detailed access control information
items:
$ref: '#/components/schemas/DatasetAccessControl'
required:
- default
- accessControlList
DatasetAccessControl:
type: object
description: a Dataset access control item
properties:
id:
type: string
x-field-extra-annotation: "@com.redis.om.spring.annotations.Indexed"
description: the identity id
role:
type: string
description: a role
required:
- id
- role
DatasetRole:
type: object
description: the Dataset Role
properties:
role:
type: string
description: the Dataset Role
required:
- role
DatasetSourceType:
type: string
description: the Dataset Source Type
enum:
- ADT
- AzureStorage
- File
- None
- Twincache
DatasetTwinGraphInfo:
type: object
description: a twin graph query in cypher language
properties:
jobId:
type: string
description: the import job id
datasetId:
type: string
description: the Dataset id
status:
type: string
description: Twingraph status
DatasetTwinGraphQuery:
type: object
description: a twin graph query in cypher language
properties:
query:
type: string
description: the query in cypher language
required:
- query
DatasetTwinGraphHash:
type: object
description: a twin graph hash
properties:
hash:
type: string
description: the hash of the graph
DatasetCompatibility:
type: object
description: a Dataset compatibility constraint to a Solution version open range
properties:
solutionKey:
type: string
description: the Solution key which group Solution versions
minimumVersion:
type: string
description: the Solution minimum version compatibility (version included)
maximumVersion:
type: string
description: the Solution maximum version compatibility (version included)
required:
- solutionKey
Validator:
type: object
description: a Validator to validate a Dataset
properties:
id:
type: string
readOnly: true
description: the Validator id
name:
type: string
description: the Validator name
description:
type: string
description: the Validator description
repository:
type: string
description: the registry repository containing the Validator image
version:
type: string
description: the Validator version MAJOR.MINOR.PATCH. Must be aligned with an existing repository tag
ownerId:
type: string
readOnly: true
description: the User id which own this Validator
url:
type: string
description: an optional URL link to Validator page
tags:
type: array
description: the list of tags
items:
type: string
required:
- id
- name
- repository
- version
ValidatorRun:
type: object
description: a Validator Run
properties:
id:
type: string
readOnly: true
description: the Validator Run id
validatorId:
type: string
readOnly: true
description: the Validator id
validatorName:
type: string
readOnly: true
description: the validator name
datasetId:
type: string
description: the Dataset id to run the validator on
datasetName:
type: string
readOnly: true
description: the Dataset name
state:
type: string
readOnly: true
description: the Validator Run state
enum: ["Running","Finished","OnError"]
containerId:
type: string
readOnly: true
description: the Validator Run container id
logs:
type: string
readOnly: true
description: the Validator Run logs
required:
- datasetId
DatasetCopyParameters:
type: object
description: the Dataset Copy Parameters
properties:
sourceId:
type: string
description: the source Dataset id
targetId:
type: string
description: the target Dataset id
options:
type: object
description: freeform options to path to connectors
additionalProperties: true
SubDatasetGraphQuery:
type: object
description: a twin graph query in cypher language
properties:
name:
type: string
description: the name of the subdataset
description:
type: string
description: the description of the subdataset
queries:
type: array
description: the query in cypher language
items:
type: string
main:
type: boolean
description: is this the main dataset
SourceInfo:
type: object
description: Source job import information
properties:
name:
type: string
description: the source name containing the files to import
location:
type: string
description: the source location containing the files to import
path:
type: string
description: the source location containing the files to import
jobId:
type: string
description: indicate the last import jobId
required:
- location
TwinGraphBatchResult:
type: object
description: Processing result
properties:
totalLines:
type: integer
processedLines:
type: integer
errors:
type: array
items:
type: string
required:
- totalLines
- processedLines
- errors
GraphProperties:
type: object
properties:
type:
type: string
description: the type of the relationship
source:
type: string
description: the source node of the relationship
target:
type: string
description: the target node of the relationship
name:
type: string
description: the name of the graph data object
params:
type: string
description: the parameters of the graph data object
|
A Dataset
is defined by a name, a type of data source (property sourceType
) and a twin
graph identifier (property twingraphId
).
After creating your Dataset
you will get an identifier of the form d-xxxxxxxx
which will be used to reference it to your scenarios.
Define a Scenario
An example of Scenario.yaml
which is a file used by the Cosmo Tech API for our current solution would be :
Scenario.yamlname: Orchestrator Tutorial
description: Scenario of the Orchestrator tutorial
tags:
- Brewery
- Orchestrator Tutorial
runTemplateId: orchestrator_tutorial_2
datasetList:
- 'd-xxxxxxxx'
parametersValues:
- parameterId: Stock
varType: int
value: 200
- parameterId: RestockQty
varType: int
value: 50
- parameterId: NbWaiters
varType: int
value: 10
Full Open API description of a Scenario
is available here
Open API description of a Scenario (components.schemas
)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297 | Scenario:
type: object
x-class-extra-annotation: "@com.redis.om.spring.annotations.Document"
description: a Scenario with base information
properties:
id:
type: string
x-field-extra-annotation: "@org.springframework.data.annotation.Id"
readOnly: true
description: the Scenario unique identifier
name:
type: string
x-field-extra-annotation: "@com.redis.om.spring.annotations.Searchable"
description: the Scenario name
description:
type: string
description: the Scenario description
tags:
type: array
description: the list of tags
items:
type: string
parentId:
type: string
x-field-extra-annotation: "@com.redis.om.spring.annotations.Indexed"
description: the Scenario parent id
ownerId:
type: string
x-field-extra-annotation: "@com.redis.om.spring.annotations.Indexed"
readOnly: true
description: the user id which own this Scenario
rootId:
type: string
x-field-extra-annotation: "@com.redis.om.spring.annotations.Indexed"
readOnly: true
description: the scenario root id
solutionId:
type: string
readOnly: true
description: the Solution Id associated with this Scenario
runTemplateId:
type: string
description: the Solution Run Template Id associated with this Scenario
organizationId:
type: string
x-field-extra-annotation: "@com.redis.om.spring.annotations.Indexed"
readOnly: true
description: the associated Organization Id
workspaceId:
type: string
x-field-extra-annotation: "@com.redis.om.spring.annotations.Indexed"
readOnly: true
description: the associated Workspace Id
state:
$ref: '#/components/schemas/ScenarioJobState'
creationDate:
type: integer
format: int64
readOnly: true
description: the Scenario creation date
lastUpdate:
type: integer
format: int64
readOnly: true
description: the last time a Scenario was updated
ownerName:
type: string
readOnly: true
description: the name of the owner
solutionName:
type: string
readOnly: true
description: the Solution name
runTemplateName:
type: string
readOnly: true
description: the Solution Run Template name associated with this Scenario
datasetList:
type: array
description: the list of Dataset Id associated to this Scenario Run Template
items:
type: string
runSizing:
description: definition of resources needed for the scenario run
$ref: "#/components/schemas/ScenarioResourceSizing"
parametersValues:
type: array
description: the list of Solution Run Template parameters values
items:
$ref: '#/components/schemas/ScenarioRunTemplateParameterValue'
lastRun:
allOf:
- $ref: '#/components/schemas/ScenarioLastRun'
- type: object
description: the last Scenario Run for this Scenario
parentLastRun:
allOf:
- $ref: '#/components/schemas/ScenarioLastRun'
- type: object
description: the last Scenario Run for the parent of this Scenario
rootLastRun:
allOf:
- $ref: '#/components/schemas/ScenarioLastRun'
- type: object
description: the last Scenario Run for the root (master) of Scenario
validationStatus:
x-field-extra-annotation: "@com.redis.om.spring.annotations.Searchable"
allOf:
- $ref: '#/components/schemas/ScenarioValidationStatus'
security:
x-field-extra-annotation: "@com.redis.om.spring.annotations.Indexed"
allOf:
- $ref: '#/components/schemas/ScenarioSecurity'
# required:
# - name
# - runTemplateId
ScenarioSecurity:
type: object
description: the Scenario security information
properties:
default:
type: string
x-field-extra-annotation: "@com.redis.om.spring.annotations.Indexed"
description: the role by default
accessControlList:
type: array
x-field-extra-annotation: "@com.redis.om.spring.annotations.Indexed"
description: the list which can access this Scenario with detailed access control information
items:
$ref: '#/components/schemas/ScenarioAccessControl'
required:
- default
- accessControlList
ScenarioAccessControl:
type: object
description: a Scenario access control item
properties:
id:
type: string
x-field-extra-annotation: "@com.redis.om.spring.annotations.Indexed"
description: the identity id
role:
type: string
x-field-extra-annotation: "@com.redis.om.spring.annotations.Indexed"
description: a role
required:
- id
- role
ScenarioRole:
type: object
description: the Scenario Role
properties:
role:
type: string
description: the Scenario Role
required:
- role
ScenarioResourceSizing:
type: object
description: a description object for resource requests and limits (default same configuration as basic sizing)
properties:
requests:
$ref: '#/components/schemas/ResourceSizeInfo'
limits:
$ref: '#/components/schemas/ResourceSizeInfo'
required:
- requests
- limits
ResourceSizeInfo:
type: object
description: define cpus and memory needs
properties:
cpu:
type: string
description: define cpu needs
memory:
type: string
description: define memory needs
required:
- cpu
- memory
ScenarioLastRun:
type: object
properties:
scenarioRunId:
type: string
description: the last Scenario Run id
csmSimulationRun:
type: string
description: the last Cosmo Tech Simulation Run id
workflowId:
type: string
description: the last Workflow Id
workflowName:
type: string
description: the last Workflow name
ScenarioRunTemplateParameterValue:
type: object
description: the value of a Solution Run Template parameter for a Scenario
properties:
parameterId:
type: string
description: the parameter Id
varType:
type: string
readOnly: true
description: the parameter value type
value:
type: string
description: the parameter value
isInherited:
type: boolean
description: whether or not the value is inherited from parent or has been changed
required:
- parameterId
- value
ScenarioComparisonResult:
type: object
description: the result of the comparison of two scenarios
properties:
scenarioId:
type: string
readOnly: true
description: the Scenario Id which is the reference for the comparison
comparedScenarioId:
type: string
readOnly: true
description: the Scenario Id the reference Scenario is compared to
changedValues:
type: array
readOnly: true
description: the list of changed values for parameters
items:
$ref: '#/components/schemas/ScenarioChangedParameterValue'
ScenarioChangedParameterValue:
type: object
description: the difference between the values of a parameter
properties:
parameterId:
type: string
readOnly: true
description: the parameter id the values refer to
varType:
type: string
readOnly: true
description: the parameter value type
value:
type: string
readOnly: true
description: the parameter value for the reference Scenario
comparedValue:
type: string
readOnly: true
description: the parameter value for the compared Scenario
ScenarioDataDownloadInfo:
type: object
description: Scenario data download job info
properties:
url:
type: string
readOnly: true
description: the Scenario Data Download URL
state:
$ref: '#/components/schemas/ScenarioJobState'
ScenarioDataDownloadJob:
type: object
description: Scenario data download job
properties:
id:
type: string
readOnly: true
description: the Scenario Data Download job identifier
ScenarioJobState:
type: string
readOnly: true
description: the Scenario job state
enum:
- Created
- Running
- Successful
- Failed
# PROD-7888 : When requesting the scenario state right after a run has been submitted,
# the scenario run service (e.g., Argo Workflow) might not have scheduled the run
# effectively yet.
# Furthermore, temporary communication errors might occur anytime when remotely
# fetching last scenario run statuses.
- Unknown
# PROD-7420 : return data ingestion status
- DataIngestionInProgress
ScenarioValidationStatus:
type: string
description: the validation status of the scenario
enum:
- Draft
- Rejected
- Unknown
- Validated
|
As a result of creating your Scenario
you will get an identifier of the form s-xxxxxxxx
that you can use to run it (as we will see further) and reference it in other endpoints.
A scenario essentially combines a run template with a dataset. The run template provides a set of parameters that can then be modified by the user before running the scenario. Multiple elements are required for defining a scenario, most notably:
runTemplateId
: should be one of the run template identifiers defined in our Solution
.
datasetList
: should reference a previously defined Dataset
using its identifier.
parametersValues
: is a list of objects representing the parameters we defined in the Solution
, with the actual values they are set to.
Run our distant Scenario
We will need to either use a lot of parameters or environment variables. To make
things easier we can make use of a parameter of csm-orc run
to generate a template of .env
file we will be able to use.
That parameter is --gen-env-target
and takes a filename to create a .env
file initialized with all the environment variables defined in our run.json
If a variable is set multiple times, only the last one will be taken into account. Each environment variable will have one and only one value from the following list (highest value in the list takes precedence):
- The
value
defined in the run.json
.
- The current value in your working environment.
- The
defaultValue
defined in the run.json
.
- The
description
defined in the run.json
.
None
if no other value can be found.
use of --gen-env-targetcsm-orc run code/run_templates/orchestrator_tutorial_2/run.json --gen-env-target code/run_templates/orchestrator_tutorial_2/vars.env
cat code/run_templates/orchestrator_tutorial_2/vars.env
# CSM_API_SCOPE=The scope of identification used to request access token for your Cosmo Tech API instance
# CSM_API_URL=The URL used to query your Cosmo Tech API instance
# CSM_DATASET_ABSOLUTE_PATH=Simulation/Resource/scenariorun-data
# CSM_ORGANIZATION_ID=The identifier of the organization in the Cosmo Tech API
# CSM_PARAMETERS_ABSOLUTE_PATH=code/run_templates/orchestrator_tutorial_2
# CSM_SCENARIO_ID=The identifier of the scenario in the Cosmo Tech API
# CSM_SIMULATION=BusinessApp_Simulation
# CSM_WORKSPACE_ID=The id of the workspace in the Cosmo Tech API
This .env
file can then be used as a parameter of the docker run
command with --env-file
or can be used with a tool like dotenv
(pip install dotenv
) to temporary set the environment variables of commands.
You can also just load it to get all values in your current environment.
I want to use my local data instead of needing a Scenario
The csm-orc run
command comes with an optional parameter --skip-step
that can be set
in an environment variable CSM_SKIP_STEPS
. This parameter can be given a list of steps that will be ignored during the run.
Since the "only" step used to download distant data from our run is DownloadScenarioData
we can simply run locally by skipping it:
Running only the SimulationRun stepcsm-orc run --skip-step DownloadScenarioData --skip-step ApplyParameters code/run_templates/orchestrator_tutorial_2/run.json