saltstack/salt

View on GitHub
salt/modules/namecheap_domains_ns.py

Summary

Maintainability
A
0 mins
Test Coverage
# -*- coding: utf-8 -*-
'''
Namecheap Nameserver Management

.. versionadded:: 2017.7.0

Prerequisites
-------------

This module uses the ``requests`` Python module to communicate to the namecheap
API.

Configuration
-------------

The Namecheap username, API key and URL should be set in the minion configuration
file, or in the Pillar data.

.. code-block:: yaml

    namecheap.name: companyname
    namecheap.key: a1b2c3d4e5f67a8b9c0d1e2f3
    namecheap.client_ip: 162.155.30.172
    #Real url
    namecheap.url: https://api.namecheap.com/xml.response
    #Sandbox url
    #namecheap.url: https://api.sandbox.namecheap.xml.response
'''
from __future__ import absolute_import, print_function, unicode_literals

CAN_USE_NAMECHEAP = True


try:
    import salt.utils.namecheap
except ImportError:
    CAN_USE_NAMECHEAP = False


__virtualname__ = 'namecheap_domains_ns'


def __virtual__():
    '''
    Check to make sure requests and xml are installed and requests
    '''
    if CAN_USE_NAMECHEAP:
        return 'namecheap_domains_ns'
    return False


def get_info(sld, tld, nameserver):
    '''
    Retrieves information about a registered nameserver. Returns the following
    information:

    - IP Address set for the nameserver
    - Domain name which was queried
    - A list of nameservers and their statuses

    sld
        SLD of the domain name

    tld
        TLD of the domain name

    nameserver
        Nameserver to retrieve

    CLI Example:

    .. code-block:: bash

        salt '*' namecheap_domains_ns.get_info sld tld nameserver
    '''
    opts = salt.utils.namecheap.get_opts('namecheap.domains.ns.delete')
    opts['SLD'] = sld
    opts['TLD'] = tld
    opts['Nameserver'] = nameserver

    response_xml = salt.utils.namecheap.post_request(opts)
    if response_xml is None:
        return {}

    domainnsinforesult = response_xml.getElementsByTagName('DomainNSInfoResult')[0]

    return salt.utils.namecheap.xml_to_dict(domainnsinforesult)


def update(sld, tld, nameserver, old_ip, new_ip):
    '''
    Deletes a nameserver. Returns ``True`` if the nameserver was updated
    successfully.

    sld
        SLD of the domain name

    tld
        TLD of the domain name

    nameserver
        Nameserver to create

    old_ip
        Current ip address

    new_ip
        New ip address

    CLI Example:

    .. code-block:: bash

        salt '*' namecheap_domains_ns.update sld tld nameserver old_ip new_ip
    '''
    opts = salt.utils.namecheap.get_opts('namecheap.domains.ns.update')
    opts['SLD'] = sld
    opts['TLD'] = tld
    opts['Nameserver'] = nameserver
    opts['OldIP'] = old_ip
    opts['IP'] = new_ip

    response_xml = salt.utils.namecheap.post_request(opts)
    if response_xml is None:
        return False

    domainnsupdateresult = response_xml.getElementsByTagName('DomainNSUpdateResult')[0]
    return salt.utils.namecheap.string_to_value(domainnsupdateresult.getAttribute('IsSuccess'))


def delete(sld, tld, nameserver):
    '''
    Deletes a nameserver. Returns ``True`` if the nameserver was deleted
    successfully

    sld
        SLD of the domain name

    tld
        TLD of the domain name

    nameserver
        Nameserver to delete

    CLI Example:

    .. code-block:: bash

        salt '*' namecheap_domains_ns.delete sld tld nameserver
    '''
    opts = salt.utils.namecheap.get_opts('namecheap.domains.ns.delete')
    opts['SLD'] = sld
    opts['TLD'] = tld
    opts['Nameserver'] = nameserver

    response_xml = salt.utils.namecheap.post_request(opts)
    if response_xml is None:
        return False

    domainnsdeleteresult = response_xml.getElementsByTagName('DomainNSDeleteResult')[0]
    return salt.utils.namecheap.string_to_value(domainnsdeleteresult.getAttribute('IsSuccess'))


def create(sld, tld, nameserver, ip):
    '''
    Creates a new nameserver. Returns ``True`` if the nameserver was created
    successfully.

    sld
        SLD of the domain name

    tld
        TLD of the domain name

    nameserver
        Nameserver to create

    ip
        Nameserver IP address

    CLI Example:

    .. code-block:: bash

        salt '*' namecheap_domains_ns.create sld tld nameserver ip
    '''

    opts = salt.utils.namecheap.get_opts('namecheap.domains.ns.create')
    opts['SLD'] = sld
    opts['TLD'] = tld
    opts['Nameserver'] = nameserver
    opts['IP'] = ip

    response_xml = salt.utils.namecheap.post_request(opts)
    if response_xml is None:
        return False

    domainnscreateresult = response_xml.getElementsByTagName('DomainNSCreateResult')[0]
    return salt.utils.namecheap.string_to_value(domainnscreateresult.getAttribute('IsSuccess'))