@@ -1219,45 +1219,58 @@ def setup(uii)
1219
1219
def zloginboot ( uii )
1220
1220
name = @machine . name
1221
1221
config = @machine . provider_config
1222
- lcheck = config . lcheck
1223
- lcheck = ':~' if config . lcheck . nil?
1224
- alcheck = config . alcheck
1225
- alcheck = 'login:' if config . alcheck . nil?
1226
- bstring = ' OK ' if config . booted_string . nil?
1227
- bstring = config . booted_string unless config . booted_string . nil?
1228
- zunlockboot = 'Importing ZFS root pool'
1229
- zunlockboot = config . zunlockboot unless config . zunlockboot . nil?
1230
- zunlockbootkey = config . zunlockbootkey unless config . zunlockbootkey . nil?
1222
+ lcheck = config . lcheck || ':~'
1223
+ alcheck = config . alcheck || 'login:'
1224
+ bstring = config . booted_string || ' OK '
1225
+ zunlockboot = config . zunlockboot || 'Importing ZFS root pool'
1226
+ zunlockbootkey = config . zunlockbootkey
1231
1227
pcheck = 'Password:'
1228
+
1232
1229
uii . info ( I18n . t ( 'vagrant_zones.automated-zlogin' ) )
1230
+
1233
1231
PTY . spawn ( "pfexec zlogin -C #{ name } " ) do |zlogin_read , zlogin_write , pid |
1234
1232
Timeout . timeout ( config . setup_wait ) do
1235
1233
rsp = [ ]
1236
1234
1237
1235
loop do
1238
- zlogin_read . expect ( /\r \n / ) { |line | rsp . push line }
1239
- uii . info ( rsp [ -1 ] ) if config . debug_boot
1240
- sleep ( 2 ) if rsp [ -1 ] . to_s . match ( /#{ zunlockboot } / )
1241
- zlogin_write . printf ( "#{ zunlockbootkey } \n " ) if rsp [ -1 ] . to_s . match ( /#{ zunlockboot } / )
1242
- zlogin_write . printf ( "\n " ) if rsp [ -1 ] . to_s . match ( /#{ zunlockboot } / )
1243
- uii . info ( I18n . t ( 'vagrant_zones.automated-zbootunlock' ) ) if rsp [ -1 ] . to_s . match ( /#{ zunlockboot } / )
1244
- sleep ( 15 ) if rsp [ -1 ] . to_s . match ( /#{ bstring } / )
1245
- zlogin_write . printf ( "\n " ) if rsp [ -1 ] . to_s . match ( /#{ bstring } / )
1246
- break if rsp [ -1 ] . to_s . match ( /#{ bstring } / )
1236
+ begin
1237
+ zlogin_read . expect ( /\r \n / ) do |line |
1238
+ line = line . first if line . is_a? ( Array )
1239
+ encoded_line = line . to_s . encode ( 'UTF-8' , invalid : :replace , undef : :replace , replace : '' )
1240
+ rsp . push encoded_line unless encoded_line . empty?
1241
+ end
1242
+ rescue ArgumentError => e
1243
+ next
1244
+ end
1245
+
1246
+ uii . info ( rsp [ -1 ] ) if config . debug_boot && !rsp . empty?
1247
+
1248
+ if !rsp . empty? && rsp [ -1 ] . match ( /#{ zunlockboot } / )
1249
+ sleep ( 2 )
1250
+ zlogin_write . printf ( "#{ zunlockbootkey } \n " ) if zunlockbootkey
1251
+ zlogin_write . printf ( "\n " )
1252
+ uii . info ( I18n . t ( 'vagrant_zones.automated-zbootunlock' ) )
1253
+ end
1254
+
1255
+ if !rsp . empty? && rsp [ -1 ] . match ( /#{ bstring } / )
1256
+ sleep ( 15 )
1257
+ zlogin_write . printf ( "\n " )
1258
+ break
1259
+ end
1247
1260
end
1248
-
1261
+
1249
1262
if zlogin_read . expect ( /#{ alcheck } / )
1250
1263
uii . info ( I18n . t ( 'vagrant_zones.automated-zlogin-user' ) )
1251
1264
zlogin_write . printf ( "#{ user ( @machine ) } \n " )
1252
1265
sleep ( config . login_wait )
1253
1266
end
1254
-
1267
+
1255
1268
if zlogin_read . expect ( /#{ pcheck } / )
1256
1269
uii . info ( I18n . t ( 'vagrant_zones.automated-zlogin-pass' ) )
1257
1270
zlogin_write . printf ( "#{ vagrantuserpass ( @machine ) } \n " )
1258
1271
sleep ( config . login_wait )
1259
1272
end
1260
-
1273
+
1261
1274
zlogin_write . printf ( "\n " )
1262
1275
if zlogin_read . expect ( /#{ lcheck } / )
1263
1276
uii . info ( I18n . t ( 'vagrant_zones.automated-zlogin-root' ) )
0 commit comments