20
20
21
21
from kubernetes import client
22
22
23
+
23
24
def create_from_yaml (k8s_client , yaml_file , verbose = False ,
24
25
namespace = "default" , ** kwargs ):
25
26
operation = "create"
26
- operate_from_yaml (k8s_client , yaml_file , operation ,verbose = False ,
27
- namespace = "default" , ** kwargs )
27
+ operate_from_yaml (k8s_client , yaml_file , operation , verbose = False ,
28
+ namespace = "default" , ** kwargs )
29
+
28
30
29
31
def delete_from_yaml (k8s_client , yaml_file , verbose = False ,
30
32
namespace = "default" , ** kwargs ):
31
33
operation = "delete"
32
- operate_from_yaml (k8s_client , yaml_file , operation ,verbose = False ,
33
- namespace = "default" , ** kwargs )
34
+ operate_from_yaml (k8s_client , yaml_file , operation , verbose = False ,
35
+ namespace = "default" , ** kwargs )
34
36
35
37
36
38
def operate_from_yaml (k8s_client , yaml_file , operation , verbose = False ,
37
- namespace = "default" ,** kwargs ):
39
+ namespace = "default" , ** kwargs ):
38
40
"""
39
41
Input:
40
42
yaml_file: string. Contains the path to yaml file.
@@ -64,15 +66,15 @@ def operate_from_yaml(k8s_client, yaml_file, operation, verbose=False,
64
66
for yml_document in yml_document_all :
65
67
try :
66
68
operate_from_dict (k8s_client , yml_document , operation , verbose ,
67
- namespace = namespace , ** kwargs )
69
+ namespace = namespace , ** kwargs )
68
70
except FailToExecuteError as failure :
69
71
failures .extend (failure .api_exceptions )
70
72
if failures :
71
73
raise FailToExecuteError (failures )
72
74
73
75
74
- def operate_from_dict (k8s_client , yml_document ,operation , verbose ,
75
- namespace = "default" ,** kwargs ):
76
+ def operate_from_dict (k8s_client , yml_document , operation , verbose ,
77
+ namespace = "default" , ** kwargs ):
76
78
"""
77
79
Perform an operation kubernetes resource from a dictionary containing valid kubernetes
78
80
API object (i.e. List, Service, etc).
@@ -99,8 +101,12 @@ def operate_from_dict(k8s_client, yml_document,operation, verbose,
99
101
yml_doc ["kind" ] = kind
100
102
try :
101
103
operate_from_yaml_single_item (
102
- k8s_client , yml_doc , operation , verbose , namespace = namespace , ** kwargs
103
- )
104
+ k8s_client ,
105
+ yml_doc ,
106
+ operation ,
107
+ verbose ,
108
+ namespace = namespace ,
109
+ ** kwargs )
104
110
except client .rest .ApiException as api_exception :
105
111
api_exceptions .append (api_exception )
106
112
else :
@@ -116,8 +122,13 @@ def operate_from_dict(k8s_client, yml_document,operation, verbose,
116
122
raise FailToExecuteError (api_exceptions )
117
123
118
124
119
- def operate_from_yaml_single_item (k8s_client ,
120
- yml_document ,operation ,verbose = False ,namespace = "default" , ** kwargs ):
125
+ def operate_from_yaml_single_item (
126
+ k8s_client ,
127
+ yml_document ,
128
+ operation ,
129
+ verbose = False ,
130
+ namespace = "default" ,
131
+ ** kwargs ):
121
132
# get group and version from apiVersion
122
133
group , _ , version = yml_document ["apiVersion" ].partition ("/" )
123
134
if version == "" :
@@ -133,23 +144,26 @@ def operate_from_yaml_single_item(k8s_client,
133
144
kind = yml_document ["kind" ]
134
145
kind = re .sub ('(.)([A-Z][a-z]+)' , r'\1_\2' , kind )
135
146
kind = re .sub ('([a-z0-9])([A-Z])' , r'\1_\2' , kind ).lower ()
136
- if operation == "create" :
137
- resp = create_k8s_object (k8s_api ,yml_document ,kind ,namespace = namespace )
147
+ if operation == "create" :
148
+ resp = create_k8s_object (
149
+ k8s_api , yml_document , kind , namespace = namespace )
138
150
if verbose :
139
151
msg = "{0} created." .format (kind )
140
152
if hasattr (resp , 'status' ):
141
153
msg += " status='{0}'" .format (str (resp .status ))
142
154
print (msg )
143
- elif operation == "delete" :
144
- resp = delete_k8s_object (k8s_api ,yml_document ,kind ,namespace = namespace )
155
+ elif operation == "delete" :
156
+ resp = delete_k8s_object (
157
+ k8s_api , yml_document , kind , namespace = namespace )
145
158
if verbose :
146
159
msg = "{0} deleted." .format (kind )
147
160
if hasattr (resp , 'status' ):
148
161
msg += " status='{0}'" .format (str (resp .status ))
149
162
print (msg )
150
-
151
163
152
- def create_k8s_object (k8s_api , yml_document , kind ,** kwargs ):
164
+
165
+ def create_k8s_object (k8s_api , yml_document , kind , ** kwargs ):
166
+
153
167
if hasattr (k8s_api , "create_namespaced_{0}" .format (kind )):
154
168
if "namespace" in yml_document ["metadata" ]:
155
169
namespace = yml_document ["metadata" ]["namespace" ]
@@ -163,8 +177,8 @@ def create_k8s_object(k8s_api, yml_document, kind,**kwargs):
163
177
return resp
164
178
165
179
166
- def delete_k8s_object (k8s_api , yml_document , kind ,** kwargs ):
167
- print ( kwargs )
180
+ def delete_k8s_object (k8s_api , yml_document , kind , ** kwargs ):
181
+
168
182
if hasattr (k8s_api , "create_namespaced_{0}" .format (kind )):
169
183
if "namespace" in yml_document ["metadata" ]:
170
184
namespace = yml_document ["metadata" ]["namespace" ]
@@ -185,12 +199,10 @@ def delete_k8s_object(k8s_api, yml_document, kind,**kwargs):
185
199
return resp
186
200
187
201
188
-
189
-
190
202
class FailToExecuteError (Exception ):
191
203
"""
192
204
An exception class for handling error if an error occurred when
193
- handling a yaml file during deletion of the resource.
205
+ handling a yaml file during creation or deletion of the resource.
194
206
"""
195
207
196
208
def __init__ (self , api_exceptions ):
@@ -202,5 +214,3 @@ def __str__(self):
202
214
msg += "Error from server ({0}):{1}" .format (
203
215
api_exception .reason , api_exception .body )
204
216
return msg
205
-
206
-
0 commit comments