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
