def main()

in hostfactory/host_provider/src/cyclecloud_provider.py [0:0]


def main(argv=sys.argv):  # pragma: no cover
    operation_id = int(time.time())
    try:
        
        global logger
        # every command has the format cmd -f input.json        
        cmd, ignore, input_json_path = argv[1:]
        provider_config, logger, fine = util.provider_config_from_environment()
        
        data_dir = os.getenv('PRO_DATA_DIR', os.getcwd())
        conf_dir = os.getenv('PRO_CONF_DIR', os.getcwd())
        hostnamer = util.Hostnamer(provider_config.get("cyclecloud.hostnames.use_fqdn", True))
        cluster_name = provider_config.get("cyclecloud.cluster.name")
        
        provider = CycleCloudProvider(config=provider_config,
                                      cluster=cluster.Cluster(cluster_name, provider_config, logger),
                                      hostnamer=hostnamer,
                                      stdout_handler=JsonOutputHandler(quiet=False),
                                      terminate_requests=JsonStore("terminate_requests.json", data_dir),
                                      creation_requests=JsonStore("create_requests.json", data_dir),
                                      clock=true_gmt_clock)
        
        provider.fine = fine
        
        input_json = util.load_json(input_json_path)
        
        
        logger.info("BEGIN %s %s - %s %s", operation_id, cmd, ignore, input_json_path)
        logger.debug("Input: %s", json.dumps(input_json))
        
        if cmd == "validate_templates" or input_json.get("dry-run"):
            provider.validate_template()
            provider.dry_run = True  
        if cmd == "generate_templates":
            provider.generate_sample_template()     
        
                
        if cmd == "templates":
            logger.info("Using azurecc version %s", version.get_version())
            provider.templates()
        elif cmd == "create_machines":
            provider.create_machines(input_json)
        elif cmd in ["create_status"]:
            if "requests" in input_json:
                # provider.status handles both create_status and terminate_status calls.
                provider.status(input_json)
            else:
                # should be impossible
                raise RuntimeError("Unexpected input json for cmd %s" % (input_json, cmd))
        elif cmd == "get_return_requests":
            provider.get_return_requests(input_json)
        elif cmd == "terminate_machines":
            provider.terminate_machines(input_json)
        elif cmd == "debug_completed_nodes":
            provider.debug_completed_nodes()
        

        
        # best effort cleanup.
        provider.periodic_cleanup()
            
    except ImportError as e:
        logger.exception(str(e))

    except Exception as e:
        if logger:
            logger.exception(str(e))
        else:
            import traceback
            traceback.print_exc()
    finally:
        logger.info("END %s %s - %s %s", operation_id, cmd, ignore, input_json_path)