このセクションでは、CLI を使用して DNS プロファイルを構成する方法について説明します。

Python スクリプトのアップロード

カスタム DNS プロファイルを使用するには、NSX Advanced Load Balancer に Python スクリプトをアップロードします。次のスクリプトを使用して、必要なカスタム DNS スクリプトを NSX Advanced Load Balancer Controller にアップロードします。

"
 Custom DNS script
  """
 import socket
 import os
 import getpass
 import requests
 import inspect
 import urllib
 import json
 import time
 
 def CreateOrUpdateRecord(record_info, params):
     username = params.get('username')
     passkey = params.get('password') 
     ip = record_info.get('f_ip_address', '') or record_info.get('ip_address', '')
     cname = record_info.get('cname', '')
     fqdn = record_info.get('fqdn') 
     ttl = record_info.get('ttl', 900)
     record_type = record_info.get('type', 'DNS_RECORD_A')
     dns_record_id = 0
     metadata_j = record_info.get('metadata', None)
     if metadata_j:
         metadata = json.loads(metadata_j)
         # Check if default of 0 as DNS record id is useful
         dns_record_id = metadata.get('dns_record_id', 0)
 
     if not fqdn:
         print "Not valid FQDN found %s, returning"%record_info
         return
 
     # REST API
     api = WebApiClient(username, passkey, domain)
     api.disable_ssl_chain_verification()
     param_dict = {
 	    # DNS Record Information
 	    "dns_record_id"         : dns_record_id,
 	    "fqdn"		    : fqdn,
 	    "type"		    : "CNAME" if record_type == 'DNS_RECORD_CNAME' else "A",
 	    "ttl"                   : str(ttl),
 	    "content"		    : cname if record_type == 'DNS_RECORD_CNAME' else ip,
 	    "site"		    : "ALL"             
     }
 
     # Send request to register the FQDN, failures can be raised and the VS creation will fail
     rsp = api.send_request("Update", param_dict)
     if not rsp:
         err_str = "ERROR:"
         err_str += "   STATUS: " + api.get_response_status()
         err_str += "   TYPE: " + str(api.get_error_type())
         err_str += "   MESSAGE: " + api.get_error_message()
         print err_str
         raise Exception("DNS record update failed with %s"%err_str)
 
 
 def DeleteRecord(record_info, params):
     username = params.get('username')
     passkey = params.get('password') 
     ip = record_info.get('f_ip_address', '') or record_info.get('ip_address', '')
     cname = record_info.get('cname', '')
     fqdn = record_info.get('fqdn') 
     ttl = record_info.get('ttl', 900)
     record_type = record_info.get('type', 'DNS_RECORD_A')
     dns_record_id = 0
     metadata_j = record_info.get('metadata', None)
     if metadata_j:
         metadata = json.loads(metadata_j)
         # Check if default of 0 as DNS record id is useful
         dns_record_id = metadata.get('dns_record_id', 0)
 
     api = WebApiClient(username, passkey, domain)
     api.disable_ssl_chain_verification()
     param_dict = {
 	    # DNS Record Information
 	    "dns_record_id"         : int(dns_record_id),
 	    "delete_reason"         : "Reason for deleting record",
 	    "push_immediately"      : True,
 	    "update_serial"         : True,                
     }
 
     rsp = api.send_request("Delete", param_dict)
     if not rsp:
         print "ERROR:"
         print "   STATUS: " + api.get_response_status()
         print "   TYPE: " + str(api.get_error_type())
         print "   MESSAGE: " + api.get_error_message()
     return ""

スクリプトには、次のパラメータを使用できます。

  • ユーザー名:<username>

  • パスワード:<password>

  • API バージョン:<version number>

CLI を使用したカスタム DNS プロファイルの作成

l
[admin-cntrl1]: > configure customipamdnsprofile custom-dns-profile

[admin-cntrl1]: customipamdnsprofile>
cancel          Exit the current submode without saving
do              Execute a show command
name            Name of the Custom IPAM DNS Profile.
new             (Editor Mode) Create new object in editor mode
no              Remove field
save            Save and exit the current submode
script_params   (submode)
script_uri      Script URI of form controller://ipamdnsscripts/<file-name>
show_schema     show object schema
tenant_ref      Help string not found for argument
watch           Watch a given show command
where           Display the in-progress object
[admin-cntrl1]: customipamdnsprofile>

前述の構成スニペットでは、custom_dns_script.py スクリプトが次の属性でアップロードされます。

  • 名前: custom-dns-profile

  • ユーザー名:dnsuser

  • パスワード:is_sensitive フラグが True に設定されているパスワード

  • スクリプトの URI:controller://ipamdnsscripts/custom_dns_script.py

次の構文を使用してスクリプトをアップロードします。controller://ipamdnsscripts/<script name>

show customipamdnsprofile custom-dns-profile コマンドの出力を次に示します。

[admin:10-10-25-160]: > show customipamdnsprofile custom-dns-profile
+------------------+--------------------------------------------------- Field               | Value                                                                                                                           ----------------------------------------------------------------------+
| uuid       |customipamdnsprofile-c12faa8a-f0eb-4128-a976-98d30391b9f2            | name              |custom-dns-profile                                                                                                    |script_uri         | controller://ipamdnsscripts/custom_dns_script.py                                      | script_params[1]  |                                                                                                                                         | name              | username                                                                                                                    | value             | dnsuser                                                                                                                         |is_sensitive       | False                                                                                                                              |is_dynamic         | False                                                                                                                              |script_params[2]   |                                                                                                                                         |name               | password                                                                                                                     |value              | <sensitive>                                                                                                                  |is_sensitive       | True                                                                                                                                |is_dynamic         | False                                                                                                                               |tenant_ref         | admin                                                                                                                             +------------------+--------------------------------------------------+