#!/usr/bin/python

import subprocess

import XenAPIPlugin

script_command = ('/etc/xensource/scripts/vif_flow online vif-%s-%s -d')


def check_output(*popenargs, **kwargs):
    kwargs['close_fds'] = kwargs.get('close_fds', True)
    input = kwargs.pop('input', None)

    if input is not None and kwargs.get('stdin') != subprocess.PIPE:
        kwargs['stdin'] = subprocess.PIPE

    process = subprocess.Popen(stdout=subprocess.PIPE, *popenargs, **kwargs)
    output, unused_err = process.communicate(input=input)
    retcode = process.poll()

    return (retcode, output)


def get_output(*command, **kwargs):
    return check_output(command, **kwargs)[1].strip()


def get_return_code(*command, **kwargs):
    return check_output(command, **kwargs)[0]


def online_instance_flows(session, arg_dict):
    domid = arg_dict['dom_id']
    vif_index = arg_dict['vif_index']

    command = script_command % (domid, vif_index)
    retcode = get_return_code(*command.split(' '))
    if retcode:
        raise Exception('online_instance_flows command failed |%s|' % command)
    return "%d" % retcode


if __name__ == "__main__":
    XenAPIPlugin.dispatch({"online_instance_flows": online_instance_flows})
