kaqing 2.0.4__py3-none-any.whl → 2.0.6__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.
@@ -1,12 +1,15 @@
1
1
  from kubernetes import client
2
+ import yaml
2
3
 
3
4
  from adam.commands.command import Command
4
5
  from adam.commands.deploy.deploy_utils import deploy_frontend, gen_labels
5
6
  from adam.config import Config
7
+ from adam.k8s_utils.config_maps import ConfigMaps
6
8
  from adam.k8s_utils.deployment import Deployments
7
9
  from adam.k8s_utils.kube_context import KubeContext
8
10
  from adam.k8s_utils.pods import Pods
9
11
  from adam.k8s_utils.service_accounts import ServiceAccounts
12
+ from adam.k8s_utils.volumes import ConfigMapMount
10
13
  from adam.repl_state import ReplState, RequiredState
11
14
  from adam.utils import log2
12
15
 
@@ -47,6 +50,26 @@ class DeployPod(Command):
47
50
  labels = gen_labels(label_selector)
48
51
  ServiceAccounts.replicate(sa_name, state.namespace, sa_proto, labels=labels, add_cluster_roles=additional_cluster_roles)
49
52
 
53
+ settings_data = None
54
+ try:
55
+ with open('settings.yaml', 'r') as file:
56
+ settings_data = file.read()
57
+ except:
58
+ try:
59
+ with open('/kaqing/settings.yaml', 'r') as file:
60
+ settings_data = file.read()
61
+ except:
62
+ pass
63
+
64
+ if not settings_data:
65
+ log2('settings.yaml not found.')
66
+ return state
67
+
68
+ cm_name = Config().get('pod.cm.name', 'ops')
69
+ ConfigMaps.create(cm_name, state.namespace, {
70
+ 'settings.yaml' : settings_data
71
+ }, labels=labels)
72
+
50
73
  pod_name = Config().get('pod.name', 'ops')
51
74
  image = Config().get('pod.image', 'seanahnsf/kaqing')
52
75
  security_context = client.V1SecurityContext(
@@ -54,12 +77,13 @@ class DeployPod(Command):
54
77
  add=["SYS_PTRACE"]
55
78
  )
56
79
  )
57
- Deployments.create(state.namespace, pod_name, image, env={'NAMESPACE': state.namespace}, container_security_context=security_context, labels=labels, sa_name=sa_name)
80
+ Deployments.create(state.namespace, pod_name, image, env={'NAMESPACE': state.namespace},
81
+ container_security_context=security_context, labels=labels, sa_name=sa_name,
82
+ config_map_mount=ConfigMapMount(cm_name, 'settings.yaml', '/kaqing/settings.yaml'))
58
83
 
59
84
  uri = deploy_frontend(pod_name, state.namespace, label_selector)
60
85
 
61
- # Pods.wait_for_running(state.namespace, label_selector, msg=f'Ops pod is starting up; it will be available at {uri}.')
62
- Pods.wait_for_running(state.namespace, pod_name, msg=f'Ops pod is starting up; it will be available at {uri}.', label_selector=label_selector)
86
+ Pods.wait_for_running(state.namespace, pod_name, msg=f'In moments, ops pod will be available at {uri}.', label_selector=label_selector)
63
87
 
64
88
  return state
65
89
 
@@ -1,6 +1,7 @@
1
1
  from adam.commands.command import Command
2
2
  from adam.commands.deploy.deploy_utils import undeploy_frontend
3
3
  from adam.config import Config
4
+ from adam.k8s_utils.config_maps import ConfigMaps
4
5
  from adam.k8s_utils.deployment import Deployments
5
6
  from adam.k8s_utils.kube_context import KubeContext
6
7
  from adam.k8s_utils.pods import Pods
@@ -39,6 +40,10 @@ class UndeployPod(Command):
39
40
  ServiceAccounts.delete(state.namespace, label_selector=label_selector)
40
41
  except Exception as e:
41
42
  log2(e)
43
+ try:
44
+ ConfigMaps.delete_with_selector(state.namespace, label_selector)
45
+ except Exception as e:
46
+ log2(e)
42
47
  try:
43
48
  Deployments.delete_with_selector(state.namespace, label_selector, grace_period_seconds=0)
44
49
  except Exception as e:
@@ -0,0 +1,34 @@
1
+ from kubernetes import client
2
+
3
+ # utility collection on config maps; methods are all static
4
+ class ConfigMaps:
5
+ def create(name: str, namespace: str, data: dict[str, str], labels: dict[str, str] = {}):
6
+ v1 = client.CoreV1Api()
7
+
8
+ metadata = client.V1ObjectMeta(
9
+ name=name,
10
+ namespace=namespace,
11
+ labels=labels
12
+ )
13
+
14
+ configmap = client.V1ConfigMap(
15
+ api_version="v1",
16
+ kind="ConfigMap",
17
+ metadata=metadata,
18
+ data=data
19
+ )
20
+
21
+ try:
22
+ api_response = v1.create_namespaced_config_map(body=configmap, namespace=namespace)
23
+ # print(f"ConfigMap '{name}' created successfully in namespace '{namespace}'.")
24
+ # print(api_response)
25
+ except client.ApiException as e:
26
+ # print(f"Error creating ConfigMap: {e}")
27
+ raise e
28
+
29
+ def delete_with_selector(namespace: str, label_selector: str):
30
+ v1 = client.CoreV1Api()
31
+
32
+ ret = v1.list_namespaced_config_map(namespace=namespace, label_selector=label_selector)
33
+ for i in ret.items:
34
+ v1.delete_namespaced_config_map(name=i.metadata.name, namespace=namespace)
@@ -1,6 +1,7 @@
1
1
  from kubernetes import client
2
2
 
3
3
  from adam.k8s_utils.pods import Pods
4
+ from adam.k8s_utils.volumes import ConfigMapMount
4
5
 
5
6
  # utility collection on deployments; methods are all static
6
7
  class Deployments:
@@ -14,7 +15,8 @@ class Deployments:
14
15
  def create_deployment_spec(name: str, image: str, image_pull_secret: str,
15
16
  envs: list, container_security_context: client.V1SecurityContext,
16
17
  volume_name: str, pvc_name:str, mount_path:str,
17
- command: list[str]=None, sa_name=None, labels: dict[str, str] = {}):
18
+ command: list[str]=None, sa_name=None, labels: dict[str, str] = {},
19
+ config_map_mount: ConfigMapMount = None):
18
20
  return client.V1DeploymentSpec(
19
21
  replicas=1,
20
22
  selector=client.V1LabelSelector(match_labels=labels),
@@ -22,7 +24,7 @@ class Deployments:
22
24
  metadata=client.V1ObjectMeta(labels=labels),
23
25
  spec=Pods.create_pod_spec(name, image, image_pull_secret, envs, container_security_context,
24
26
  volume_name, pvc_name, mount_path, command=command, sa_name=sa_name,
25
- restart_policy="Always"),
27
+ restart_policy="Always", config_map_mount=config_map_mount),
26
28
  ),
27
29
  )
28
30
 
@@ -35,12 +37,16 @@ class Deployments:
35
37
  volume_name: str = None,
36
38
  pvc_name: str = None,
37
39
  mount_path: str = None,
38
- sa_name=None):
40
+ sa_name=None,
41
+ config_map_mount: ConfigMapMount = None):
39
42
  v1 = client.AppsV1Api()
40
43
  envs = []
41
44
  for k, v in env.items():
42
45
  envs.append(client.V1EnvVar(name=str(k), value=str(v)))
43
- deployment = Deployments.create_deployment_spec(deployment_name, image, secret, envs, container_security_context, volume_name, pvc_name, mount_path, command=command, sa_name=sa_name, labels=labels)
46
+ deployment = Deployments.create_deployment_spec(deployment_name, image, secret, envs,
47
+ container_security_context, volume_name, pvc_name,
48
+ mount_path, command=command, sa_name=sa_name, labels=labels,
49
+ config_map_mount=config_map_mount)
44
50
  return v1.create_namespaced_deployment(
45
51
  namespace=namespace,
46
52
  body=client.V1Deployment(spec=deployment, metadata=client.V1ObjectMeta(
adam/k8s_utils/pods.py CHANGED
@@ -8,6 +8,7 @@ from kubernetes.stream import stream
8
8
  from kubernetes.stream.ws_client import ERROR_CHANNEL
9
9
 
10
10
  from adam.config import Config
11
+ from adam.k8s_utils.volumes import ConfigMapMount
11
12
  from adam.pod_exec_result import PodExecResult
12
13
  from adam.utils import elapsed_time, log2
13
14
  from .kube_context import KubeContext
@@ -175,11 +176,15 @@ class Pods:
175
176
  def create_pod_spec(name: str, image: str, image_pull_secret: str,
176
177
  envs: list, container_security_context: client.V1SecurityContext,
177
178
  volume_name: str, pvc_name:str, mount_path:str,
178
- command: list[str]=None, sa_name=None, restart_policy="Never"):
179
+ command: list[str]=None, sa_name : str = None, config_map_mount: ConfigMapMount = None,
180
+ restart_policy="Never"):
179
181
  volume_mounts = []
180
182
  if volume_name and pvc_name and mount_path:
181
183
  volume_mounts=[client.V1VolumeMount(mount_path=mount_path, name=volume_name)]
182
184
 
185
+ if config_map_mount:
186
+ volume_mounts.append(client.V1VolumeMount(mount_path=config_map_mount.mount_path, sub_path=config_map_mount.sub_path, name=config_map_mount.name()))
187
+
183
188
  container = client.V1Container(name=name, image=image, env=envs, security_context=container_security_context, command=command,
184
189
  volume_mounts=volume_mounts)
185
190
 
@@ -191,6 +196,9 @@ class Pods:
191
196
  if not sa_name:
192
197
  security_context=client.V1PodSecurityContext(run_as_user=1001, run_as_group=1001, fs_group=1001)
193
198
 
199
+ if config_map_mount:
200
+ volumes.append(client.V1Volume(name=config_map_mount.name(), config_map=client.V1ConfigMapVolumeSource(name=config_map_mount.config_map_name)))
201
+
194
202
  return client.V1PodSpec(
195
203
  restart_policy=restart_policy,
196
204
  containers=[container],
@@ -209,12 +217,14 @@ class Pods:
209
217
  volume_name: str = None,
210
218
  pvc_name: str = None,
211
219
  mount_path: str = None,
212
- sa_name=None):
220
+ sa_name: str = None,
221
+ config_map_mount: ConfigMapMount = None):
213
222
  v1 = client.CoreV1Api()
214
223
  envs = []
215
224
  for k, v in env.items():
216
225
  envs.append(client.V1EnvVar(name=str(k), value=str(v)))
217
- pod = Pods.create_pod_spec(pod_name, image, secret, envs, container_security_context, volume_name, pvc_name, mount_path, command=command, sa_name=sa_name)
226
+ pod = Pods.create_pod_spec(pod_name, image, secret, envs, container_security_context, volume_name, pvc_name, mount_path, command=command,
227
+ sa_name=sa_name, config_map_mount=config_map_mount)
218
228
  return v1.create_namespaced_pod(
219
229
  namespace=namespace,
220
230
  body=client.V1Pod(spec=pod, metadata=client.V1ObjectMeta(
adam/k8s_utils/volumes.py CHANGED
@@ -1,6 +1,15 @@
1
1
  from kubernetes import client
2
2
  from adam.utils import log2
3
3
 
4
+ class ConfigMapMount:
5
+ def __init__(self, config_map_name: str, sub_path: str, mount_path: str):
6
+ self.config_map_name = config_map_name
7
+ self.sub_path = sub_path
8
+ self.mount_path = mount_path
9
+
10
+ def name(self) -> str:
11
+ return f"{self.config_map_name}-volume"
12
+
4
13
  # utility collection on volumes; methods are all static
5
14
  class Volumes:
6
15
  def create_pvc(name: str, storage: int, namespace: str):
adam/version.py CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding: utf-8 -*-
3
3
 
4
- __version__ = "2.0.4" #: the working version
4
+ __version__ = "2.0.6" #: the working version
5
5
  __release__ = "1.0.0" #: the release version
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: kaqing
3
- Version: 2.0.4
3
+ Version: 2.0.6
4
4
  Summary: UNKNOWN
5
5
  Home-page: UNKNOWN
6
6
  License: UNKNOWN
@@ -14,7 +14,7 @@ adam/repl_commands.py,sha256=ionPWjPhzrzm59zbhO1WsGGcLVba3bnPl6uPjvQ4C34,4093
14
14
  adam/repl_session.py,sha256=uIogcvWBh7wd8QQ-p_JgLsyJ8YJgINw5vOd6JIsd7Vo,472
15
15
  adam/repl_state.py,sha256=QarrUAwYWOz3YTemtaf2opbHLa5a3LEsyuonNwhvOhk,7131
16
16
  adam/utils.py,sha256=j7p7iruLuV11swa0z9ZLBgoJHu_nkTSVKtQe0q71gmk,7025
17
- adam/version.py,sha256=BiW2LFKUS_7rjCYeX4CyHC9B8yLWTqqUTr1MelD0vrA,138
17
+ adam/version.py,sha256=3UZfi5Flr04vagqtID10Qjwa--bkUKyTfmVPlMdbhB4,138
18
18
  adam/checks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
19
  adam/checks/check.py,sha256=Qopr3huYcMu2bzQgb99dEUYjFzkjKHRI76S6KA9b9Rk,702
20
20
  adam/checks/check_context.py,sha256=FEHkQ32jY1EDopQ2uYWqy9v7aEEX1orLpJWhopwAlh4,402
@@ -83,11 +83,11 @@ adam/commands/deploy/code_stop.py,sha256=ch7ZMgosvTHsGaIcDwQY5XYh_5HYrUjBkZFOI-d
83
83
  adam/commands/deploy/code_utils.py,sha256=5Gp4U8HzKpPkbkHDU7whlvGOK-wWaAbCIIGzVoN9hio,3296
84
84
  adam/commands/deploy/deploy.py,sha256=_y_pSBHIEVMTgjDqEZwvmGfLQBirHBH4sCnsl0CKOM8,1792
85
85
  adam/commands/deploy/deploy_frontend.py,sha256=TSvMTy6uUfOBIV96hKFy-M1hNCE6OeRW9M_dj1ZJsv0,1700
86
- adam/commands/deploy/deploy_pod.py,sha256=IaDmrxpYw_YqkK599Vq4N7_4tINq5ihBlccVPEFcpCk,2773
86
+ adam/commands/deploy/deploy_pod.py,sha256=vtd0SUfrT7AFLftjbX7zn3_wTwJehUw7uVd8zEf8OHQ,3494
87
87
  adam/commands/deploy/deploy_utils.py,sha256=-YB-XUwr8zVsf9HKYWx_TP-dB2WgOpEmUGyYNcoie0U,1046
88
88
  adam/commands/deploy/undeploy.py,sha256=CNgbB00TR1YRgX0xGgdGAT8YNPlcLssMsRX-pSby-Ao,1842
89
89
  adam/commands/deploy/undeploy_frontend.py,sha256=mbHlWb5UHUVpR1trfflCS_TDip7eAqxqoZ47RzRZcno,1257
90
- adam/commands/deploy/undeploy_pod.py,sha256=n3AQ9EQ1TUPTzUVwWeyRLiK4dlnF_Zpq3nPEzrjSwjM,1962
90
+ adam/commands/deploy/undeploy_pod.py,sha256=l4QWhY334Gv6F8It-vCvd834n3q_9dzdmgHl2NLKOIw,2153
91
91
  adam/commands/medusa/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
92
92
  adam/commands/medusa/medusa.py,sha256=Y_yyOZRb6u45wfTVBRp3kuklyYDTSlaAJQdAiymP_8M,2185
93
93
  adam/commands/medusa/medusa_backup.py,sha256=j4DTVWFT-4rzs4gG_pBvjE-JuPsVCJIsnyQjIzJ4EbA,1801
@@ -136,17 +136,18 @@ adam/commands/show/show_storage.py,sha256=LUTkH_qnc1d9s4jKsps8jhB4rkUuN7ifMlHSwF
136
136
  adam/k8s_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
137
137
  adam/k8s_utils/cassandra_clusters.py,sha256=9gUn31SsyW32asSFM8cKdkDSw5LYqPY2Iv0r4fDg_fU,2017
138
138
  adam/k8s_utils/cassandra_nodes.py,sha256=jQlaxIQKnavvsXH7lMM8WPriusp7KO698UygytIA8Xw,1134
139
+ adam/k8s_utils/config_maps.py,sha256=vc9A-2D1-1mindCMFL1wuysDOXb0RCl4BdjC6B6usXI,1194
139
140
  adam/k8s_utils/custom_resources.py,sha256=cIeaZRQET2DelTGU2f5QsMckh7TddPpWZDFeNK3txeQ,7647
140
- adam/k8s_utils/deployment.py,sha256=Jw1To66E-DGY8dPbphWYakevNndKvv5nXtSEx23aqp0,2505
141
+ adam/k8s_utils/deployment.py,sha256=3oZPfPgQfqtAQaxEFL4daUfRSieRAhysmuaWMzUYgXk,2921
141
142
  adam/k8s_utils/ingresses.py,sha256=ul3Z6fDGc_Cxcn-ExP0vXhZatoShCUZFtpwtCY4Qx7o,3460
142
143
  adam/k8s_utils/jobs.py,sha256=P7j3JiZ33TRnkjkPLLrGlypAPxK1BZQHvVpF8s7eHA8,2604
143
144
  adam/k8s_utils/kube_context.py,sha256=nocEyVNjXWG-N-GNnEYHDvnot7H5LQUFmpZIwIyE7As,3310
144
- adam/k8s_utils/pods.py,sha256=zSCqW-13kWt11yT7iYwPCFxPnyrJP5F_avW6BFvikfk,9264
145
+ adam/k8s_utils/pods.py,sha256=yfiWeqERQGVkhWbcDA5w4jzjiwcwczkQ-z_8ogfbB8Y,9897
145
146
  adam/k8s_utils/secrets.py,sha256=pYaVKXTpx3-QgFtBjznWFq0N6ZcBdxnx21FRe5nBCCo,2305
146
147
  adam/k8s_utils/service_accounts.py,sha256=v2oQSqCrNvt2uRnKlNwR3fjtpUG7oF5nqgzEB7NnT-U,6349
147
148
  adam/k8s_utils/services.py,sha256=EOJJGACVbbRvu5T3rMKqIJqgYic1_MSJ17EA0TJ6UOk,3156
148
149
  adam/k8s_utils/statefulsets.py,sha256=PZDEhy34aXxLkbW1-RsOC0E4D0w0pHyoIQGHvcAzSAk,4606
149
- adam/k8s_utils/volumes.py,sha256=MzYeH80NqKlhdadx6d0tW-j8vTOCUYWx7wRURIZWKZ8,843
150
+ adam/k8s_utils/volumes.py,sha256=RIBmlOSWM3V3QVXLCFT0owVOyh4rGG1ETp521a-6ndo,1137
150
151
  adam/sso/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
151
152
  adam/sso/authenticator.py,sha256=BCm16L9zf5aLU47-sTCnudn2zLPwd8M2wwRminJfsqw,615
152
153
  adam/sso/authn_ad.py,sha256=BfKoltUG3jP0vNe-MImhnjkufBo79aH1HGZcQtHFH_Q,5912
@@ -157,8 +158,8 @@ adam/sso/idp.py,sha256=fvcwUw_URTgsO6ySaqTIw0zQT2qRO1IPSGhf6rPtybo,5804
157
158
  adam/sso/idp_login.py,sha256=QAtCUeDTVWliJy40RK_oac8Vgybr13xH8wzeBoxPaa8,1754
158
159
  adam/sso/idp_session.py,sha256=9BUHNRf70u4rVKrVY1HKPOEmOviXvkjam8WJxmXSKIM,1735
159
160
  adam/sso/sso_config.py,sha256=5N8WZgIJQBtHUy585XLRWKjpU87_v6QluyNK9E27D5s,2459
160
- kaqing-2.0.4.dist-info/METADATA,sha256=5NXIE17PZIo0MTf-XEhG_IgpHwRmJfUepyghxD5mvK4,131
161
- kaqing-2.0.4.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
162
- kaqing-2.0.4.dist-info/entry_points.txt,sha256=SkzhuQJUWsXOzHeZ5TgQ2c3_g53UGK23zzJU_JTZOZI,39
163
- kaqing-2.0.4.dist-info/top_level.txt,sha256=8_2PZkwBb-xDcnc8a2rAbQeJhXKXskc7zTP7pSPa1fw,5
164
- kaqing-2.0.4.dist-info/RECORD,,
161
+ kaqing-2.0.6.dist-info/METADATA,sha256=8ALpixpMJyqS5oZzJX0QnxEnmHe1BBfEgsjaIOH4C8c,131
162
+ kaqing-2.0.6.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
163
+ kaqing-2.0.6.dist-info/entry_points.txt,sha256=SkzhuQJUWsXOzHeZ5TgQ2c3_g53UGK23zzJU_JTZOZI,39
164
+ kaqing-2.0.6.dist-info/top_level.txt,sha256=8_2PZkwBb-xDcnc8a2rAbQeJhXKXskc7zTP7pSPa1fw,5
165
+ kaqing-2.0.6.dist-info/RECORD,,
File without changes