diff --git a/labs/osbash/lib/wbatch/batch_for_windows.sh b/labs/osbash/lib/wbatch/batch_for_windows.sh index 54b8d583..3dc499e0 100644 --- a/labs/osbash/lib/wbatch/batch_for_windows.sh +++ b/labs/osbash/lib/wbatch/batch_for_windows.sh @@ -171,6 +171,7 @@ function wbatch_mkdirs { function wbatch_create_hostnet { wbatch_new_file "create_hostnet.bat" wbatch_file_header "host-only networks" + cat "$WBATCH_TEMPLATE_DIR/template-begin_hostnet_bat" | wbatch_write_stdin # Creating networks requires elevated privileges wbatch_elevate_privileges wbatch_find_vbm @@ -183,7 +184,7 @@ function wbatch_create_hostnet { # The host-side interface is the default gateway of the network if_ip=${NET_GW[index]} # Translate if_name to Windows-type interface name - win_adapter=$(vboxnet_to_win_adapter_num "$if_name") + win_adapter=$if_name sed -e " s,%IFNAME%,${win_adapter},g; s,%IFIP%,${if_ip},g; @@ -237,7 +238,7 @@ function wbatch_log_vbm { case "${ARGS[i]}" in --hostonlyadapter*) # The next arg is the host-only interface name -> change it - ARGS[i+1]=\"$(vboxnet_to_win_adapter_num "${ARGS[i+1]}")\" + ARGS[i+1]=\"%${ARGS[i+1]}%\" ;; --hostpath) # The next arg is the shared dir -> change it @@ -271,20 +272,6 @@ function wbatch_log_vbm { # Windows path name helpers #------------------------------------------------------------------------------- -# Translate Unix-style vboxnetX to Windows-type interface name -function vboxnet_to_win_adapter_num { - local vboxname=$1 - local win_if="VirtualBox Host-Only Ethernet Adapter" - - # Remove leading "vboxnet" to get interface number - local ifnum=${vboxname#vboxnet} - - if [ "$ifnum" -ne 0 ]; then - win_if+=" #$((ifnum + 1))" - fi - echo "$win_if" -} - # On Windows, all paths are relative to TOP_DIR function wbatch_path_to_windows { local full_path=$1 diff --git a/labs/osbash/lib/wbatch/template-begin_hostnet_bat b/labs/osbash/lib/wbatch/template-begin_hostnet_bat new file mode 100644 index 00000000..032e87cb --- /dev/null +++ b/labs/osbash/lib/wbatch/template-begin_hostnet_bat @@ -0,0 +1,6 @@ +ECHO %time% Deleting old iface_config.bat +IF EXIST "%~dp0\iface_config.bat" DEL "%~dp0\iface_config.bat" +ECHO. + +REM vim: set ai ts=4 sw=4 et ft=dosbatch: + diff --git a/labs/osbash/lib/wbatch/template-begin_node_bat b/labs/osbash/lib/wbatch/template-begin_node_bat index 530b71c7..a7d8d8eb 100644 --- a/labs/osbash/lib/wbatch/template-begin_node_bat +++ b/labs/osbash/lib/wbatch/template-begin_node_bat @@ -1,3 +1,6 @@ +ECHO %time% Loading network interface names +CALL "%~dp0\iface_config.bat" + ECHO %time% Cleaning up autostart and log directories DEL /S /Q %AUTODIR% DEL /S /Q %LOGDIR% diff --git a/labs/osbash/lib/wbatch/template-create_hostnet_bat b/labs/osbash/lib/wbatch/template-create_hostnet_bat index 69984185..6257dfcf 100644 --- a/labs/osbash/lib/wbatch/template-create_hostnet_bat +++ b/labs/osbash/lib/wbatch/template-create_hostnet_bat @@ -1,9 +1,12 @@ -ECHO VBoxManage hostonlyif create -"%VBM%" hostonlyif create +REM Using "'" as a delimiter, the second token is the name of the VirtualBox +REM Ethernet interface +FOR /F "tokens=2 delims='" %%A IN ('"%VBM%" hostonlyif create') DO SET IFACE=%%A IF %errorlevel% NEQ 0 GOTO :vbm_error +ECHO SET %IFNAME%=%IFACE% +SET %IFNAME%=%IFACE% +ECHO SET %IFNAME%=%IFACE%>> "%~dp0\iface_config.bat" -ECHO VBoxManage hostonlyif ipconfig "%IFNAME%" --ip %IFIP% --netmask 255.255.255.0 -"%VBM%" hostonlyif ipconfig "%IFNAME%" --ip %IFIP% --netmask 255.255.255.0 -IF %errorlevel% NEQ 0 GOTO :vbm_error +ECHO VBoxManage hostonlyif ipconfig "%%IFNAME%%" --ip %IFIP% --netmask 255.255.255.0 +"%VBM%" hostonlyif ipconfig "%%IFNAME%%" --ip %IFIP% --netmask 255.255.255.0 REM vim: set ai ts=4 sw=4 et ft=dosbatch: diff --git a/labs/stacktrain/batch_for_windows.py b/labs/stacktrain/batch_for_windows.py index 11de0e6d..7848c632 100644 --- a/labs/stacktrain/batch_for_windows.py +++ b/labs/stacktrain/batch_for_windows.py @@ -190,13 +190,13 @@ def wbatch_mkdirs(): def wbatch_begin_hostnet(): wbatch_new_file("create_hostnet.bat") wbatch_file_header("host-only networks") + wbatch_write_template("template-begin_hostnet_bat") # Creating networks requires elevated privileges wbatch_elevate_privileges() wbatch_find_vbm() def wbatch_create_hostnet(if_ip, adapter): - adapter = vboxnet_to_win_adapter_num(adapter) replace = {"IFNAME": adapter, "IFIP": if_ip} wbatch_write_template("template-create_hostnet_bat", replace) @@ -237,9 +237,11 @@ def wbatch_log_vbm(*args): argl = list(*args) for index, arg in enumerate(argl): if re.match("--hostonlyadapter", arg): - # The next arg is the host-only interface name -> change it - argl[index+1] = '"' + vboxnet_to_win_adapter_num(argl[index+1]) + \ - '"' + # The next arg is the host-only interface name -> change it. + # We use the vboxnet interface name as a variable name for the + # Windows batch scripts. This is a reference to the variable, + # therefore the string must be somethin like "%vboxnet0%". + argl[index+1] = '"' + "%{}%".format(argl[index+1]) + '"' elif re.match("--hostpath", arg): # The next arg is the shared dir -> change it argl[index+1] = r'%SHAREDIR%' @@ -264,20 +266,6 @@ def wbatch_log_vbm(*args): # ----------------------------------------------------------------------------- -def vboxnet_to_win_adapter_num(vboxname): - win_if = "VirtualBox Host-Only Ethernet Adapter" - - # Remove leading "vboxnet" to get interface number - if_num = int(vboxname.replace("vboxnet", "")) - - if if_num > 0: - # The first numbered "VirtualBox Host-Only Ethernet Adapter" is #2 - win_if += " #{}".format(str(if_num + 1)) - logger.debug("vboxnet_to_win_adapter_num returns: %s", win_if) - - return win_if - - def wbatch_path_to_windows(full_path): rel_path = hf.strip_top_dir(conf.top_dir, full_path) diff --git a/labs/stacktrain/batch_for_windows_templates/template-begin_hostnet_bat b/labs/stacktrain/batch_for_windows_templates/template-begin_hostnet_bat new file mode 100644 index 00000000..032e87cb --- /dev/null +++ b/labs/stacktrain/batch_for_windows_templates/template-begin_hostnet_bat @@ -0,0 +1,6 @@ +ECHO %time% Deleting old iface_config.bat +IF EXIST "%~dp0\iface_config.bat" DEL "%~dp0\iface_config.bat" +ECHO. + +REM vim: set ai ts=4 sw=4 et ft=dosbatch: + diff --git a/labs/stacktrain/batch_for_windows_templates/template-begin_node_bat b/labs/stacktrain/batch_for_windows_templates/template-begin_node_bat index 17c9ca2a..3ca3ee30 100644 --- a/labs/stacktrain/batch_for_windows_templates/template-begin_node_bat +++ b/labs/stacktrain/batch_for_windows_templates/template-begin_node_bat @@ -1,3 +1,6 @@ +ECHO %time% Loading network interface names +CALL "%~dp0\iface_config.bat" + ECHO %time% Cleaning up autostart and log directories DEL /S /Q %AUTODIR% DEL /S /Q %LOGDIR% diff --git a/labs/stacktrain/batch_for_windows_templates/template-create_hostnet_bat b/labs/stacktrain/batch_for_windows_templates/template-create_hostnet_bat index e674c9d3..1e5b4c40 100644 --- a/labs/stacktrain/batch_for_windows_templates/template-create_hostnet_bat +++ b/labs/stacktrain/batch_for_windows_templates/template-create_hostnet_bat @@ -1,9 +1,12 @@ -ECHO VBoxManage hostonlyif create -"%VBM%" hostonlyif create +REM Using "'" as a delimiter, the second token is the name of the VirtualBox +REM Ethernet interface +FOR /F "tokens=2 delims='" %%A IN ('"%VBM%" hostonlyif create') DO SET IFACE=%%A IF %errorlevel% NEQ 0 GOTO :vbm_error +ECHO SET #IFNAME=%IFACE% +SET #IFNAME=%IFACE% +ECHO SET #IFNAME=%IFACE%>> "%~dp0\iface_config.bat" -ECHO VBoxManage hostonlyif ipconfig "#IFNAME" --ip #IFIP --netmask 255.255.255.0 -"%VBM%" hostonlyif ipconfig "#IFNAME" --ip #IFIP --netmask 255.255.255.0 -IF %errorlevel% NEQ 0 GOTO :vbm_error +ECHO VBoxManage hostonlyif ipconfig "%#IFNAME%" --ip #IFIP --netmask 255.255.255.0 +"%VBM%" hostonlyif ipconfig "%#IFNAME%" --ip #IFIP --netmask 255.255.255.0 REM vim: set ai ts=4 sw=4 et ft=dosbatch: