'Process the request - Main Code Path
:return: Returns with either an exit_json or fail_json'

def process_request(self):

    changed = False
    new_server_ids = []
    server_dict_array = []
    self._set_clc_credentials_from_env()
    self.module.params = self._validate_module_params(self.clc, self.module)
    p = self.module.params
    state = p.get('state')
    partial_servers_ids = []
    if (state == 'absent'):
        server_ids = p['server_ids']
        if (not isinstance(server_ids, list)):
            return self.module.fail_json(msg=('server_ids    needs    to    be    a    list    of    instances    to    delete:    %s' % server_ids))
        (changed, server_dict_array, new_server_ids) = self._delete_servers(module=self.module, clc=self.clc, server_ids=server_ids)
    elif (state in ('started', 'stopped')):
        server_ids = p.get('server_ids')
        if (not isinstance(server_ids, list)):
            return self.module.fail_json(msg=('server_ids    needs    to    be    a    list    of    servers    to    run:    %s' % server_ids))
        (changed, server_dict_array, new_server_ids) = self._start_stop_servers(self.module, self.clc, server_ids)
    elif (state == 'present'):
        if ((not p.get('template')) and (p.get('type') != 'bareMetal')):
            return self.module.fail_json(msg='template    parameter    is    required    for    new    instance')
        if (p.get('exact_count') is None):
            (server_dict_array, new_server_ids, partial_servers_ids, changed) = self._create_servers(self.module, self.clc)
        else:
            (server_dict_array, new_server_ids, partial_servers_ids, changed) = self._enforce_count(self.module, self.clc)
    self.module.exit_json(changed=changed, server_ids=new_server_ids, partially_created_server_ids=partial_servers_ids, servers=server_dict_array)
