pyegeria 5.4.8.6__py3-none-any.whl → 5.4.8.8__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. examples/Coco_config/README.md +19 -0
  2. examples/Coco_config/__init__.py +4 -0
  3. examples/Coco_config/config_cocoMDS1.py +108 -0
  4. examples/Coco_config/config_cocoMDS2.py +126 -0
  5. examples/Coco_config/config_cocoMDS3.py +109 -0
  6. examples/Coco_config/config_cocoMDS4.py +91 -0
  7. examples/Coco_config/config_cocoMDS5.py +116 -0
  8. examples/Coco_config/config_cocoMDS6.py +114 -0
  9. examples/Coco_config/config_cocoMDSx.py +119 -0
  10. examples/Coco_config/config_cocoView1.py +155 -0
  11. examples/Coco_config/config_coco_core.py +255 -0
  12. examples/Coco_config/config_coco_datalake.py +450 -0
  13. examples/Coco_config/config_exchangeDL01.py +106 -0
  14. examples/Coco_config/config_governDL01.py +80 -0
  15. examples/Coco_config/config_monitorDev01.py +60 -0
  16. examples/Coco_config/config_monitorGov01.py +194 -0
  17. examples/Coco_config/globals.py +154 -0
  18. examples/GeoSpatial Products Example.py +535 -0
  19. examples/Jupyter Notebooks/P-egeria-server-config.ipynb +2137 -0
  20. examples/Jupyter Notebooks/README.md +2 -0
  21. examples/Jupyter Notebooks/common/P-environment-check.ipynb +115 -0
  22. examples/Jupyter Notebooks/common/__init__.py +14 -0
  23. examples/Jupyter Notebooks/common/common-functions.ipynb +4694 -0
  24. examples/Jupyter Notebooks/common/environment-check.ipynb +53 -0
  25. examples/Jupyter Notebooks/common/globals.ipynb +184 -0
  26. examples/Jupyter Notebooks/common/globals.py +154 -0
  27. examples/Jupyter Notebooks/common/orig_globals.py +152 -0
  28. examples/format_sets/all_format_sets.json +910 -0
  29. examples/format_sets/custom_format_sets.json +268 -0
  30. examples/format_sets/subset_format_sets.json +187 -0
  31. examples/format_sets_save_load_example.py +294 -0
  32. examples/output_formats_example.py +193 -0
  33. md_processing/__init__.py +6 -0
  34. md_processing/data/commands.json +30640 -59579
  35. md_processing/dr_egeria.py +18 -0
  36. md_processing/md_commands/feedback_commands.py +763 -0
  37. md_processing/md_commands/project_commands.py +1 -1
  38. md_processing/md_processing_utils/md_processing_constants.py +134 -4
  39. pyegeria/__init__.py +1 -1
  40. pyegeria/_client_new.py +109 -12
  41. pyegeria/_globals.py +3 -2
  42. pyegeria/base_report_formats.py +17 -0
  43. pyegeria/format_set_executor.py +5 -2
  44. {pyegeria-5.4.8.6.dist-info → pyegeria-5.4.8.8.dist-info}/METADATA +1 -1
  45. {pyegeria-5.4.8.6.dist-info → pyegeria-5.4.8.8.dist-info}/RECORD +49 -16
  46. {pyegeria-5.4.8.6.dist-info → pyegeria-5.4.8.8.dist-info}/top_level.txt +1 -0
  47. {pyegeria-5.4.8.6.dist-info → pyegeria-5.4.8.8.dist-info}/WHEEL +0 -0
  48. {pyegeria-5.4.8.6.dist-info → pyegeria-5.4.8.8.dist-info}/entry_points.txt +0 -0
  49. {pyegeria-5.4.8.6.dist-info → pyegeria-5.4.8.8.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,2137 @@
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "markdown",
5
+ "metadata": {},
6
+ "source": [
7
+ "![Egeria Logo](https://raw.githubusercontent.com/odpi/egeria/main/assets/img/ODPi_Egeria_Logo_color.png)\n",
8
+ "\n",
9
+ "### Egeria Hands-On Lab\n",
10
+ "# Welcome to the Configuring Egeria Servers Lab"
11
+ ]
12
+ },
13
+ {
14
+ "cell_type": "markdown",
15
+ "metadata": {},
16
+ "source": [
17
+ "## Introduction\n",
18
+ "\n",
19
+ "Egeria is an open source project that provides open standards and implementation libraries to connect tools, catalogs and platforms together so they can share information about data and technology. This information is called metadata.\n",
20
+ "\n",
21
+ "In this hands-on lab you will learn how to configure the metadata servers used by [Coco Pharmaceuticals](https://egeria-project.org/practices/coco-pharmaceuticals/)."
22
+ ]
23
+ },
24
+ {
25
+ "cell_type": "markdown",
26
+ "metadata": {},
27
+ "source": [
28
+ "## The scenario\n",
29
+ "\n",
30
+ "<img src=\"https://raw.githubusercontent.com/odpi/egeria-docs/main/site/docs/practices/coco-pharmaceuticals/personas/gary-geeke.png\" style=\"float:left\">\n",
31
+ "\n",
32
+ "Coco Pharmaceuticals is going through a major business transformation that requires them to drastically reduce their cycle times, collaborate laterally across the different parts of the business and react quickly to the changing needs of their customers. (See [this link](https://egeria-project.org/practices/coco-pharmaceuticals/) for the background to this transformation).\n",
33
+ "\n",
34
+ "Part of the changes needed to the IT systems that support the business is the roll out of a distributed open metadata and governance capability that is provided by Egeria.\n",
35
+ "\n",
36
+ "[Gary Geeke](https://egeria-project.org/practices/coco-pharmaceuticals/personas/gary-geeke/) is the IT Infrastructure leader at Coco Pharmaceuticals.\n",
37
+ "\n",
38
+ "In this hands-on lab Gary is configuring the servers that support this open ecosystem. These servers are collectively called Open Metadata and Governance (OMAG) Servers.\n",
39
+ "\n",
40
+ "Gary's userId is `garygeeke`."
41
+ ]
42
+ },
43
+ {
44
+ "cell_type": "code",
45
+ "execution_count": 1,
46
+ "metadata": {
47
+ "ExecuteTime": {
48
+ "end_time": "2024-03-20T15:26:01.689140Z",
49
+ "start_time": "2024-03-20T15:26:01.361272Z"
50
+ }
51
+ },
52
+ "source": [
53
+ "import json\n",
54
+ "import nest_asyncio\n",
55
+ "import os\n",
56
+ "\n",
57
+ "from pyegeria import Platform, RegisteredInfo, CoreServerConfig, FullServerConfig, print_exception_response\n",
58
+ "\n",
59
+ "\n"
60
+ ],
61
+ "outputs": []
62
+ },
63
+ {
64
+ "cell_type": "markdown",
65
+ "metadata": {},
66
+ "source": [
67
+ "He needs to define the OMAG servers for Coco Pharmaceuticals."
68
+ ]
69
+ },
70
+ {
71
+ "cell_type": "code",
72
+ "execution_count": 2,
73
+ "metadata": {
74
+ "ExecuteTime": {
75
+ "end_time": "2024-03-20T15:26:03.630938Z",
76
+ "start_time": "2024-03-20T15:26:03.628598Z"
77
+ }
78
+ },
79
+ "source": [
80
+ "organizationName = \"Coco Pharmaceuticals\""
81
+ ],
82
+ "outputs": []
83
+ },
84
+ {
85
+ "cell_type": "markdown",
86
+ "metadata": {},
87
+ "source": [
88
+ "## Open Metadata and Governance (OMAG) management landscape\n",
89
+ "\n",
90
+ "At the heart of an open metadata and governance landscape are the servers that store and exchange metadata in a peer-to-peer exchange called the\n",
91
+ "[open metadata repository cohort](https://egeria-project.org/concepts/cohort-member/).\n",
92
+ "These servers are collectively called **cohort members**. There are three types of cohort member that Gary needs to consider:\n",
93
+ "\n",
94
+ "* A [Metadata Access Store](https://egeria-project.org/concepts/metadata-access-store/) that uses\n",
95
+ " a native Egeria repository to store open metadata. There should be at least one of these servers in a cohort. It used to support\n",
96
+ " either a community of users that are using the Egeria functions directly or to fill in any gaps in the metadata support provided by the\n",
97
+ " third party tools that are connected to the cohort.\n",
98
+ " \n",
99
+ "* A [Metadata Access Point](https://egeria-project.org/concepts/metadata-access-point) that \n",
100
+ " has no metadata repository of its own and uses federated queries to retrieve and store metadata in the other repositories connected to the cohort.\n",
101
+ " \n",
102
+ "* A [Repository Proxy](https://egeria-project.org/concepts/repository-proxy) that connects in a third party metadata server.\n",
103
+ "\n",
104
+ "Gary has decided to deploy a separate cohort member server for each part of the organization that owns \n",
105
+ "[assets](https://egeria.odpi.org/open-metadata-implementation/access-services/docs/concepts/assets/).\n",
106
+ "You can think of each of these servers as supporting a community of users within Coco Pharmaceuticals. The servers are as follows:\n",
107
+ "\n",
108
+ "* cocoMDS1 - Data Lake Operations - a **metadata access store** used to manage the data in the data lake.\n",
109
+ "* cocoMDS2 - Governance - a **metadata access store** used by all of the governance teams to operate the governance programs.\n",
110
+ "* cocoMDS3 - Research - a **metadata access store** used by the research teams who are developing new treatments.\n",
111
+ "* cocoMDS4 - Data Lake Users - a **metadata access point** used by general business users and the executive team to access data\n",
112
+ " from the data lake.\n",
113
+ "* cocoMDS5 - Business Systems - a **repository proxy** used to connect to the existing ETL tool that manages data movement amongst the\n",
114
+ " business systems. It has a metadata record of the operational business systems such as procurements, sales, human resources and\n",
115
+ " finance and the movement of data between them. This tool is also loading data from the business systems into the data lake. Its metadata\n",
116
+ " is critical for providing lineage for the data used to run the business.\n",
117
+ "* cocoMDS6 - Manufacturing - a **metadata access store** used by the supplies warehouse, manufacturing and distribution teams.\n",
118
+ "* cocoMDSx - Development - a **metadata access store** used by the software development teams building new IT capability.\n",
119
+ "* cocoEDGEi - Manufacturing sensors edge node servers (many of them) - these **metadata access stores** catalog the collected sensor data.\n",
120
+ "\n",
121
+ "In addition, Coco Pharmaceuticals needs additional servers to support Egeria's user interface and automated metadata processing:\n",
122
+ "\n",
123
+ "* cocoView1 - a [View Server](https://egeria-project.org/concepts/view-server) \n",
124
+ " that runs the services for the user interface. \n",
125
+ "* exchangeDL01 - an [Integration Daemon](https://egeria-project.org/concepts/integration-daemon) \n",
126
+ " server that supports the automatic exchange of metadata with third party technologies. \n",
127
+ "* governDL01 - an [Engine Host](https://egeria-project.org/concepts/engine-host)\n",
128
+ " server that runs governance functions that monitor, validate, correct and enrich metadata for use by all of the technologies in the connected\n",
129
+ " open metadata ecosystem.\n",
130
+ "* cocoOLS1 - an [Open Lineage Server](https://egeria-project.org/concepts/open-lineage-server) that manages a historical warehouse of lineage information.\n",
131
+ "\n",
132
+ "These servers will each be configured in later parts of this hands-on lab, but first there are decisions to be made about the platform that the servers will run on and how they will be connected together."
133
+ ]
134
+ },
135
+ {
136
+ "cell_type": "markdown",
137
+ "metadata": {},
138
+ "source": [
139
+ "### Open Metadata and Governance (OMAG) Server Platforms\n",
140
+ "\n",
141
+ "Coco Pharmaceuticals' servers must be hosted on at least one OMAG Server Platform.\n",
142
+ "This is a single executable (application) that can be started from the command line or a script or as part of a \n",
143
+ "pre-built container environment `kubernetes`.\n",
144
+ "\n",
145
+ "If you are running this notebook as part of an Egeria hands on lab then the server platforms you need are already started. Run the following command to check that the platforms are running.\n"
146
+ ]
147
+ },
148
+ {
149
+ "cell_type": "code",
150
+ "execution_count": 3,
151
+ "metadata": {
152
+ "ExecuteTime": {
153
+ "end_time": "2024-03-20T15:26:08.628327Z",
154
+ "start_time": "2024-03-20T15:26:08.527748Z"
155
+ },
156
+ "collapsed": false,
157
+ "jupyter": {
158
+ "outputs_hidden": false
159
+ }
160
+ },
161
+ "source": [
162
+ "%run common/globals.ipynb"
163
+ ],
164
+ "outputs": []
165
+ },
166
+ {
167
+ "cell_type": "code",
168
+ "execution_count": 4,
169
+ "metadata": {
170
+ "ExecuteTime": {
171
+ "end_time": "2024-03-20T15:26:09.658639Z",
172
+ "start_time": "2024-03-20T15:26:09.526913Z"
173
+ },
174
+ "collapsed": false,
175
+ "jupyter": {
176
+ "outputs_hidden": false
177
+ }
178
+ },
179
+ "source": [
180
+ "%run common/common-functions.ipynb"
181
+ ],
182
+ "outputs": []
183
+ },
184
+ {
185
+ "cell_type": "code",
186
+ "execution_count": 5,
187
+ "metadata": {
188
+ "ExecuteTime": {
189
+ "end_time": "2024-03-20T15:26:22.013785Z",
190
+ "start_time": "2024-03-20T15:26:11.912913Z"
191
+ },
192
+ "tags": []
193
+ },
194
+ "source": [
195
+ "%run common/P-environment-check.ipynb"
196
+ ],
197
+ "outputs": []
198
+ },
199
+ {
200
+ "cell_type": "markdown",
201
+ "metadata": {},
202
+ "source": [
203
+ "----\n",
204
+ "If one of the platforms is not running, follow [this link to set up and run the platform](https://egeria-project.org/education/open-metadata-labs/overview/). Once the platforms are running you are ready to proceed.\n",
205
+ "\n",
206
+ "----\n",
207
+ "Most of the servers are supporting a pretty stable environment and can share an OMAG Server Platform because the workload they are supporting is predicable.\n",
208
+ "The data lake however requires a lot of active governance and is evolving rapidly.\n",
209
+ "\n",
210
+ "To isolate this churn, Gary chooses to put all of the metadata and governance servers for the data lake on to their own platform.\n",
211
+ "The development team requested that their infrastructure is completely separate from the operational systems,\n",
212
+ "so they are given their own server platform.\n",
213
+ "Finally each of the edge servers will run their own OMAG Server Platform to support their own metadata server.\n",
214
+ "\n",
215
+ "Figure 1 shows which servers will sit in each platform. The cohort members are shown in white,\n",
216
+ "governance servers in orange and the view server (that supports the UI) is in green.\n",
217
+ "\n",
218
+ "![Figure 1](images/coco-pharmaceuticals-systems-omag-server-platforms.png)\n",
219
+ "> **Figure 1:** Coco Pharmaceuticals' OMAG Server Platforms\n",
220
+ "\n",
221
+ "\n",
222
+ "The sensor edge node servers used to monitor the warehouse operation and manufacturing process each have their own platform and are not yet included in this notebook."
223
+ ]
224
+ },
225
+ {
226
+ "cell_type": "markdown",
227
+ "metadata": {},
228
+ "source": [
229
+ "### Open Metadata Repository Cohorts\n",
230
+ "\n",
231
+ "A metadata server, metadata access point and repository proxy can become a member of none, one or many cohorts.\n",
232
+ "Once a server has joined a cohort it can exchange metadata with the other members of that cohort.\n",
233
+ "So the cohorts define scopes of sharing.\n",
234
+ "\n",
235
+ "Gary decides to begin with three open metadata repository cohorts:\n",
236
+ "\n",
237
+ "* **cocoCohort** - The production cohort contains all of the servers that are used to run, coordinate and govern the business.\n",
238
+ "* **devCohort** - The development cohort where the development teams are building and testing new capability. Much of their metadata describes the software components under construction and the governance of the software development lifecycle.\n",
239
+ "* **iotCohort** - The IoT cohort used to manage the sensors and robots in the manufacturing systems. The metadata produced by the sensors and robots is only of interest to the manufacturing and governance team.\n",
240
+ "\n",
241
+ "Figure 2 shows which servers belong to each cohort.\n",
242
+ "\n",
243
+ "![Figure 2](images/coco-pharmaceuticals-systems-cohorts.png)\n",
244
+ "> **Figure 2:** Membership of Coco Pharmaceuticals' cohorts\n",
245
+ "\n",
246
+ "Below are the names of the three cohorts."
247
+ ]
248
+ },
249
+ {
250
+ "cell_type": "code",
251
+ "execution_count": 7,
252
+ "metadata": {
253
+ "ExecuteTime": {
254
+ "end_time": "2024-03-20T15:33:17.672867Z",
255
+ "start_time": "2024-03-20T15:32:43.042887Z"
256
+ },
257
+ "collapsed": false,
258
+ "jupyter": {
259
+ "outputs_hidden": false
260
+ }
261
+ },
262
+ "source": [
263
+ "import nest_asyncio \n",
264
+ "nest_asyncio.apply()\n",
265
+ "%run ../widgets/server_status.py\n"
266
+ ],
267
+ "outputs": []
268
+ },
269
+ {
270
+ "cell_type": "code",
271
+ "execution_count": null,
272
+ "metadata": {
273
+ "tags": []
274
+ },
275
+ "source": [
276
+ "cocoCohort = \"cocoCohort\"\n",
277
+ "devCohort = \"devCohort\"\n",
278
+ "iotCohort = \"iotCohort\""
279
+ ],
280
+ "outputs": []
281
+ },
282
+ {
283
+ "cell_type": "markdown",
284
+ "metadata": {},
285
+ "source": [
286
+ "At the heart of each cohort is an event topic. By default, Egeria uses [Apache Kafka](https://kafka.apache.org/) topics.\n",
287
+ "The servers that will join a cohort need to be configured with the host name and port for Kafka.\n",
288
+ "The command below pulls the value from an environment variable called `eventBusURLroot` with a default value of\n",
289
+ "`localhost:9092`. It is used in all of the server configuration documents to connect it to Kafka."
290
+ ]
291
+ },
292
+ {
293
+ "cell_type": "code",
294
+ "execution_count": null,
295
+ "metadata": {},
296
+ "source": [
297
+ "eventBusURLroot = os.environ.get('eventBusURLroot', '192.168.0.34:9092')\n",
298
+ "\n",
299
+ "eventBusBody = {\n",
300
+ " \"producer\": {\n",
301
+ " \"bootstrap.servers\": eventBusURLroot\n",
302
+ " },\n",
303
+ " \"consumer\":{\n",
304
+ " \"bootstrap.servers\": eventBusURLroot\n",
305
+ " }\n",
306
+ "}"
307
+ ],
308
+ "outputs": []
309
+ },
310
+ {
311
+ "cell_type": "markdown",
312
+ "metadata": {},
313
+ "source": [
314
+ "## Access services\n",
315
+ "\n",
316
+ "[The Open Metadata Access Services (OMAS)](https://egeria-project.org/services/omas/) provide domain-specific services for data tools, engines and platforms to integrate with open metadata. These are the different types of access service."
317
+ ]
318
+ },
319
+ {
320
+ "cell_type": "code",
321
+ "execution_count": null,
322
+ "metadata": {},
323
+ "source": [
324
+ "registered_info_client = RegisteredInfo(cocoMDS1PlatformURL, user_id= adminUserId)\n",
325
+ "registered_info_client.list_registered_svcs('access-services', fmt='table', skinny=True)\n"
326
+ ],
327
+ "outputs": []
328
+ },
329
+ {
330
+ "cell_type": "raw",
331
+ "metadata": {
332
+ "collapsed": false,
333
+ "jupyter": {
334
+ "outputs_hidden": false
335
+ }
336
+ },
337
+ "source": [
338
+ "The table below shows which access services are needed by each server.\n",
339
+ "\n",
340
+ "\n",
341
+ "| Access Service | cocoMDS1 | cocoMDS2 | cocoMDS3 | cocoMDS4 | cocoMDS5 | cocoMDS6 | cocoMDSx | cocoEDGE*i* |\n",
342
+ "| :------------------- | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :---------: |\n",
343
+ "| asset-catalog | Yes | Yes | Yes | Yes | No | Yes | Yes | No |\n",
344
+ "| asset-consumer | Yes | Yes | Yes | Yes | No | Yes | Yes | No |\n",
345
+ "| asset-owner | Yes | Yes | Yes | No | No | Yes | Yes | No |\n",
346
+ "| community-profile | Yes | Yes | Yes | Yes | No | Yes | Yes | No |\n",
347
+ "| glossary-view | Yes | Yes | Yes | Yes | No | Yes | Yes | No |\n",
348
+ "| ------------------- | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ---------- |\n",
349
+ "| data-science | No | No | Yes | Yes | No | Yes | Yes | No |\n",
350
+ "| ------------------- | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ---------- |\n",
351
+ "| subject-area | No | Yes | Yes | No | No | Yes | Yes | No |\n",
352
+ "| ------------------- | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ---------- |\n",
353
+ "| governance-program | No | Yes | No | No | No | No | No | No |\n",
354
+ "| data-privacy | No | Yes | No | No | No | No | No | No |\n",
355
+ "| security-officer | No | Yes | No | No | No | No | No | No |\n",
356
+ "| asset-lineage | No | Yes | No | No | No | No | No | No |\n",
357
+ "| -------------------- | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ---------- |\n",
358
+ "| discovery-engine | Yes | No | Yes | No | No | Yes | Yes | No |\n",
359
+ "| governance-engine | Yes | Yes | Yes | No | No | Yes | Yes | No |\n",
360
+ "| asset-manager | Yes | No | Yes | No | No | Yes | Yes | No |\n",
361
+ "| -------------------- | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ---------- |\n",
362
+ "| data-engine | Yes | No | No | No | No | Yes | No | Yes |\n",
363
+ "| data-manager | Yes | No | No | No | No | Yes | Yes | Yes |\n",
364
+ "| -------------------- | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ---------- |\n",
365
+ "| it-infrastructure | No | Yes | No | No | No | Yes | Yes | No |\n",
366
+ "| project-management | No | Yes | Yes | No | No | Yes | Yes | No |\n",
367
+ "| -------------------- | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ---------- |\n",
368
+ "| software-developer | No | No | No | No | No | No | Yes | No |\n",
369
+ "| devops | No | No | No | No | No | No | Yes | No |\n",
370
+ "| digital-architecture | Yes | Yes | No | No | No | No | Yes | No |\n",
371
+ "| design-model | No | No | No | No | No | No | Yes | No |\n",
372
+ "| -------------------- | ------ | ------ | ------ | ------ | ------ | ------ | ------ | ---------- |"
373
+ ]
374
+ },
375
+ {
376
+ "cell_type": "markdown",
377
+ "metadata": {},
378
+ "source": [
379
+ "## Egeria Server Configuration Overview\n",
380
+ "\n",
381
+ "Open metadata servers are configured using REST API calls to an OMAG Server Platform. Each call either defines a default value or configures a service that must run within the server when it is started.\n",
382
+ "\n",
383
+ "As each configuration call is made, the OMAG Server Platform builds up a [configuration document](https://egeria-project.org/concepts/configuration-document) with the values passed. When the configuration is finished, the configuration document will have all of the information needed to start the server.\n",
384
+ "\n",
385
+ "The configuration document will then be deployed with the OMAG Server Platform that is to host the server. When a request is made to this OMAG Server Platform to start the server, it reads the configuration document and initializes the server with the appropriate services.\n",
386
+ "\n",
387
+ "## Configuration Set Up\n",
388
+ "\n",
389
+ "A server can be configured by any OMAG Server Platform - it does not have to be the same platform where the server will run. For this hands on lab we will use the development team's OMAG Server Platform to create the servers' configuration documents and then deploy them to the platforms where they will run."
390
+ ]
391
+ },
392
+ {
393
+ "cell_type": "code",
394
+ "execution_count": null,
395
+ "metadata": {
396
+ "tags": []
397
+ },
398
+ "source": [
399
+ "adminPlatformURL = devPlatformURL"
400
+ ],
401
+ "outputs": []
402
+ },
403
+ {
404
+ "cell_type": "markdown",
405
+ "metadata": {},
406
+ "source": [
407
+ "The URLs for the configuration REST APIs have a common structure and begin with the following root:"
408
+ ]
409
+ },
410
+ {
411
+ "cell_type": "code",
412
+ "execution_count": null,
413
+ "metadata": {},
414
+ "source": [
415
+ "adminCommandURLRoot = adminPlatformURL + '/open-metadata/admin-services/users/' + adminUserId + '/servers/'"
416
+ ],
417
+ "outputs": []
418
+ },
419
+ {
420
+ "cell_type": "markdown",
421
+ "metadata": {},
422
+ "source": [
423
+ "Many of Coco Pharmaceuticals' metadata servers need a local repository to store metadata about the data and processing occurring in the data lake.\n",
424
+ "\n",
425
+ "Egeria includes two types of repositories natively. One is an **in-memory repository** that stores metadata in hash maps. It is useful for demos and testing because a restart of the server results in an empty metadata repository. However, if you need metadata to persist from one run of the server to the next, you should use the **local graph repository**.\n",
426
+ "\n",
427
+ "The choice of local repository is made by specifying the local repository mode. The variables below show the two options. The `metadataRepositoryType` identifies which one is going to be used in the configuration.\n"
428
+ ]
429
+ },
430
+ {
431
+ "cell_type": "markdown",
432
+ "metadata": {},
433
+ "source": [
434
+ "Egeria supports instance based security. These checks can be customized through an\n",
435
+ "[Server Metadata Security Connector](https://egeria-project.org/concepts/server-metadata-security-connector/).\n",
436
+ "Coco Pharmaceuticals have written their own connector to support the specific rules of their industry.\n",
437
+ "The Connection definition below tells a server how to load this connector. It needs to be included in each server's configuration document."
438
+ ]
439
+ },
440
+ {
441
+ "cell_type": "code",
442
+ "execution_count": null,
443
+ "metadata": {},
444
+ "source": [
445
+ "security_connection_body = {\n",
446
+ " \"class\": \"Connection\",\n",
447
+ " \"connectorType\": {\n",
448
+ " \"class\": \"ConnectorType\",\n",
449
+ " \"connectorProviderClassName\": \"org.odpi.openmetadata.metadatasecurity.samples.CocoPharmaServerSecurityProvider\"\n",
450
+ " }\n",
451
+ "}"
452
+ ],
453
+ "outputs": []
454
+ },
455
+ {
456
+ "cell_type": "markdown",
457
+ "metadata": {},
458
+ "source": [
459
+ "Finally, to ensure that a caller can not request too much metadata in a single request, it is possible to set a maximum page size for requests that return a list of items. The maximum page size puts a limit on the number of items that can be requested. The variable below defines the value that will be added to the configuration document for each server."
460
+ ]
461
+ },
462
+ {
463
+ "cell_type": "code",
464
+ "execution_count": null,
465
+ "metadata": {},
466
+ "source": [
467
+ "max_page_size = '600'"
468
+ ],
469
+ "outputs": []
470
+ },
471
+ {
472
+ "cell_type": "markdown",
473
+ "metadata": {},
474
+ "source": [
475
+ "## Configuring cocoMDS1 - Data Lake Operations metadata server\n",
476
+ "\n",
477
+ "This section configures the `cocoMDS1` server. The server name is passed on every configuration call to identify which configuration document to update with the new configuration. The configuration document is created automatically on first use."
478
+ ]
479
+ },
480
+ {
481
+ "cell_type": "code",
482
+ "execution_count": null,
483
+ "metadata": {
484
+ "collapsed": false,
485
+ "jupyter": {
486
+ "outputs_hidden": false
487
+ }
488
+ },
489
+ "source": [
490
+ "mdr_server_name = \"cocoMDS1\"\n",
491
+ "mdr_user_id = \"cocoMDS1npa\"\n",
492
+ "mdr_server_password = \"cocoMDS1passw0rd\"\n",
493
+ "mdr_platform_url = dataLakePlatformURL\n",
494
+ "metadata_collection_name= \"Data Lake Catalog\"\n",
495
+ "\n",
496
+ "metadata_collection_id= f\"{mdr_server_name}-e915f2fa-aa3g-4396-8bde-bcd65e642b1d\"\n",
497
+ "\n",
498
+ "omag_client = CoreServerConfig(mdr_server_name, mdr_platform_url, adminUserId)\n",
499
+ "print(f\"Configuring {mdr_server_name}\")\n",
500
+ "\n",
501
+ "omag_client.set_basic_server_properties(\"The core data lake for Coco Pharmaceuticals\",\n",
502
+ " \"Coco Pharmaceuticals\",\n",
503
+ " mdr_platform_url,\n",
504
+ " mdr_user_id, mdr_server_password,\n",
505
+ " max_page_size)"
506
+ ],
507
+ "outputs": []
508
+ },
509
+ {
510
+ "cell_type": "code",
511
+ "execution_count": null,
512
+ "metadata": {
513
+ "collapsed": false,
514
+ "jupyter": {
515
+ "outputs_hidden": false
516
+ }
517
+ },
518
+ "source": [
519
+ "# omag_client.set_in_mem_local_repository()\n",
520
+ "# omag_client.set_xtdb_in_mem_repository()\n",
521
+ "# omag_client.set_graph_local_repository()\n",
522
+ "omag_client.set_xtdb_local_kv_repository()"
523
+ ],
524
+ "outputs": []
525
+ },
526
+ {
527
+ "cell_type": "code",
528
+ "execution_count": null,
529
+ "metadata": {
530
+ "collapsed": false,
531
+ "jupyter": {
532
+ "outputs_hidden": false
533
+ }
534
+ },
535
+ "source": [
536
+ "omag_client.add_default_log_destinations()\n",
537
+ "omag_client.set_server_security_connection(security_connection_body)\n",
538
+ "omag_client.set_local_metadata_collection_name(metadata_collection_name)\n",
539
+ "omag_client.set_local_metadata_collection_id(metadata_collection_id)\n",
540
+ "omag_client.add_cohort_registration(cocoCohort)"
541
+ ],
542
+ "outputs": []
543
+ },
544
+ {
545
+ "cell_type": "code",
546
+ "execution_count": null,
547
+ "metadata": {
548
+ "collapsed": false,
549
+ "jupyter": {
550
+ "outputs_hidden": false
551
+ }
552
+ },
553
+ "source": [
554
+ "print(f\"Configuring {mdr_server_name} Access Services (OMAS)....\")\n",
555
+ "\n",
556
+ "# o_client.configure_all_access_services()\n",
557
+ "access_service_options = {\n",
558
+ " \"SupportedZones\": [\"quarantine\", \"clinical-trials\", \"research\", \"data-lake\", \"trash-can\"]\n",
559
+ " }\n",
560
+ "\n",
561
+ "# omag_client.configure_access_service(\"asset-catalog\", access_service_options)\n",
562
+ "omag_client.configure_access_service(\"asset-consumer\", access_service_options)\n",
563
+ "\n",
564
+ "access_service_options[\"DefaultZones\"] = [\"quarantine\"]\n",
565
+ "access_service_options[\"PublishZones\"] = [\"data-lake\"]\n",
566
+ "\n",
567
+ "# print(f\"Access Service Options: {access_service_options}\")\n",
568
+ "\n",
569
+ "omag_client.configure_access_service(\"asset-manager\", access_service_options)\n",
570
+ "omag_client.configure_access_service(\"asset-owner\", access_service_options)\n",
571
+ "omag_client.configure_access_service(\"community-profile\",\n",
572
+ " {\"KarmaPointPlateau\" : \"500\"})\n",
573
+ "omag_client.configure_access_service(\"glossary-view\", {})\n",
574
+ "omag_client.configure_access_service(\"discovery-engine\", access_service_options)\n",
575
+ "omag_client.configure_access_service(\"data-engine\", access_service_options)\n",
576
+ "omag_client.configure_access_service(\"data-manager\", access_service_options)\n",
577
+ "omag_client.configure_access_service(\"digital-architecture\", access_service_options)\n",
578
+ "omag_client.configure_access_service(\"governance-engine\", access_service_options)\n",
579
+ "omag_client.configure_access_service(\"asset-lineage\", access_service_options)"
580
+ ],
581
+ "outputs": []
582
+ },
583
+ {
584
+ "cell_type": "code",
585
+ "execution_count": null,
586
+ "metadata": {},
587
+ "source": [
588
+ "config = omag_client.get_stored_configuration()\n",
589
+ "print(f\"The server stored configuration is {json.dumps(config, indent=4)}\")\n",
590
+ "\n",
591
+ "p_client = Platform(mdr_server_name, mdr_platform_url, adminUserId)\n",
592
+ "p_client.activate_server_stored_config()\n",
593
+ "\n",
594
+ "print(\"\\nDone.\")"
595
+ ],
596
+ "outputs": []
597
+ },
598
+ {
599
+ "cell_type": "code",
600
+ "execution_count": null,
601
+ "metadata": {
602
+ "collapsed": false,
603
+ "jupyter": {
604
+ "outputs_hidden": false
605
+ }
606
+ },
607
+ "source": [],
608
+ "outputs": []
609
+ },
610
+ {
611
+ "cell_type": "markdown",
612
+ "metadata": {},
613
+ "source": [
614
+ "----\n",
615
+ "\n",
616
+ "## Configuring cocoMDS2 - Governance metadata server\n",
617
+ "\n",
618
+ "This section configures the `cocoMDS2` server. This server is configured in a similar way to cocoMDS1 except that is has different Open Metadata Access Services (OMASs) enabled and it joins all of the cohorts.\n",
619
+ "\n",
620
+ "The code below covers the basic set up of the server properties, security, event bus and local repository."
621
+ ]
622
+ },
623
+ {
624
+ "cell_type": "code",
625
+ "execution_count": null,
626
+ "metadata": {},
627
+ "source": [
628
+ "mdrServerName = \"cocoMDS2\"\n",
629
+ "mdr_user_id = \"cocoMDS2npa\"\n",
630
+ "mdr_server_password = \"cocoMDS2passw0rd\"\n",
631
+ "mdr_platform_url = corePlatformURL\n",
632
+ "metadata_collection_name = \"Governance Catalog\"\n",
633
+ "\n",
634
+ "print(\"Configuring \" + mdrServerName + \"...\")\n",
635
+ "\n",
636
+ "configurePlatformURL(adminPlatformURL, adminUserId, mdrServerName, mdr_platform_url)\n",
637
+ "configureMaxPageSize(adminPlatformURL, adminUserId, mdrServerName, maxPageSize)\n",
638
+ "clearServerType(adminPlatformURL, adminUserId, mdrServerName)\n",
639
+ "configureOwningOrganization(adminPlatformURL, adminUserId, mdrServerName, organizationName)\n",
640
+ "configureUserId(adminPlatformURL, adminUserId, mdrServerName, mdr_user_id)\n",
641
+ "configurePassword(adminPlatformURL, adminUserId, mdrServerName, mdr_server_password)\n",
642
+ "configureSecurityConnection(adminPlatformURL, adminUserId, mdrServerName, serverSecurityConnectionBody)\n",
643
+ "configureEventBus(adminPlatformURL, adminUserId, mdrServerName, eventBusBody)\n",
644
+ "configureMetadataRepository(adminPlatformURL, adminUserId, mdrServerName, metadataRepositoryType)\n",
645
+ "configureDescriptiveName(adminPlatformURL, adminUserId, mdrServerName, metadata_collection_name)\n",
646
+ "# Note: cohort membership is configured for all of the cohorts here\n",
647
+ "configureCohortMembership(adminPlatformURL, adminUserId, mdrServerName, cocoCohort)\n",
648
+ "configureCohortMembership(adminPlatformURL, adminUserId, mdrServerName, devCohort)\n",
649
+ "configureCohortMembership(adminPlatformURL, adminUserId, mdrServerName, iotCohort)\n",
650
+ "\n",
651
+ "print(\"\\nConfiguring \" + mdrServerName + \" Access Services (OMAS)...\")\n",
652
+ "\n",
653
+ "configureAccessService(adminPlatformURL, adminUserId, mdrServerName, 'asset-catalog', {})\n",
654
+ "configureAccessService(adminPlatformURL, adminUserId, mdrServerName, 'asset-consumer', {})\n",
655
+ "configureAccessService(adminPlatformURL, adminUserId, mdrServerName, 'asset-owner', {})\n",
656
+ "configureAccessService(adminPlatformURL, adminUserId, mdrServerName, 'community-profile', {\"KarmaPointPlateau\":\"500\"})\n",
657
+ "configureAccessService(adminPlatformURL, adminUserId, mdrServerName, 'glossary-view', {})\n",
658
+ "configureAccessService(adminPlatformURL, adminUserId, mdrServerName, 'subject-area', {})\n",
659
+ "configureAccessService(adminPlatformURL, adminUserId, mdrServerName, 'governance-engine', {})\n",
660
+ "configureAccessService(adminPlatformURL, adminUserId, mdrServerName, 'governance-program', {})\n",
661
+ "configureAccessService(adminPlatformURL, adminUserId, mdrServerName, 'data-privacy', {})\n",
662
+ "configureAccessService(adminPlatformURL, adminUserId, mdrServerName, 'digital-architecture', {})\n",
663
+ "configureAccessService(adminPlatformURL, adminUserId, mdrServerName, 'security-officer', {})\n",
664
+ "configureAccessService(adminPlatformURL, adminUserId, mdrServerName, 'asset-lineage', {})\n",
665
+ "configureAccessService(adminPlatformURL, adminUserId, mdrServerName, 'it-infrastructure', {})\n",
666
+ "configureAccessService(adminPlatformURL, adminUserId, mdrServerName, 'project-management', {})\n",
667
+ "\n",
668
+ "print(\"\\nDone.\")"
669
+ ],
670
+ "outputs": []
671
+ },
672
+ {
673
+ "cell_type": "markdown",
674
+ "metadata": {},
675
+ "source": [
676
+ "----\n",
677
+ "\n",
678
+ "## Configuring cocoMDS3 - Research\n",
679
+ "\n",
680
+ "Server cocoMDS3 is used by the research teams who are developing new treatments.\n",
681
+ "These teams are working with their own assets as well as assets coming from the data lake.\n",
682
+ "So they have their own repository and connector to the core cohort to access all of the\n",
683
+ "operational metadata.\n",
684
+ "\n",
685
+ "This is one of the big changes brought by Coco Pharmaceuticals' business transformation.\n",
686
+ "In their old business model, the research teams were completely separate from the operational\n",
687
+ "part of the organization. Now they need to be an active member of the day to day running of\n",
688
+ "the organization, supporting the development of personalized medicines and their use in\n",
689
+ "treating patients."
690
+ ]
691
+ },
692
+ {
693
+ "cell_type": "code",
694
+ "execution_count": null,
695
+ "metadata": {},
696
+ "source": [
697
+ "mdrServerName = \"cocoMDS3\"\n",
698
+ "mdr_user_id = \"cocoMDS3npa\"\n",
699
+ "mdr_server_password = \"cocoMDS3passw0rd\"\n",
700
+ "mdr_platform_url = corePlatformURL\n",
701
+ "metadata_collection_name = \"Research Catalog\"\n",
702
+ "\n",
703
+ "print(\"Configuring \" + mdrServerName + \"...\")\n",
704
+ "\n",
705
+ "configurePlatformURL(adminPlatformURL, adminUserId, mdrServerName, mdr_platform_url)\n",
706
+ "configureMaxPageSize(adminPlatformURL, adminUserId, mdrServerName, maxPageSize)\n",
707
+ "clearServerType(adminPlatformURL, adminUserId, mdrServerName)\n",
708
+ "configureOwningOrganization(adminPlatformURL, adminUserId, mdrServerName, organizationName)\n",
709
+ "configureUserId(adminPlatformURL, adminUserId, mdrServerName, mdr_user_id)\n",
710
+ "configurePassword(adminPlatformURL, adminUserId, mdrServerName, mdr_server_password)\n",
711
+ "configureSecurityConnection(adminPlatformURL, adminUserId, mdrServerName, serverSecurityConnectionBody)\n",
712
+ "configureEventBus(adminPlatformURL, adminUserId, mdrServerName, eventBusBody)\n",
713
+ "configureMetadataRepository(adminPlatformURL, adminUserId, mdrServerName, metadataRepositoryType)\n",
714
+ "configureDescriptiveName(adminPlatformURL, adminUserId, mdrServerName, metadata_collection_name)\n",
715
+ "configureCohortMembership(adminPlatformURL, adminUserId, mdrServerName, cocoCohort)\n",
716
+ "\n",
717
+ "print(\"\\nConfiguring \" + mdrServerName + \" Access Services (OMAS)...\")\n",
718
+ "\n",
719
+ "accessServiceOptions = {\n",
720
+ " \"SupportedZones\": [\"personal-files\", \"clinical-trials\", \"research\", \"data-lake\", \"trash-can\"]\n",
721
+ "}\n",
722
+ "configureAccessService(adminPlatformURL, adminUserId, mdrServerName, 'asset-catalog', accessServiceOptions)\n",
723
+ "configureAccessService(adminPlatformURL, adminUserId, mdrServerName, 'asset-consumer', accessServiceOptions)\n",
724
+ "\n",
725
+ "accessServiceOptions[\"DefaultZones\"] = [ \"personal-files\" ]\n",
726
+ "configureAccessService(adminPlatformURL, adminUserId, mdrServerName, 'asset-owner', accessServiceOptions)\n",
727
+ "configureAccessService(adminPlatformURL, adminUserId, mdrServerName, 'community-profile', {\"KarmaPointPlateau\":\"500\"})\n",
728
+ "configureAccessService(adminPlatformURL, adminUserId, mdrServerName, 'glossary-view', {})\n",
729
+ "configureAccessService(adminPlatformURL, adminUserId, mdrServerName, 'data-science', {})\n",
730
+ "configureAccessService(adminPlatformURL, adminUserId, mdrServerName, 'subject-area', {})\n",
731
+ "configureAccessService(adminPlatformURL, adminUserId, mdrServerName, 'asset-manager', accessServiceOptions)\n",
732
+ "configureAccessService(adminPlatformURL, adminUserId, mdrServerName, 'governance-engine', accessServiceOptions)\n",
733
+ "configureAccessService(adminPlatformURL, adminUserId, mdrServerName, 'discovery-engine', accessServiceOptions)\n",
734
+ "configureAccessService(adminPlatformURL, adminUserId, mdrServerName, 'project-management', accessServiceOptions)\n",
735
+ "\n",
736
+ "print(\"\\nDone.\")"
737
+ ],
738
+ "outputs": []
739
+ },
740
+ {
741
+ "cell_type": "markdown",
742
+ "metadata": {},
743
+ "source": [
744
+ "----\n",
745
+ "## Configuring cocoMDS4 - Data Lake Users\n",
746
+ "\n",
747
+ "Server cocoMDS4 used by general business users and the executive team to access data from the data lake.\n",
748
+ "It does not have a repository of its own. Instead it issues federated queries to the other repositories in the `cocoCohort`."
749
+ ]
750
+ },
751
+ {
752
+ "cell_type": "code",
753
+ "execution_count": null,
754
+ "metadata": {},
755
+ "source": [
756
+ "mdrServerName = \"cocoMDS4\"\n",
757
+ "mdr_user_id = \"cocoMDS4npa\"\n",
758
+ "mdr_server_password = \"cocoMDS4passw0rd\"\n",
759
+ "mdr_platform_url = dataLakePlatformURL\n",
760
+ "metadata_collection_name = \"Data Lake Catalog\"\n",
761
+ "\n",
762
+ "print(\"Configuring \" + mdrServerName + \"...\")\n",
763
+ "\n",
764
+ "configurePlatformURL(adminPlatformURL, adminUserId, mdrServerName, mdr_platform_url)\n",
765
+ "configureMaxPageSize(adminPlatformURL, adminUserId, mdrServerName, maxPageSize)\n",
766
+ "clearServerType(adminPlatformURL, adminUserId, mdrServerName)\n",
767
+ "configureOwningOrganization(adminPlatformURL, adminUserId, mdrServerName, organizationName)\n",
768
+ "configureUserId(adminPlatformURL, adminUserId, mdrServerName, mdr_user_id)\n",
769
+ "configurePassword(adminPlatformURL, adminUserId, mdrServerName, mdr_server_password)\n",
770
+ "configureSecurityConnection(adminPlatformURL, adminUserId, mdrServerName, serverSecurityConnectionBody)\n",
771
+ "configureEventBus(adminPlatformURL, adminUserId, mdrServerName, eventBusBody)\n",
772
+ "# Note: no metadata repository or collection configuration here\n",
773
+ "configureCohortMembership(adminPlatformURL, adminUserId, mdrServerName, cocoCohort)\n",
774
+ "\n",
775
+ "print(\"\\nConfiguring \" + mdrServerName + \" Access Services (OMAS)...\")\n",
776
+ "\n",
777
+ "accessServiceOptions = {\n",
778
+ " \"SupportedZones\": [ \"data-lake\" ]\n",
779
+ "}\n",
780
+ "configureAccessService(adminPlatformURL, adminUserId, mdrServerName, 'asset-catalog', accessServiceOptions)\n",
781
+ "configureAccessService(adminPlatformURL, adminUserId, mdrServerName, 'asset-consumer', accessServiceOptions)\n",
782
+ "configureAccessService(adminPlatformURL, adminUserId, mdrServerName, 'community-profile', {\"KarmaPointPlateau\":\"500\"})\n",
783
+ "configureAccessService(adminPlatformURL, adminUserId, mdrServerName, 'glossary-view', {})\n",
784
+ "configureAccessService(adminPlatformURL, adminUserId, mdrServerName, 'data-science', accessServiceOptions)\n",
785
+ "\n",
786
+ "print(\"\\nDone.\")"
787
+ ],
788
+ "outputs": []
789
+ },
790
+ {
791
+ "cell_type": "markdown",
792
+ "metadata": {},
793
+ "source": [
794
+ "----\n",
795
+ "\n",
796
+ "## Configuring cocoMDS5 - Business Systems\n",
797
+ "\n",
798
+ "Server cocoMDS5 is a repository proxy to an ETL tool called `iisCore01`. This ETL tool is well established in Coco Pharmaceuticals and has a built-in metadata repository that contains information about their operational business systems such as procurement, sales, human resources and finance.\n",
799
+ "\n",
800
+ "This ETL tool has its own user interface and services so the OMASs are not enabled."
801
+ ]
802
+ },
803
+ {
804
+ "cell_type": "code",
805
+ "execution_count": null,
806
+ "metadata": {},
807
+ "source": [
808
+ "mdrServerName = \"cocoMDS5\"\n",
809
+ "mdr_user_id = \"cocoMDS5npa\"\n",
810
+ "mdr_server_password = \"cocoMDS5passw0rd\"\n",
811
+ "mdr_platform_url = corePlatformURL\n",
812
+ "metadata_collection_name = \"Business Systems Catalog\"\n",
813
+ "\n",
814
+ "print(\"Configuring \" + mdrServerName + \"...\")\n",
815
+ "\n",
816
+ "configurePlatformURL(adminPlatformURL, adminUserId, mdrServerName, mdr_platform_url)\n",
817
+ "configureMaxPageSize(adminPlatformURL, adminUserId, mdrServerName, maxPageSize)\n",
818
+ "clearServerType(adminPlatformURL, adminUserId, mdrServerName)\n",
819
+ "configureOwningOrganization(adminPlatformURL, adminUserId, mdrServerName, organizationName)\n",
820
+ "configureUserId(adminPlatformURL, adminUserId, mdrServerName, mdr_user_id)\n",
821
+ "configurePassword(adminPlatformURL, adminUserId, mdrServerName, mdr_server_password)\n",
822
+ "configureSecurityConnection(adminPlatformURL, adminUserId, mdrServerName, serverSecurityConnectionBody)\n",
823
+ "configureEventBus(adminPlatformURL, adminUserId, mdrServerName, eventBusBody)\n",
824
+ "configureRepositoryProxyDetails(adminPlatformURL, adminUserId, mdrServerName, \"org.odpi.openmetadata.adapters.repositoryservices.readonly.repositoryconnector.ReadOnlyOMRSRepositoryConnectorProvider\")\n",
825
+ "configureDescriptiveName(adminPlatformURL, adminUserId, mdrServerName, metadata_collection_name)\n",
826
+ "configureCohortMembership(adminPlatformURL, adminUserId, mdrServerName, cocoCohort)\n",
827
+ "# Note: no access service configuration here\n",
828
+ "# Still need to add startup Archive \n",
829
+ "\n",
830
+ "print(\"\\nDone.\")"
831
+ ],
832
+ "outputs": []
833
+ },
834
+ {
835
+ "cell_type": "markdown",
836
+ "metadata": {},
837
+ "source": [
838
+ "----\n",
839
+ "\n",
840
+ "## Configuring cocoMDS6 - Manufacturing\n",
841
+ "\n",
842
+ "Server cocoMDS6 is the repository server used by the warehouse, manufacturing and distribution teams. It supports the systems for this part of the organization and acts as a hub for monitoring the IoT environment."
843
+ ]
844
+ },
845
+ {
846
+ "cell_type": "code",
847
+ "execution_count": null,
848
+ "metadata": {},
849
+ "source": [
850
+ "mdrServerName = \"cocoMDS6\"\n",
851
+ "mdr_user_id = \"cocoMDS6npa\"\n",
852
+ "mdr_server_password = \"cocoMDS6passw0rd\"\n",
853
+ "mdr_platform_url = corePlatformURL\n",
854
+ "metadata_collection_name = \"Manufacturing Catalog\"\n",
855
+ "\n",
856
+ "print(\"Configuring \" + mdrServerName + \"...\")\n",
857
+ "\n",
858
+ "configurePlatformURL(adminPlatformURL, adminUserId, mdrServerName, mdr_platform_url)\n",
859
+ "configureMaxPageSize(adminPlatformURL, adminUserId, mdrServerName, maxPageSize)\n",
860
+ "clearServerType(adminPlatformURL, adminUserId, mdrServerName)\n",
861
+ "configureOwningOrganization(adminPlatformURL, adminUserId, mdrServerName, organizationName)\n",
862
+ "configureUserId(adminPlatformURL, adminUserId, mdrServerName, mdr_user_id)\n",
863
+ "configurePassword(adminPlatformURL, adminUserId, mdrServerName, mdr_server_password)\n",
864
+ "configureSecurityConnection(adminPlatformURL, adminUserId, mdrServerName, serverSecurityConnectionBody)\n",
865
+ "configureEventBus(adminPlatformURL, adminUserId, mdrServerName, eventBusBody)\n",
866
+ "configureMetadataRepository(adminPlatformURL, adminUserId, mdrServerName, metadataRepositoryType)\n",
867
+ "configureDescriptiveName(adminPlatformURL, adminUserId, mdrServerName, metadata_collection_name)\n",
868
+ "configureCohortMembership(adminPlatformURL, adminUserId, mdrServerName, cocoCohort)\n",
869
+ "configureCohortMembership(adminPlatformURL, adminUserId, mdrServerName, iotCohort)\n",
870
+ "\n",
871
+ "print(\"\\nConfiguring \" + mdrServerName + \" Access Services (OMAS)...\")\n",
872
+ "\n",
873
+ "accessServiceOptions = {\n",
874
+ " \"SupportedZones\": [ \"manufacturing\" ],\n",
875
+ " \"DefaultZones\" : [ \"manufacturing\"]\n",
876
+ "}\n",
877
+ "configureAccessService(adminPlatformURL, adminUserId, mdrServerName, 'asset-catalog', accessServiceOptions)\n",
878
+ "configureAccessService(adminPlatformURL, adminUserId, mdrServerName, 'asset-consumer', accessServiceOptions)\n",
879
+ "configureAccessService(adminPlatformURL, adminUserId, mdrServerName, 'asset-owner', accessServiceOptions)\n",
880
+ "configureAccessService(adminPlatformURL, adminUserId, mdrServerName, 'community-profile', {\"KarmaPointPlateau\":\"500\"})\n",
881
+ "configureAccessService(adminPlatformURL, adminUserId, mdrServerName, 'glossary-view', {})\n",
882
+ "configureAccessService(adminPlatformURL, adminUserId, mdrServerName, 'data-science', accessServiceOptions)\n",
883
+ "configureAccessService(adminPlatformURL, adminUserId, mdrServerName, 'subject-area', {})\n",
884
+ "configureAccessService(adminPlatformURL, adminUserId, mdrServerName, 'asset-manager', accessServiceOptions)\n",
885
+ "configureAccessService(adminPlatformURL, adminUserId, mdrServerName, 'governance-engine', accessServiceOptions)\n",
886
+ "configureAccessService(adminPlatformURL, adminUserId, mdrServerName, 'discovery-engine', accessServiceOptions)\n",
887
+ "configureAccessService(adminPlatformURL, adminUserId, mdrServerName, 'data-engine', accessServiceOptions)\n",
888
+ "configureAccessService(adminPlatformURL, adminUserId, mdrServerName, 'data-manager', accessServiceOptions)\n",
889
+ "configureAccessService(adminPlatformURL, adminUserId, mdrServerName, 'governance-engine', accessServiceOptions)\n",
890
+ "configureAccessService(adminPlatformURL, adminUserId, mdrServerName, 'it-infrastructure', accessServiceOptions)\n",
891
+ "configureAccessService(adminPlatformURL, adminUserId, mdrServerName, 'project-management', accessServiceOptions)\n",
892
+ "\n",
893
+ "print(\"\\nDone.\")"
894
+ ],
895
+ "outputs": []
896
+ },
897
+ {
898
+ "cell_type": "markdown",
899
+ "metadata": {},
900
+ "source": [
901
+ "----\n",
902
+ "\n",
903
+ "## Configuring cocoMDSx - Development\n",
904
+ "\n",
905
+ "Server cocoMDSx is used by the development teams building new IT capability. It will hold all of the software component assets and servers used for development and devOps. The development teams have their own OMAG Server Platform and cohort called 'devCohort'."
906
+ ]
907
+ },
908
+ {
909
+ "cell_type": "code",
910
+ "execution_count": null,
911
+ "metadata": {},
912
+ "source": [
913
+ "mdrServerName = \"cocoMDSx\"\n",
914
+ "mdr_user_id = \"cocoMDSxnpa\"\n",
915
+ "mdr_server_password = \"cocoMDSxpassw0rd\"\n",
916
+ "mdr_platform_url = devPlatformURL\n",
917
+ "metadata_collection_name = \"Development Catalog\"\n",
918
+ "\n",
919
+ "print(\"Configuring \" + mdrServerName + \"...\")\n",
920
+ "\n",
921
+ "configurePlatformURL(adminPlatformURL, adminUserId, mdrServerName, mdr_platform_url)\n",
922
+ "configureMaxPageSize(adminPlatformURL, adminUserId, mdrServerName, maxPageSize)\n",
923
+ "clearServerType(adminPlatformURL, adminUserId, mdrServerName)\n",
924
+ "configureOwningOrganization(adminPlatformURL, adminUserId, mdrServerName, organizationName)\n",
925
+ "configureUserId(adminPlatformURL, adminUserId, mdrServerName, mdr_user_id)\n",
926
+ "configurePassword(adminPlatformURL, adminUserId, mdrServerName, mdr_server_password)\n",
927
+ "configureSecurityConnection(adminPlatformURL, adminUserId, mdrServerName, serverSecurityConnectionBody)\n",
928
+ "configureEventBus(adminPlatformURL, adminUserId, mdrServerName, eventBusBody)\n",
929
+ "configureMetadataRepository(adminPlatformURL, adminUserId, mdrServerName, metadataRepositoryType)\n",
930
+ "configureDescriptiveName(adminPlatformURL, adminUserId, mdrServerName, metadata_collection_name)\n",
931
+ "configureCohortMembership(adminPlatformURL, adminUserId, mdrServerName, devCohort)\n",
932
+ "\n",
933
+ "print(\"\\nConfiguring \" + mdrServerName + \" Access Services (OMAS)...\")\n",
934
+ "\n",
935
+ "accessServiceOptions = {\n",
936
+ " \"SupportedZones\": [ \"sdlc\", \"quarantine\", \"clinical-trials\", \"research\", \"data-lake\", \"trash-can\" ],\n",
937
+ " \"DefaultZones\": [ \"sdlc\" , \"quarantine\"]\n",
938
+ "}\n",
939
+ "configureAccessService(adminPlatformURL, adminUserId, mdrServerName, 'asset-catalog', accessServiceOptions)\n",
940
+ "configureAccessService(adminPlatformURL, adminUserId, mdrServerName, 'asset-consumer', accessServiceOptions)\n",
941
+ "configureAccessService(adminPlatformURL, adminUserId, mdrServerName, 'asset-owner', accessServiceOptions)\n",
942
+ "configureAccessService(adminPlatformURL, adminUserId, mdrServerName, 'community-profile', {\"KarmaPointPlateau\":\"500\"})\n",
943
+ "configureAccessService(adminPlatformURL, adminUserId, mdrServerName, 'glossary-view', {})\n",
944
+ "configureAccessService(adminPlatformURL, adminUserId, mdrServerName, 'data-science', accessServiceOptions)\n",
945
+ "configureAccessService(adminPlatformURL, adminUserId, mdrServerName, 'subject-area', {})\n",
946
+ "configureAccessService(adminPlatformURL, adminUserId, mdrServerName, 'asset-manager', accessServiceOptions)\n",
947
+ "configureAccessService(adminPlatformURL, adminUserId, mdrServerName, 'governance-engine', accessServiceOptions)\n",
948
+ "configureAccessService(adminPlatformURL, adminUserId, mdrServerName, 'data-manager', accessServiceOptions)\n",
949
+ "configureAccessService(adminPlatformURL, adminUserId, mdrServerName, 'discovery-engine', accessServiceOptions)\n",
950
+ "configureAccessService(adminPlatformURL, adminUserId, mdrServerName, 'it-infrastructure', accessServiceOptions)\n",
951
+ "configureAccessService(adminPlatformURL, adminUserId, mdrServerName, 'project-management', accessServiceOptions)\n",
952
+ "configureAccessService(adminPlatformURL, adminUserId, mdrServerName, 'software-developer', accessServiceOptions)\n",
953
+ "configureAccessService(adminPlatformURL, adminUserId, mdrServerName, 'devops', accessServiceOptions)\n",
954
+ "configureAccessService(adminPlatformURL, adminUserId, mdrServerName, 'digital-architecture', accessServiceOptions)\n",
955
+ "configureAccessService(adminPlatformURL, adminUserId, mdrServerName, 'design-model', accessServiceOptions)\n",
956
+ "\n",
957
+ "print(\"\\nDone.\")"
958
+ ],
959
+ "outputs": []
960
+ },
961
+ {
962
+ "cell_type": "markdown",
963
+ "metadata": {},
964
+ "source": [
965
+ "----\n",
966
+ "## Configuring the exchangeDL01 Integration Daemon\n",
967
+ "\n",
968
+ "The **exchangeDL01** integration daemon server supports the automatic exchange of metadata with third party technologies.\n",
969
+ "It runs one or more [integration connectors](https://egeria-project.org/concepts/integration-connector)\n",
970
+ "that each connect to a particular third party technology to exchange metadata. \n",
971
+ "\n",
972
+ "An integration connector implements an interface that gives it access to an *integration context* object. This is effectively a client to the metadata server.\n",
973
+ "\n",
974
+ "Egeria offers the following Open Metadata Integration Services (OMIS), or integration services for short.\n",
975
+ "These integration services each provide a specialist *integration context* for an integration connector that focus on the\n",
976
+ "integration with a particular type of technology.\n",
977
+ "\n",
978
+ "The command below lists the different types of integration services that are implemented in egeria today.\n",
979
+ "\n",
980
+ "----"
981
+ ]
982
+ },
983
+ {
984
+ "cell_type": "code",
985
+ "execution_count": null,
986
+ "metadata": {},
987
+ "source": [
988
+ "\n",
989
+ "getIntegrationServices(exchangeDL01PlatformName, exchangeDL01PlatformURL)\n"
990
+ ],
991
+ "outputs": []
992
+ },
993
+ {
994
+ "cell_type": "markdown",
995
+ "metadata": {},
996
+ "source": [
997
+ "----\n",
998
+ "\n",
999
+ "### Configuring the server\n",
1000
+ "\n",
1001
+ "An integration daemon can be both statically and dynamically configured:\n",
1002
+ "\n",
1003
+ "* Static configuration lists the integration connectors that are to run in the integration daemon's configuration document. The connectors are started automatically when the integration daemon starts. Changing the connectors that are running in the integration daemon involves updating the configuration document for the integration daemon and restarting the integration daemon.\n",
1004
+ "\n",
1005
+ "* Dynamic configuration lists the integration groups that are assigned to the integration daemon in the configuration document. The integration group is an entity in the metadata repository that the configuration for the required integration connectors is attached to. The integration daemon dynamically reads and monitors changes to this configuration from start up and all the time it is running. Any changes, such as attaching a new integration connector configuration to the integration group, is picked up by the integration daemon and results in changes to the list of integration connectors.\n",
1006
+ "\n",
1007
+ "Gary has been asked to statically configure the **DataFolderMonitorIntegrationConnector** to maintain details about a physical directory (folder) in the file system where measurements for the *DropFoot clinical trial* are to be assembled.\n",
1008
+ "\n",
1009
+ "He has also been asked to assign an integration group called **Onboarding**\n",
1010
+ "to manage the configuration for the\n",
1011
+ "integration connectors that are receiving measurement files from the different hospitals.\n",
1012
+ "This is using dynamic configuration so that new hopsitals can be onboarded by the clinical\n",
1013
+ "trials team without needing\n",
1014
+ "his support to reconfigure and restart the integration daemon.\n",
1015
+ "\n",
1016
+ "Figure 3 shows the integration daemon with the DataFilesMonitorIntegrationConnector configured along with the Onboarding Integration Group.\n",
1017
+ "The integration daemon uses `cocoMDS1` to store and retrieve both the configuration for the onbording integration group and any metadata that its running integration connectors are maintaining.\n",
1018
+ "\n",
1019
+ "![Figure 3](images/exchangeDL01-config.png)\n",
1020
+ "> **Figure 3:** exchangeDL01 with its partner metadata server\n",
1021
+ "\n",
1022
+ "The commands below configure the integration daemon.\n"
1023
+ ]
1024
+ },
1025
+ {
1026
+ "cell_type": "code",
1027
+ "execution_count": null,
1028
+ "metadata": {},
1029
+ "source": [
1030
+ "daemonServerName = \"exchangeDL01\"\n",
1031
+ "daemonServerPlatform = dataLakePlatformURL\n",
1032
+ "daemonServerUserId = \"exchangeDL01npa\"\n",
1033
+ "daemonServerPassword = \"exchangeDL01passw0rd\"\n",
1034
+ "\n",
1035
+ "mdrServerName = \"cocoMDS1\"\n",
1036
+ "mdr_platform_url = dataLakePlatformURL\n",
1037
+ "\n",
1038
+ "folderConnectorName = \"DropFootClinicalTrialResultsFolderMonitor\"\n",
1039
+ "folderConnectorUserId = \"monitorDL01npa\"\n",
1040
+ "folderConnectorSourceName = \"DropFootClinicalTrialResults\"\n",
1041
+ "folderConnectorFolder = fileSystemRoot + '/data-lake/research/clinical-trials/drop-foot/weekly-measurements'\n",
1042
+ "folderConnectorConnection = { \n",
1043
+ " \"class\" : \"Connection\",\n",
1044
+ " \"connectorType\" : \n",
1045
+ " {\n",
1046
+ " \"class\" : \"ConnectorType\",\n",
1047
+ " \"connectorProviderClassName\" : \"org.odpi.openmetadata.adapters.connectors.integration.basicfiles.DataFolderMonitorIntegrationProvider\" \n",
1048
+ " },\n",
1049
+ " \"endpoint\" :\n",
1050
+ " {\n",
1051
+ " \"class\" : \"Endpoint\",\n",
1052
+ " \"address\" : folderConnectorFolder\n",
1053
+ " }\n",
1054
+ " }\n",
1055
+ "\n",
1056
+ "integrationGroupName = \"Onboarding\"\n",
1057
+ "\n",
1058
+ "print(\"Configuring \" + daemonServerName + \"...\")\n",
1059
+ "\n",
1060
+ "configurePlatformURL(adminPlatformURL, adminUserId, daemonServerName, daemonServerPlatform)\n",
1061
+ "configureMaxPageSize(adminPlatformURL, adminUserId, daemonServerName, maxPageSize)\n",
1062
+ "clearServerType(adminPlatformURL, adminUserId, daemonServerName)\n",
1063
+ "configureOwningOrganization(adminPlatformURL, adminUserId, daemonServerName, organizationName)\n",
1064
+ "configureUserId(adminPlatformURL, adminUserId, daemonServerName, daemonServerUserId)\n",
1065
+ "configurePassword(adminPlatformURL, adminUserId, daemonServerName, daemonServerPassword)\n",
1066
+ "configureSecurityConnection(adminPlatformURL, adminUserId, daemonServerName, serverSecurityConnectionBody)\n",
1067
+ "configureDefaultAuditLog(adminPlatformURL, adminUserId, daemonServerName)\n",
1068
+ "\n",
1069
+ "print(\"\\nConfiguring \" + daemonServerName + \" integration connectors ...\")\n",
1070
+ "\n",
1071
+ "connectorConfigs = [{\n",
1072
+ " \"class\" : \"IntegrationConnectorConfig\",\n",
1073
+ " \"connectorName\" : folderConnectorName,\n",
1074
+ " \"connectorUserId\" : folderConnectorUserId,\n",
1075
+ " \"connection\" : folderConnectorConnection,\n",
1076
+ " \"metadataSourceQualifiedName\" : folderConnectorSourceName,\n",
1077
+ " \"refreshTimeInterval\" : 10,\n",
1078
+ " \"usesBlockingCalls\" : \"false\"\n",
1079
+ " }]\n",
1080
+ "\n",
1081
+ "configureIntegrationService(adminPlatformURL, adminUserId, daemonServerName, mdrServerName, mdr_platform_url, \"files-integrator\", {}, connectorConfigs)\n",
1082
+ "configureIntegrationGroup(adminPlatformURL, adminUserId, daemonServerName, mdrServerName, mdr_platform_url, integrationGroupName)\n",
1083
+ "\n",
1084
+ "print (\"\\nDone.\")"
1085
+ ],
1086
+ "outputs": []
1087
+ },
1088
+ {
1089
+ "cell_type": "markdown",
1090
+ "metadata": {},
1091
+ "source": [
1092
+ "----\n",
1093
+ "## Configuring the monitorDev01 Integration Daemon\n",
1094
+ "\n",
1095
+ "The **monitorDev01** is another integration daemon server supporting the development team. It is cataloguing assets in preparation for deployment into production. It has no integration services active initially since they are set up in the labs and demos that use it.\n"
1096
+ ]
1097
+ },
1098
+ {
1099
+ "cell_type": "code",
1100
+ "execution_count": null,
1101
+ "metadata": {},
1102
+ "source": [
1103
+ "daemonServerName = \"monitorDev01\"\n",
1104
+ "daemonServerPlatform = devPlatformURL\n",
1105
+ "daemonServerUserId = \"erinoverview\"\n",
1106
+ "daemonServerPassword = \"erinoverviewpassw0rd\"\n",
1107
+ "\n",
1108
+ "mdrServerName = \"cocoMDSx\"\n",
1109
+ "mdr_platform_url = devPlatformURL\n",
1110
+ "\n",
1111
+ "print(\"Configuring \" + daemonServerName + \"...\")\n",
1112
+ "\n",
1113
+ "configurePlatformURL(adminPlatformURL, adminUserId, daemonServerName, daemonServerPlatform)\n",
1114
+ "configureMaxPageSize(adminPlatformURL, adminUserId, daemonServerName, maxPageSize)\n",
1115
+ "clearServerType(adminPlatformURL, adminUserId, daemonServerName)\n",
1116
+ "configureOwningOrganization(adminPlatformURL, adminUserId, daemonServerName, organizationName)\n",
1117
+ "configureUserId(adminPlatformURL, adminUserId, daemonServerName, daemonServerUserId)\n",
1118
+ "configurePassword(adminPlatformURL, adminUserId, daemonServerName, daemonServerPassword)\n",
1119
+ "configureSecurityConnection(adminPlatformURL, adminUserId, daemonServerName, serverSecurityConnectionBody)\n",
1120
+ "configureDefaultAuditLog(adminPlatformURL, adminUserId, daemonServerName)\n",
1121
+ "\n",
1122
+ "print (\"\\nDone.\")"
1123
+ ],
1124
+ "outputs": []
1125
+ },
1126
+ {
1127
+ "cell_type": "markdown",
1128
+ "metadata": {},
1129
+ "source": [
1130
+ "----\n",
1131
+ "## Configuring the monitorGov01 Integration Daemon\n",
1132
+ "\n",
1133
+ "The **monitorGov01** is another integration daemon server supporting the governance team. It is managing the capture of lineage for the governance actions and external processing in the data lake.\n"
1134
+ ]
1135
+ },
1136
+ {
1137
+ "cell_type": "code",
1138
+ "execution_count": null,
1139
+ "metadata": {},
1140
+ "source": [
1141
+ "daemonServerName = \"monitorGov01\"\n",
1142
+ "daemonServerPlatform = dataLakePlatformURL\n",
1143
+ "daemonServerUserId = \"exchangeDL01npa\"\n",
1144
+ "daemonServerPassword = \"exchangeDL01passw0rd\"\n",
1145
+ "\n",
1146
+ "mdrServerName = \"cocoMDS1\"\n",
1147
+ "mdr_platform_url = dataLakePlatformURL\n",
1148
+ "\n",
1149
+ "KafkaReceiverConnectorName = \"KafkaOpenLineageEventReceiver\"\n",
1150
+ "KafkaReceiverConnectorUserId = \"onboardDL01npa\"\n",
1151
+ "KafkaReceiverConnectorSourceName = \"Apache Kafka\"\n",
1152
+ "KafkaReceiverConnectorConnection = { \n",
1153
+ " \"class\" : \"VirtualConnection\",\n",
1154
+ " \"connectorType\" : \n",
1155
+ " {\n",
1156
+ " \"class\" : \"ConnectorType\",\n",
1157
+ " \"connectorProviderClassName\" : \"org.odpi.openmetadata.adapters.connectors.integration.openlineage.OpenLineageEventReceiverIntegrationProvider\" \n",
1158
+ " },\n",
1159
+ " \"embeddedConnections\" : \n",
1160
+ " [\n",
1161
+ " {\n",
1162
+ " \"class\": \"EmbeddedConnection\",\n",
1163
+ " \"embeddedConnection\" :\n",
1164
+ " {\n",
1165
+ " \"class\": \"Connection\",\n",
1166
+ " \"connectorType\": \n",
1167
+ " {\n",
1168
+ " \"class\": \"ConnectorType\",\n",
1169
+ " \"connectorProviderClassName\": \"org.odpi.openmetadata.adapters.eventbus.topic.kafka.KafkaOpenMetadataTopicProvider\",\n",
1170
+ " },\n",
1171
+ " \"endpoint\": \n",
1172
+ " {\n",
1173
+ " \"class\": \"Endpoint\",\n",
1174
+ " \"address\": \"openlineage.topic\"\n",
1175
+ " },\n",
1176
+ " \"configurationProperties\":\n",
1177
+ " {\n",
1178
+ " \"producer\": \n",
1179
+ " {\n",
1180
+ " \"bootstrap.servers\": \"localhost:9092\"\n",
1181
+ " },\n",
1182
+ " \"local.server.id\": \"f234e808-2d0c-4d88-83df-275eee20c1b7\",\n",
1183
+ " \"consumer\": \n",
1184
+ " {\n",
1185
+ " \"bootstrap.servers\": \"localhost:9092\"\n",
1186
+ " }\n",
1187
+ " }\n",
1188
+ " }\n",
1189
+ " }\n",
1190
+ " ]\n",
1191
+ " }\n",
1192
+ "\n",
1193
+ "GovernanceActionConnectorName = \"GovernanceActionOpenLineageCreator\"\n",
1194
+ "GovernanceActionConnectorUserId = \"onboardDL01npa\"\n",
1195
+ "GovernanceActionConnectorSourceName = \"Egeria\"\n",
1196
+ "GovernanceActionConnectorConnection = { \n",
1197
+ " \"class\" : \"Connection\",\n",
1198
+ " \"connectorType\" : \n",
1199
+ " {\n",
1200
+ " \"class\" : \"ConnectorType\",\n",
1201
+ " \"connectorProviderClassName\" : \"org.odpi.openmetadata.adapters.connectors.integration.openlineage.GovernanceActionOpenLineageIntegrationProvider\" \n",
1202
+ " },\n",
1203
+ " }\n",
1204
+ "\n",
1205
+ "APILoggerConnectorName = \"APIBasedOpenLineageLogStore\"\n",
1206
+ "APILoggerConnectorUserId = \"onboardDL01npa\"\n",
1207
+ "APILoggerConnectorSourceName = \"Egeria\"\n",
1208
+ "APILoggerConnectorConnection = { \n",
1209
+ " \"class\" : \"Connection\",\n",
1210
+ " \"connectorType\" : \n",
1211
+ " {\n",
1212
+ " \"class\" : \"ConnectorType\",\n",
1213
+ " \"connectorProviderClassName\" : \"org.odpi.openmetadata.adapters.connectors.integration.openlineage.APIBasedOpenLineageLogStoreProvider\" \n",
1214
+ " },\n",
1215
+ " \"endpoint\" :\n",
1216
+ " {\n",
1217
+ " \"class\" : \"Endpoint\",\n",
1218
+ " \"address\" : \"http://localhost:5000/api/v1/lineage\"\n",
1219
+ " }\n",
1220
+ " }\n",
1221
+ "\n",
1222
+ "FileLoggerConnectorName = \"FileBasedOpenLineageLogStore\"\n",
1223
+ "FileLoggerConnectorUserId = \"onboardDL01npa\"\n",
1224
+ "FileLoggerConnectorSourceName = \"Egeria\"\n",
1225
+ "FileLoggerConnectorConnection = { \n",
1226
+ " \"class\" : \"Connection\",\n",
1227
+ " \"connectorType\" : \n",
1228
+ " {\n",
1229
+ " \"class\" : \"ConnectorType\",\n",
1230
+ " \"connectorProviderClassName\" : \"org.odpi.openmetadata.adapters.connectors.integration.openlineage.FileBasedOpenLineageLogStoreProvider\" \n",
1231
+ " },\n",
1232
+ " \"endpoint\" :\n",
1233
+ " {\n",
1234
+ " \"class\" : \"Endpoint\",\n",
1235
+ " \"address\" : fileSystemRoot + '/openlineage.log'\n",
1236
+ " }\n",
1237
+ " }\n",
1238
+ "\n",
1239
+ "CataloguerConnectorName = \"OpenLineageCataloguer\"\n",
1240
+ "CataloguerConnectorUserId = \"onboardDL01npa\"\n",
1241
+ "CataloguerConnectorSourceName = \"OpenLineageSources\"\n",
1242
+ "CataloguerConnectorConnection = { \n",
1243
+ " \"class\" : \"Connection\",\n",
1244
+ " \"connectorType\" : \n",
1245
+ " {\n",
1246
+ " \"class\" : \"ConnectorType\",\n",
1247
+ " \"connectorProviderClassName\" : \"org.odpi.openmetadata.adapters.connectors.integration.openlineage.OpenLineageCataloguerIntegrationProvider\" \n",
1248
+ " }\n",
1249
+ " }\n",
1250
+ "\n",
1251
+ "\n",
1252
+ "print(\"Configuring \" + daemonServerName + \"...\")\n",
1253
+ "\n",
1254
+ "configurePlatformURL(adminPlatformURL, adminUserId, daemonServerName, daemonServerPlatform)\n",
1255
+ "configureMaxPageSize(adminPlatformURL, adminUserId, daemonServerName, maxPageSize)\n",
1256
+ "clearServerType(adminPlatformURL, adminUserId, daemonServerName)\n",
1257
+ "configureOwningOrganization(adminPlatformURL, adminUserId, daemonServerName, organizationName)\n",
1258
+ "configureUserId(adminPlatformURL, adminUserId, daemonServerName, daemonServerUserId)\n",
1259
+ "configurePassword(adminPlatformURL, adminUserId, daemonServerName, daemonServerPassword)\n",
1260
+ "configureSecurityConnection(adminPlatformURL, adminUserId, daemonServerName, serverSecurityConnectionBody)\n",
1261
+ "configureDefaultAuditLog(adminPlatformURL, adminUserId, daemonServerName)\n",
1262
+ "\n",
1263
+ "print(\"\\nConfiguring \" + daemonServerName + \" integration connectors ...\")\n",
1264
+ "\n",
1265
+ "connectorConfigs = [ \n",
1266
+ " {\n",
1267
+ " \"class\" : \"IntegrationConnectorConfig\",\n",
1268
+ " \"connectorName\" : KafkaReceiverConnectorName,\n",
1269
+ " \"connectorUserId\" : KafkaReceiverConnectorUserId,\n",
1270
+ " \"connection\" : KafkaReceiverConnectorConnection,\n",
1271
+ " \"metadataSourceQualifiedName\" : KafkaReceiverConnectorSourceName,\n",
1272
+ " \"refreshTimeInterval\" : 10,\n",
1273
+ " \"usesBlockingCalls\" : \"false\"\n",
1274
+ " },\n",
1275
+ " {\n",
1276
+ " \"class\" : \"IntegrationConnectorConfig\",\n",
1277
+ " \"connectorName\" : GovernanceActionConnectorName,\n",
1278
+ " \"connectorUserId\" : GovernanceActionConnectorUserId,\n",
1279
+ " \"connection\" : GovernanceActionConnectorConnection,\n",
1280
+ " \"metadataSourceQualifiedName\" : GovernanceActionConnectorSourceName,\n",
1281
+ " \"refreshTimeInterval\" : 10,\n",
1282
+ " \"usesBlockingCalls\" : \"false\"\n",
1283
+ " },\n",
1284
+ " {\n",
1285
+ " \"class\" : \"IntegrationConnectorConfig\",\n",
1286
+ " \"connectorName\" : APILoggerConnectorName,\n",
1287
+ " \"connectorUserId\" : APILoggerConnectorUserId,\n",
1288
+ " \"connection\" : APILoggerConnectorConnection,\n",
1289
+ " \"metadataSourceQualifiedName\" : APILoggerConnectorSourceName,\n",
1290
+ " \"refreshTimeInterval\" : 10,\n",
1291
+ " \"usesBlockingCalls\" : \"false\"\n",
1292
+ " },\n",
1293
+ " {\n",
1294
+ " \"class\" : \"IntegrationConnectorConfig\",\n",
1295
+ " \"connectorName\" : FileLoggerConnectorName,\n",
1296
+ " \"connectorUserId\" : FileLoggerConnectorUserId,\n",
1297
+ " \"connection\" : FileLoggerConnectorConnection,\n",
1298
+ " \"metadataSourceQualifiedName\" : FileLoggerConnectorSourceName,\n",
1299
+ " \"refreshTimeInterval\" : 10,\n",
1300
+ " \"usesBlockingCalls\" : \"false\"\n",
1301
+ " },\n",
1302
+ " {\n",
1303
+ " \"class\" : \"IntegrationConnectorConfig\",\n",
1304
+ " \"connectorName\" : CataloguerConnectorName,\n",
1305
+ " \"connectorUserId\" : CataloguerConnectorUserId,\n",
1306
+ " \"connection\" : CataloguerConnectorConnection,\n",
1307
+ " \"metadataSourceQualifiedName\" : CataloguerConnectorSourceName,\n",
1308
+ " \"refreshTimeInterval\" : 10,\n",
1309
+ " \"usesBlockingCalls\" : \"false\"\n",
1310
+ " }]\n",
1311
+ "\n",
1312
+ "configureIntegrationService(adminPlatformURL, adminUserId, daemonServerName, mdrServerName, mdr_platform_url, \"lineage-integrator\", {}, connectorConfigs)\n",
1313
+ "\n",
1314
+ "print (\"\\nDone.\")"
1315
+ ],
1316
+ "outputs": []
1317
+ },
1318
+ {
1319
+ "cell_type": "markdown",
1320
+ "metadata": {},
1321
+ "source": [
1322
+ "----\n",
1323
+ "## Configuring governDL01 Governance Engine Hosting Server\n",
1324
+ "\n",
1325
+ "The Engine Host OMAG server is a special kind of governance server that hosts one or more governance engines.\n",
1326
+ "\n",
1327
+ "A governance engine is a set of specialized services that perform specific functions to manage the digital landscape and the metadata that describes it. \n",
1328
+ "\n",
1329
+ "### Automated metadata discovery\n",
1330
+ "\n",
1331
+ "One example of a type of governance engine is a discovery engine. The discovery engine runs discovery services. Discovery services analyze the content of a real-world artifact or resource. For example, a discovery service may open up a data set and assess the quality of the data inside.\n",
1332
+ "\n",
1333
+ "The result of a discovery service's analysis is stored in a metadata server as a discovery analysis report that is chained off of the asset's definition. This report can be retrieved either through the engine host server's API or through the metadata server's APIs, specifically the Discovery Engine OMAS and the Asset Owner OMAS.\n",
1334
+ "\n",
1335
+ "The interfaces used by discovery services are defined in the [Open Discovery Framework (ODF)](https://egeria-project.org/frameworks/odf/overview/). This framework enables new implementations of discovery services to be deployed to the discovery engines.\n",
1336
+ "\n",
1337
+ "\n",
1338
+ "\n",
1339
+ "### Automated governance\n",
1340
+ "\n",
1341
+ "Another type of governance engine is a governance action engine. The governance action engine runs governance action services.\n",
1342
+ "Governance action services monitor the asset metadata and verify that it is set up correctly, determine how to fix anomalies, errors and omissions,\n",
1343
+ "make the necessary changes and provision real-world artifacts and resources based on the resulting metadata.\n",
1344
+ "\n",
1345
+ "\n",
1346
+ "\n",
1347
+ "### Understanding the engine services\n",
1348
+ "\n",
1349
+ "Coco Pharmaceuticals runs one engine host server for its data lake. It is called `governDL01` and it runs on the data lake platform.\n",
1350
+ "Within the engine host server there are engine services. Each engine service supports a specific type of governance engine.\n",
1351
+ "The command below shows you the different types of engine services\n"
1352
+ ]
1353
+ },
1354
+ {
1355
+ "cell_type": "code",
1356
+ "execution_count": null,
1357
+ "metadata": {},
1358
+ "source": [
1359
+ "\n",
1360
+ "getEngineServices(governDL01PlatformName, governDL01PlatformURL)\n"
1361
+ ],
1362
+ "outputs": []
1363
+ },
1364
+ {
1365
+ "cell_type": "markdown",
1366
+ "metadata": {},
1367
+ "source": [
1368
+ "----\n",
1369
+ "The governDL01 server is the Engine Host server that runs governance functions that monitor, validate, correct and enrich metadata for use by all of the technologies in the connected open metadata ecosystem.\n",
1370
+ "\n",
1371
+ "The **Asset Analysis** Open Metadata Engine Service (OMES) is responsible for running discovery engines from the\n",
1372
+ "[Open Discovery Framework (ODF)](https://egeria-project.org/frameworks/odf/overview/).\n",
1373
+ "Coco Pharmaceuticals has two discovery engines:\n",
1374
+ "\n",
1375
+ "* **AssetDiscovery** - extracts metadata about different types of assets on request.\n",
1376
+ "* **AssetQuality** - assesses the quality of the content of assets on request.\n",
1377
+ "\n",
1378
+ "The **Governance Action** Open Metadata Engine Service (OMES) is responsible for running governance action engines from the\n",
1379
+ "[Governance Action Framework (GAF)](https://egeria-project.org/frameworks/gaf/overview/).\n",
1380
+ "Coco Pharmaceuticals has one governance action engine:\n",
1381
+ "\n",
1382
+ "* **AssetGovernance** - monitors for new assets in the landing areas, automatically curates them and provisions them in the data lake.\n",
1383
+ "\n",
1384
+ "Figure 4 shows the integration daemon with its two connectors.\n",
1385
+ "It uses cocoMDS1 to store and retrieve metadata, since that is where the assets for the data lake are catalogued.\n",
1386
+ "\n",
1387
+ "![Figure 4](images/engine-host.png)\n",
1388
+ "> **Figure 4:** Metadata servers for governDL01\n",
1389
+ "\n",
1390
+ "### Configuring the server\n",
1391
+ "\n",
1392
+ "The commands below configure the engine host server with the Asset Analysis OMES and Governance Action OMES. \n",
1393
+ "The definitions of the named governance engines and their services are retrieved from the `cocoMDS1` metadata server through its Governance Engine OMAS.\n"
1394
+ ]
1395
+ },
1396
+ {
1397
+ "cell_type": "code",
1398
+ "execution_count": null,
1399
+ "metadata": {},
1400
+ "source": [
1401
+ "engineServerName = \"governDL01\"\n",
1402
+ "engineServerPlatform = dataLakePlatformURL\n",
1403
+ "engineServerUserId = \"governDL01npa\"\n",
1404
+ "engineServerPassword = \"governDL01passw0rd\"\n",
1405
+ "\n",
1406
+ "engineServerMDRName = \"cocoMDS2\"\n",
1407
+ "engingServerMDRPlatform = corePlatformURL\n",
1408
+ "\n",
1409
+ "mdrServerName = \"cocoMDS1\"\n",
1410
+ "mdr_platform_url = dataLakePlatformURL\n",
1411
+ "\n",
1412
+ "print(\"Configuring \" + engineServerName + \"...\")\n",
1413
+ "\n",
1414
+ "configurePlatformURL(adminPlatformURL, adminUserId, engineServerName, engineServerPlatform)\n",
1415
+ "configureMaxPageSize(adminPlatformURL, adminUserId, engineServerName, maxPageSize)\n",
1416
+ "clearServerType(adminPlatformURL, adminUserId, engineServerName)\n",
1417
+ "configureOwningOrganization(adminPlatformURL, adminUserId, engineServerName, organizationName)\n",
1418
+ "configureUserId(adminPlatformURL, adminUserId, engineServerName, engineServerUserId)\n",
1419
+ "configurePassword(adminPlatformURL, adminUserId, engineServerName, engineServerPassword)\n",
1420
+ "configureSecurityConnection(adminPlatformURL, adminUserId, engineServerName, serverSecurityConnectionBody)\n",
1421
+ "configureDefaultAuditLog(adminPlatformURL, adminUserId, engineServerName)\n",
1422
+ "\n",
1423
+ "print(\"\\nConfiguring \" + engineServerName + \" engines ...\")\n",
1424
+ "\n",
1425
+ "configureEngineDefinitionServices(adminPlatformURL, adminUserId, engineServerName, engineServerMDRName, engingServerMDRPlatform)\n",
1426
+ "\n",
1427
+ "discoveryEngines = [ \n",
1428
+ " {\n",
1429
+ " \"class\" : \"EngineConfig\",\n",
1430
+ " \"engineQualifiedName\" : \"AssetDiscovery\",\n",
1431
+ " \"engineUserId\" : \"findItDL01npa\"\n",
1432
+ " }, \n",
1433
+ " {\n",
1434
+ " \"class\" : \"EngineConfig\",\n",
1435
+ " \"engineQualifiedName\" : \"AssetQuality\",\n",
1436
+ " \"engineUserId\" : \"findItDL01npa\"\n",
1437
+ " }]\n",
1438
+ "\n",
1439
+ "governanceActionEngines = [ \n",
1440
+ " {\n",
1441
+ " \"class\" : \"EngineConfig\",\n",
1442
+ " \"engineQualifiedName\" : \"AssetGovernance\",\n",
1443
+ " \"engineUserId\" : \"findItDL01npa\"\n",
1444
+ " }]\n",
1445
+ "\n",
1446
+ "configureGovernanceEngineService(adminPlatformURL, adminUserId, engineServerName, mdrServerName, mdr_platform_url, \"asset-analysis\", discoveryEngines)\n",
1447
+ "configureGovernanceEngineService(adminPlatformURL, adminUserId, engineServerName, mdrServerName, mdr_platform_url, \"governance-action\", governanceActionEngines)\n",
1448
+ "\n",
1449
+ "print (\"\\nDone.\")"
1450
+ ],
1451
+ "outputs": []
1452
+ },
1453
+ {
1454
+ "cell_type": "markdown",
1455
+ "metadata": {},
1456
+ "source": [
1457
+ "----"
1458
+ ]
1459
+ },
1460
+ {
1461
+ "cell_type": "markdown",
1462
+ "metadata": {
1463
+ "tags": []
1464
+ },
1465
+ "source": [
1466
+ "# Configuring the cocoOLS1 - Open Lineage Governance Server\n",
1467
+ "\n",
1468
+ "The open lineage server **cocoOLS1** is a dedicated Governance Server that manages a historical warehouse of lineage information.\n",
1469
+ "The Open Lineage Services provides a historic reporting warehouse for lineage. It listens to events that are sent out by the Asset Lineage OMAS, and stores lineage data in a graph database. This lineage can then be queried through the Open Lineage Services Client and by its REST API, for example by a lineage GUI.\n",
1470
+ "\n",
1471
+ "![Figure 5](images/open-lineage-server.png)\n",
1472
+ "> **Figure 5:** Open Lineage Governance Server and related services"
1473
+ ]
1474
+ },
1475
+ {
1476
+ "cell_type": "markdown",
1477
+ "metadata": {},
1478
+ "source": [
1479
+ "## Configuring the server\n",
1480
+ "\n",
1481
+ "The admin commands below will configure new server with name `cocoOLS1` on the Data Lake Platform.\n",
1482
+ "\n",
1483
+ "The server configuration document includes a `OpenLineageConfig` section. Complete instructions can be found on [Open Lineage Server configuration](https://egeria-project.org/guides/admin/servers/configuring-an-open-lineage-server/) page.\n",
1484
+ "\n",
1485
+ "For this lab we use following:\n",
1486
+ "\n",
1487
+ "- `accessServiceConfig`- Lineage events are received from the output topic connector of Asset Lineage OMAS. Also in some cases when needed, Open Lineage Server will use Asset Lineage OMAS REST client to fetch metadata needed to build detailed graph context. \n",
1488
+ "- `lineageGraphConnection` - Default configuration for the lineage graph store connector. The default graph store implementation is using `JanusGraph` database, `BerkeleyDB` as local storage and `Lucene` as search index. For more details about the connector see [Lineage Janus Connector](https://egeria-project.org/guides/admin/servers/configuring-an-open-lineage-server/)\n",
1489
+ "\n"
1490
+ ]
1491
+ },
1492
+ {
1493
+ "cell_type": "code",
1494
+ "execution_count": null,
1495
+ "metadata": {},
1496
+ "source": [
1497
+ "lineageServerName = \"cocoOLS1\"\n",
1498
+ "lineageServerPlatform = dataLakePlatformURL\n",
1499
+ "\n",
1500
+ "mdrServerName = \"cocoMDS1\"\n",
1501
+ "mdr_user_id = \"cocoMDS1npa\"\n",
1502
+ "mdr_server_password = \"secret\"\n",
1503
+ "mdr_platform_url = dataLakePlatformURL\n"
1504
+ ],
1505
+ "outputs": []
1506
+ },
1507
+ {
1508
+ "cell_type": "code",
1509
+ "execution_count": null,
1510
+ "metadata": {},
1511
+ "source": [
1512
+ "# OLS Server configuration common function\n",
1513
+ "#\n",
1514
+ "# adminPlatformURL - url of the platform where admin-services are running\n",
1515
+ "# adminUserId - user with admin access\n",
1516
+ "# lineageServerName - name of the new server initializing Open Lineage Services\n",
1517
+ "# metadataPlatformURL - url of the platform hosting the metadata repository server\n",
1518
+ "# metadataServerName - name of the server where metadata repository is located and asset-lineage omas is running\n",
1519
+ "# metadataServerUserName - user name with access asset-lineage omas\n",
1520
+ "# metadataServerUserPassword - password for the user with access to asset-lineage omas\n",
1521
+ "\n",
1522
+ "\n",
1523
+ "def configureOpenLineageService(adminPlatformURL, adminUserId, lineageServerName, metadataPlatformURL, metadataServerName, metadataServerUserName, metadataServerUserPassword):\n",
1524
+ " adminCommandURLRoot = adminPlatformURL + '/open-metadata/admin-services/users/' + adminUserId + '/servers/'\n",
1525
+ " print (\" ... configuring the Open Lineage Services server \" + lineageServerName + \" ...\")\n",
1526
+ " jsonContentHeader = {'content-type':'application/json'}\n",
1527
+ " requestBody = {\n",
1528
+ " \"class\": \"OpenLineageConfig\",\n",
1529
+ " \"openLineageDescription\": \"Open Lineage Service is used for the storage and querying of lineage\",\n",
1530
+ " \"lineageGraphConnection\": {\n",
1531
+ " \"class\": \"Connection\",\n",
1532
+ " \"displayName\": \"Lineage Graph Connection\",\n",
1533
+ " \"description\": \"Used for storing lineage in the Open Metadata format\",\n",
1534
+ " \"connectorType\": {\n",
1535
+ " \"class\": \"ConnectorType\",\n",
1536
+ " \"connectorProviderClassName\": \"org.odpi.openmetadata.openconnectors.governancedaemonconnectors.openlineageconnectors.janusconnector.graph.LineageGraphConnectorProvider\"\n",
1537
+ " },\n",
1538
+ " \"configurationProperties\": {\n",
1539
+ " \"gremlin.graph\": \"org.janusgraph.core.JanusGraphFactory\",\n",
1540
+ " \"storage.backend\": \"berkeleyje\",\n",
1541
+ " \"storage.directory\": \"data/servers/\"+ lineageServerName + \"/lineage-repository/berkeley\",\n",
1542
+ " \"index.search.backend\": \"lucene\",\n",
1543
+ " \"index.search.directory\": \"data/servers/\"+ lineageServerName + \"/lineage-repository/searchindex\"\n",
1544
+ " }\n",
1545
+ " },\n",
1546
+ " \"accessServiceConfig\": {\n",
1547
+ " \"serverName\": metadataServerName,\n",
1548
+ " \"serverPlatformUrlRoot\": metadataPlatformURL,\n",
1549
+ " \"user\": metadataServerUserName,\n",
1550
+ " \"password\": metadataServerUserPassword\n",
1551
+ " },\n",
1552
+ " \"backgroundJobs\": [\n",
1553
+ " {\n",
1554
+ " \"jobName\": \"LineageGraphJob\",\n",
1555
+ " \"jobInterval\": 120,\n",
1556
+ " \"jobEnabled\": \"false\"\n",
1557
+ " }, \n",
1558
+ " {\n",
1559
+ " \"jobName\": \"AssetLineageUpdateJob\",\n",
1560
+ " \"jobInterval\": 120,\n",
1561
+ " \"jobEnabled\": \"false\",\n",
1562
+ " \"jobDefaultValue\": \"2021-12-03T10:15:30\"\n",
1563
+ " }\n",
1564
+ " ]\n",
1565
+ " }\n",
1566
+ " print(requestBody)\n",
1567
+ " url = adminCommandURLRoot + lineageServerName + '/open-lineage/configuration'\n",
1568
+ " postAndPrintResult(url, json=requestBody, headers=jsonContentHeader)"
1569
+ ],
1570
+ "outputs": []
1571
+ },
1572
+ {
1573
+ "cell_type": "markdown",
1574
+ "metadata": {},
1575
+ "source": [
1576
+ "This server type also depends on standard sub-systems like event bus and audit logging. \n",
1577
+ "\n",
1578
+ "To configure follow the command sequence below. Once it is finished successfully it will print out 'Done.'"
1579
+ ]
1580
+ },
1581
+ {
1582
+ "cell_type": "code",
1583
+ "execution_count": null,
1584
+ "metadata": {},
1585
+ "source": [
1586
+ "print(\"Configuring \" + lineageServerName + \" Open Lineage Services (OLS) ...\")\n",
1587
+ "\n",
1588
+ "configureEventBus(adminPlatformURL, adminUserId, lineageServerName, eventBusBody)\n",
1589
+ "configureDefaultAuditLog(adminPlatformURL, adminUserId, lineageServerName)\n",
1590
+ "configureOpenLineageService(adminPlatformURL, adminUserId, lineageServerName, mdr_platform_url, mdrServerName, mdr_user_id, mdr_server_password)\n",
1591
+ "\n",
1592
+ "print (\"\\nDone.\")"
1593
+ ],
1594
+ "outputs": []
1595
+ },
1596
+ {
1597
+ "cell_type": "markdown",
1598
+ "metadata": {},
1599
+ "source": [
1600
+ "----"
1601
+ ]
1602
+ },
1603
+ {
1604
+ "cell_type": "markdown",
1605
+ "metadata": {},
1606
+ "source": [
1607
+ "# Configuring the View Server and View Services"
1608
+ ]
1609
+ },
1610
+ {
1611
+ "cell_type": "markdown",
1612
+ "metadata": {},
1613
+ "source": [
1614
+ "Egeria's UI allows Coco Pharmaceutical's employees to understand more\n",
1615
+ "about their metadata environment.\n",
1616
+ "This UI uses special services, called view services, that run in an Egeria View Server."
1617
+ ]
1618
+ },
1619
+ {
1620
+ "cell_type": "code",
1621
+ "execution_count": null,
1622
+ "metadata": {},
1623
+ "source": [
1624
+ "getViewServices(cocoView1PlatformName, cocoView1PlatformURL)"
1625
+ ],
1626
+ "outputs": []
1627
+ },
1628
+ {
1629
+ "cell_type": "markdown",
1630
+ "metadata": {},
1631
+ "source": [
1632
+ "This is an initial version of an example to configure the view services.\n",
1633
+ "Since this area is still in development the configuration is likely to change, and so all of the\n",
1634
+ "functions are in this section of the notebook rather than consolidated with our common functions.\n",
1635
+ "\n",
1636
+ "The new UI is deployed in the k8s environment\n",
1637
+ "\n",
1638
+ "The tenant (`coco` in this case) must be explicitly provided in the URL, as must navigation to the login page\n",
1639
+ "For example if the UI is on port 18091,login at https://localhost:18091/coco/login\n",
1640
+ "\n",
1641
+ "Further docs will be added in future releases. Please use http://slack.lfai.foundation to get further help"
1642
+ ]
1643
+ },
1644
+ {
1645
+ "cell_type": "code",
1646
+ "execution_count": null,
1647
+ "metadata": {},
1648
+ "source": [
1649
+ "\n",
1650
+ "def configureGovernanceSolutionViewService(adminPlatformURL, adminUserId, viewServerName, viewService, remotePlatformURL,remoteServerName):\n",
1651
+ " adminCommandURLRoot = adminPlatformURL + '/open-metadata/admin-services/users/' + adminUserId + '/servers/'\n",
1652
+ " print (\" ... configuring the \" + viewService + \" Governance Solution View Service for this server...\")\n",
1653
+ " url = adminCommandURLRoot + viewServerName + '/view-services/' + viewService\n",
1654
+ " jsonContentHeader = {'content-type':'application/json'}\n",
1655
+ " viewBody = {\n",
1656
+ " \"class\": \"ViewServiceConfig\",\n",
1657
+ " \"omagserverPlatformRootURL\": remotePlatformURL,\n",
1658
+ " \"omagserverName\" : remoteServerName\n",
1659
+ " }\n",
1660
+ " postAndPrintResult(url, json=viewBody, headers=jsonContentHeader)\n",
1661
+ " \n",
1662
+ "def configureIntegrationViewService(adminPlatformURL, adminUserId, viewServerName, viewService, configBody):\n",
1663
+ " adminCommandURLRoot = adminPlatformURL + '/open-metadata/admin-services/users/' + adminUserId + '/servers/'\n",
1664
+ " print (\" ... configuring the \" + viewService + \" Integration View Service for this server...\")\n",
1665
+ " url = adminCommandURLRoot + viewServerName + '/view-services/' + viewService\n",
1666
+ " jsonContentHeader = {'content-type':'application/json'}\n",
1667
+ " postAndPrintResult(url, json=configBody, headers=jsonContentHeader)\n",
1668
+ "\n",
1669
+ "\n",
1670
+ "# A view server supports the presentation server UI (a node based app). Here we run it on the datalake platform \n",
1671
+ "viewServerName = \"cocoView1\"\n",
1672
+ "viewServerUserId = \"cocoView1npa\"\n",
1673
+ "viewServerPassword = \"cocoView1passw0rd\"\n",
1674
+ "viewServerPlatform = dataLakePlatformURL\n",
1675
+ "viewServerType = \"View Server\"\n",
1676
+ "\n",
1677
+ "# Configuration is similar to most servers\n",
1678
+ "print(\"Configuring \" + viewServerName + \"...\")\n",
1679
+ "\n",
1680
+ "configurePlatformURL(adminPlatformURL, adminUserId, viewServerName, viewServerPlatform)\n",
1681
+ "configureMaxPageSize(adminPlatformURL, adminUserId, mdrServerName, maxPageSize)\n",
1682
+ "clearServerType(adminPlatformURL, adminUserId, viewServerName)\n",
1683
+ "configureServerType(adminPlatformURL,adminUserId,viewServerName,viewServerType)\n",
1684
+ "configureOwningOrganization(adminPlatformURL, adminUserId, viewServerName, organizationName)\n",
1685
+ "configureUserId(adminPlatformURL, adminUserId, viewServerName, viewServerUserId)\n",
1686
+ "configurePassword(adminPlatformURL, adminUserId, viewServerName, viewServerPassword)\n",
1687
+ "configureSecurityConnection(adminPlatformURL, adminUserId, viewServerName, serverSecurityConnectionBody)\n",
1688
+ "configureEventBus(adminPlatformURL, adminUserId, viewServerName, eventBusBody)\n",
1689
+ "configureDefaultAuditLog(adminPlatformURL, adminUserId, viewServerName)\n",
1690
+ "\n",
1691
+ "# The governance solution view services currently only consist of glossary author\n",
1692
+ "print (\"Configuring the Governance Solution View Services\")\n",
1693
+ "remotePlatformURL=corePlatformURL\n",
1694
+ "remoteServerName=\"cocoMDS2\"\n",
1695
+ "viewService=\"glossary-author\"\n",
1696
+ "configureGovernanceSolutionViewService(adminPlatformURL, adminUserId, viewServerName, viewService, remotePlatformURL,remoteServerName)\n",
1697
+ "\n",
1698
+ "print (\"Configuring the Integration View Services\")\n",
1699
+ "\n",
1700
+ "# repository explorer integration view service\n",
1701
+ "viewService=\"rex\"\n",
1702
+ "rexConfigBody = {\n",
1703
+ " \"class\":\"IntegrationViewServiceConfig\",\n",
1704
+ " \"viewServiceAdminClass\":\"org.odpi.openmetadata.viewservices.rex.admin.RexViewAdmin\",\n",
1705
+ " \"viewServiceFullName\":\"Repository Explorer\",\n",
1706
+ " \"viewServiceOperationalStatus\":\"ENABLED\",\n",
1707
+ " \"omagserverPlatformRootURL\": \"UNUSED\",\n",
1708
+ " \"omagserverName\" : \"UNUSED\",\n",
1709
+ " \"resourceEndpoints\" : [\n",
1710
+ " {\n",
1711
+ " \"class\" : \"ResourceEndpointConfig\",\n",
1712
+ " \"resourceCategory\" : \"Platform\",\n",
1713
+ " \"description\" : \"Core Platform\",\n",
1714
+ " \"platformName\" : \"Core\",\n",
1715
+ " \"platformRootURL\" : corePlatformURL\n",
1716
+ " },\n",
1717
+ " {\n",
1718
+ " \"class\" : \"ResourceEndpointConfig\",\n",
1719
+ " \"resourceCategory\" : \"Platform\",\n",
1720
+ " \"description\" : \"DataLake Platform\",\n",
1721
+ " \"platformName\" : \"DataLake\",\n",
1722
+ " \"platformRootURL\" : dataLakePlatformURL\n",
1723
+ " },\n",
1724
+ " {\n",
1725
+ " \"class\" : \"ResourceEndpointConfig\",\n",
1726
+ " \"resourceCategory\" : \"Platform\",\n",
1727
+ " \"description\" : \"Development Platform\",\n",
1728
+ " \"platformName\" : \"Development\",\n",
1729
+ " \"platformRootURL\" : devPlatformURL\n",
1730
+ " },\n",
1731
+ " {\n",
1732
+ " \"class\" : \"ResourceEndpointConfig\",\n",
1733
+ " \"resourceCategory\" : \"Server\",\n",
1734
+ " \"serverInstanceName\" : \"cocoMDS1\",\n",
1735
+ " \"description\" : \"Data Lake Operations\",\n",
1736
+ " \"platformName\" : \"DataLake\",\n",
1737
+ " \"serverName\" : \"cocoMDS1\"\n",
1738
+ " },\n",
1739
+ " {\n",
1740
+ " \"class\" : \"ResourceEndpointConfig\",\n",
1741
+ " \"resourceCategory\" : \"Server\",\n",
1742
+ " \"serverInstanceName\" : \"cocoMDS2\",\n",
1743
+ " \"description\" : \"Governance\",\n",
1744
+ " \"platformName\" : \"Core\",\n",
1745
+ " \"serverName\" : \"cocoMDS2\"\n",
1746
+ " },\n",
1747
+ " {\n",
1748
+ " \"class\" : \"ResourceEndpointConfig\",\n",
1749
+ " \"resourceCategory\" : \"Server\",\n",
1750
+ " \"serverInstanceName\" : \"cocoMDS3\",\n",
1751
+ " \"description\" : \"Research\",\n",
1752
+ " \"platformName\" : \"Core\",\n",
1753
+ " \"serverName\" : \"cocoMDS3\"\n",
1754
+ " },\n",
1755
+ " {\n",
1756
+ " \"class\" : \"ResourceEndpointConfig\",\n",
1757
+ " \"resourceCategory\" : \"Server\",\n",
1758
+ " \"serverInstanceName\" : \"cocoMDS5\",\n",
1759
+ " \"description\" : \"Business Systems\",\n",
1760
+ " \"platformName\" : \"Core\",\n",
1761
+ " \"serverName\" : \"cocoMDS5\"\n",
1762
+ " },\n",
1763
+ " {\n",
1764
+ " \"class\" : \"ResourceEndpointConfig\",\n",
1765
+ " \"resourceCategory\" : \"Server\",\n",
1766
+ " \"serverInstanceName\" : \"cocoMDS6\",\n",
1767
+ " \"description\" : \"Manufacturing\",\n",
1768
+ " \"platformName\" : \"Core\",\n",
1769
+ " \"serverName\" : \"cocoMDS6\"\n",
1770
+ " },\n",
1771
+ " {\n",
1772
+ " \"class\" : \"ResourceEndpointConfig\",\n",
1773
+ " \"resourceCategory\" : \"Server\",\n",
1774
+ " \"serverInstanceName\" : \"cocoMDSx\",\n",
1775
+ " \"description\" : \"Development\",\n",
1776
+ " \"platformName\" : \"Development\",\n",
1777
+ " \"serverName\" : \"cocoMDSx\"\n",
1778
+ " },\n",
1779
+ " ]\n",
1780
+ " }\n",
1781
+ "\n",
1782
+ "configureIntegrationViewService(adminPlatformURL, adminUserId, viewServerName, viewService, rexConfigBody)\n",
1783
+ "\n",
1784
+ "# type-explorer has endpoints\n",
1785
+ "viewService=\"tex\"\n",
1786
+ "texConfigBody = {\n",
1787
+ " \"class\":\"IntegrationViewServiceConfig\",\n",
1788
+ " \"viewServiceAdminClass\":\"org.odpi.openmetadata.viewservices.tex.admin.TexViewAdmin\",\n",
1789
+ " \"viewServiceFullName\":\"Type Explorer\",\n",
1790
+ " \"viewServiceOperationalStatus\":\"ENABLED\",\n",
1791
+ " \"omagserverPlatformRootURL\": \"UNUSED\",\n",
1792
+ " \"omagserverName\" : \"UNUSED\",\n",
1793
+ " \"resourceEndpoints\" : [\n",
1794
+ " {\n",
1795
+ " \"class\" : \"ResourceEndpointConfig\",\n",
1796
+ " \"resourceCategory\" : \"Platform\",\n",
1797
+ " \"description\" : \"Core Platform\",\n",
1798
+ " \"platformName\" : \"Core\",\n",
1799
+ " \"platformRootURL\" : corePlatformURL\n",
1800
+ " },\n",
1801
+ " {\n",
1802
+ " \"class\" : \"ResourceEndpointConfig\",\n",
1803
+ " \"resourceCategory\" : \"Platform\",\n",
1804
+ " \"description\" : \"DataLake Platform\",\n",
1805
+ " \"platformName\" : \"DataLake\",\n",
1806
+ " \"platformRootURL\" : dataLakePlatformURL\n",
1807
+ " },\n",
1808
+ " {\n",
1809
+ " \"class\" : \"ResourceEndpointConfig\",\n",
1810
+ " \"resourceCategory\" : \"Platform\",\n",
1811
+ " \"description\" : \"Development Platform\",\n",
1812
+ " \"platformName\" : \"Development\",\n",
1813
+ " \"platformRootURL\" : devPlatformURL\n",
1814
+ " },\n",
1815
+ " {\n",
1816
+ " \"class\" : \"ResourceEndpointConfig\",\n",
1817
+ " \"resourceCategory\" : \"Server\",\n",
1818
+ " \"serverInstanceName\" : \"cocoMDS1\",\n",
1819
+ " \"description\" : \"Data Lake Operations\",\n",
1820
+ " \"platformName\" : \"DataLake\",\n",
1821
+ " \"serverName\" : \"cocoMDS1\"\n",
1822
+ " },\n",
1823
+ " {\n",
1824
+ " \"class\" : \"ResourceEndpointConfig\",\n",
1825
+ " \"resourceCategory\" : \"Server\",\n",
1826
+ " \"serverInstanceName\" : \"cocoMDS2\",\n",
1827
+ " \"description\" : \"Governance\",\n",
1828
+ " \"platformName\" : \"Core\",\n",
1829
+ " \"serverName\" : \"cocoMDS2\"\n",
1830
+ " },\n",
1831
+ " {\n",
1832
+ " \"class\" : \"ResourceEndpointConfig\",\n",
1833
+ " \"resourceCategory\" : \"Server\",\n",
1834
+ " \"serverInstanceName\" : \"cocoMDS3\",\n",
1835
+ " \"description\" : \"Research\",\n",
1836
+ " \"platformName\" : \"Core\",\n",
1837
+ " \"serverName\" : \"cocoMDS3\"\n",
1838
+ " },\n",
1839
+ " {\n",
1840
+ " \"class\" : \"ResourceEndpointConfig\",\n",
1841
+ " \"resourceCategory\" : \"Server\",\n",
1842
+ " \"serverInstanceName\" : \"cocoMDS5\",\n",
1843
+ " \"description\" : \"Business Systems\",\n",
1844
+ " \"platformName\" : \"Core\",\n",
1845
+ " \"serverName\" : \"cocoMDS5\"\n",
1846
+ " },\n",
1847
+ " {\n",
1848
+ " \"class\" : \"ResourceEndpointConfig\",\n",
1849
+ " \"resourceCategory\" : \"Server\",\n",
1850
+ " \"serverInstanceName\" : \"cocoMDS6\",\n",
1851
+ " \"description\" : \"Manufacturing\",\n",
1852
+ " \"platformName\" : \"Core\",\n",
1853
+ " \"serverName\" : \"cocoMDS6\"\n",
1854
+ " },\n",
1855
+ " {\n",
1856
+ " \"class\" : \"ResourceEndpointConfig\",\n",
1857
+ " \"resourceCategory\" : \"Server\",\n",
1858
+ " \"serverInstanceName\" : \"cocoMDSx\",\n",
1859
+ " \"description\" : \"Development\",\n",
1860
+ " \"platformName\" : \"Development\",\n",
1861
+ " \"serverName\" : \"cocoMDSx\"\n",
1862
+ " },\n",
1863
+ " ]\n",
1864
+ " }\n",
1865
+ "\n",
1866
+ "configureIntegrationViewService(adminPlatformURL, adminUserId, viewServerName, viewService, texConfigBody)\n",
1867
+ "\n",
1868
+ "# Dino provides insight into the operational environment of egeria - this config body allows coco's platforms & servers to be accessed\n",
1869
+ "viewService=\"dino\"\n",
1870
+ "DinoConfigBody = {\n",
1871
+ " \"class\":\"IntegrationViewServiceConfig\",\n",
1872
+ " \"viewServiceAdminClass\":\"org.odpi.openmetadata.viewservices.dino.admin.DinoViewAdmin\",\n",
1873
+ " \"viewServiceFullName\":\"Dino\",\n",
1874
+ " \"viewServiceOperationalStatus\":\"ENABLED\",\n",
1875
+ " \"omagserverPlatformRootURL\": \"UNUSED\",\n",
1876
+ " \"omagserverName\" : \"UNUSED\",\n",
1877
+ " \"resourceEndpoints\" : [\n",
1878
+ " {\n",
1879
+ " \"class\" : \"ResourceEndpointConfig\",\n",
1880
+ " \"resourceCategory\" : \"Platform\",\n",
1881
+ " \"description\" : \"Core Platform\",\n",
1882
+ " \"platformName\" : \"Core\",\n",
1883
+ " \"platformRootURL\" : corePlatformURL\n",
1884
+ " },\n",
1885
+ " {\n",
1886
+ " \"class\" : \"ResourceEndpointConfig\",\n",
1887
+ " \"resourceCategory\" : \"Platform\",\n",
1888
+ " \"description\" : \"DataLake Platform\",\n",
1889
+ " \"platformName\" : \"DataLake\",\n",
1890
+ " \"platformRootURL\" : dataLakePlatformURL\n",
1891
+ " },\n",
1892
+ " {\n",
1893
+ " \"class\" : \"ResourceEndpointConfig\",\n",
1894
+ " \"resourceCategory\" : \"Platform\",\n",
1895
+ " \"description\" : \"Development Platform\",\n",
1896
+ " \"platformName\" : \"Development\",\n",
1897
+ " \"platformRootURL\" : devPlatformURL\n",
1898
+ " },\n",
1899
+ " {\n",
1900
+ " \"class\" : \"ResourceEndpointConfig\",\n",
1901
+ " \"resourceCategory\" : \"Server\",\n",
1902
+ " \"serverInstanceName\" : \"cocoMDS1\",\n",
1903
+ " \"description\" : \"Data Lake Operations\",\n",
1904
+ " \"platformName\" : \"DataLake\",\n",
1905
+ " \"serverName\" : \"cocoMDS1\"\n",
1906
+ " },\n",
1907
+ " {\n",
1908
+ " \"class\" : \"ResourceEndpointConfig\",\n",
1909
+ " \"resourceCategory\" : \"Server\",\n",
1910
+ " \"serverInstanceName\" : \"cocoMDS2\",\n",
1911
+ " \"description\" : \"Governance\",\n",
1912
+ " \"platformName\" : \"Core\",\n",
1913
+ " \"serverName\" : \"cocoMDS2\"\n",
1914
+ " },\n",
1915
+ " {\n",
1916
+ " \"class\" : \"ResourceEndpointConfig\",\n",
1917
+ " \"resourceCategory\" : \"Server\",\n",
1918
+ " \"serverInstanceName\" : \"cocoMDS3\",\n",
1919
+ " \"description\" : \"Research\",\n",
1920
+ " \"platformName\" : \"Core\",\n",
1921
+ " \"serverName\" : \"cocoMDS3\"\n",
1922
+ " },\n",
1923
+ " {\n",
1924
+ " \"class\" : \"ResourceEndpointConfig\",\n",
1925
+ " \"resourceCategory\" : \"Server\",\n",
1926
+ " \"serverInstanceName\" : \"cocoMDS4\",\n",
1927
+ " \"description\" : \"Data Lake Users\",\n",
1928
+ " \"platformName\" : \"DataLake\",\n",
1929
+ " \"serverName\" : \"cocoMDS4\"\n",
1930
+ " },\n",
1931
+ " {\n",
1932
+ " \"class\" : \"ResourceEndpointConfig\",\n",
1933
+ " \"resourceCategory\" : \"Server\",\n",
1934
+ " \"serverInstanceName\" : \"cocoMDS5\",\n",
1935
+ " \"description\" : \"Business Systems\",\n",
1936
+ " \"platformName\" : \"Core\",\n",
1937
+ " \"serverName\" : \"cocoMDS5\"\n",
1938
+ " },\n",
1939
+ " {\n",
1940
+ " \"class\" : \"ResourceEndpointConfig\",\n",
1941
+ " \"resourceCategory\" : \"Server\",\n",
1942
+ " \"serverInstanceName\" : \"cocoMDS6\",\n",
1943
+ " \"description\" : \"Manufacturing\",\n",
1944
+ " \"platformName\" : \"Core\",\n",
1945
+ " \"serverName\" : \"cocoMDS6\"\n",
1946
+ " },\n",
1947
+ " {\n",
1948
+ " \"class\" : \"ResourceEndpointConfig\",\n",
1949
+ " \"resourceCategory\" : \"Server\",\n",
1950
+ " \"serverInstanceName\" : \"cocoMDSx\",\n",
1951
+ " \"description\" : \"Development\",\n",
1952
+ " \"platformName\" : \"Development\",\n",
1953
+ " \"serverName\" : \"cocoMDSx\"\n",
1954
+ " },\n",
1955
+ " {\n",
1956
+ " \"class\" : \"ResourceEndpointConfig\",\n",
1957
+ " \"resourceCategory\" : \"Server\",\n",
1958
+ " \"serverInstanceName\" : \"cocoView1\",\n",
1959
+ " \"description\" : \"View Server\",\n",
1960
+ " \"platformName\" : \"DataLake\",\n",
1961
+ " \"serverName\" : \"cocoView1\"\n",
1962
+ " },\n",
1963
+ " ]\n",
1964
+ " }\n",
1965
+ "\n",
1966
+ "configureIntegrationViewService(adminPlatformURL, adminUserId, viewServerName, viewService, DinoConfigBody)\n",
1967
+ "\n",
1968
+ "# server-author endpoints\n",
1969
+ "viewService=\"server-author\"\n",
1970
+ "serverAuthorConfigBody = {\n",
1971
+ " \"class\":\"IntegrationViewServiceConfig\",\n",
1972
+ " \"viewServiceAdminClass\":\"org.odpi.openmetadata.viewservices.serverauthor.admin.ServerAuthorViewAdmin\",\n",
1973
+ " \"viewFullServiceName\":\"ServerAuthor\",\n",
1974
+ " \"viewServiceOperationalStatus\":\"ENABLED\",\n",
1975
+ " \"viewServiceFullName\":\"Type Explorer\",\n",
1976
+ " \"viewServiceOperationalStatus\":\"ENABLED\",\n",
1977
+ " \"omagserverPlatformRootURL\":dataLakePlatformURL,\n",
1978
+ " \"omagserverName\" : \"UNUSED\",\n",
1979
+ " \"resourceEndpoints\" : [\n",
1980
+ " {\n",
1981
+ " \"class\" : \"ResourceEndpointConfig\",\n",
1982
+ " \"resourceCategory\" : \"Platform\",\n",
1983
+ " \"description\" : \"Core Platform\",\n",
1984
+ " \"platformName\" : \"Core\",\n",
1985
+ " \"platformRootURL\" : corePlatformURL\n",
1986
+ " },\n",
1987
+ " {\n",
1988
+ " \"class\" : \"ResourceEndpointConfig\",\n",
1989
+ " \"resourceCategory\" : \"Platform\",\n",
1990
+ " \"description\" : \"DataLake Platform\",\n",
1991
+ " \"platformName\" : \"DataLake\",\n",
1992
+ " \"platformRootURL\" : dataLakePlatformURL\n",
1993
+ " },\n",
1994
+ " {\n",
1995
+ " \"class\" : \"ResourceEndpointConfig\",\n",
1996
+ " \"resourceCategory\" : \"Platform\",\n",
1997
+ " \"description\" : \"Development Platform\",\n",
1998
+ " \"platformName\" : \"Development\",\n",
1999
+ " \"platformRootURL\" : devPlatformURL\n",
2000
+ " }\n",
2001
+ " ]\n",
2002
+ " }\n",
2003
+ "\n",
2004
+ "configureIntegrationViewService(adminPlatformURL, adminUserId, viewServerName, viewService, serverAuthorConfigBody)\n",
2005
+ "\n",
2006
+ "\n",
2007
+ "\n",
2008
+ "\n",
2009
+ "print (\"\\nDone.\")"
2010
+ ],
2011
+ "outputs": []
2012
+ },
2013
+ {
2014
+ "cell_type": "markdown",
2015
+ "metadata": {},
2016
+ "source": [
2017
+ "# Deploying server configuration"
2018
+ ]
2019
+ },
2020
+ {
2021
+ "cell_type": "markdown",
2022
+ "metadata": {},
2023
+ "source": [
2024
+ "The commands that have been issued so far have created a configuration document for each server.\n",
2025
+ "These configuration documents are currently local to the Development OMAG Server Platform where the\n",
2026
+ "administration commands were issued (figure 6).\n",
2027
+ "\n",
2028
+ "![Figure 6](images/creating-configuration-documents.png)\n",
2029
+ "> **Figure 6:** Creating configuration documents using administration commands\n",
2030
+ "\n",
2031
+ "If servers are to be started on the other server platforms then their configuration documents\n",
2032
+ "need to be deployed (copied) to these platforms (figure 7).\n",
2033
+ "\n",
2034
+ "![Figure 7](images/deploying-configuration-documents.png)\n",
2035
+ "> **Figure 7:** Deploying configuration documents\n",
2036
+ "\n",
2037
+ "However, before deploying the configuration documents, the receiving OMAG Server Platforms\n",
2038
+ "need to be running.\n",
2039
+ "\n",
2040
+ "The code below checks the Core and Data Lake OMAG Server Platforms are running."
2041
+ ]
2042
+ },
2043
+ {
2044
+ "cell_type": "code",
2045
+ "execution_count": null,
2046
+ "metadata": {},
2047
+ "source": [
2048
+ "print(\"\\nChecking OMAG Server Platform availability...\")\n",
2049
+ "\n",
2050
+ "checkServerPlatform(\"Data Lake Platform\", dataLakePlatformURL)\n",
2051
+ "checkServerPlatform(\"Core Platform\", corePlatformURL)\n",
2052
+ "checkServerPlatform(\"Dev Platform\", devPlatformURL)\n",
2053
+ "\n",
2054
+ "print (\"\\nDone.\")"
2055
+ ],
2056
+ "outputs": []
2057
+ },
2058
+ {
2059
+ "cell_type": "markdown",
2060
+ "metadata": {},
2061
+ "source": [
2062
+ "----\n",
2063
+ "Make sure the each of the platforms is running.\n",
2064
+ "\n",
2065
+ "----\n",
2066
+ "The commands below deploy the server configuration documents to the server platforms where the\n",
2067
+ "servers will run."
2068
+ ]
2069
+ },
2070
+ {
2071
+ "cell_type": "code",
2072
+ "execution_count": null,
2073
+ "metadata": {},
2074
+ "source": [
2075
+ "\n",
2076
+ "\n",
2077
+ "print(\"\\nDeploying server configuration documents to appropriate platforms...\")\n",
2078
+ " \n",
2079
+ "deployServerToPlatform(adminPlatformURL, adminUserId, \"cocoMDS1\", dataLakePlatformURL)\n",
2080
+ "deployServerToPlatform(adminPlatformURL, adminUserId, \"cocoMDS2\", corePlatformURL)\n",
2081
+ "deployServerToPlatform(adminPlatformURL, adminUserId, \"cocoMDS3\", corePlatformURL)\n",
2082
+ "deployServerToPlatform(adminPlatformURL, adminUserId, \"cocoMDS4\", dataLakePlatformURL)\n",
2083
+ "deployServerToPlatform(adminPlatformURL, adminUserId, \"cocoMDS5\", corePlatformURL)\n",
2084
+ "deployServerToPlatform(adminPlatformURL, adminUserId, \"cocoMDS6\", corePlatformURL)\n",
2085
+ "deployServerToPlatform(adminPlatformURL, adminUserId, \"cocoMDSx\", devPlatformURL)\n",
2086
+ "deployServerToPlatform(adminPlatformURL, adminUserId, \"exchangeDL01\", dataLakePlatformURL)\n",
2087
+ "deployServerToPlatform(adminPlatformURL, adminUserId, \"monitorDev01\", devPlatformURL)\n",
2088
+ "deployServerToPlatform(adminPlatformURL, adminUserId, \"governDL01\", dataLakePlatformURL)\n",
2089
+ "deployServerToPlatform(adminPlatformURL, adminUserId, \"cocoView1\", dataLakePlatformURL)\n",
2090
+ "deployServerToPlatform(adminPlatformURL, adminUserId, \"cocoOLS1\", dataLakePlatformURL)\n",
2091
+ "\n",
2092
+ "print(\"\\nDone.\")"
2093
+ ],
2094
+ "outputs": []
2095
+ },
2096
+ {
2097
+ "cell_type": "markdown",
2098
+ "metadata": {},
2099
+ "source": [
2100
+ "----"
2101
+ ]
2102
+ },
2103
+ {
2104
+ "cell_type": "code",
2105
+ "execution_count": null,
2106
+ "metadata": {
2107
+ "collapsed": false,
2108
+ "jupyter": {
2109
+ "outputs_hidden": false
2110
+ }
2111
+ },
2112
+ "source": [],
2113
+ "outputs": []
2114
+ }
2115
+ ],
2116
+ "metadata": {
2117
+ "kernelspec": {
2118
+ "display_name": "Python 3 (ipykernel)",
2119
+ "language": "python",
2120
+ "name": "python3"
2121
+ },
2122
+ "language_info": {
2123
+ "codemirror_mode": {
2124
+ "name": "ipython",
2125
+ "version": 3
2126
+ },
2127
+ "file_extension": ".py",
2128
+ "mimetype": "text/x-python",
2129
+ "name": "python",
2130
+ "nbconvert_exporter": "python",
2131
+ "pygments_lexer": "ipython3",
2132
+ "version": "3.12.0"
2133
+ }
2134
+ },
2135
+ "nbformat": 4,
2136
+ "nbformat_minor": 4
2137
+ }