11"""The autoinstall.main module runs an installation script automatically on multiple targets."""
2+
23import ast
34import argparse
45import logging
@@ -20,44 +21,46 @@ def __init__(self, env, args, name):
2021 self .name = name
2122
2223 self .context = {
23- ' name' : self .name ,
24- ' env' : self .env ,
25- ' config' : self .config ,
24+ " name" : self .name ,
25+ " env" : self .env ,
26+ " config" : self .config ,
2627 }
2728 self .context .update (target_factory .resources )
2829 self .context .update (target_factory .drivers )
2930
3031 def _get_function (self , name , context ):
31- snippet = self .config .data [' autoinstall' ].get (name )
32+ snippet = self .config .data [" autoinstall" ].get (name )
3233 if not snippet :
3334 return None
3435
3536 code = f"def { name } ():\n { textwrap .indent (snippet , ' ' )} "
3637 tree = ast .parse (code , filename = self .env .config_file )
3738 ast .increment_lineno (tree , snippet .start_mark .line )
38- co = compile (tree , filename = self .env .config_file , mode = ' exec' )
39+ co = compile (tree , filename = self .env .config_file , mode = " exec" )
3940
4041 stage = {}
4142 exec (co , context , stage ) # pylint: disable=exec-used
4243 return stage [name ]
4344
4445 def _get_setup_function (self ):
4546 context = self .context
46- context [' log' ] = self .log .getChild (' setup' )
47- setup = self ._get_function (' setup' , self .context )
47+ context [" log" ] = self .log .getChild (" setup" )
48+ setup = self ._get_function (" setup" , self .context )
4849 if setup is None :
50+
4951 def setup ():
5052 pass
53+
5154 return setup
5255
5356 def _get_handler_function (self ):
5457 context = self .context .copy ()
55- context [' log' ] = self .log .getChild (' handler' )
56- handler = self ._get_function (' handler' , context )
58+ context [" log" ] = self .log .getChild (" handler" )
59+ handler = self ._get_function (" handler" , context )
5760 return handler
5861
5962 def _get_initial_resource (self ):
60- cls = self .config .data [' autoinstall' ].get (' initial-resource' )
63+ cls = self .config .data [" autoinstall" ].get (" initial-resource" )
6164 if not cls :
6265 return None
6366
@@ -69,7 +72,7 @@ def run(self):
6972
7073 try :
7174 self .target = self .env .get_target (self .name )
72- self .context [' target' ] = self .target
75+ self .context [" target" ] = self .target
7376 if self .target is None :
7477 raise KeyError
7578 except Exception : # pylint: disable=broad-except
@@ -88,8 +91,7 @@ def run(self):
8891 def run_once (self ):
8992 try :
9093 if self .initial_resource :
91- self .log .info ("waiting until %s is available" ,
92- self .initial_resource .display_name )
94+ self .log .info ("waiting until %s is available" , self .initial_resource .display_name )
9395 while True :
9496 self .target .update_resources ()
9597 if self .initial_resource .avail :
@@ -100,13 +102,11 @@ def run_once(self):
100102 self .target .update_resources ()
101103 result = self .handler ()
102104 if result is not None :
103- self .log .warning ("unexpected return value from handler: %s" ,
104- repr (result ))
105+ self .log .warning ("unexpected return value from handler: %s" , repr (result ))
105106 self .log .info ("completed handler" )
106107
107108 if self .initial_resource :
108- self .log .info ("waiting until %s is unavailable" ,
109- self .initial_resource .display_name )
109+ self .log .info ("waiting until %s is unavailable" , self .initial_resource .display_name )
110110 while True :
111111 self .target .update_resources ()
112112 if not self .initial_resource .avail :
@@ -115,11 +115,9 @@ def run_once(self):
115115
116116 except NoResourceFoundError as e :
117117 if e .filter and len (e .filter ) > 1 :
118- self .log .warning ("resources %s not found, restarting" ,
119- e .filter )
118+ self .log .warning ("resources %s not found, restarting" , e .filter )
120119 elif e .filter :
121- self .log .warning ("resource %s not found, restarting" ,
122- next (iter (e .filter )))
120+ self .log .warning ("resource %s not found, restarting" , next (iter (e .filter )))
123121 else :
124122 self .log .warning ("resource not found, restarting" )
125123 except Exception : # pylint: disable=broad-except
@@ -141,24 +139,20 @@ def __init__(self, env, args):
141139 self .log = logging .getLogger ("manager" )
142140
143141 def configure (self ):
144- if not 'autoinstall' in self .env .config .data :
145- self .log .error ("no 'autoinstall' section found in '%s'" ,
146- self .env .config_file )
142+ if not "autoinstall" in self .env .config .data :
143+ self .log .error ("no 'autoinstall' section found in '%s'" , self .env .config_file )
147144 return False
148145
149- if not 'handler' in self .env .config .data ['autoinstall' ]:
150- self .log .error ("no 'handler' definition found in '%s'" ,
151- self .env .config_file )
146+ if not "handler" in self .env .config .data ["autoinstall" ]:
147+ self .log .error ("no 'handler' definition found in '%s'" , self .env .config_file )
152148 return False
153149
154150 self .handlers = {}
155- for target_name in self .config .data .get ('targets' , {}).keys ():
156- self .handlers [target_name ] = Handler (self .env , self .args ,
157- target_name )
151+ for target_name in self .config .data .get ("targets" , {}).keys ():
152+ self .handlers [target_name ] = Handler (self .env , self .args , target_name )
158153
159154 if not self .handlers :
160- self .log .error ("no targets found in '%s'" ,
161- self .env .config_file )
155+ self .log .error ("no targets found in '%s'" , self .env .config_file )
162156 return False
163157
164158 return True
@@ -175,28 +169,14 @@ def join(self):
175169 for handler in self .handlers .values ():
176170 handler .join ()
177171
172+
178173def main ():
179174 basicConfig (level = logging .INFO )
180175
181176 parser = argparse .ArgumentParser ()
182- parser .add_argument (
183- '-d' ,
184- '--debug' ,
185- action = 'store_true' ,
186- default = False ,
187- help = "enable debug mode"
188- )
189- parser .add_argument (
190- '--once' ,
191- action = 'store_true' ,
192- default = False ,
193- help = "handle each target only once"
194- )
195- parser .add_argument (
196- 'config' ,
197- type = str ,
198- help = "config file"
199- )
177+ parser .add_argument ("-d" , "--debug" , action = "store_true" , default = False , help = "enable debug mode" )
178+ parser .add_argument ("--once" , action = "store_true" , default = False , help = "handle each target only once" )
179+ parser .add_argument ("config" , type = str , help = "config file" )
200180
201181 args = parser .parse_args ()
202182
0 commit comments