#!/usr/bin/env python3 # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. # Version @VERSION@ # # A plugin for executing script needed by vmops cloud import os, sys, time import XenAPIPlugin if os.path.exists("/opt/xensource/sm"): sys.path.extend(["/opt/xensource/sm/", "/usr/local/sbin/", "/sbin/"]) if os.path.exists("/usr/lib/xcp/sm"): sys.path.extend(["/usr/lib/xcp/sm/", "/usr/local/sbin/", "/sbin/"]) import util import socket import cloudstack_pluginlib as lib import logging lib.setup_logging("/var/log/cloud/cloud.log") def echo(fn): def wrapped(*v, **k): name = fn.__name__ logging.debug("#### CLOUD enter %s ####" % name ) res = fn(*v, **k) logging.debug("#### CLOUD exit %s ####" % name ) return res return wrapped @echo def forceShutdownVM(session, args): domId = args['domId'] try: cmd = ["/opt/xensource/debug/xenops", "destroy_domain", "-domid", domId] txt = util.pread2(cmd) except: txt = '10#failed' return txt @echo def create_privatetemplate_from_snapshot(session, args): templatePath = args['templatePath'] snapshotPath = args['snapshotPath'] tmpltLocalDir = args['tmpltLocalDir'] try: cmd = ["bash", "/opt/cloud/bin/create_privatetemplate_from_snapshot.sh",snapshotPath, templatePath, tmpltLocalDir] txt = util.pread2(cmd) except: txt = '10#failed' return txt @echo def upgrade_snapshot(session, args): templatePath = args['templatePath'] snapshotPath = args['snapshotPath'] try: cmd = ["bash", "/opt/cloud/bin/upgrate_snapshot.sh",snapshotPath, templatePath] txt = util.pread2(cmd) except: txt = '10#failed' return txt @echo def copy_vhd_to_secondarystorage(session, args): mountpoint = args['mountpoint'] vdiuuid = args['vdiuuid'] sruuid = args['sruuid'] try: cmd = ["bash", "/opt/cloud/bin/copy_vhd_to_secondarystorage.sh", mountpoint, vdiuuid, sruuid] txt = util.pread2(cmd) except: txt = '10#failed' return txt @echo def copy_vhd_from_secondarystorage(session, args): mountpoint = args['mountpoint'] sruuid = args['sruuid'] namelabel = args['namelabel'] try: cmd = ["bash", "/opt/cloud/bin/copy_vhd_from_secondarystorage.sh", mountpoint, sruuid, namelabel] txt = util.pread2(cmd) except: txt = '10#failed' return txt @echo def remove_corrupt_vdi(session, args): vdifile = args['vdifile'] try: cmd = ['rm', '-f', vdifile] txt = util.pread2(cmd) except: txt = '10#failed' return txt @echo def setup_heartbeat_sr(session, args): host = args['host'] sr = args['sr'] try: cmd = ["bash", "/opt/cloud/bin/setup_heartbeat_sr.sh", host, sr] txt = util.pread2(cmd) except: txt = '' return txt @echo def setup_heartbeat_file(session, args): host = args['host'] sr = args['sr'] add = args['add'] try: cmd = ["bash", "/opt/cloud/bin/setup_heartbeat_file.sh", host, sr, add] txt = util.pread2(cmd) except: txt = '' return txt @echo def heartbeat(session, args): host = args['host'] timeout = args['timeout'] interval = args['interval'] try: cmd = ["/bin/bash", "/opt/cloud/bin/launch_hb.sh", host, timeout, interval] txt = util.pread2(cmd) except: txt='fail' return txt @echo def asmonitor(session, args): try: perfmod = __import__("perfmon") result = perfmod.get_vm_group_perfmon(args) return result except: return 'fail' if __name__ == "__main__": XenAPIPlugin.dispatch({"forceShutdownVM":forceShutdownVM, "upgrade_snapshot":upgrade_snapshot, "create_privatetemplate_from_snapshot":create_privatetemplate_from_snapshot, "copy_vhd_to_secondarystorage":copy_vhd_to_secondarystorage, "copy_vhd_from_secondarystorage":copy_vhd_from_secondarystorage, "setup_heartbeat_sr":setup_heartbeat_sr, "setup_heartbeat_file":setup_heartbeat_file, "heartbeat": heartbeat, "asmonitor": asmonitor, "remove_corrupt_vdi": remove_corrupt_vdi})