forked from kubernetes-client/python
- Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathexec.py
More file actions
Latest commit
97 lines (89 loc) · 2.69 KB
/
Copy pathexec.py
File metadata and controls
97 lines (89 loc) · 2.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
importtime
fromkubernetesimportconfig
fromkubernetes.clientimportConfiguration
fromkubernetes.client.apisimportcore_v1_api
fromkubernetes.client.restimportApiException
fromkubernetes.streamimportstream
config.load_kube_config()
c=Configuration()
c.assert_hostname=False
Configuration.set_default(c)
api=core_v1_api.CoreV1Api()
name='busybox-test'
resp=None
try:
resp=api.read_namespaced_pod(name=name,
namespace='default')
exceptApiExceptionase:
ife.status!=404:
print("Unknown error: %s"%e)
exit(1)
ifnotresp:
print("Pod %s does not exist. Creating it..."%name)
pod_manifest= {
'apiVersion': 'v1',
'kind': 'Pod',
'metadata': {
'name': name
},
'spec': {
'containers': [{
'image': 'busybox',
'name': 'sleep',
"args": [
"/bin/sh",
"-c",
"while true;do date;sleep 5; done"
]
}]
}
}
resp=api.create_namespaced_pod(body=pod_manifest,
namespace='default')
whileTrue:
resp=api.read_namespaced_pod(name=name,
namespace='default')
ifresp.status.phase!='Pending':
break
time.sleep(1)
print("Done.")
# calling exec and wait for response.
exec_command= [
'/bin/sh',
'-c',
'echo This message goes to stderr >&2; echo This message goes to stdout']
resp=stream(api.connect_get_namespaced_pod_exec, name, 'default',
command=exec_command,
stderr=True, stdin=False,
stdout=True, tty=False)
print("Response: "+resp)
# Calling exec interactively.
exec_command= ['/bin/sh']
resp=stream(api.connect_get_namespaced_pod_exec, name, 'default',
command=exec_command,
stderr=True, stdin=True,
stdout=True, tty=False,
_preload_content=False)
commands= [
"echo test1",
"echo \"This message goes to stderr\" >&2",
]
whileresp.is_open():
resp.update(timeout=1)
ifresp.peek_stdout():
print("STDOUT: %s"%resp.read_stdout())
ifresp.peek_stderr():
print("STDERR: %s"%resp.read_stderr())
ifcommands:
c=commands.pop(0)
print("Running command... %s\n"%c)
resp.write_stdin(c+"\n")
else:
break
resp.write_stdin("date\n")
sdate=resp.readline_stdout(timeout=3)
print("Server date command returns: %s"%sdate)
resp.write_stdin("whoami\n")
user=resp.readline_stdout(timeout=3)
print("Server user is: %s"%user)
resp.close()