2525import unittest
2626import urllib3
2727import uuid
28+ import yaml
2829
2930from kubernetes .client import api_client
3031from kubernetes .client .apis import core_v1_api
32+ from kubernetes .client .apis import extensions_v1beta1_api
3133
3234
3335def _is_k8s_running ():
@@ -39,6 +41,26 @@ def _is_k8s_running():
3941
4042
4143class TestClient (unittest .TestCase ):
44+ @unittest .skipUnless (
45+ _is_k8s_running (), "Kubernetes is not available" )
46+ def test_read_namespaces (self ):
47+ client = api_client .ApiClient ('http://127.0.0.1:8080/' )
48+ api = core_v1_api .CoreV1Api (client )
49+
50+ expected_namespaces = ('default' , 'kube-system' )
51+ for ns in expected_namespaces :
52+ api .read_namespace (name = ns )
53+
54+ @unittest .skipUnless (
55+ _is_k8s_running (), "Kubernetes is not available" )
56+ def test_read_services (self ):
57+ client = api_client .ApiClient ('http://127.0.0.1:8080/' )
58+ api = core_v1_api .CoreV1Api (client )
59+
60+ expected_services = ('kubernetes' ,)
61+ for service in expected_services :
62+ api .read_namespaced_service (service , 'default' )
63+
4264 @unittest .skipUnless (
4365 _is_k8s_running (), "Kubernetes is not available" )
4466 def test_list_endpoints (self ):
@@ -48,14 +70,42 @@ def test_list_endpoints(self):
4870 endpoints = api .list_endpoints_for_all_namespaces ()
4971 self .assertTrue (len (endpoints .items ) > 0 )
5072
73+ @unittest .skipUnless (
74+ _is_k8s_running (), "Kubernetes is not available" )
75+ def test_create_deployment (self ):
76+ client = api_client .ApiClient ('http://127.0.0.1:8080/' )
77+ api = extensions_v1beta1_api .ExtensionsV1beta1Api (client )
78+ name = 'nginx-deployment-' + str (uuid .uuid4 ())
79+ deployment = '''apiVersion: extensions/v1beta1
80+ kind: Deployment
81+ metadata:
82+ name: %s
83+ spec:
84+ replicas: 3
85+ template:
86+ metadata:
87+ labels:
88+ app: nginx
89+ spec:
90+ containers:
91+ - name: nginx
92+ image: nginx:1.7.9
93+ ports:
94+ - containerPort: 80
95+ '''
96+ resp = api .create_namespaced_deployment (
97+ body = yaml .load (deployment % name ),
98+ namespace = "default" )
99+ resp = api .read_namespaced_deployment (name , 'default' )
100+ self .assertIsNotNone (resp )
101+
51102 @unittest .skipUnless (
52103 _is_k8s_running (), "Kubernetes is not available" )
53104 def test_pod_apis (self ):
54105 client = api_client .ApiClient ('http://127.0.0.1:8080/' )
55106 api = core_v1_api .CoreV1Api (client )
56107
57108 name = 'test-' + str (uuid .uuid4 ())
58-
59109 pod_manifest = {'apiVersion' : 'v1' ,
60110 'kind' : 'Pod' ,
61111 'metadata' : {'color' : 'blue' , 'name' : name },
@@ -84,38 +134,39 @@ def test_service_apis(self):
84134 client = api_client .ApiClient ('http://127.0.0.1:8080/' )
85135 api = core_v1_api .CoreV1Api (client )
86136
137+ name = 'frontend-' + str (uuid .uuid4 ())
87138 service_manifest = {'apiVersion' : 'v1' ,
88139 'kind' : 'Service' ,
89- 'metadata' : {'labels' : {'name' : 'frontend' },
90- 'name' : 'frontend' ,
140+ 'metadata' : {'labels' : {'name' : name },
141+ 'name' : name ,
91142 'resourceversion' : 'v1' },
92143 'spec' : {'ports' : [{'name' : 'port' ,
93144 'port' : 80 ,
94145 'protocol' : 'TCP' ,
95146 'targetPort' : 80 }],
96- 'selector' : {'name' : 'frontend' }}}
147+ 'selector' : {'name' : name }}}
97148
98149 resp = api .create_namespaced_service (body = service_manifest ,
99150 namespace = 'default' )
100- self .assertEqual ('frontend' , resp .metadata .name )
151+ self .assertEqual (name , resp .metadata .name )
101152 self .assertTrue (resp .status )
102153
103- resp = api .read_namespaced_service (name = 'frontend' ,
154+ resp = api .read_namespaced_service (name = name ,
104155 namespace = 'default' )
105- self .assertEqual ('frontend' , resp .metadata .name )
156+ self .assertEqual (name , resp .metadata .name )
106157 self .assertTrue (resp .status )
107158
108159 service_manifest ['spec' ]['ports' ] = [{'name' : 'new' ,
109160 'port' : 8080 ,
110161 'protocol' : 'TCP' ,
111162 'targetPort' : 8080 }]
112163 resp = api .patch_namespaced_service (body = service_manifest ,
113- name = 'frontend' ,
164+ name = name ,
114165 namespace = 'default' )
115166 self .assertEqual (2 , len (resp .spec .ports ))
116167 self .assertTrue (resp .status )
117168
118- resp = api .delete_namespaced_service (name = 'frontend' ,
169+ resp = api .delete_namespaced_service (name = name ,
119170 namespace = 'default' )
120171
121172 @unittest .skipUnless (
@@ -124,15 +175,16 @@ def test_replication_controller_apis(self):
124175 client = api_client .ApiClient ('http://127.0.0.1:8080/' )
125176 api = core_v1_api .CoreV1Api (client )
126177
178+ name = 'frontend-' + str (uuid .uuid4 ())
127179 rc_manifest = {
128180 'apiVersion' : 'v1' ,
129181 'kind' : 'ReplicationController' ,
130- 'metadata' : {'labels' : {'name' : 'frontend' },
131- 'name' : 'frontend' },
182+ 'metadata' : {'labels' : {'name' : name },
183+ 'name' : name },
132184 'spec' : {'replicas' : 2 ,
133- 'selector' : {'name' : 'frontend' },
185+ 'selector' : {'name' : name },
134186 'template' : {'metadata' : {
135- 'labels' : {'name' : 'frontend' }},
187+ 'labels' : {'name' : name }},
136188 'spec' : {'containers' : [{
137189 'image' : 'nginx' ,
138190 'name' : 'nginx' ,
@@ -141,29 +193,29 @@ def test_replication_controller_apis(self):
141193
142194 resp = api .create_namespaced_replication_controller (
143195 body = rc_manifest , namespace = 'default' )
144- self .assertEqual ('frontend' , resp .metadata .name )
196+ self .assertEqual (name , resp .metadata .name )
145197 self .assertEqual (2 , resp .spec .replicas )
146198
147199 resp = api .read_namespaced_replication_controller (
148- name = 'frontend' , namespace = 'default' )
149- self .assertEqual ('frontend' , resp .metadata .name )
200+ name = name , namespace = 'default' )
201+ self .assertEqual (name , resp .metadata .name )
150202 self .assertEqual (2 , resp .spec .replicas )
151203
152204 resp = api .delete_namespaced_replication_controller (
153- name = 'frontend' , body = {}, namespace = 'default' )
154-
205+ name = name , body = {}, namespace = 'default' )
155206
156207 @unittest .skipUnless (
157208 _is_k8s_running (), "Kubernetes is not available" )
158209 def test_configmap_apis (self ):
159210 client = api_client .ApiClient ('http://127.0.0.1:8080/' )
160211 api = core_v1_api .CoreV1Api (client )
161212
213+ name = 'test-configmap-' + str (uuid .uuid4 ())
162214 test_configmap = {
163215 "kind" : "ConfigMap" ,
164216 "apiVersion" : "v1" ,
165217 "metadata" : {
166- "name" : "test-configmap" ,
218+ "name" : name ,
167219 },
168220 "data" : {
169221 "config.json" : "{\" command\" :\" /usr/bin/mysqld_safe\" }" ,
@@ -174,18 +226,18 @@ def test_configmap_apis(self):
174226 resp = api .create_namespaced_config_map (
175227 body = test_configmap , namespace = 'default'
176228 )
177- self .assertEqual ('test-configmap' , resp .metadata .name )
229+ self .assertEqual (name , resp .metadata .name )
178230
179231 resp = api .read_namespaced_config_map (
180- name = 'test-configmap' , namespace = 'default' )
181- self .assertEqual ('test-configmap' , resp .metadata .name )
232+ name = name , namespace = 'default' )
233+ self .assertEqual (name , resp .metadata .name )
182234
183235 test_configmap ['data' ]['config.json' ] = "{}"
184236 resp = api .patch_namespaced_config_map (
185- name = 'test-configmap' , namespace = 'default' , body = test_configmap )
237+ name = name , namespace = 'default' , body = test_configmap )
186238
187239 resp = api .delete_namespaced_config_map (
188- name = 'test-configmap' , body = {}, namespace = 'default' )
240+ name = name , body = {}, namespace = 'default' )
189241
190242 resp = api .list_namespaced_config_map ('kube-system' , pretty = True )
191243 self .assertEqual ([], resp .items )
@@ -199,4 +251,38 @@ def test_node_apis(self):
199251 for item in api .list_node ().items :
200252 node = api .read_node (name = item .metadata .name )
201253 self .assertTrue (len (node .metadata .labels ) > 0 )
202- self .assertTrue (isinstance (node .metadata .labels , dict ))
254+ self .assertTrue (isinstance (node .metadata .labels , dict ))
255+
256+ @unittest .skipUnless (
257+ _is_k8s_running (), "Kubernetes is not available" )
258+ def test_create_daemonset (self ):
259+ client = api_client .ApiClient ('http://127.0.0.1:8080/' )
260+ api = extensions_v1beta1_api .ExtensionsV1beta1Api (client )
261+ name = 'nginx-app-' + str (uuid .uuid4 ())
262+ daemonset = {
263+ 'apiVersion' : 'extensions/v1beta1' ,
264+ 'kind' : 'DaemonSet' ,
265+ 'metadata' : {
266+ 'labels' : {'app' : 'nginx' },
267+ 'name' : '%s' % name ,
268+ },
269+ 'spec' : {
270+ 'template' : {
271+ 'metadata' : {
272+ 'labels' : {'app' : 'nginx' },
273+ 'name' : name },
274+ 'spec' : {
275+ 'containers' : [
276+ {'name' : 'nginx-app' ,
277+ 'image' : 'nginx:1.10' },
278+ ],
279+ },
280+ },
281+ 'updateStrategy' : {
282+ 'type' : 'RollingUpdate' ,
283+ },
284+ }
285+ }
286+ resp = api .create_namespaced_daemon_set ('default' , body = daemonset )
287+ resp = api .read_namespaced_daemon_set (name , 'default' )
288+ self .assertIsNotNone (resp )
0 commit comments