Hello community,
here is the log from the commit of package yast2-network for openSUSE:Factory checked in at 2016-06-29 15:04:24
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/yast2-network (Old)
and /work/SRC/openSUSE:Factory/.yast2-network.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "yast2-network"
Changes:
--------
--- /work/SRC/openSUSE:Factory/yast2-network/yast2-network.changes 2016-06-13 21:49:51.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.yast2-network.new/yast2-network.changes 2016-06-29 15:04:26.000000000 +0200
@@ -1,0 +2,34 @@
+Thu Jun 23 06:54:43 UTC 2016 - mfilka@suse.com
+
+- bnc#970320, bnc#865132, bnc#852604
+ - do not overwrite Postfix MTA configuration when saving network
+ setup
+- 3.1.158
+
+-------------------------------------------------------------------
+Tue Jun 21 05:37:31 UTC 2016 - igonzalezsosa@suse.com
+
+- bsc#984146
+ - set AutoYaST keep_install_network parameter to 'true' by
+ default
+ - restore the default behavior present in SLE 12 SP1 and
+ openSUSE Leap 42.1
+- 3.1.157
+
+-------------------------------------------------------------------
+Tue Jun 14 05:43:26 UTC 2016 - mfilka@suse.com
+
+- bnc#983201
+ - do not crash with internal error when configuring new device on
+ s390
+- 3.1.156
+
+-------------------------------------------------------------------
+Mon Jun 13 17:48:52 UTC 2016 - mfilka@suse.com
+
+- fate#318787
+ - detect modifications when closing module, do not restart when
+ not needed.
+- 3.1.155
+
+-------------------------------------------------------------------
Old:
----
yast2-network-3.1.154.tar.bz2
New:
----
yast2-network-3.1.158.tar.bz2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ yast2-network.spec ++++++
--- /var/tmp/diff_new_pack.FfLs6c/_old 2016-06-29 15:04:27.000000000 +0200
+++ /var/tmp/diff_new_pack.FfLs6c/_new 2016-06-29 15:04:27.000000000 +0200
@@ -17,7 +17,7 @@
Name: yast2-network
-Version: 3.1.154
+Version: 3.1.158
Release: 0
BuildRoot: %{_tmppath}/%{name}-%{version}-build
++++++ yast2-network-3.1.154.tar.bz2 -> yast2-network-3.1.158.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-network-3.1.154/package/yast2-network.changes new/yast2-network-3.1.158/package/yast2-network.changes
--- old/yast2-network-3.1.154/package/yast2-network.changes 2016-06-09 15:23:31.000000000 +0200
+++ new/yast2-network-3.1.158/package/yast2-network.changes 2016-06-23 10:23:17.000000000 +0200
@@ -1,4 +1,38 @@
-------------------------------------------------------------------
+Thu Jun 23 06:54:43 UTC 2016 - mfilka@suse.com
+
+- bnc#970320, bnc#865132, bnc#852604
+ - do not overwrite Postfix MTA configuration when saving network
+ setup
+- 3.1.158
+
+-------------------------------------------------------------------
+Tue Jun 21 05:37:31 UTC 2016 - igonzalezsosa@suse.com
+
+- bsc#984146
+ - set AutoYaST keep_install_network parameter to 'true' by
+ default
+ - restore the default behavior present in SLE 12 SP1 and
+ openSUSE Leap 42.1
+- 3.1.157
+
+-------------------------------------------------------------------
+Tue Jun 14 05:43:26 UTC 2016 - mfilka@suse.com
+
+- bnc#983201
+ - do not crash with internal error when configuring new device on
+ s390
+- 3.1.156
+
+-------------------------------------------------------------------
+Mon Jun 13 17:48:52 UTC 2016 - mfilka@suse.com
+
+- fate#318787
+ - detect modifications when closing module, do not restart when
+ not needed.
+- 3.1.155
+
+-------------------------------------------------------------------
Wed Jun 1 14:16:08 UTC 2016 - igonzalezsosa@suse.com
- Drop yast2-network-devel-doc package (fate#320356)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-network-3.1.154/package/yast2-network.spec new/yast2-network-3.1.158/package/yast2-network.spec
--- old/yast2-network-3.1.154/package/yast2-network.spec 2016-06-09 15:23:31.000000000 +0200
+++ new/yast2-network-3.1.158/package/yast2-network.spec 2016-06-23 10:23:17.000000000 +0200
@@ -17,7 +17,7 @@
Name: yast2-network
-Version: 3.1.154
+Version: 3.1.158
Release: 0
BuildRoot: %{_tmppath}/%{name}-%{version}-build
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-network-3.1.154/src/clients/lan_auto.rb new/yast2-network-3.1.158/src/clients/lan_auto.rb
--- old/yast2-network-3.1.154/src/clients/lan_auto.rb 2016-06-09 15:23:31.000000000 +0200
+++ new/yast2-network-3.1.158/src/clients/lan_auto.rb 2016-06-23 10:23:17.000000000 +0200
@@ -363,7 +363,7 @@
Ops.set(
ret,
"keep_install_network",
- Ops.get_boolean(settings, "keep_install_network", false)
+ Ops.get_boolean(settings, "keep_install_network", true)
)
if Ops.greater_than(Builtins.size(modules), 0)
Ops.set(ret, "modules", modules)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-network-3.1.154/src/include/network/lan/complex.rb new/yast2-network-3.1.158/src/include/network/lan/complex.rb
--- old/yast2-network-3.1.154/src/include/network/lan/complex.rb 2016-06-09 15:23:31.000000000 +0200
+++ new/yast2-network-3.1.158/src/include/network/lan/complex.rb 2016-06-23 10:23:17.000000000 +0200
@@ -171,7 +171,6 @@
def WriteDialog
return :next if !Lan.Modified
- LanItems.SetModified
Wizard.RestoreHelp(Ops.get_string(@help, "write", ""))
Lan.AbortFunction = -> { PollAbort() && ReallyAbort() }
ret = Lan.Write
@@ -508,7 +507,7 @@
if Stage.initial
return Popup.ConfirmAbort(:painless)
else
- return ReallyAbort() if LanItems.modified
+ return ReallyAbort() if LanItems.GetModified
return true
end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-network-3.1.154/src/include/network/lan/hardware.rb new/yast2-network-3.1.158/src/include/network/lan/hardware.rb
--- old/yast2-network-3.1.154/src/include/network/lan/hardware.rb 2016-06-09 15:23:31.000000000 +0200
+++ new/yast2-network-3.1.158/src/include/network/lan/hardware.rb 2016-06-23 10:23:17.000000000 +0200
@@ -787,7 +787,7 @@
end
def devname_from_hw_dialog
- UI.QueryWidget(Id(:ifcfg_name), :Value)
+ UI.QueryWidget(Id(:ifcfg_name), :Value) if UI.WidgetExists(Id(:ifcfg_name))
end
def validate_hw(_key, _event)
@@ -1157,11 +1157,6 @@
break
elsif ret == :next
if LanItems.type == "iucv"
- # #176330, must be static
- LanItems.nm_name = Ops.add(
- "static-iucv-id-",
- Convert.to_string(UI.QueryWidget(Id(:iucv_user), :Value))
- )
LanItems.device = Ops.add(
"id-",
Convert.to_string(UI.QueryWidget(Id(:iucv_user), :Value))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-network-3.1.154/src/include/network/runtime.rb new/yast2-network-3.1.158/src/include/network/runtime.rb
--- old/yast2-network-3.1.154/src/include/network/runtime.rb 2016-06-09 15:23:32.000000000 +0200
+++ new/yast2-network-3.1.158/src/include/network/runtime.rb 2016-06-23 10:23:17.000000000 +0200
@@ -43,7 +43,6 @@
path(".target.bash"),
"/usr/lib/sendmail.d/update 2>/dev/null"
)
- SCR.Execute(path(".target.bash"), "/usr/sbin/config.postfix 2>/dev/null")
end
end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-network-3.1.154/src/lib/network/network_autoyast.rb new/yast2-network-3.1.158/src/lib/network/network_autoyast.rb
--- old/yast2-network-3.1.154/src/lib/network/network_autoyast.rb 2016-06-09 15:23:32.000000000 +0200
+++ new/yast2-network-3.1.158/src/lib/network/network_autoyast.rb 2016-06-23 10:23:17.000000000 +0200
@@ -128,7 +128,7 @@
# Checks if the profile asks for keeping installation network configuration
def keep_net_config?
- ret = ay_networking_section.fetch("keep_install_network", false)
+ ret = ay_networking_section.fetch("keep_install_network", true)
log.info("NetworkAutoYast: keep installation network: #{ret}")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-network-3.1.154/src/modules/Lan.rb new/yast2-network-3.1.158/src/modules/Lan.rb
--- old/yast2-network-3.1.154/src/modules/Lan.rb 2016-06-09 15:23:32.000000000 +0200
+++ new/yast2-network-3.1.158/src/modules/Lan.rb 2016-06-23 10:23:17.000000000 +0200
@@ -96,10 +96,14 @@
# Return a modification status
# @return true if data was modified
def Modified
- ret = LanItems.GetModified || DNS.modified || Routing.Modified ||
- NetworkConfig.Modified ||
- NetworkService.Modified
- ret
+ return true if LanItems.GetModified
+ return true if DNS.modified
+ return true if Routing.Modified
+ return true if NetworkConfig.Modified
+ return true if NetworkService.Modified
+ return true if SuSEFirewall.GetModified
+
+ false
end
# function for use from autoinstallation (Fate #301032)
@@ -412,7 +416,6 @@
Builtins.sleep(sl)
return false if Abort()
- LanItems.modified = false
@initialized = true
Progress.Finish if @gui
@@ -709,7 +712,7 @@
"keep_install_network" => Ops.get_boolean(
LanItems.autoinstall_settings,
"keep_install_network",
- false
+ true
)
}
Builtins.y2milestone("Exported map: %1", ay)
@@ -988,7 +991,7 @@
configure_as_bridge_port(ifcfg)
Ops.set(LanItems.Items, [current, "ifcfg"], new_ifcfg)
- LanItems.modified = true
+ LanItems.SetModified
LanItems.force_restart = true
Builtins.y2internal("List %1", NetworkInterfaces.List(""))
# re-read configuration to see new items in UI
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-network-3.1.154/src/modules/LanItems.rb new/yast2-network-3.1.158/src/modules/LanItems.rb
--- old/yast2-network-3.1.154/src/modules/LanItems.rb 2016-06-09 15:23:32.000000000 +0200
+++ new/yast2-network-3.1.158/src/modules/LanItems.rb 2016-06-23 10:23:17.000000000 +0200
@@ -200,12 +200,6 @@
"datagram" => _("datagram")
}
- # propose options
- @proposal_valid = false
-
- # NetworkModules:: name
- @nm_name = ""
-
Yast.include self, "network/hardware.rb"
# Default values used when creating an emulated NIC for physical s390 hardware.
@@ -380,7 +374,7 @@
if Ops.greater_than(
Builtins.size(Ops.get_string(@driver_options, driver, "")),
0
- )
+ )
" "
else
""
@@ -434,36 +428,43 @@
value
end
+ # It replaces a tuple identified by replace_key in current item's udev rule
+ #
+ # Note that the tuple is identified by key only. However modification flag is
+ # set only if value was changed (in case when replace_key == new_key)
+ #
+ # @param replace_key [string] udev key which identifies tuple to be replaced
+ # @param new_key [string] new key to by used
+ # @param new_val [string] value for new key
+ # @return updated rule when replace_key is found, current rule otherwise
def ReplaceItemUdev(replace_key, new_key, new_val)
- new_rules = []
+ new_rule = []
# udev syntax distinguishes among others:
# = for assignment
# == for equality checks
operator = new_key == "NAME" ? "=" : "=="
+ current_rule = getUdevFallback
- Builtins.foreach(getUdevFallback) do |row|
- if Builtins.issubstring(row, replace_key)
- row = Builtins.sformat("%1%2\"%3\"", new_key, operator, new_val)
- end
- new_rules = Builtins.add(new_rules, row)
- end
+ return current_rule if !new_key || new_key.empty?
+ return current_rule if !new_val || new_val.empty?
- Builtins.y2debug(
- "LanItems::ReplaceItemUdev: udev rules %1",
- Ops.get_list(@Items, [@current, "udev", "net"], [])
- )
+ i = current_rule.find_index { |tuple| tuple =~ /#{replace_key}/ }
+ if i
+ # deep_copy is most probably not neccessary because getUdevFallback does
+ # deep_copy on return value. However, getUdevFallback will be subect of refactoring
+ # so caution is must. Moreover new_rule is also return value so it should be
+ # copied anyway
+ new_rule = deep_copy(current_rule)
+ new_rule[i] = "#{new_key}#{operator}\"#{new_val}\""
+
+ SetModified() if current_rule != new_rule
+ end
- Ops.set(@Items, [@current, "udev", "net"], new_rules)
+ log.info("LanItems#ReplaceItemUdev: #{current_rule} -> #{new_rule}")
- Builtins.y2debug(
- "LanItems::ReplaceItemUdev(%1, %2, %3) %4",
- replace_key,
- new_key,
- new_val,
- new_rules
- )
+ Items()[@current]["udev"]["net"] = new_rule
- deep_copy(new_rules)
+ new_rule
end
# Updates device name.
@@ -509,8 +510,9 @@
# Sets new device name for current item
def rename(name)
- if (GetCurrentName() != name)
+ if GetCurrentName() != name
@Items[@current]["renamed_to"] = name
+ SetModified()
else
@Items[@current].delete("renamed_to")
end
@@ -676,6 +678,7 @@
def GetModified
@modified
end
+
# Function sets internal variable, which indicates, that any
# settings were modified, to "true"
def SetModified
@@ -1012,6 +1015,8 @@
# It is full outer join in -> you can have hwinfo part with no coresponding
# netconfig part (or vice versa) in @Items when the method is done.
def Read
+ reset_cache
+
ReadHw()
NetworkInterfaces.Read
NetworkInterfaces.CleanHotplugSymlink
@@ -1097,7 +1102,7 @@
autoinstall_settings["start_immediately"] = settings.fetch("start_immediately", false)
autoinstall_settings["strict_IP_check_timeout"] = settings.fetch("strict_IP_check_timeout", -1)
- autoinstall_settings["keep_install_network"] = settings.fetch("keep_install_network", false)
+ autoinstall_settings["keep_install_network"] = settings.fetch("keep_install_network", true)
# FIXME: createS390Device does two things, it
# - updates internal structures
@@ -1133,12 +1138,12 @@
@Items,
[key, "table_descr", "rich_descr"],
""
-),
+ ),
"table_descr" => Ops.get_list(
@Items,
[key, "table_descr", "table_descr"],
[]
-)
+ )
)
end
end
@@ -1151,7 +1156,7 @@
if Builtins.haskey(
@request_firmware,
Ops.get_string(@Items, [@current, "hwinfo", "driver"], "")
- )
+ )
need = true
end
else
@@ -1161,7 +1166,7 @@
if Builtins.haskey(
@request_firmware,
Ops.get_string(driver, ["modules", 0, 0], "")
- )
+ )
Builtins.y2milestone(
"driver %1 needs firmware",
Ops.get_string(driver, ["modules", 0, 0], "")
@@ -1180,7 +1185,7 @@
if Builtins.haskey(
@request_firmware,
Ops.get_string(@Items, [@current, "hwinfo", "driver"], "")
- )
+ )
kernel_module = Ops.get_string(
@Items,
[@current, "hwinfo", "driver"],
@@ -1194,7 +1199,7 @@
if Builtins.haskey(
@request_firmware,
Ops.get_string(driver, ["modules", 0, 0], "")
- )
+ )
kernel_module = Ops.get_string(driver, ["modules", 0, 0], "")
raise Break
end
@@ -1414,7 +1419,7 @@
rich << physical_port_id if physical_port_id?(ifcfg_name)
# display it only if we need it, don't duplicate "ifcfg_name" above
if IsNotEmpty(item_hwinfo["dev_name"]) && ifcfg_name.empty?
- dev_name = _("Device Name: %s") % item_hwinfo["dev_name"]
+ dev_name = _("Device Name: %s") % item_hwinfo["dev_name"]
rich << HTML.Bold(dev_name) << "<br>"
end
rich = HTML.Bold(descr) + rich
@@ -1455,11 +1460,7 @@
# Is current device hotplug or not? I.e. is connected via usb/pcmci?
def isCurrentHotplug
hotplugtype = Ops.get_string(getCurrentItem, ["hwinfo", "hotplug"], "")
- if hotplugtype == "usb" || hotplugtype == "pcmci"
- return true
- else
- return false
- end
+ hotplugtype == "usb" || hotplugtype == "pcmci"
end
# Check if currently edited device gets its IP address
@@ -1554,17 +1555,17 @@
),
4
)
- if DriverType(@type) == "ctc" || DriverType(@type) == "lcs"
- @qeth_chanids = Builtins.sformat("%1%2 %1%3", devstr, devid0, devid1)
- else
- @qeth_chanids = Builtins.sformat(
- "%1%2 %1%3 %1%4",
- devstr,
- devid0,
- devid1,
- devid2
- )
- end
+ @qeth_chanids = if DriverType(@type) == "ctc" || DriverType(@type) == "lcs"
+ Builtins.sformat("%1%2 %1%3", devstr, devid0, devid1)
+ else
+ Builtins.sformat(
+ "%1%2 %1%3 %1%4",
+ devstr,
+ devid0,
+ devid1,
+ devid2
+ )
+ end
end
nil
@@ -1743,18 +1744,18 @@
Builtins.y2milestone("Startmode by product: #{product_startmode}")
- case product_startmode
- when "ifplugd"
- if replace_ifplugd?
- startmode = hotplug_usable? ? "hotplug" : "auto"
- else
- startmode = product_startmode
- end
- when "auto"
- startmode = "auto"
- else
- startmode = hotplug_usable? ? "hotplug" : "auto"
- end
+ startmode = case product_startmode
+ when "ifplugd"
+ if replace_ifplugd?
+ hotplug_usable? ? "hotplug" : "auto"
+ else
+ product_startmode
+ end
+ when "auto"
+ "auto"
+ else
+ hotplug_usable? ? "hotplug" : "auto"
+ end
Builtins.y2milestone("New device startmode: #{startmode}")
@@ -1817,7 +1818,8 @@
# Sets device map items related to dhclient
def setup_dhclient_options(devmap)
if isCurrentDHCP
- devmap["DHCLIENT_SET_DEFAULT_ROUTE"] = TRISTATE_TO_S.fetch(@set_default_route)
+ val = TRISTATE_TO_S.fetch(@set_default_route)
+ devmap["DHCLIENT_SET_DEFAULT_ROUTE"] = val if val
end
devmap
end
@@ -1831,7 +1833,7 @@
devmap["STARTMODE"] = @startmode
devmap["IFPLUGD_PRIORITY"] = @ifplugd_priority.to_i if @startmode == "ifplugd"
devmap["BOOTPROTO"] = @bootproto
- devmap["_aliases"] = @aliases
+ devmap["_aliases"] = @aliases if @aliases && !@aliases.empty?
log.info("aliases #{@aliases}")
@@ -1839,6 +1841,11 @@
end
# Commit pending operation
+ #
+ # It commits *only* content of the corresponding ifcfg into NetworkInterfaces.
+ # All other stuff which is managed by LanItems (like udev's, ...) is handled
+ # elsewhere
+ #
# @return true if success
def Commit
if @operation != :add && @operation != :edit
@@ -2018,21 +2025,28 @@
newdev["INTERFACETYPE"] = @type
end
- NetworkInterfaces.Name = Ops.get_string(@Items, [@current, "ifcfg"], "")
- NetworkInterfaces.Current = deep_copy(newdev)
+ current_map = (GetCurrentMap() || {}).select { |_, v| !v.nil? && !v.empty? }
+ new_map = newdev.select { |_, v| !v.nil? && !v.empty? }
+
+ # CanonicalizeIP is called to get new device map into the same shape as
+ # NetworkInterfaces provides the current one.
+ if current_map != NetworkInterfaces.CanonicalizeIP(new_map)
+ keep_existing = false
+ ifcfg_name = Items()[@current]["ifcfg"]
+ ifcfg_name.replace("") if !NetworkInterfaces.Change2(ifcfg_name, newdev, keep_existing)
+
+ # bnc#752464 - can leak wireless passwords
+ # useful only for debugging. Writes huge struct mostly filled by defaults.
+ Builtins.y2debug("%1", NetworkInterfaces.ConcealSecrets1(newdev))
+
+ # configure bridge ports
+ if @bridge_ports
+ @bridge_ports.split.each { |bp| configure_as_bridge_port(bp) }
+ end
- # bnc#752464 - can leak wireless passwords
- # useful only for debugging. Writes huge struct mostly filled by defaults.
- Builtins.y2debug("%1", NetworkInterfaces.ConcealSecrets1(newdev))
-
- Ops.set(@Items, [@current, "ifcfg"], "") if !NetworkInterfaces.Commit
-
- # configure bridge ports
- if @bridge_ports
- @bridge_ports.split.each { |bp| configure_as_bridge_port(bp) }
+ SetModified()
end
- @modified = true
@operation = nil
true
end
@@ -2044,11 +2058,9 @@
log.info "rollback item #{@current}"
if getCurrentItem.fetch("hwinfo", {}).empty?
LanItems.Items.delete(@current)
- else
- if IsCurrentConfigured()
- if !getNetworkInterfaces.include?(getCurrentItem["ifcfg"])
- LanItems.Items[@current].delete("ifcfg")
- end
+ elsif IsCurrentConfigured()
+ if !getNetworkInterfaces.include?(getCurrentItem["ifcfg"])
+ LanItems.Items[@current].delete("ifcfg")
end
end
end
@@ -2203,17 +2215,26 @@
# Creates eth emulation for s390 devices
#
- # @param [Hash] an s390 device description as obtained from AY profile
- def createS390Device(rule)
- Builtins.y2milestone("creating device s390 network device, #{rule}")
-
- Select("")
- @type = rule["type"] || ""
- @qeth_chanids = rule["chanids"] || ""
- @qeth_layer2 = rule.fetch("layer2", false)
- @qeth_portname = rule["portname"] || ""
- @chan_mode = rule["protocol"] || ""
- @iucv_user = rule["router"] || ""
+ # @param [Hash] an s390 device description (e.g. as obtained from AY profile).
+ # If it contains s390 device attributes definition, then these definitions takes
+ # precendence over values assigned to corresponding LanItems' global variables
+ # before the method invocation. Hash keys are strings named after LanItems'
+ # s390 globals.
+ def createS390Device(dev_attrs = {})
+ Builtins.y2milestone("creating device s390 network device, #{dev_attrs}")
+
+ # FIXME: leftover from dropping LanUdevAuto module. This was its way how to
+ # configure s390 specific globals. When running in "normal" mode these attributes
+ # are initialized elsewhere (see S390Dialog in include/network/lan/hardware.rb)
+ if !dev_attrs.empty?
+ Select("")
+ @type = dev_attrs["type"] || ""
+ @qeth_chanids = dev_attrs["chanids"] || ""
+ @qeth_layer2 = dev_attrs.fetch("layer2", false)
+ @qeth_portname = dev_attrs["portname"] || ""
+ @chan_mode = dev_attrs["protocol"] || ""
+ @iucv_user = dev_attrs["router"] || ""
+ end
result = true
# command to create device
@@ -2286,7 +2307,7 @@
SCR.Execute(path(".target.bash_output"), command1),
from: "any",
to: "map