#!/usr/bin/env python
# A sample script that can be used while setting up a new teuthology lab
# This script will connect to the machines in your lab, and populate a
# paddles instance with their information.
#
# You WILL need to modify it.

import logging
import sys
from teuthology.orchestra.remote import Remote
from teuthology.lock.ops import update_inventory

paddles_url = 'http://paddles.example.com/nodes/'

machine_type = 'typica'
lab_domain = 'example.com'
# Don't change the user. It won't work at this time.
user = 'ubuntu'
# We are populating 'typica003' -> 'typica192'
machine_index_range = range(3, 192)

log = logging.getLogger(sys.argv[0])
logging.getLogger("requests.packages.urllib3.connectionpool").setLevel(
    logging.WARNING)


def get_shortname(machine_type, index):
    """
    Given a number, return a hostname. Example:
        get_shortname('magna', 3) = 'magna003'

    Modify to suit your needs.
    """
    return machine_type + str(index).rjust(3, '0')


def get_info(user, fqdn):
    remote = Remote('@'.join((user, fqdn)))
    return remote.inventory_info


def main():
    shortnames = [get_shortname(machine_type, i) for i in machine_index_range]
    fqdns = ['.'.join((name, lab_domain)) for name in shortnames]
    for fqdn in fqdns:
        log.info("Creating %s", fqdn)
        base_info = dict(
            name=fqdn,
            locked=True,
            locked_by='initial@setup',
            machine_type=machine_type,
            description="Initial node creation",
        )
        try:
            info = get_info(user, fqdn)
            base_info.update(info)
            base_info['up'] = True
        except Exception as exc:
            log.error("{fqdn} is down".format(fqdn=fqdn))
            base_info['up'] = False
            base_info['description'] = repr(exc)
        update_inventory(base_info)

if __name__ == '__main__':
    main()
