agent: Add logging to libvirt qemu hook (#2554)

This allows logging to the default libvirt qemu hook

Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
This commit is contained in:
Rohit Yadav 2018-04-16 17:20:48 +05:30 committed by dahn
parent b69c37862c
commit 156dbf466c

View File

@ -6,25 +6,36 @@
# to you under the Apache License, Version 2.0 (the # to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance # "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at # with the License. You may obtain a copy of the License at
# #
# http://www.apache.org/licenses/LICENSE-2.0 # http://www.apache.org/licenses/LICENSE-2.0
# #
# Unless required by applicable law or agreed to in writing, # Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an # software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the # KIND, either express or implied. See the License for the
# specific language governing permissions and limitations # specific language governing permissions and limitations
# under the License. # under the License.
import sys
import logging
import re import re
import sys
from xml.dom.minidom import parse from xml.dom.minidom import parse
from cloudutils.configFileOps import configFileOps from cloudutils.configFileOps import configFileOps
from cloudutils.networkConfig import networkConfig from cloudutils.networkConfig import networkConfig
logging.basicConfig(filename='/var/log/libvirt/qemu-hook.log',
filemode='a',
format='%(asctime)s,%(msecs)d %(name)s %(levelname)s %(message)s',
datefmt='%H:%M:%S',
level=logging.INFO)
logger = logging.getLogger('qemu-hook')
def isOldStyleBridge(brName): def isOldStyleBridge(brName):
if brName.find("cloudVirBr") == 0: if brName.find("cloudVirBr") == 0:
return True return True
else: else:
return False return False
def isNewStyleBridge(brName): def isNewStyleBridge(brName):
if brName.startswith('brvx-'): if brName.startswith('brvx-'):
return False return False
@ -32,12 +43,14 @@ def isNewStyleBridge(brName):
return False return False
else: else:
return True return True
def getGuestNetworkDevice(): def getGuestNetworkDevice():
netlib = networkConfig() netlib = networkConfig()
cfo = configFileOps("/etc/cloudstack/agent/agent.properties") cfo = configFileOps("/etc/cloudstack/agent/agent.properties")
guestDev = cfo.getEntry("guest.network.device") guestDev = cfo.getEntry("guest.network.device")
enslavedDev = netlib.getEnslavedDev(guestDev, 1) enslavedDev = netlib.getEnslavedDev(guestDev, 1)
return enslavedDev.split(".")[0] return enslavedDev.split(".")[0]
def handleMigrateBegin(): def handleMigrateBegin():
try: try:
domain = parse(sys.stdin) domain = parse(sys.stdin)
@ -45,20 +58,26 @@ def handleMigrateBegin():
source = interface.getElementsByTagName("source")[0] source = interface.getElementsByTagName("source")[0]
bridge = source.getAttribute("bridge") bridge = source.getAttribute("bridge")
if isOldStyleBridge(bridge): if isOldStyleBridge(bridge):
vlanId = bridge.replace("cloudVirBr","") vlanId = bridge.replace("cloudVirBr", "")
elif isNewStyleBridge(bridge): elif isNewStyleBridge(bridge):
vlanId = re.sub(r"br(\w+)-","",bridge) vlanId = re.sub(r"br(\w+)-", "", bridge)
else: else:
continue continue
phyDev = getGuestNetworkDevice() phyDev = getGuestNetworkDevice()
newBrName="br" + phyDev + "-" + vlanId newBrName = "br" + phyDev + "-" + vlanId
source.setAttribute("bridge", newBrName) source.setAttribute("bridge", newBrName)
print(domain.toxml()) print(domain.toxml())
except: except:
pass pass
if __name__ == '__main__': if __name__ == '__main__':
if len(sys.argv) != 5: if len(sys.argv) != 5:
sys.exit(0) sys.exit(0)
if sys.argv[2] == "migrate" and sys.argv[3] == "begin": # For docs refer https://libvirt.org/hooks.html#qemu
handleMigrateBegin() logger.debug("Executing qemu hook with args: %s" % sys.argv)
action, status = sys.argv[2:4]
if action == "migrate" and status == "begin":
handleMigrateBegin()