3
3
import argparse
4
4
import uuid
5
5
6
- def readTemplate (template ):
6
+ def read_template (template ):
7
7
with open (template , "r" ) as stream :
8
8
try :
9
9
return yaml .safe_load (stream )
@@ -23,7 +23,7 @@ def update_names(yaml, item, appwrapper_name, cluster_name):
23
23
lower_meta ["labels" ]["appwrapper.mcad.ibm.com" ] = appwrapper_name
24
24
lower_meta ["name" ] = cluster_name
25
25
26
- def updateCustompodresources (item , cpu , memory , gpu , workers ):
26
+ def update_custompodresources (item , cpu , memory , gpu , workers ):
27
27
if 'custompodresources' in item .keys ():
28
28
custompodresources = item .get ('custompodresources' )
29
29
for resource in custompodresources :
@@ -44,6 +44,7 @@ def updateCustompodresources(item, cpu, memory, gpu, workers):
44
44
def update_affinity (spec , appwrapper_name ):
45
45
node_selector_terms = spec .get ("affinity" ).get ("nodeAffinity" ).get ("requiredDuringSchedulingIgnoredDuringExecution" ).get ("nodeSelectorTerms" )
46
46
node_selector_terms [0 ]["matchExpressions" ][0 ]["values" ][0 ] = appwrapper_name
47
+ node_selector_terms [0 ]["matchExpressions" ][0 ]["key" ] = appwrapper_name
47
48
48
49
def update_resources (spec , cpu , memory , gpu ):
49
50
container = spec .get ("containers" )
@@ -74,24 +75,24 @@ def update_nodes(item, appwrapper_name, cpu, memory, gpu, workers):
74
75
update_affinity (spec , appwrapper_name )
75
76
update_resources (spec , cpu , memory , gpu )
76
77
77
- def generateAppwrapper (cpu , memory , gpu , workers , template ):
78
- user_yaml = readTemplate (template )
78
+ def write_user_appwrapper (user_yaml , appwrapper_name ):
79
+ with open (f'{ appwrapper_name } .yaml' ,'w' ) as outfile :
80
+ yaml .dump (user_yaml , outfile , default_flow_style = False )
81
+
82
+ def generate_appwrapper (cpu , memory , gpu , workers , template ):
83
+ user_yaml = read_template (template )
79
84
appwrapper_name , cluster_name = gen_names ()
80
85
resources = user_yaml .get ("spec" ,"resources" )
81
86
item = resources ["resources" ].get ("GenericItems" )[0 ]
82
87
update_names (user_yaml , item , appwrapper_name , cluster_name )
83
- updateCustompodresources (item , cpu , memory , gpu , workers )
88
+ update_custompodresources (item , cpu , memory , gpu , workers )
84
89
update_nodes (item , appwrapper_name , cpu , memory , gpu , workers )
85
- writeUserAppwrapper (user_yaml , appwrapper_name )
86
-
87
- def writeUserAppwrapper (user_yaml , appwrapper_name ):
88
- with open (f'{ appwrapper_name } .yaml' ,'w' ) as outfile :
89
- yaml .dump (user_yaml , outfile , default_flow_style = False )
90
+ write_user_appwrapper (user_yaml , appwrapper_name )
90
91
91
92
def main ():
92
93
parser = argparse .ArgumentParser (description = 'Generate user AppWrapper' )
93
94
parser .add_argument ("--cpu" , type = int , required = True , help = "number of CPU(s) in a worker required for running job" )
94
- parser .add_argument ("--memory" , required = True , help = "RAM required in a worker for running job" )
95
+ parser .add_argument ("--memory" , type = int , required = True , help = "RAM required in a worker for running job, in GB " )
95
96
parser .add_argument ("--gpu" ,type = int , required = True , help = "GPU(s) required in a worker for running job" )
96
97
parser .add_argument ("--workers" , type = int , required = True , help = "How many workers are required in the cluster" )
97
98
parser .add_argument ("--template" , required = True , help = "Template AppWrapper yaml file" )
@@ -103,7 +104,7 @@ def main():
103
104
workers = args .workers
104
105
template = args .template
105
106
106
- generateAppwrapper (cpu , memory , gpu , workers , template )
107
+ generate_appwrapper (cpu , memory , gpu , workers , template )
107
108
108
109
if __name__ == "__main__" :
109
110
main ()
0 commit comments