Vinzenz Feenstra has uploaded a new change for review.

Change subject: Support for setting VCPUs online/offline
......................................................................

Support for setting VCPUs online/offline

Change-Id: I6b6ca2e46eca99f94fabd2a75d61c494f1f0382a
Signed-off-by: Vinzenz Feenstra <[email protected]>
---
M Makefile.am
M ovirt-guest-agent.rhel6.spec
M ovirt-guest-agent.spec
M ovirt-guest-agent/GuestAgentLinux2.py
M ovirt-guest-agent/GuestAgentWin32.py
M ovirt-guest-agent/Makefile.am
M ovirt-guest-agent/Makefile.el5
M ovirt-guest-agent/OVirtAgentLogic.py
A ovirt-guest-agent/consoleapps/ovirt-control-vcpu
A ovirt-guest-agent/control-vcpu
M ovirt-guest-agent/pam/Makefile.am
A ovirt-guest-agent/pam/ovirt-control-vcpus
12 files changed, 71 insertions(+), 2 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-guest-agent 
refs/changes/41/23341/1

diff --git a/Makefile.am b/Makefile.am
index d13b408..67a2891 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -54,6 +54,7 @@
     ovirt-guest-agent/WinFile.py \
     ovirt-guest-agent/ovirt-guest-agent.py \
     ovirt-guest-agent/version.py \
+    ovirt-guest-agent/control-vcpus \
     tests/*.py
 
 PEP8_BLACKLIST = ovirt-guest-agent/setup.py
@@ -75,4 +76,5 @@
        $(LN_S) -f $(bindir)/consolehelper 
$(DESTDIR)/$(pkgdatadir)/ovirt-locksession
        $(LN_S) -f $(bindir)/consolehelper 
$(DESTDIR)/$(pkgdatadir)/ovirt-shutdown
        $(LN_S) -f $(bindir)/consolehelper 
$(DESTDIR)/$(pkgdatadir)/ovirt-hibernate
+       $(LN_S) -f $(bindir)/consolehelper 
$(DESTDIR)/$(pkgdatadir)/ovirt-control-vcpus
        $(INSTALL) -d $(DESTDIR)/$(localstatedir)/log/ovirt-guest-agent
diff --git a/ovirt-guest-agent.rhel6.spec b/ovirt-guest-agent.rhel6.spec
index 789bd62..5d5916c 100644
--- a/ovirt-guest-agent.rhel6.spec
+++ b/ovirt-guest-agent.rhel6.spec
@@ -106,11 +106,13 @@
 %config(noreplace) %{_sysconfdir}/pam.d/ovirt-locksession
 %config(noreplace) %{_sysconfdir}/pam.d/ovirt-shutdown
 %config(noreplace) %{_sysconfdir}/pam.d/ovirt-hibernate
+%config(noreplace) %{_sysconfdir}/pam.d/ovirt-control-vcpus
 %config(noreplace) %attr (644,root,root) 
%{_sysconfdir}/udev/rules.d/55-ovirt-guest-agent.rules
 %config(noreplace) 
%{_sysconfdir}/dbus-1/system.d/org.ovirt.vdsm.Credentials.conf
 %config(noreplace) %{_sysconfdir}/security/console.apps/ovirt-locksession
 %config(noreplace) %{_sysconfdir}/security/console.apps/ovirt-shutdown
 %config(noreplace) %{_sysconfdir}/security/console.apps/ovirt-hibernate
+%config(noreplace) %{_sysconfdir}/security/console.apps/ovirt-control-vcpus
 
 %attr (755,root,root) %{_datadir}/ovirt-guest-agent/ovirt-guest-agent.py*
 
@@ -122,9 +124,11 @@
 %{_datadir}/ovirt-guest-agent/ovirt-locksession
 %{_datadir}/ovirt-guest-agent/ovirt-shutdown
 %{_datadir}/ovirt-guest-agent/ovirt-hibernate
+%{_datadir}/ovirt-guest-agent/ovirt-conrol-vcpus
 
 %attr (755,root,root) %{_datadir}/ovirt-guest-agent/LockActiveSession.py*
 %attr (755,root,root) %{_datadir}/ovirt-guest-agent/hibernate
+%attr (755,root,root) %{_datadir}/ovirt-guest-agent/control-vcpus
 
 %attr (755,root,root) %{_initrddir}/ovirt-guest-agent
 
diff --git a/ovirt-guest-agent.spec b/ovirt-guest-agent.spec
index b944cd1..598b65d 100644
--- a/ovirt-guest-agent.spec
+++ b/ovirt-guest-agent.spec
@@ -177,11 +177,13 @@
 %config %{_sysconfdir}/pam.d/ovirt-locksession
 %config %{_sysconfdir}/pam.d/ovirt-shutdown
 %config %{_sysconfdir}/pam.d/ovirt-hibernate
+%config %{_sysconfdir}/pam.d/ovirt-control-vcpus
 %config %attr (644,root,root) 
%{_sysconfdir}/udev/rules.d/55-ovirt-guest-agent.rules
 %config %{_sysconfdir}/dbus-1/system.d/org.ovirt.vdsm.Credentials.conf
 %config %{_sysconfdir}/security/console.apps/ovirt-locksession
 %config %{_sysconfdir}/security/console.apps/ovirt-shutdown
 %config %{_sysconfdir}/security/console.apps/ovirt-hibernate
+%config %{_sysconfdir}/security/console.apps/ovirt-control-vcpus
 
 %attr (755,root,root) %{_datadir}/ovirt-guest-agent/ovirt-guest-agent.py*
 
@@ -193,9 +195,11 @@
 %{_datadir}/ovirt-guest-agent/ovirt-locksession
 %{_datadir}/ovirt-guest-agent/ovirt-shutdown
 %{_datadir}/ovirt-guest-agent/ovirt-hibernate
+%{_datadir}/ovirt-guest-agent/ovirt-control-vcpus
 
 %attr (755,root,root) %{_datadir}/ovirt-guest-agent/LockActiveSession.py*
 %attr (755,root,root) %{_datadir}/ovirt-guest-agent/hibernate
+%attr (755,root,root) %{_datadir}/ovirt-guest-agent/control-vcpus
 
 %{_unitdir}/ovirt-guest-agent.service
 
diff --git a/ovirt-guest-agent/GuestAgentLinux2.py 
b/ovirt-guest-agent/GuestAgentLinux2.py
index 5f5f7c4..e79da6c 100644
--- a/ovirt-guest-agent/GuestAgentLinux2.py
+++ b/ovirt-guest-agent/GuestAgentLinux2.py
@@ -184,6 +184,12 @@
         logging.debug("Executing hibernate command: %s", cmd)
         subprocess.call(cmd)
 
+    def controlVCPU(self, online, offline):
+        cmd = ['/usr/share/ovirt-guest-agent/ovirt-control-vcpu',
+               online or "''", offline or "''"]
+        logging.info("Executing control vcpu command: %s", cmd)
+        subprocess.call(cmd)
+
 
 class LinuxDataRetriver(DataRetriverBase):
 
diff --git a/ovirt-guest-agent/GuestAgentWin32.py 
b/ovirt-guest-agent/GuestAgentWin32.py
index 4cf3d9d..5a21536 100644
--- a/ovirt-guest-agent/GuestAgentWin32.py
+++ b/ovirt-guest-agent/GuestAgentWin32.py
@@ -252,6 +252,9 @@
                 "Error setting system to hibernation state: %d",
                 win32api.GetLastError())
 
+    def controlVCPU(self, online, offline):
+        pass # Not implemented yet
+
     # The LockWorkStation function is callable only by processes running on the
     # interactive desktop.
     def LockWorkStation(self):
diff --git a/ovirt-guest-agent/Makefile.am b/ovirt-guest-agent/Makefile.am
index 45a7a95..f1c5033 100644
--- a/ovirt-guest-agent/Makefile.am
+++ b/ovirt-guest-agent/Makefile.am
@@ -10,7 +10,7 @@
     OVirtAgentLogic.py \
     VirtIoChannel.py \
     ovirt-guest-agent.py \
-       topology.py \
+    topology.py \
     $(NULL)
 
 noinst_PYTHON=\
diff --git a/ovirt-guest-agent/Makefile.el5 b/ovirt-guest-agent/Makefile.el5
index dea75cf..c326413 100644
--- a/ovirt-guest-agent/Makefile.el5
+++ b/ovirt-guest-agent/Makefile.el5
@@ -23,13 +23,17 @@
        cp ovirt-guest-agent.el5.rules 
$(DESTDIR)$(CONFDIR)/udev/rules.d/55-ovirt-guest-agent.rules
        cp pam/ovirt-shutdown $(DESTDIR)$(CONFDIR)/pam.d
        cp pam/ovirt-hibernate $(DESTDIR)$(CONFDIR)/pam.d
+       cp pam/ovirt-control-vcpus $(DESTDIR)$(CONFDIR)/pam.d
        cp consoleapps/ovirt-shutdown $(DESTDIR)$(CONFDIR)/security/console.apps
        cp consoleapps/ovirt-hibernate 
$(DESTDIR)$(CONFDIR)/security/console.apps
+       cp consoleapps/ovirt-control-vpcus 
$(DESTDIR)$(CONFDIR)/security/console.apps
 
 uninstall:
        $(RM) $(DESTDIR)$(CONFDIR)/security/console.apps/ovirt-shutdown
        $(RM) $(DESTDIR)$(CONFDIR)/security/console.apps/ovirt-hibernate
+       $(RM) $(DESTDIR)$(CONFDIR)/security/console.apps/ovirt-control-vcpus
        $(RM) $(DESTDIR)$(CONFDIR)/pam.d/ovirt-shutdown
+       $(RM) $(DESTDIR)$(CONFDIR)/pam.d/ovirt-ovirt-control-vcpus
        $(RM) $(DESTDIR)$(CONFDIR)/pam.d/ovirt-hibernate
        $(RM) $(DESTDIR)$(CONFDIR)/udev/rules.d/55-ovirt-guest-agent.rules
        $(RM) $(DESTDIR)$(CONFDIR)/init.d/ovirt-guest-agent
diff --git a/ovirt-guest-agent/OVirtAgentLogic.py 
b/ovirt-guest-agent/OVirtAgentLogic.py
index 4cfccde..28ee0c3 100644
--- a/ovirt-guest-agent/OVirtAgentLogic.py
+++ b/ovirt-guest-agent/OVirtAgentLogic.py
@@ -280,6 +280,8 @@
             self.commandHandler.hibernate(state)
         elif command == 'cpu-topology':
             self.sendCPUTopology()
+        elif command == 'control-vcpu':
+            self.commandHandler.controlVCPU(args['online'], args['offline'])
         else:
             logging.error("Unknown external command: %s (%s)"
                           % (command, args))
diff --git a/ovirt-guest-agent/consoleapps/ovirt-control-vcpu 
b/ovirt-guest-agent/consoleapps/ovirt-control-vcpu
new file mode 100644
index 0000000..459ea24
--- /dev/null
+++ b/ovirt-guest-agent/consoleapps/ovirt-control-vcpu
@@ -0,0 +1 @@
+PROGRAM=/usr/share/ovirt-guest-agent/control-vcpu
diff --git a/ovirt-guest-agent/control-vcpu b/ovirt-guest-agent/control-vcpu
new file mode 100644
index 0000000..31ff7ac
--- /dev/null
+++ b/ovirt-guest-agent/control-vcpu
@@ -0,0 +1,38 @@
+#!/usr/bin/env python
+
+import sys
+
+
+def range_to_list(rval):
+    result = []
+    for part in rval.strip().split(','):
+        if not part:
+            continue
+        parts = part.split('-')
+        if len(parts) > 1:
+            result.extend([x for x in range(int(parts[0]), int(parts[1]) + 1)])
+        else:
+            result.append(int(part))
+    return result
+
+
+def control_vcpu(value, id):
+    try:
+        f = open('/sys/devices/system/cpu/cpu%d/online' % id, 'w')
+        f.write(value)
+        f.close()
+    except (OSError, IOError):
+        pass
+
+
+def control_vcpus(value, rval):
+    for id in range_to_list(rval):
+        control_vcpu(value, id)
+
+
+if len(sys.argv) == 3:
+    online, offline = sys.argv[1:3]
+    print "Onlining:", online
+    print "Offlining:", offline
+    control_vcpus('1', online)
+    control_vcpus('0', offline)
diff --git a/ovirt-guest-agent/pam/Makefile.am 
b/ovirt-guest-agent/pam/Makefile.am
index 9c65bde..f566fdb 100644
--- a/ovirt-guest-agent/pam/Makefile.am
+++ b/ovirt-guest-agent/pam/Makefile.am
@@ -3,7 +3,8 @@
 pam_DATA = \
     ovirt-shutdown \
     ovirt-locksession \
-    ovirt-hibernate
+    ovirt-hibernate \
+    ovirt-control-vcpus
 
 EXTRA_DIST = $(pam_DATA)
 
diff --git a/ovirt-guest-agent/pam/ovirt-control-vcpus 
b/ovirt-guest-agent/pam/ovirt-control-vcpus
new file mode 100644
index 0000000..51e6962
--- /dev/null
+++ b/ovirt-guest-agent/pam/ovirt-control-vcpus
@@ -0,0 +1,4 @@
+#%PAM-1.0
+auth     sufficient  pam_succeed_if.so user = ovirtagent
+auth     required    pam_deny.so
+account  required    pam_permit.so


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I6b6ca2e46eca99f94fabd2a75d61c494f1f0382a
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-guest-agent
Gerrit-Branch: master
Gerrit-Owner: Vinzenz Feenstra <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to