kaqing 2.0.5__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.
- adam/commands/deploy/deploy_pod.py +26 -1
- adam/commands/deploy/undeploy_pod.py +5 -0
- adam/k8s_utils/config_maps.py +34 -0
- adam/k8s_utils/deployment.py +10 -4
- adam/k8s_utils/pods.py +13 -3
- adam/k8s_utils/volumes.py +9 -0
- adam/version.py +1 -1
- {kaqing-2.0.5.dist-info → kaqing-2.0.6.dist-info}/METADATA +1 -1
- {kaqing-2.0.5.dist-info → kaqing-2.0.6.dist-info}/RECORD +12 -11
- {kaqing-2.0.5.dist-info → kaqing-2.0.6.dist-info}/WHEEL +0 -0
- {kaqing-2.0.5.dist-info → kaqing-2.0.6.dist-info}/entry_points.txt +0 -0
- {kaqing-2.0.5.dist-info → kaqing-2.0.6.dist-info}/top_level.txt +0 -0
@@ -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,7 +77,9 @@ class DeployPod(Command):
|
|
54
77
|
add=["SYS_PTRACE"]
|
55
78
|
)
|
56
79
|
)
|
57
|
-
Deployments.create(state.namespace, pod_name, image, env={'NAMESPACE': state.namespace},
|
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
|
|
@@ -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)
|
adam/k8s_utils/deployment.py
CHANGED
@@ -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,
|
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,
|
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,
|
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
@@ -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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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.
|
161
|
-
kaqing-2.0.
|
162
|
-
kaqing-2.0.
|
163
|
-
kaqing-2.0.
|
164
|
-
kaqing-2.0.
|
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
|
File without changes
|
File without changes
|