8000 Merge pull request #304 from djkonro/create_configmap · kubernetes-client/python@e2693c4 · GitHub
[go: up one dir, main page]

Skip to content

Commit e2693c4

Browse files
authored
Merge pull request #304 from djkonro/create_configmap
Add notebook on how to create a ConfigMap and use its data in Pods
2 parents cbe7ed5 + 9f1f54e commit e2693c4

File tree

1 file changed

+314
-0
lines changed

1 file changed

+314
-0
lines changed
Lines changed: 314 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,314 @@
1+
{
2+
"cells": [
3+
{
4+
"cell_type": "markdown",
5+
"metadata": {
6+
"deletable": true,
7+
"editable": true
8+
},
9+
"source": [
10+
"How to create a ConfigMap and use its data in Pods\n",
11+
"===========================\n",
12+
"\n",
13+
"[ConfigMaps](https://kubernetes.io/docs/tasks/configure-pod-container/configmap/) allow you to decouple configuration artifacts from image content to keep containerized applications portable. In this notebook we would learn how to create a ConfigMap and also how to use its data in Pods as seen in https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/"
14+
]
15+
},
16+
{
17+
"cell_type": "code",
18+
"execution_count": null,
19+
"metadata": {
20+
"collapsed": false,
21+
"deletable": true,
22+
"editable": true
23+
},
24+
"outputs": [],
25+
"source": [
26+
"from kubernetes import client, config\n",
27+
"from kubernetes.client.rest import ApiException"
28+
]
29+
},
30+
{
31+
"cell_type": "markdown",
32+
"metadata": {},
33+
"source": [
34+
"### Load config from default location"
35+
]
36+
},
37+
{
38+
"cell_type": "code",
39+
"execution_count": null,
40+
"metadata": {
41+
"collapsed": true,
42+
"deletable": true,
43+
"editable": true
44+
},
45+
"outputs": [],
46+
"source": [
47+
"config.load_kube_config()"
48+
]
49+
},
50+
{
51+
"cell_type": "markdown",
52+
"metadata": {},
53+
"source": [
54+
"### Create API endpoint instance and API resource instances"
55+
]
56+
},
57+
{
58+
"cell_type": "code",
59+
"execution_count": null,
60+
"metadata": {
61+
"collapsed": true,
62+
"deletable": true,
63+
"editable": true
64+
},
65+
"outputs": [],
66+
"source": [
67+
"api_instance = client.CoreV1Api()\n",
68+
"cmap = client.V1ConfigMap()"
69+
]
70+
},
71+
{
72+
"cell_type": "markdown",
73+
"metadata": {},
74+
"source": [
75+
"### Create key value pair data for the ConfigMap"
76+
]
77+
},
78+
{
79+
"cell_type": "code",
80+
"execution_count": null,
81+
"metadata": {
82+
"collapsed": true,
83+
"deletable": true,
84+
"editable": true
85+
},
86+
"outputs": [],
87+
"source": [
88+
"cmap.metadata = client.V1ObjectMeta(name=\"special-config\")\n",
89+
"cmap.data = {}\n",
90+
"cmap.data[\"special.how\"] = \"very\"\n",
91+
"cmap.data[\"special.type\"] = \"charm\""
92+
]
93+
},
94+
{
95+
"cell_type": "markdown",
96+
"metadata": {},
97+
"source": [
98+
"### Create ConfigMap"
99+
]
100+
},
101+
{
102+
"cell_type": "code",
103+
"execution_count": null,
104+
"metadata": {
105+
"collapsed": false,
106+
"deletable": true,
107+
"editable": true
108+
},
109+
"outputs": [],
110+
"source": [
111+
"api_instance.create_namespaced_config_map(namespace=\"default\", body=cmap)"
112+
]
113+
},
114+
{
115+
"cell_type": "markdown",
116+
"metadata": {},
117+
"source": [
118+
"### Create API endpoint instance and API resource instances for test Pod"
119+
]
120+
},
121+
{
122+
"cell_type": "code",
123+
"execution_count": null,
124+
"metadata": {
125+
"collapsed": true,
126+
"deletable": true,
127+
"editable": true
128+
},
129+
"outputs": [],
130+
"source": [
131+
"pod = client.V1Pod()\n",
132+
"spec = client.V1PodSpec()\n",
133+
"pod.metadata = client.V1ObjectMeta(name=\"dapi-test-pod\")"
134+
]
135+
},
136+
{
137+
"cell_type": "markdown",
138+
"metadata": {},
139+
"source": [
140+
"### Initialize test Pod container"
141+
]
142+
},
143+
{
144+
"cell_type": "code",
145+
"execution_count": null,
146+
"metadata": {
147+
"collapsed": true,
148+
"deletable": true,
149+
"editable": true
150+
},
151+
"outputs": [],
152+
"source": [
153+
"container = client.V1Container()\n",
154+
"container.name = \"test-container\"\n",
155+
"container.image = \"gcr.io/google_containers/busybox\"\n",
156+
"container.command = [\"/bin/sh\", \"-c\", \"env\"]"
157+
]
158+
},
159+
{
160+
"cell_type": "markdown",
161+
"metadata": {},
162+
"source": [
163+
"### Define Pod environment variables with data from ConfigMaps"
164+
]
165+
},
166+
{
167+
"cell_type": "code",
168+
"execution_count": null,
169+
"metadata": {
170+
"collapsed": true,
171+
"deletable": true,
172+
"editable": true
173+
},
174+
"outputs": [],
175+
"source": [
176+
"container.env = [client.V1EnvVar(name=\"SPECIAL_LEVEL_KEY\"), client.V1EnvVar(name=\"SPECIAL_TYPE_KEY\")]\n",
177+
"container.env[0].value_from = client.V1EnvVarSource()\n",
178+
"container.env[0].value_from.config_map_key_ref = client.V1ConfigMapKeySelector(name=\"special-config\", key=\"special.how\")\n",
179+
"\n",
180+
"container.env[1].value_from = client.V1EnvVarSource()\n",
181+
"container.env[1].value_from.config_map_key_ref = client.V1ConfigMapKeySelector(name=\"special-config\", key=\"special.type\")\n",
182+
"\n",
183+
"spec.restart_policy = \"Never\"\n",
184+
"spec.containers = [container]\n",
185+
"pod.spec = spec"
186+
]
187+
},
188+
{
189+
"cell_type": "markdown",
190+
"metadata": {},
191+
"source": [
192+
"### Create Pod"
193+
]
194+
},
195+
{
196+
"cell_type": "code",
197+
"execution_count": null,
198+
"metadata": {
199+
"collapsed": false,
200+
"deletable": true,
201+
"editable": true
202+
},
203+
"outputs": [],
204+
"source": [
205+
"api_instance.create_namespaced_pod(namespace=\"default\",body=pod)"
206+
]
207+
},
208+
{
209+
"cell_type": "markdown",
210+
"metadata": {},
211+
"source": [
212+
"### View ConfigMap data from Pod log"
213+
]
214+
},
215+
{
216+
"cell_type": "code",
217+
"execution_count": null,
218+
"metadata": {
219+
"collapsed": false,
220+
"deletable": true,
221+
"editable": true,
222+
"scrolled": true
223+
},
224+
"outputs": [],
225+
"source": [
226+
"log = \"\"\n",
227+
"try: \n",
228+
" log = api_instance.read_namespaced_pod_log(name=\"dapi-test-pod\", namespace=\"default\")\n",
229+
"except ApiException as e:\n",
230+
" if str(e).find(\"ContainerCreating\") != -1:\n",
231+
" print(\"Creating Pod container.\\nRe-run current cell.\")\n",
232+
" else:\n",
233+
" print(\"Exception when calling CoreV1Api->read_namespaced_pod_log: %s\\n\" % e)\n",
234+
"\n",
235+
"for line in log.split(\"\\n\"):\n",
236+
" if line.startswith(\"SPECIAL\"):\n",
237+
" print(line)"
238+
]
239+
},
240+
{
241+
"cell_type": "markdown",
242+
"metadata": {},
243+
"source": [
244+
"### Delete ConfigMap"
245+
]
246+
},
247+
{
248+
"cell_type": "code",
249+
"execution_count": null,
250+
"metadata": {
251+
"collapsed": false,
252+
"deletable": true,
253+
"editable": true
254+
},
255+
"outputs": [],
256+
"source": [
257+
"api_instance.delete_namespaced_config_map(name=\"special-config\", namespace=\"default\", body=cmap)"
258+
]
259+
},
260+
{
261+
"cell_type": "markdown",
262+
"metadata": {},
263+
"source": [
264+
"### Delete Pod"
265+
]
266+
},
267+
{
268+
"cell_type": "code",
269+
"execution_count": null,
270+
"metadata": {
271+
"collapsed": false,
272+
"deletable": true,
273+
"editable": true,
274+
"scrolled": true
275+
},
276+
"outputs": [],
277+
"source": [
278+
"api_instance.delete_namespaced_pod(name=\"dapi-test-pod\", namespace=\"default\", body=client.V1DeleteOptions())"
279+
]
280+
},
281+
{
282+
"cell_type": "code",
283+
"execution_count": null,
284+
"metadata": {
285+
"collapsed": true,
286+
"deletable": true,
287+
"editable": true
288+
},
289+
"outputs": [],
290+
"source": []
291+
}
292+
],
293+
"metadata": {
294+
"kernelspec": {
295+
"display_name": "Python 2",
296+
"language": "python",
297+
"name": "python2"
298+
},
299+
"language_info": {
300+
"codemirror_mode": {
301+
"name": "ipython",
302+
"version": 2
303+
},
304+
"file_extension": ".py",
305+
"mimetype": "text/x-python",
306+
"name": "python",
307+
"nbconvert_exporter": "python",
308+
"pygments_lexer": "ipython2",
309+
"version": "2.7.6"
310+
}
311+
},
312+
"nbformat": 4,
313+
"nbformat_minor": 2
314+
}

0 commit comments

Comments
 (0)
0