##############################################################################
# Copyright (c) 2016 HUAWEI TECHNOLOGIES CO.,LTD and others.
#
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Apache License, Version 2.0
# which accompanies this distribution, and is available at
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################

import os
import sys
import yaml


def exec_cmd(cmd):
    print cmd
    os.system(cmd)


def reset_baremetal(dha_info):
    print "reset_baremetal"

    hosts_info = yaml.load(open(dha_info))
    # print hosts_info

    ipmiUserDf = hosts_info.get('ipmiUser', 'root')
    ipmiPassDf = hosts_info.get('ipmiPass', 'Huawei@123')
    print ipmiUserDf
    print ipmiPassDf

    hosts_list = hosts_info.get('hosts', [])
    # print hosts_list

    for host in hosts_list:
        print host
        if ('compute' in host['roles']):
            ipmiUser = host.get('ipmiUser', ipmiUserDf)
            ipmiPass = host.get('ipmiPass', ipmiPassDf)
            ipmiIp = host['ipmiIp']
            print ipmiUser
            print ipmiPass
            print ipmiIp
            exec_cmd(
                "ipmitool -I lanplus -H %s -U %s -P %s chassis power reset >/dev/null" %   # noqa
                (ipmiIp, ipmiUser, ipmiPass))


def reset_virtual(dha_info):
    print "reset_virtual"

    hosts_info = yaml.load(open(dha_info))
    print hosts_info

    hosts_list = hosts_info.get('hosts', [])

    for host in hosts_list:
        print host
        if ('compute' in host['roles']):
            name = host['name']
            exec_cmd("virsh destroy %s" % name)
            exec_cmd("virsh start %s" % name)

if __name__ == "__main__":
    deploy_type = sys.argv[1]
    dha_info = sys.argv[2]
    print deploy_type
    print dha_info
    if (deploy_type == 'baremetal'):
        reset_baremetal(dha_info)
    elif (deploy_type == 'virtual'):
        reset_virtual(dha_info)