예제 #1
0
 def __init__(self, **kwargs):
     self.connection = netapp_api.NaServer(
         host=kwargs['hostname'],
         transport_type=kwargs['transport_type'],
         port=kwargs['port'],
         username=kwargs['username'],
         password=kwargs['password'])
예제 #2
0
def setup_na_ontap_zapi(module, vserver=None):
    hostname = module.params['hostname']
    username = module.params['username']
    password = module.params['password']
    https = module.params['https']

    if HAS_NETAPP_LIB:
        # set up zapi
        server = zapi.NaServer(hostname)
        server.set_username(username)
        server.set_password(password)
        if vserver:
            server.set_vserver(vserver)
        # Todo : Replace hard-coded values with configurable parameters.
        server.set_api_version(major=1, minor=21)
        # default is HTTP
        if https is True:
            server.set_port(443)
            server.set_transport_type('HTTPS')
        else:
            server.set_port(80)
            server.set_transport_type('HTTP')
        server.set_server_type('FILER')
        return server
    else:
        module.fail_json(msg="the python NetApp-Lib module is required")
예제 #3
0
def setup_na_ontap_zapi(module, vserver=None, wrap_zapi=False):
    hostname = module.params['hostname']
    username = module.params['username']
    password = module.params['password']
    https = module.params['https']
    validate_certs = module.params['validate_certs']
    port = module.params['http_port']
    version = module.params['ontapi']
    cert_filepath = module.params['cert_filepath']
    key_filepath = module.params['key_filepath']
    auth_method = set_auth_method(module, username, password, cert_filepath, key_filepath)

    if HAS_NETAPP_LIB:
        # set up zapi
        if auth_method in ('single_cert', 'cert_key'):
            # override NaServer in netapp-lib to enable certificate authentication
            server = OntapZAPICx(hostname, module=module, username=username, password=password,
                                 validate_certs=validate_certs, cert_filepath=cert_filepath,
                                 key_filepath=key_filepath, style=zapi.NaServer.STYLE_CERTIFICATE,
                                 auth_method=auth_method)
            # SSL certificate authentication requires SSL
            https = True
        elif auth_method == 'speedy_basic_auth' or wrap_zapi:
            # override NaServer in netapp-lib to add Authorization header preemptively
            # use wrapper to handle parse error (mostly for na_ontap_command)
            server = OntapZAPICx(hostname, module=module, username=username, password=password,
                                 validate_certs=validate_certs, auth_method=auth_method)
        else:
            # legacy netapp-lib
            server = zapi.NaServer(hostname)
            server.set_username(username)
            server.set_password(password)
        if vserver:
            server.set_vserver(vserver)
        if version:
            minor = version
        else:
            minor = 110
        server.set_api_version(major=1, minor=minor)
        # default is HTTP
        if https:
            if port is None:
                port = 443
            transport_type = 'HTTPS'
            # HACK to bypass certificate verification
            if validate_certs is False:
                if not os.environ.get('PYTHONHTTPSVERIFY', '') and getattr(ssl, '_create_unverified_context', None):
                    ssl._create_default_https_context = ssl._create_unverified_context
        else:
            if port is None:
                port = 80
            transport_type = 'HTTP'
        server.set_transport_type(transport_type)
        server.set_port(port)
        server.set_server_type('FILER')
        return server
    else:
        module.fail_json(msg="the python NetApp-Lib module is required")
예제 #4
0
def setup_ontap_zapi(module, vserver=None):
    username = module.params['username']
    password = module.params['password']
    api_version = module.params['api_version'].split('.')

    hostregex = "((\w+):/{,2}){,1}([\w\d\.-]+)(:(\d+)){,1}"
    r = re.compile(hostregex)
    m = r.search(module.params['hostname'])

    transport_type = m.group(2)
    hostname = m.group(3)
    port = m.group(5)

    if HAS_NETAPP_LIB:
        # set up zapi
        server = zapi.NaServer(hostname)
        server.set_username(username)
        server.set_password(password)
        if vserver:
            server.set_vserver(vserver)

        server.set_api_version(*api_version)
        if transport_type:
            server.set_transport_type(transport_type.upper())
        else:
            server.set_transport_type('HTTP')

        # If port is set we have to override it after setting transport_type
        # (TODO: this is a logical error that has to be fixed in the zapi.py)
        if port:
            server.set_port(int(port))
        else:
            server.set_port(80)

        # Leaving it hard-coded
        server.set_server_type('FILER')

        # PyPI netapp_lib 2015.9.25, 2016.10.14, 2017.10.30 can't handle ssl verification and
        # certificate based authentication
        if get_distribution('netapp_lib').version not in [
                '2015.9.25', '2016.10.14', '2017.10.30'
        ]:
            server.set_ssl_verification(module.params['verify_ssl'])
            server.set_style(module.params['style'])
            server.set_cert_file(module.params['cert_file'])
            server.set_key_file(module.params['key_file'])

        return server
    else:
        module.fail_json(msg="the python NetApp-Lib module is required")
예제 #5
0
def setup_na_ontap_zapi(module, vserver=None):
    hostname = module.params['hostname']
    username = module.params['username']
    password = module.params['password']
    https = module.params['https']
    validate_certs = module.params['validate_certs']
    port = module.params['http_port']
    version = module.params['ontapi']

    if HAS_NETAPP_LIB:
        # set up zapi
        server = zapi.NaServer(hostname)
        server.set_username(username)
        server.set_password(password)
        if vserver:
            server.set_vserver(vserver)
        if version:
            minor = version
        else:
            minor = 110
        server.set_api_version(major=1, minor=minor)
        # default is HTTP
        if https:
            if port is None:
                port = 443
            transport_type = 'HTTPS'
            # HACK to bypass certificate verification
            if validate_certs is False:
                if not os.environ.get('PYTHONHTTPSVERIFY', '') and getattr(
                        ssl, '_create_unverified_context', None):
                    ssl._create_default_https_context = ssl._create_unverified_context
        else:
            if port is None:
                port = 80
            transport_type = 'HTTP'
        server.set_transport_type(transport_type)
        server.set_port(port)
        server.set_server_type('FILER')
        return server
    else:
        module.fail_json(msg="the python NetApp-Lib module is required")