Пример #1
0
def run_module():
    module_args = ovh_argument_spec()
    module_args.update(
        dict(service_name=dict(required=True),
             max_retry=dict(required=False, default=240),
             sleep=dict(required=False, default=10)))

    module = AnsibleModule(argument_spec=module_args, supports_check_mode=True)
    client = ovh_api_connect(module)

    service_name = module.params['service_name']
    max_retry = module.params['max_retry']
    sleep = module.params['sleep']

    if module.check_mode:
        module.exit_json(msg="done - (dry run mode)", changed=False)

    for i in range(1, int(max_retry)):
        # Messages cannot be displayed in real time (yet)
        # https://github.com/ansible/proposals/issues/92
        display.display("%i out of %i" % (i, int(max_retry)),
                        constants.COLOR_VERBOSE)
        try:
            tasklist = client.get('/dedicated/server/%s/task' % service_name,
                                  function='reinstallServer')
            result = client.get('/dedicated/server/%s/task/%s' %
                                (service_name, max(tasklist)))
        except APIError as api_error:
            return module.fail_jsonl(
                msg="Failed to call OVH API: {0}".format(api_error))

        message = ""
        # Get more details in installation progression
        if "done" in result['status']:
            module.exit_json(msg="{}: {}".format(result['status'], message),
                             changed=False)

        progress_status = client.get('/dedicated/server/%s/install/status' %
                                     service_name)
        if 'message' in progress_status and progress_status[
                'message'] == 'Server is not being installed or reinstalled at the moment':
            message = progress_status['message']
        else:
            for progress in progress_status['progress']:
                if progress["status"] == "doing":
                    message = progress['comment']
        display.display("{}: {}".format(result['status'], message),
                        constants.COLOR_VERBOSE)
        time.sleep(float(sleep))
    module.fail_json(msg="Max wait time reached, about %i x %i seconds" %
                     (i, int(sleep)))