[node-patches] Change in ovirt-node[master]: [DRAFT] ui: Expose bond creation

fabiand at fedoraproject.org fabiand at fedoraproject.org
Fri Jun 14 10:35:51 UTC 2013


Fabian Deutsch has uploaded a new change for review.

Change subject: [DRAFT] ui: Expose bond creation
......................................................................

[DRAFT] ui: Expose bond creation

Change-Id: Ib3f4e7a5918ebc651474cbb11c10b696e101c7f8
Signed-off-by: Fabian Deutsch <fabiand at fedoraproject.org>
---
M src/ovirt/node/setup/core/network_page.py
1 file changed, 83 insertions(+), 24 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-node refs/changes/15/15715/1

diff --git a/src/ovirt/node/setup/core/network_page.py b/src/ovirt/node/setup/core/network_page.py
index d1313a8..b2a1261 100644
--- a/src/ovirt/node/setup/core/network_page.py
+++ b/src/ovirt/node/setup/core/network_page.py
@@ -32,10 +32,46 @@
 """
 
 
+class NicTable(ui.Table):
+    def __init__(self, path, height=3, multi=False):
+        header = "Device  Status        Model          MAC Address"
+        if multi:
+            header = "    " + header
+
+        super(NicTable, self).__init__(path,
+                                       "Available System NICs",
+                                       header,
+                                       self._get_nics(),
+                                       height=height, multi=multi),
+
+    def _get_nics(self):
+        def justify(txt, l):
+            txt = txt if txt else ""
+            return txt.ljust(l)[0:l]
+        node_nics = []
+        first_nic = None
+        model = utils.network.NodeNetwork()
+        for name, nic in sorted(model.nics().items()):
+            if first_nic is None:
+                first_nic = name
+            is_cfg = "Configured" if nic.is_configured() else "Unconfigured"
+            description = " ".join([justify(nic.ifname, 7),
+                                    justify(is_cfg, 13),
+                                    justify(nic.vendor, 14),
+                                    justify(nic.hwaddr, 17)
+                                    ])
+            node_nics.append((name, description))
+        node_nics.append(("foo", "foooo"))
+        return node_nics
+
+
 class Plugin(plugins.NodePlugin):
     """This is the network page
     """
-    _model_extra = {}
+    _model_extra = {"bond.slaves.selected": []}
+
+    _nic_details_group = None
+    _bond_group = None
 
     def __init__(self, app):
         super(Plugin, self).__init__(app)
@@ -48,6 +84,11 @@
             "dialog.nic.ipv6.netmask", "dialog.nic.ipv6.gateway",
             "dialog.nic.vlanid",
             "dialog.nic.layout_bridged"])
+
+        self._bond_group = self.widgets.group([
+            "bond.name",
+            "bond.slaves",
+            "bond.options"])
 
     def name(self):
         return "Network"
@@ -86,6 +127,9 @@
         ip_or_empty = valid.IPAddress() | valid.Empty()
         fqdn_ip_or_empty = valid.FQDNOrIPAddress() | valid.Empty()
 
+        valid_bond_name = valid.RegexValidator("^bond[0-9]+|007$",
+                                               "a valid bond name (bond[0-9])")
+
         return {"hostname": fqdn_ip_or_empty,
                 "dns[0]": ip_or_empty,
                 "dns[1]": ip_or_empty,
@@ -100,6 +144,8 @@
                 "dialog.nic.ipv6.gateway": valid.IPv6Address() | valid.Empty(),
                 "dialog.nic.vlanid": (valid.Number(bounds=[0, 4096]) |
                                       valid.Empty()),
+
+                "bond.name": valid_bond_name
                 }
 
     def ui_content(self):
@@ -115,35 +161,18 @@
               ui.Entry("ntp[0]", "NTP Server 1:"),
               ui.Entry("ntp[1]", "NTP Server 2:"),
               ui.Divider("divider[2]"),
-              ui.Table("nics", "Available System NICs",
-                       "Device  Status        Model          MAC Address",
-                       self._get_nics()),
-              ui.Button("button.ping", "Ping")
+              NicTable("nics", height=3),
+
+              ui.Row("row[0]",
+                     [ui.Button("button.ping", "Ping"),
+                      ui.Button("button.create_bond", "Create Bond")
+                      ])
               ]
 
         page = ui.Page("page", ws)
         # Save it "locally" as a dict, for better accessability
         self.widgets.add(page)
         return page
-
-    def _get_nics(self):
-        def justify(txt, l):
-            txt = txt if txt else ""
-            return txt.ljust(l)[0:l]
-        node_nics = []
-        first_nic = None
-        model = utils.network.NodeNetwork()
-        for name, nic in sorted(model.nics().items()):
-            if first_nic is None:
-                first_nic = name
-            is_cfg = "Configured" if nic.is_configured() else "Unconfigured"
-            description = " ".join([justify(nic.ifname, 7),
-                                    justify(is_cfg, 13),
-                                    justify(nic.vendor, 14),
-                                    justify(nic.hwaddr, 17)
-                                    ])
-            node_nics.append((name, description))
-        return node_nics
 
     def _build_dialog(self, path, txt, widgets):
         self.widgets.add(widgets)
@@ -193,6 +222,12 @@
                     self.widgets["dialog.nic.vlanid"].enabled(True)
             self.widgets["dialog.nic.ipv6.bootproto"].enabled(True)
 
+        if "bond.slaves" in changes:
+            self._model_extra["bond.slaves.selected"] = \
+                self.widgets["bond.slaves"].selection()
+        elif "bond.name" in changes and changes["bond.name"] == "007":
+            self.widgets["bond.options"].text("Bartender: Shaken or stirred?")
+
     def on_merge(self, effective_changes):
         self.logger.info("Saving network stuff")
         changes = Changeset(self.pending_changes(False))
@@ -214,6 +249,11 @@
         if "dialog.nic.close" in changes:
             self._nic_dialog.close()
             return
+
+        if "button.create_bond" in changes:
+            d = CreateBondDialog("dialog.bond")
+            self.widgets.add(d)
+            return d
 
         if "button.ping" in changes:
             self.logger.debug("Opening ping page")
@@ -265,6 +305,15 @@
             # Fetch the values for the nic keys, they are used as arguments
             args = effective_model.values_for(self._nic_details_group)
             txs += self._configure_nic(*args)
+
+        if effective_changes.contains_any(self._bond_group):
+            mb = defaults.NicBonding()
+            args = effective_model.values_for(["bond.name",
+                                               "bond.slaves.selected",
+                                               "bond.options"])
+            self.logger.debug("args: %s" % args)
+            mb.update(*args)
+            txs += mb.transaction()
 
         progress_dialog = ui.TransactionProgressDialog("dialog.txs", txs, self)
         progress_dialog.run()
@@ -480,3 +529,13 @@
                         ui.CloseButton("dialog.nic.close", "Close")
                         ]
         self.plugin._nic_details_group.enabled(False)
+
+
+class CreateBondDialog(ui.Dialog):
+    def __init__(self, path):
+        widgets = [ui.Entry("bond.name", "Name:"),
+                   ui.Divider("bond.divider[0]"),
+                   ui.Entry("bond.options", "Options:"),
+                   ui.Divider("bond.divider[1]"),
+                   NicTable("bond.slaves", multi=True)]
+        super(CreateBondDialog, self).__init__(path, "Create Bond", widgets)


-- 
To view, visit http://gerrit.ovirt.org/15715
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ib3f4e7a5918ebc651474cbb11c10b696e101c7f8
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-node
Gerrit-Branch: master
Gerrit-Owner: Fabian Deutsch <fabiand at fedoraproject.org>



More information about the node-patches mailing list