def ansible_perform_operation(self,
                                  host_list=None,
                                  remote_user=None,
                                  remote_pass=None,
                                  module=None,
                                  complex_args=None,
                                  module_args='',
                                  environment=None,
                                  check=False,
                                  sudo=False,
                                  sudo_user=None,
                                  sudo_pass=None,
                                  forks=20):
        '''
        Perform any ansible operation.
        '''
        (host_list, remote_user) = \
            self.validate_host_parameters(host_list, remote_user)
        if (host_list, remote_user) is (None, None):
            return None

        if module is None:
            print "ANSIBLE Perform operation: No module specified"
            return None

        runner = ansible.runner.Runner(
            module_name=module,
            host_list=host_list,
            remote_user=remote_user,
            remote_pass=remote_pass,
            module_args=module_args,
            complex_args=complex_args,
            environment=environment,
            check=check,
            become=sudo,
            become_user=sudo_user,
            become_pass=sudo_pass,
            forks=forks)

        results = runner.run()

        results, failed_hosts = self.validate_results(results)
        if results['status'] != 'PASS':
            print "ANSIBLE: [%s] operation failed [%s] [hosts: %s]" % \
                (module, complex_args, failed_hosts)

        return results, failed_hosts