@@ -35,6 +35,8 @@ def __init__(self) -> None:
35
35
self ._virtfs = None
36
36
self ._serial_type = None
37
37
self ._opts = None
38
+ self ._user = None
39
+ self ._prompt = None
38
40
39
41
@property
40
42
def name (self ) -> str :
@@ -45,6 +47,7 @@ def config_help(self) -> dict:
45
47
return {
46
48
"image" : "qcow2 image location" ,
47
49
"image_overlay" : "image_overlay: image copy location" ,
50
+ "user" : "username used to login. If empty, it won't be used (default: 'root')" ,
48
51
"password" : "root password (default: root)" ,
49
52
"system" : "system architecture (default: x86_64)" ,
50
53
"ram" : "RAM of the VM (default: 2G)" ,
@@ -53,6 +56,7 @@ def config_help(self) -> dict:
53
56
"virtfs" : "directory to mount inside VM" ,
54
57
"ro_image" : "path of the image that will exposed as read only" ,
55
58
"options" : "user defined options" ,
59
+ "first_prompt" : "first shell prompt string (default: '#')" ,
56
60
}
57
61
58
62
def _get_transport (self ) -> str :
@@ -131,20 +135,21 @@ def _get_command(self) -> str:
131
135
return cmd
132
136
133
137
def _login (self , timeout : float , iobuffer : IOBuffer ) -> None :
134
- self ._wait_for ("login:" , timeout , iobuffer )
135
- self ._write_stdin ("root\n " )
138
+ if self ._user :
139
+ self ._wait_for ("login:" , timeout , iobuffer )
140
+ self ._write_stdin (f"{ self ._user } \n " )
136
141
137
142
if self ._password :
138
143
self ._wait_for ("Password:" , 5 , iobuffer )
139
144
self ._write_stdin (f"{ self ._password } \n " )
140
145
141
146
time .sleep (0.2 )
142
147
143
- self ._wait_for ("#" , 5 , iobuffer )
148
+ self ._wait_for (self . _prompt , timeout , iobuffer )
144
149
time .sleep (0.2 )
145
150
146
151
self ._write_stdin ("stty -echo; stty cols 1024\n " )
147
- self ._wait_for ("#" , 5 , None )
152
+ self ._wait_for (self . _prompt , 5 , None )
148
153
149
154
_ , retcode , _ = self ._exec ("export PS1=''" , 5 , None )
150
155
if retcode != 0 :
@@ -179,12 +184,14 @@ def setup(self, **kwargs: dict) -> None:
179
184
self ._image = kwargs .get ("image" , None )
180
185
self ._image_overlay = kwargs .get ("image_overlay" , None )
181
186
self ._ro_image = kwargs .get ("ro_image" , None )
187
+ self ._user = kwargs .get ("user" , "root" )
182
188
self ._password = kwargs .get ("password" , "root" )
183
189
self ._ram = kwargs .get ("ram" , "2G" )
184
190
self ._smp = kwargs .get ("smp" , "2" )
185
191
self ._virtfs = kwargs .get ("virtfs" , None )
186
192
self ._serial_type = kwargs .get ("serial" , "isa" )
187
193
self ._opts = kwargs .get ("options" , None )
194
+ self ._prompt = kwargs .get ("first_prompt" , "#" )
188
195
189
196
system = kwargs .get ("system" , "x86_64" )
190
197
self ._qemu_cmd = f"qemu-system-{ system } "
@@ -216,3 +223,6 @@ def setup(self, **kwargs: dict) -> None:
216
223
217
224
if self ._serial_type not in ["isa" , "virtio" ]:
218
225
raise SUTError ("Serial protocol must be isa or virtio" )
226
+
227
+ if not self ._prompt :
228
+ raise SUTError ("first_prompt is not defined" )
0 commit comments