1+ import os
2+
3+ from pathlib import Path
14from collections import defaultdict
25
36from netsim_wrapper .utils import Singleton , Download
@@ -178,6 +181,8 @@ def compile_neds(self):
178181 self .log .info ("$ make clean all -> in {}/src" .format (path ))
179182 cmd = "cd {}/src; make clean all;" .format (path )
180183 self .utils .cmd .call (cmd )
184+ ## kkotari: new change
185+ self .utils .change_dir (self .default ['cwd' ])
181186
182187 def load_authgroup (self , type , path = None ): # type -> local/system/custom
183188 path = path or '/tmp/authgroup.xml'
@@ -191,8 +196,8 @@ def load_aaa(self, type): # type -> add.admin/add.default
191196 return path
192197
193198 def load_merge (self , fpath ):
194- self .log .info ("{}# load merge {}" .format (self .default ['user' ], fpath ))
195- cmd = "echo 'load merge {}' | ncs_cli -u {} -C" .format (fpath , self .default ['user' ])
199+ self .log .info ("{}(config) # load merge {}" .format (self .default ['user' ], fpath ))
200+ cmd = "echo 'config ; load merge {} ; commit ; ' | ncs_cli -u {} -C" .format (fpath , self .default ['user' ])
196201 self .utils .cmd .call (cmd )
197202
198203 def fetch_neds (self ):
@@ -227,12 +232,16 @@ def extract_neds(self, signed_bin=True, extract_tar=True):
227232 if extract_tar :
228233 tar_file = self .utils .get_tar (ned )
229234 self .utils .cmd .run (['tar' , '-xvf' , tar_file ])
230- self .utils .cmd .run (['rm' , '-rf' , tar_file , ned , '*.signature' , '*.py' , '*.py3' , 'tailf.cer' ])
235+ self .utils .cmd .run (['rm' , '-rf' , tar_file , ned , 'tailf.cer' , f'{ tar_file } .signature' ])
236+ self .utils .cmd .run (['rm' , '-rf' , 'README.signature' , 'cisco_x509_verify_release.py' ])
237+ self .utils .cmd .run (['rm' , '-rf' , 'cisco_x509_verify_release.py3' ])
238+ ## kkotari: new change
239+ self .utils .change_dir (self .default ['cwd' ])
231240 self .log .debug ('extraction done' )
232241
233242 def create_devices (self ):
234243 self .log .info ("creating netsim devices" )
235- create = True if not self .nwrap .netsim .list () else False
244+ create = True if not self .nwrap .netsim .list (raiseError = False ) else False
236245 if self .default ['ttype' ] == 'network' :
237246 for ned , val in self .default ['device-mode' ]['prefix-based' ].items ():
238247 path = "{}/{}" .format (self .default ['ppath' ], ned )
@@ -256,8 +265,19 @@ def analyse_params(self):
256265 self .log .debug ("analysing template parameters" )
257266
258267 self .default .update (self .nwrap .template .data )
268+ # fetching full paths
269+ self .default ['nso-packages-path' ] = Path (self .default .get ('nso-packages-path' , '' )).absolute ().as_posix ()
270+ self .default ['config-path' ] = Path (self .default .get ('config-path' , '' )).absolute ().as_posix ()
271+ if 'path' in self .default ['authgroup' ]:
272+ self .default ['authgroup' ]['path' ] = Path (self .default ['authgroup' ]['path' ]).absolute ().as_posix ()
273+ else :
274+ self .default ['authgroup' ]['path' ] = None
275+
276+ # mode, package path
259277 self .default ['ttype' ] = self .nwrap .template .defaults ['current' ]
260278 self .default ['ppath' ] = self .default ['nso-packages-path' ]
279+ self .default ['runpath' ] = Path (self .default ['nso-packages-path' ]).parent .as_posix ()
280+ self .default ['devices-path' ] = '/tmp/devices.xml'
261281
262282 # args compile neds
263283 if self .default ['compile-neds' ]:
@@ -267,7 +287,7 @@ def analyse_params(self):
267287 if self .default ['add-authgroup-to-nso' ]:
268288 self .default ['authgroup-path' ] = self .load_authgroup (
269289 type = self .default ['authgroup' ]['type' ],
270- path = self .default ['authgroup' ]. get ( 'path' , None )
290+ path = self .default ['authgroup' ][ 'path' ]
271291 )
272292
273293 # args day0 config
@@ -283,54 +303,59 @@ def analyse_params(self):
283303
284304 self .log .debug ("analysing template done" )
285305
286- def apply (self , username , password ):
306+ def apply (self , cwd , username , password ):
287307 self .analyse_params ()
308+ self .default ['cwd' ] = cwd
288309 self .default ['username' ] = username
289310 self .default ['password' ] = password
290311
291312 self .log .debug ("per-netsim steps" )
292313 if self .default ['download-neds' ]:
293314 self .download_neds ()
294315 self .extract_neds ()
295-
316+
296317 if self .default ['compile-neds' ]:
297318 self .compile_neds ()
298319
299320 # feature pre netsim create
300321 @self .log_ncs_cli
301322 def pre_create ():
302- if self .default ['compile-neds ' ]:
323+ if self .default ['packages-reload ' ]:
303324 self .packages_reload ()
304325
305326 if self .default ['add-authgroup-to-nso' ]:
306327 self .load_merge (self .load_aaa (type = 'admin' ))
307328 self .load_merge (self .default ['authgroup-path' ])
308329 return pre_create
330+ pre_create ()
309331
310332 # feature create devices
311333 self .log .debug ("netsim steps" )
334+
335+ self .utils .change_dir (self .default ['runpath' ])
312336 self .create_devices ()
313337
314338 if self .default ['start-devices' ]:
315339 self .nwrap .netsim .start ()
316340
317341 if self .default ['add-to-nso' ]:
318- path = '/tmp/devices.xml'
319342 data = self .nwrap .netsim .ncs_xml_init (sysout = False )
320- self .utils .xml .dump (data , path )
343+ if data is not None : self .utils .xml .dump (data , self . default [ 'devices- path' ] )
321344
322345 # feature post netsim create
323346 self .log .debug ("post-netsim steps" )
324347 @self .log_ncs_cli
325348 def post_create ():
326349 if self .default ['add-to-nso' ]:
327- self .load_merge (path )
350+ self .load_merge (self . default [ 'devices- path' ] )
328351 self .fetch_ssh_keys ()
329352 self .sync_from ()
330353
354+ self .utils .change_dir (self .default ['cwd' ])
331355 if self .default ['load-day0-config' ]:
332356 for fpath in self .default ['config-files' ]:
333357 self .load_merge (fpath )
334358 return post_create
359+ post_create ()
335360
336361 self .log .debug ("template done" )
0 commit comments