def main():
  argument_spec = vmware_argument_spec()
  argument_spec.update(node_name=dict(required=True, type='str'))

  module = AnsibleModule(argument_spec=argument_spec, supports_check_mode=True)

  mgr_hostname = module.params['hostname']
  mgr_username = module.params['username']
  mgr_password = module.params['password']
  validate_certs = module.params['validate_certs']
  manager_node_name = module.params['node_name']

  manager_url = 'https://{}/api/v1'.format(mgr_hostname)

  manager_node_id = get_id_from_display_name_results(module, manager_url, 
    '/cluster/nodes/deployments', mgr_username, mgr_password, validate_certs,
    ['deployment_config','hostname'], ['vm_id'], manager_node_name)

  changed = False
  try:
    (rc, resp) = request(manager_url + '/cluster/nodes/%s/repo_sync/status' % manager_node_id,
                         headers=dict(Accept='application/json'), url_username=mgr_username,
                         url_password=mgr_password, validate_certs=validate_certs,
                         ignore_errors=True)
  except Exception as err:
    module.fail_json(msg='Error accessing manager node repo sync '
                                  'status. Error [%s]' % (to_native(err)))

  module.exit_json(changed=changed, **resp)
def update_group_parameters(module, manager_url, mgr_username, mgr_password,
                            validate_certs, upgrade_group_parameters):
    if upgrade_group_parameters.__contains__('upgrade_units'):
        for upgrade_unit in upgrade_group_parameters['upgrade_units']:
            host_name = upgrade_unit.pop('host_name', None)
            upgrade_unit_id = get_id_from_display_name_results(
                module, manager_url, '/upgrade/upgrade-units', mgr_username,
                mgr_password, validate_certs, ['display_name'], ['id'],
                host_name)
            upgrade_unit['id'] = upgrade_unit_id
    return upgrade_group_parameters
def main():
    argument_spec = vmware_argument_spec()
    argument_spec.update(description=dict(type='str', required=False),
                         display_name=dict(type='str', required=True),
                         enabled=dict(type='bool',
                                      required=False,
                                      default=True),
                         extended_configuration=dict(type='list',
                                                     required=False),
                         parallel=dict(type='bool',
                                       required=False,
                                       default=True),
                         resource_type=dict(type='str', required=False),
                         tags=dict(type='list', required=False),
                         type=dict(type='str', required=True),
                         upgrade_unit_count=dict(type='int', required=False),
                         upgrade_units=dict(type='list', required=False),
                         state=dict(required=True,
                                    choices=['present', 'absent']))

    module = AnsibleModule(argument_spec=argument_spec,
                           supports_check_mode=True)
    upgrade_group_params = clean_and_get_params(module.params.copy())
    state = module.params['state']
    mgr_hostname = module.params['hostname']
    mgr_username = module.params['username']
    mgr_password = module.params['password']
    validate_certs = module.params['validate_certs']

    headers = dict(Accept="application/json")
    headers['Content-Type'] = 'application/json'

    mgr_hostname = get_upgrade_orchestrator_node(module, mgr_hostname,
                                                 mgr_username, mgr_password,
                                                 headers, validate_certs)

    manager_url = 'https://{}/api/v1'.format(mgr_hostname)

    upgrade_group_params = update_group_parameters(module, manager_url,
                                                   mgr_username, mgr_password,
                                                   validate_certs,
                                                   upgrade_group_params)

    upgrade_unit_group_id = get_id_from_display_name_results(
        module, manager_url, '/upgrade/upgrade-unit-groups', mgr_username,
        mgr_password, validate_certs, ['display_name'], ['id'],
        upgrade_group_params['display_name'], False)
    if state == 'present':
        # create a new upgrade group or modify the existing one
        if module.check_mode:
            module.exit_json(
                changed=False,
                debug_out='A new upgrade unit will be created with'
                ' name: %s' % module.params['display_name'])
        request_data = json.dumps(upgrade_group_params)
        if upgrade_unit_group_id is None:
            try:
                (rc,
                 resp) = request(manager_url + '/upgrade/upgrade-unit-groups',
                                 data=request_data,
                                 headers=headers,
                                 method='POST',
                                 url_username=mgr_username,
                                 url_password=mgr_password,
                                 validate_certs=validate_certs,
                                 ignore_errors=True)
            except Exception as err:
                module.fail_json(
                    msg="Failed to add upgrade group. Error[%s]." %
                    to_native(err))

            time.sleep(5)
            module.exit_json(changed=True,
                             message="Upgrade group is added successfully.")
        else:
            try:
                (rc, resp) = request(manager_url + '/upgrade/upgrade-unit-'
                                     'groups/%s' % upgrade_unit_group_id,
                                     data=request_data,
                                     headers=headers,
                                     method='PUT',
                                     url_username=mgr_username,
                                     url_password=mgr_password,
                                     validate_certs=validate_certs,
                                     ignore_errors=True)
            except Exception as err:
                module.fail_json(
                    msg="Failed to modify upgrade group. Error[%s]." %
                    to_native(err))

            time.sleep(5)
            module.exit_json(changed=True,
                             message='Upgrade group with group id '
                             '%s is updated.' % upgrade_unit_group_id)
    elif state == 'absent':
        # remove an existing upgrade group
        try:
            (rc, resp) = request(manager_url + '/upgrade/upgrade-unit-groups'
                                 '/%s' % upgrade_unit_group_id,
                                 data='',
                                 headers=headers,
                                 method='DELETE',
                                 url_username=mgr_username,
                                 url_password=mgr_password,
                                 validate_certs=validate_certs,
                                 ignore_errors=True)
        except Exception as err:
            module.fail_json(msg='Failed while deleting the upgrade'
                             ' group. Error[%s].' % to_native(err))

        time.sleep(5)
        module.exit_json(changed=True,
                         message='Upgrade group with group id '
                         '%s is deleted.' % upgrade_unit_group_id)