kornicameister
3/1/2016 - 11:52 AM

Remotely turn on/off services [python, spur]

Remotely turn on/off services [python, spur]

import random
import time

import spur
import multiprocessing

IT=0
HOST_LIST = {
    "192.168.10.4": True,
    "192.168.10.6": True,
    "192.168.10.7": True,
    "192.168.10.8": True
}
BOOL_TO_COMMAND = {
    True: 'start',
    False: 'stop'
}
COMMAND_TPL = 'sudo systemctl %s monasca-log-transformer'


def pick_random_host():
    global IT

    keys = HOST_LIST.keys()
    length = len(keys)

    if IT == length:
        IT = 0

    key = keys[IT]
    IT += 1

    return key


def get_command(val):
    return COMMAND_TPL % BOOL_TO_COMMAND.get(val)


def run():
    print 'Entering the loop, changing status by 60 seconds'
    print 'Initial state of hosts %s' % HOST_LIST
    while True:
        print 'Waiting for 30 seconds'
        time.sleep(30)
        print '---------------------------------------------------------------'
        try:
            host_ip = pick_random_host()
            status = HOST_LIST[host_ip]
            command = get_command(not status)
            HOST_LIST[host_ip] = not status

            shell = spur.SshShell(hostname=host_ip,
                                  port=22,
                                  private_key_file=(
                                      '/home/kornicameister/.ssh/id_rsa'),
                                  missing_host_key=spur.ssh.MissingHostKey.accept,
                                  username='vagrant',
                                  password='vagrant')

            res = shell.run(command.split(' '))
            print '[', host_ip, ']', '[', HOST_LIST[
                host_ip], ']', command, \
                res.return_code, \
                res.output
        except Exception:
            pass
        print '---------------------------------------------------------------'


if __name__ == '__main__':
    process = multiprocessing.Process(target=run)
    process.start()
    process.join()