[virt-tools-list] [virt-manager PATCH] create: add UI interface for LXC user namespace
Chen Hanxiao
chenhanxiao at cn.fujitsu.com
Tue Feb 18 08:07:17 UTC 2014
We could config user namespace for LXC
when creating a new container.
Signed-off-by: Chen Hanxiao <chenhanxiao at cn.fujitsu.com>
---
ui/create.ui | 185 +++++++++++++++++++++++++++++++++++++++++++++++++-
virtManager/create.py | 35 ++++++++++
2 files changed, 218 insertions(+), 2 deletions(-)
diff --git a/ui/create.ui b/ui/create.ui
index 05e4e4b..d52620f 100644
--- a/ui/create.ui
+++ b/ui/create.ui
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.16.1 -->
+<!-- Generated with glade 3.16.0 on Tue Feb 18 02:13:26 2014 -->
<interface>
- <requires lib="gtk+" version="3.0"/>
+ <!-- interface-requires gtk+ 3.0 -->
<object class="GtkAdjustment" id="adjustment2">
<property name="upper">128</property>
<property name="step_increment">1</property>
@@ -2481,6 +2481,187 @@ is not yet supported.</small></property>
<property name="position">0</property>
</packing>
</child>
+ <child>
+ <object class="GtkCheckButton" id="config-idmap">
+ <property name="label" translatable="yes">Enable user namespace</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="on_config_idmap_toggled" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkGrid" id="config-idmap-grid">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkLabel" id="label31">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">1</property>
+ <property name="label" translatable="yes">User ID:</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">1</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label39">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">1</property>
+ <property name="label" translatable="yes">Group ID:</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">2</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label52">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">start</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">0</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label53">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">target</property>
+ </object>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="top_attach">0</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label54">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">count</property>
+ </object>
+ <packing>
+ <property name="left_attach">3</property>
+ <property name="top_attach">0</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="uid-start">
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="can_focus">True</property>
+ <property name="width_chars">10</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">1</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="uid-target">
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="can_focus">True</property>
+ <property name="width_chars">10</property>
+ </object>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="uid-count">
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="can_focus">True</property>
+ <property name="width_chars">10</property>
+ </object>
+ <packing>
+ <property name="left_attach">3</property>
+ <property name="top_attach">1</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="gid-start">
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="can_focus">True</property>
+ <property name="width_chars">10</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">2</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="gid-target">
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="can_focus">True</property>
+ <property name="width_chars">10</property>
+ </object>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="gid-count">
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="can_focus">True</property>
+ <property name="width_chars">10</property>
+ </object>
+ <packing>
+ <property name="left_attach">3</property>
+ <property name="top_attach">2</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
</object>
</child>
</object>
diff --git a/virtManager/create.py b/virtManager/create.py
index b4b1dfe..c8c1dbb 100644
--- a/virtManager/create.py
+++ b/virtManager/create.py
@@ -155,6 +155,7 @@ class vmmCreate(vmmGObjectUI):
"on_config_hv_changed": self.hv_changed,
"on_config_arch_changed": self.arch_changed,
+ "on_config_idmap_toggled": self.toggle_idmap,
})
self.bind_escape_key_close()
@@ -470,6 +471,8 @@ class vmmCreate(vmmGObjectUI):
method_container_app.set_active(True)
self.widget("virt-install-box").set_visible(not is_container)
self.widget("container-install-box").set_visible(is_container)
+ self.widget("config-idmap").set_visible(is_container)
+ self.widget("config-idmap-grid").set_visible(is_container)
show_kernel = (self.capsguest.arch not in ["x86_64", "i686"])
show_dtb = ("arm" in self.capsguest.arch or
@@ -592,6 +595,17 @@ class vmmCreate(vmmGObjectUI):
self.widget("config-set-macaddr").set_active(bool(newmac))
self.widget("config-macaddr").set_text(newmac)
+ # User namespace idmap setting
+ self.widget("config-idmap").set_active(False)
+
+ self.widget("uid-start").set_text('0')
+ self.widget("uid-target").set_text('1000')
+ self.widget("uid-count").set_text('10')
+
+ self.widget("gid-start").set_text('0')
+ self.widget("gid-target").set_text('1000')
+ self.widget("gid-count").set_text('10')
+
self.widget("config-advanced-expander").set_expanded(False)
if self.netlist:
@@ -1227,6 +1241,11 @@ class vmmCreate(vmmGObjectUI):
def toggle_macaddr(self, src):
self.widget("config-macaddr").set_sensitive(src.get_active())
+ def toggle_idmap(self, src):
+ for name in ["uid-start", "uid-target", "uid-count",
+ "gid-start", "gid-target", "gid-count"]:
+ self.widget(name).set_sensitive(src.get_active())
+
# Navigation methods
def set_install_page(self):
instnotebook = self.widget("install-method-pages")
@@ -1657,6 +1676,14 @@ class vmmCreate(vmmGObjectUI):
macaddr = self.widget("config-macaddr").get_text().strip()
nettype = self.netlist.get_network_selection()[0]
+ uid_start = self.widget("uid-start").get_text().strip()
+ uid_target = self.widget("uid-target").get_text().strip()
+ uid_count = self.widget("uid-count").get_text().strip()
+
+ gid_start = self.widget("gid-start").get_text().strip()
+ gid_target = self.widget("gid-target").get_text().strip()
+ gid_count = self.widget("gid-count").get_text().strip()
+
if nettype is None:
# No network device available
instmethod = self.get_config_install_page()
@@ -1681,6 +1708,14 @@ class vmmCreate(vmmGObjectUI):
self.nic = nic
self.guest.add_device(self.nic)
+ if self.widget("config-idmap").get_active():
+ self.guest.idmap.uid_start = uid_start
+ self.guest.idmap.uid_target = uid_target
+ self.guest.idmap.uid_count = uid_count
+ self.guest.idmap.gid_start = gid_start
+ self.guest.idmap.gid_target = gid_target
+ self.guest.idmap.gid_count = gid_count
+
return True
def _undo_finish_cursor(self):
--
1.8.5.3
More information about the virt-tools-list
mailing list