stelar-deploy 0.1.0__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.
@@ -0,0 +1,619 @@
1
+ # This file is a feature model for the STELAR KLMS product line.
2
+ name: STELAR
3
+ root:
4
+ name: klms
5
+ attributes:
6
+ namespace:
7
+ type: string
8
+ dynamicStorageClass:
9
+ type: string
10
+ dynamic_volume_storage_class:
11
+ type: string
12
+ SCHEME:
13
+ type: string
14
+ ROOT_DOMAIN:
15
+ type: string
16
+ CLUSTER_ISSUER:
17
+ type:
18
+ - string
19
+ - "null"
20
+ PRIMARY_SUBDOMAIN:
21
+ type: string
22
+ subfeatures:
23
+
24
+ # Core component group. These are always included in any configuration of the product line.
25
+ - group_name: core_components
26
+ rel: mandatory
27
+ members:
28
+ - name: api
29
+ attributes:
30
+ SMTP_SERVER:
31
+ type: string
32
+ SMTP_PORT:
33
+ type: string
34
+ SMTP_USERNAME:
35
+ type: string
36
+ SMTP_PASSWORD:
37
+ type: string
38
+ SESSION_SECRET_KEY:
39
+ type: string
40
+ PORT:
41
+ type: integer
42
+ default: 80
43
+ IMAGE:
44
+ type: string
45
+ default: "petroud/stelar-api:prod"
46
+ FLASK_ROOT:
47
+ type: string
48
+ default: "/stelar"
49
+ KEYCLOAK_CLIENT_ID:
50
+ type: string
51
+ default: "stelarapi"
52
+ SMTP_PASSWORD_SECRET_NAME:
53
+ type: string
54
+ default: "smtpapi-secret"
55
+ SESSION_SECRET_KEY_SECRET_NAME:
56
+ type: string
57
+ default: "session-secret-key"
58
+ EXEC_ENGINE:
59
+ type: string
60
+ default: "kubernetes"
61
+ INTERNAL_URL:
62
+ type: string
63
+ default: "http://stelarapi/"
64
+ - name: postgres
65
+ attributes:
66
+ POSTGRES_DB_PASSWORD:
67
+ type: string
68
+ CKAN_DB_PASSWORD:
69
+ type: string
70
+ DATASTORE_DB_PASSWORD:
71
+ type: string
72
+ KEYCLOAK_DB_PASSWORD:
73
+ type: string
74
+ QUAY_DB_PASSWORD:
75
+ type: string
76
+ PORT:
77
+ type: integer
78
+ default: 5432
79
+ IMAGE:
80
+ type: string
81
+ default: "petroud/stelar-tuc:postgres"
82
+ POSTGRES_HOST:
83
+ type: string
84
+ default: "db"
85
+ POSTGRES_DEFAULT_DB:
86
+ type: string
87
+ default: "postgres"
88
+ POSTGRES_USER:
89
+ type: string
90
+ default: "postgres"
91
+ POSTGRES_DB_PASSWORD_SECRET_NAME:
92
+ type: string
93
+ default: "postgresdb-secret"
94
+ CKAN_DB_USER:
95
+ type: string
96
+ default: "ckan"
97
+ CKAN_DB_PASSWORD_SECRET_NAME:
98
+ type: string
99
+ default: "ckandb-secret"
100
+ STELAR_DB:
101
+ type: string
102
+ default: "stelar"
103
+ DATASTORE_DB:
104
+ type: string
105
+ default: "datastore"
106
+ DATASTORE_READONLY_USER:
107
+ type: string
108
+ default: "datastore_ro"
109
+ DATASTORE_DB_PASSWORD_SECRET_NAME:
110
+ type: string
111
+ default: "datastoredb-secret"
112
+ KEYCLOAK_DB_USER:
113
+ type: string
114
+ default: "keycloak"
115
+ KEYCLOAK_DB_SCHEMA:
116
+ type: string
117
+ default: "keycloak"
118
+ KEYCLOAK_DB_PASSWORD_SECRET_NAME:
119
+ type: string
120
+ default: "keycloakdb-secret"
121
+ QUAY_DB_USER:
122
+ type: string
123
+ default: "quay"
124
+ QUAY_DB:
125
+ type: string
126
+ default: "quay"
127
+ QUAY_DB_PASSWORD_SECRET_NAME:
128
+ type: string
129
+ default: "quaydb-secret"
130
+ PGDATA:
131
+ type: string
132
+ default: "/var/lib/postgresql/data/pgdata"
133
+ subfeatures:
134
+ - group_name: volume
135
+ rel: alternative
136
+ members:
137
+ - name: hostPath
138
+ - name: pvc
139
+ - name: redis
140
+ attributes:
141
+ PORT:
142
+ type: integer
143
+ default: 6379
144
+ IMAGE:
145
+ type: string
146
+ default: "redis:7"
147
+ CKAN__HARVEST__MQ__TYPE:
148
+ type: string
149
+ default: "redis"
150
+ CKAN__HARVEST__MQ__HOSTNAME:
151
+ type: string
152
+ default: "redis"
153
+ CKAN__HARVEST__MQ__PORT:
154
+ type: string
155
+ default: "6379"
156
+ CKAN__HARVEST__MQ__REDIS_DB:
157
+ type: string
158
+ default: "1"
159
+ CKAN_REDIS_URL:
160
+ type: string
161
+ default: "redis://redis:6379/1"
162
+ TEST_CKAN_REDIS_URL:
163
+ type: string
164
+ default: "redis://redis:6379/1"
165
+ REDIS_HOST:
166
+ type: string
167
+ default: "redis"
168
+ REDIS_USER:
169
+ type: string
170
+ default: ""
171
+ REDIS_PORT:
172
+ type: string
173
+ default: "6379"
174
+ REDIS_PROTO:
175
+ type: string
176
+ default: "redis"
177
+ REDIS_DB:
178
+ type: string
179
+ default: "4"
180
+ REDIS_CELERY_DB:
181
+ type: string
182
+ default: "5"
183
+ QUAY_REDIS_HOSTNAME:
184
+ type: string
185
+ default: "redis"
186
+ - name: ckan
187
+ attributes:
188
+ CKAN_ADMIN_PASSWORD:
189
+ type: string
190
+ CKAN_SESSION_KEY:
191
+ type: string
192
+ CKAN_JWT_KEY:
193
+ type: string
194
+ PORT:
195
+ type: integer
196
+ default: 5000
197
+ IMAGE:
198
+ type: string
199
+ default: "petroud/stelar-tuc:ckan"
200
+ CKANEXT__KEYCLOAK__BUTTON_STYLE:
201
+ type: string
202
+ default: ""
203
+ CKANEXT__KEYCLOAK__ENABLE_CKAN_INTERNAL_LOGIN:
204
+ type: string
205
+ default: "True"
206
+ CKAN_VERSION:
207
+ type: string
208
+ default: "2.10.0"
209
+ CKAN_PORT:
210
+ type: string
211
+ default: "5000"
212
+ CKAN_PORT_HOST:
213
+ type: string
214
+ default: "5000"
215
+ CKAN__ROOT_PATH:
216
+ type: string
217
+ default: "/dc"
218
+ CKAN_SITE_ID:
219
+ type: string
220
+ default: "default"
221
+ CKAN_SYSADMIN_NAME:
222
+ type: string
223
+ default: "admin"
224
+ CKAN_SYSADMIN_EMAIL:
225
+ type: string
226
+ default: "info@stelar.gr"
227
+ CKAN_SMTP_SERVER:
228
+ type: string
229
+ default: "smtp.corporateict.domain:25"
230
+ CKAN_SMTP_STARTTLS:
231
+ type: string
232
+ default: "True"
233
+ CKAN_SMTP_USER:
234
+ type: string
235
+ default: "user"
236
+ CKAN_SMTP_PASSWORD:
237
+ type: string
238
+ default: "pass"
239
+ CKAN_SMTP_MAIL_FROM:
240
+ type: string
241
+ default: "ckan@localhost"
242
+ CKAN_ADMIN_PASSWORD_SECRET_NAME:
243
+ type: string
244
+ default: "ckanadmin-secret"
245
+ CKAN_AUTH_SECRET_NAME:
246
+ type: string
247
+ default: "ckan-auth-secret"
248
+ CKAN_STORAGE_PATH:
249
+ type: string
250
+ default: "/var/lib/ckan"
251
+ CKAN__PLUGINS:
252
+ type: string
253
+ default: "envvars image_view text_view recline_view datastore datapusher keycloak resource_proxy geo_view spatial_metadata spatial_query"
254
+ CKANEXT__SPATIAL__COMMON_MAP__TYPE:
255
+ type: string
256
+ default: "custom"
257
+ CKANEXT__SPATIAL__COMMON_MAP__CUSTOM__URL:
258
+ type: string
259
+ default: "https://tile.openstreetmap.org/{z}/{x}/{y}.png"
260
+ CKANEXT__SPATIAL__COMMON_MAP__ATTRIBUTION:
261
+ type: string
262
+ default: "&copy; <a href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a> contributors"
263
+ TZ:
264
+ type: string
265
+ default: "UTC"
266
+ CKAN__DATAPUSHER__CALLBACK_URL_BASE:
267
+ type: string
268
+ default: "http://ckan:5000"
269
+ DATAPUSHER_REWRITE_URL:
270
+ type: string
271
+ default: "http://ckan:5000"
272
+ - name: datapusher
273
+ attributes:
274
+ PORT:
275
+ type: integer
276
+ default: 8800
277
+ DATAPUSHER_VERSION:
278
+ type: string
279
+ default: "0.0.20"
280
+ CKAN_DATAPUSHER_URL:
281
+ type: string
282
+ default: "http://datapusher:8800"
283
+ DATAPUSHER_REWRITE_RESOURCES:
284
+ type: string
285
+ default: "True"
286
+ - name: solr
287
+ attributes:
288
+ PORT:
289
+ type: integer
290
+ default: 8983
291
+ SOLR_IMAGE_VERSION:
292
+ type: string
293
+ default: "2.10-solr9-spatial"
294
+ CKAN_SOLR_URL:
295
+ type: string
296
+ default: "http://solr:8983/solr/ckan"
297
+ TEST_CKAN_SOLR_URL:
298
+ type: string
299
+ default: "http://solr:8983/solr/ckan"
300
+ subfeatures:
301
+ - group_name: volume
302
+ rel: alternative
303
+ members:
304
+ - name: hostPath
305
+ - name: pvc
306
+ - name: keycloak
307
+ attributes:
308
+ SUBDOMAIN:
309
+ type: string
310
+ KEYCLOAK_ROOT_PASSWORD:
311
+ type: string
312
+ PORT:
313
+ type: integer
314
+ default: 8080
315
+ IMAGE:
316
+ type: string
317
+ default: "petroud/stelar-tuc:keycloak"
318
+ INIT_IMAGE:
319
+ type: string
320
+ default: "petroud/stelar-tuc:kcinit"
321
+ KEYCLOAK_ROOT_PASSWORD_SECRET_NAME:
322
+ type: string
323
+ default: "keycloakroot-secret"
324
+ DB_TYPE:
325
+ type: string
326
+ default: "postgres"
327
+ KEYCLOAK_ADMIN:
328
+ type: string
329
+ default: "admin"
330
+ JDBC_PARAMS:
331
+ type: string
332
+ default: "useSsl=false"
333
+ KC_HTTP_ENABLED:
334
+ type: string
335
+ default: "true"
336
+ KC_HEALTH_ENABLED:
337
+ type: string
338
+ default: "true"
339
+ REALM:
340
+ type: string
341
+ default: "master"
342
+ KC_API_CLIENT_NAME:
343
+ type: string
344
+ default: "stelar-api"
345
+ KC_MINIO_CLIENT_NAME:
346
+ type: string
347
+ default: "minio"
348
+ KC_CKAN_CLIENT_NAME:
349
+ type: string
350
+ default: "ckan"
351
+ KC_HOSTNAME_BACKCHANNEL_DYNAMIC:
352
+ type: string
353
+ default: "true"
354
+ - name: minio
355
+ attributes:
356
+ API_SUBDOMAIN:
357
+ type: string
358
+ API_DOMAIN:
359
+ type: string
360
+ CONSOLE_DOMAIN:
361
+ type: string
362
+ S3_CONSOLE_URL:
363
+ type: string
364
+ INSECURE_MC_CLIENT:
365
+ type: string
366
+ MINIO_ROOT_PASSWORD:
367
+ type: string
368
+ CONSOLE_PORT:
369
+ type: integer
370
+ default: 9001
371
+ API_PORT:
372
+ type: integer
373
+ default: 9000
374
+ IMAGE:
375
+ type: string
376
+ default: "quay.io/minio/minio:RELEASE.2025-04-22T22-12-26Z-cpuv1"
377
+ MINIO_ROOT_USER:
378
+ type: string
379
+ default: "root"
380
+ MINIO_ROOT_PASSWORD_SECRET_NAME:
381
+ type: string
382
+ default: "minioroot-secret"
383
+ MINIO_BROWSER_REDIRECT:
384
+ type: string
385
+ default: "true"
386
+ subfeatures:
387
+ - group_name: volume
388
+ rel: alternative
389
+ members:
390
+ - name: hostPath
391
+ - name: pvc
392
+ - name: ontop
393
+ attributes:
394
+ PORT:
395
+ type: integer
396
+ default: 8080
397
+ IMAGE:
398
+ type: string
399
+ default: "petroud/stelar-tuc:ontop"
400
+ - name: quay
401
+ attributes:
402
+ SUBDOMAIN:
403
+ type: string
404
+ PORT:
405
+ type: integer
406
+ default: 8080
407
+ IMAGE:
408
+ type: string
409
+ default: "petroud/stelar-tuc:registry"
410
+ INIT_IMAGE:
411
+ type: string
412
+ default: "petroud/stelar-tuc:registry-init"
413
+ QUAY_PULLERS_ROLE:
414
+ type: string
415
+ default: "pullers"
416
+ QUAY_PUSHERS_ROLE:
417
+ type: string
418
+ default: "pushers"
419
+ KC_ROLES_CLAIM:
420
+ type: string
421
+ default: "groups"
422
+ MINIO_BUCKET:
423
+ type: string
424
+ default: "registry"
425
+
426
+ # Optional components may or may not be included, depending
427
+ # on the needs of the deployment.
428
+ - group_name: optional_components
429
+ rel: optional
430
+ members:
431
+ - name: llm_search
432
+ attributes:
433
+ GROQ_API_URL:
434
+ type: string
435
+ GROQ_MODEL:
436
+ type: string
437
+ GROQ_API_KEY_SECRET_NAME:
438
+ type: string
439
+ GROQ_API_KEY:
440
+ type: string
441
+ PORT:
442
+ type: integer
443
+ default: 8000
444
+ IMAGE:
445
+ type: string
446
+ default: "petroud/semantic-dataset-search:latest"
447
+ INTERNAL_URL:
448
+ type: string
449
+ default: "http://llmsearch:8000"
450
+ LLM_OPTION:
451
+ type: string
452
+ default: "groq"
453
+ CHROMA_DIR:
454
+ type: string
455
+ default: "/app/chroma"
456
+ - name: sde
457
+ subfeatures:
458
+ - group_name: components
459
+ rel: mandatory
460
+ members:
461
+ - name: kafka
462
+ attributes:
463
+ INTERNAL_PORT:
464
+ type: integer
465
+ default: 9092
466
+ KAFKA_BROKER_1_URL:
467
+ type: string
468
+ default: "kafka-cluster:19092"
469
+ KAFKA_BROKER_2_URL:
470
+ type: string
471
+ default: "kafka-cluster:29092"
472
+ KAFKA_LISTENER_SECURITY_PROTOCOL_MAP:
473
+ type: string
474
+ default: "INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT"
475
+ KAFKA_INTER_BROKER_LISTENER_NAME:
476
+ type: string
477
+ default: "INTERNAL"
478
+ KAFKA_MIN_INSYNC_REPLICAS:
479
+ type: string
480
+ default: "1"
481
+ KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR:
482
+ type: string
483
+ default: "2"
484
+ - name: kafbat
485
+ attributes:
486
+ PORT:
487
+ type: integer
488
+ default: 8080
489
+ AUTH_TYPE:
490
+ type: string
491
+ default: "OAUTH2"
492
+ AUTH_OAUTH2_CLIENT_KEYCLOAK_SCOPE:
493
+ type: string
494
+ default: "openid"
495
+ AUTH_OAUTH2_CLIENT_KEYCLOAK_USER_NAME_ATTRIBUTE:
496
+ type: string
497
+ default: "preferred_username"
498
+ AUTH_OAUTH2_CLIENT_KEYCLOAK_CLIENT_NAME:
499
+ type: string
500
+ default: "STELAR SSO"
501
+ AUTH_OAUTH2_CLIENT_KEYCLOAK_PROVIDER:
502
+ type: string
503
+ default: "keycloak"
504
+ AUTH_OAUTH2_CLIENT_KEYCLOAK_CUSTOM_PARAMS_TYPE:
505
+ type: string
506
+ default: "oauth"
507
+ KAFKA_CLUSTERS_0_NAME:
508
+ type: string
509
+ default: "STELAR SDE Kafka Cluster"
510
+ - name: zookeeper
511
+ attributes:
512
+ PORT:
513
+ type: integer
514
+ default: 2181
515
+ ZOOKEEPER_TICK_TIME:
516
+ type: string
517
+ default: "2000"
518
+ - name: flink
519
+ attributes:
520
+ JOB_MANAGER_RPC_ADDRESS:
521
+ type: string
522
+ default: "localhost"
523
+ JOB_MANAGER_REST_PORT:
524
+ type: string
525
+ default: "8081"
526
+ - name: sdemanager
527
+ attributes:
528
+ PORT:
529
+ type: integer
530
+ default: 8080
531
+ IMAGE:
532
+ type: string
533
+ default: "petroud/sde-manager:latest"
534
+ CONTEXT_PATH:
535
+ type: string
536
+ default: "sde"
537
+ - name: airflow
538
+ attributes:
539
+ AIRFLOW__CODE_EDITOR__ENABLED:
540
+ type: string
541
+ default: "true"
542
+ AIRFLOW__CODE_EDITOR__GIT_ENABLED:
543
+ type: string
544
+ default: "false"
545
+ AIRFLOW__CODE_EDITOR__GIT_CMD:
546
+ type: string
547
+ default: "/usr/bin/git"
548
+ AIRFLOW__CODE_EDITOR__GIT_DEFAULT_ARGS:
549
+ type: string
550
+ default: "-c color.ui=true"
551
+ AIRFLOW__CODE_EDITOR__GIT_INIT_REPO:
552
+ type: string
553
+ default: "false"
554
+ AIRFLOW__CODE_EDITOR__ROOT_DIRECTORY:
555
+ type: string
556
+ default: "/opt/airflow/dags"
557
+ AIRFLOW__CODE_EDITOR__LINE_LENGTH:
558
+ type: string
559
+ default: "88"
560
+ AIRFLOW__CODE_EDITOR__STRING_NORMALIZATION:
561
+ type: string
562
+ default: "false"
563
+ AIRFLOW__CODE_EDITOR__MOUNT:
564
+ type: string
565
+ default: "name=dags,path=/opt/airflow/dags"
566
+ AIRFLOW__CODE_EDITOR__MOUNT1:
567
+ type: string
568
+ default: "name=logs,path=/opt/airflow/logs"
569
+ - name: previewer
570
+ attributes:
571
+ PORT:
572
+ type: integer
573
+ default: 8080
574
+ IMAGE:
575
+ type: string
576
+ default: "petroud/stelar-previewer:latest"
577
+ CONTEXT_PATH:
578
+ type: string
579
+ default: "previewer"
580
+ - name: visualizer
581
+ attributes:
582
+ PORT:
583
+ type: integer
584
+ default: 8080
585
+ IMAGE:
586
+ type: string
587
+ default: "petroud/profvisualizer:latest"
588
+ CONTEXT_PATH:
589
+ type: string
590
+ default: "visualizer"
591
+
592
+ # This group represents mandatory features of the klms, that are
593
+ # related to kubernetes
594
+ - group_name: support
595
+ rel: mandatory
596
+ members:
597
+ - name: ingress
598
+ subfeatures:
599
+ - group_name: ingress_controller
600
+ rel: alternative
601
+ members:
602
+ - name: nginx
603
+ - name: traefik
604
+ - group_name: tls
605
+ rel: alternative
606
+ members:
607
+ - name: letsencrypt
608
+ - name: self_signed
609
+
610
+ - name: network_policy
611
+
612
+ # This group represents cluster components that we may use,
613
+ # although they are not strictly speaking mandatory.
614
+ - group_name: cluster
615
+ rel: optional
616
+ members:
617
+ - name: cert_manager
618
+ - name: prometheus
619
+ - name: grafana
@@ -0,0 +1,18 @@
1
+ """STELAR operator tooling package.
2
+
3
+ `stelarctl` is the operator-facing CLI for STELAR KLMS deployments.
4
+ See ARCHITECTURE.txt for the deployment flow and design decisions,
5
+ and DOCS.md for per-module reference.
6
+ """
7
+
8
+ from pathlib import Path
9
+
10
+ from .models.feature import load_feature_model
11
+
12
+ # Directory where this module resides
13
+ _MODULE_DIR = Path(__file__).resolve().parent
14
+ # Path to JSON file (e.g., in same directory or a subfolder)
15
+ _DATA_PATH = _MODULE_DIR / "STELAR.yaml"
16
+
17
+ # Load at import time
18
+ feature_model = load_feature_model(_DATA_PATH)