#!/usr/bin/python
# 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.

# This is for test purpose, to test xcp plugin

import sys
import XenAPI
import os.path
import traceback
import socket
def getHost():
    hostname = socket.gethostname()
    url = "http://localhost"
    session = XenAPI.Session(url)
    session.xenapi.login_with_password("root", "password")
    host = session.xenapi.host
    hosts = session.xenapi.host.get_by_name_label(hostname)
    if len(hosts) != 1:
        print "can't find host:" + hostname
        sys.exit(1)
    localhost = hosts[0]
    return [host, localhost]

def callPlugin(pluginName, func, params):
    hostPair = getHost()
    host = hostPair[0]
    localhost = hostPair[1]
    return host.call_plugin(localhost, pluginName, func, params)

def main():
    if len(sys.argv) < 3:
        print "args: pluginName funcName params"
        sys.exit(1)

    pluginName = sys.argv[1]
    funcName = sys.argv[2]

    paramList = sys.argv[3:]
    if (len(paramList) % 2) != 0:
        print "params must be name/value pair"
        sys.exit(2)
    params = {}
    pos = 0;
    for i in range(len(paramList) / 2):
        params[str(paramList[pos])] = str(paramList[pos+1])
        pos = pos + 2
    print "call: " + pluginName + " " + funcName + ", with params: " + str(params)
    print "return: " +  callPlugin(pluginName, funcName, params)

if __name__ == "__main__":
    main()
