11import re
22import os
33import sys
4+ import signal
45import subprocess
56import threading
67import socket
@@ -180,7 +181,7 @@ def join(self):
180181 if self .pipe_stdin :
181182 self .process .stdin .close ()
182183 if self .process .returncode :
183- raise Exception ('Guest failed (returncode=%d)' % self .proces .returncode )
184+ raise Exception ('Guest failed (returncode=%d)' % self .process .returncode )
184185 if self .failed :
185186 raise Exception ('Guest failed' )
186187
@@ -208,17 +209,24 @@ def line_with_error(self):
208209
209210def run_command_in_guest (command , ** kwargs ):
210211 common_parameters = ["-e" , "--power-off-on-abort " + command ]
211- if 'hypervisor' in kwargs .keys () and kwargs ['hypervisor' ] == 'firecracker' :
212- return Guest (["-m 1024M" , "-n" , "-c 4" ] + common_parameters , ** kwargs )
212+
213+ if kwargs .get ('hypervisor' ) == 'firecracker' :
214+ parameters = ["-l" , "-m 2048M" , "-n" , "-c 4" ] + common_parameters
213215 else :
214- return Guest (["-s" ] + common_parameters , ** kwargs )
216+ parameters = ["-s" ] + common_parameters
217+
218+ return Guest (parameters , ** kwargs )
215219
216220class Guest (SupervisedProcess ):
217221 def __init__ (self , args , forward = [], hold_with_poweroff = False , show_output_on_error = True ,
218222 scan_for_failed_to_load_object_error = True , run_py_args = [], hypervisor = 'qemu' , pipe_stdin = False ):
219223
220224 if hypervisor == 'firecracker' :
221225 run_script = os .path .join (osv_base , "scripts/firecracker.py" )
226+ self .monitor_socket = None
227+ physical_nic = os .getenv ('OSV_FC_NIC' )
228+ if physical_nic :
229+ args .extend (['-p' , physical_nic ])
222230 else :
223231 run_script = os .path .join (osv_base , "scripts/run.py" )
224232
@@ -233,18 +241,25 @@ def __init__(self, args, forward=[], hold_with_poweroff=False, show_output_on_er
233241
234242 args .extend (['--unsafe-cache' ])
235243
244+ if _verbose_output :
245+ print ('Running OSv on %s with parameters: [%s]' % (hypervisor , " " .join (args )))
246+
236247 SupervisedProcess .__init__ (self , [run_script ] + run_py_args + args ,
237248 show_output = _verbose_output ,
238249 show_output_on_error = show_output_on_error ,
239250 scan_for_failed_to_load_object_error = scan_for_failed_to_load_object_error ,
240251 pipe_stdin = pipe_stdin )
241252
242253 def kill (self ):
243- s = socket .socket (socket .AF_UNIX , socket .SOCK_STREAM )
244- s .connect (self .monitor_socket )
245- s .send ('quit\n ' .encode ())
246- self .join ()
247- s .close ()
254+ if self .monitor_socket != None :
255+ s = socket .socket (socket .AF_UNIX , socket .SOCK_STREAM )
256+ s .connect (self .monitor_socket )
257+ s .send ('quit\n ' .encode ())
258+ self .join ()
259+ s .close ()
260+ else :
261+ os .kill (self .process .pid , signal .SIGINT )
262+ self .join ()
248263
249264def wait_for_line (guest , text ):
250265 return _wait_for_line (guest , lambda line : line == text , text )
0 commit comments