#!/usr/bin/env python # ============LICENSE_START======================================================= # org.onap.dcae # ================================================================================ # Copyright (c) 2017 AT&T Intellectual Property. All rights reserved. # ================================================================================ # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # ============LICENSE_END========================================================= # # ECOMP is a trademark and service mark of AT&T Intellectual Property. import designateclient from designateclient.v2 import client as designate_client from designateclient import shell from keystoneauth1.identity import generic from keystoneauth1 import session as keystone_session import json import socket import sys import yaml def find_entry_by_name(entry_list, entry_name): for entry in entry_list: if entry['name'] == entry_name: return entry return none def main(): if len(sys.argv) != 6 and len(sys.argv) != 2: print("Usgae: {} input_file [auth_url username password tenant]".format(sys.argv[0])) exit(1) if len(sys.argv) == 6: print("Creating DNS records using record defs from {}, authurl {}, username {}, tenant {}".format( sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[5])) else: print("Creating DNS records using record defs from {}, authurl {}, username {}, tenant {}".format( shell.env('OS_AUTH_URL'), shell.env('OS_USERNAME'), shell.env('OS_PASSWORD'), shell.env('OS_PROJECT_NAME'))) print("Usage: {} disabled until changed".format(sys.argv[0])) exit(1) inputfilepath = sys.argv[1] auth = "" if len(sys.argv) == 2: auth = generic.Password( auth_url=shell.env('OS_AUTH_URL'), username=shell.env('OS_USERNAME'), password=shell.env('OS_PASSWORD'), project_name=shell.env('OS_PROJECT_NAME'), project_domain_id='default', user_domain_id='default') else: auth = generic.Password( auth_url=sys.argv[2], username=sys.argv[3], password=sys.argv[4], project_name=sys.argv[5], project_domain_id='default', user_domain_id='default') if not auth: print("Fail to get authenticated from OpenStack") exit(1) session = keystone_session.Session(auth=auth) client = designate_client.Client(session=session) zone_name = 'simpledemo.onap.org' zone_name_dot = zone_name + '.' zone_list = client.zones.list() print("before: \n{}".format(json.dumps(zone_list, indent=4))) zone = find_entry_by_name(entry_list = zone_list, entry_name = zone_name_dot) if zone: print("exitsing zone: zone id {}".format(zone['id'])) else: zone = client.zones.create(zone_name_dot, email='lji@research.att.com') print("newly created zone: zone id {}".format(zone['id'])) recordsets = client.recordsets.list(zone['id']) # delete all exitsing A and CNAME records under the zone_name for recordset in recordsets: if not recordset['name'].endswith(zone_name_dot): continue print("Deleting recordset {}".format(recordset['name'])) if recordset['type'] == 'A': client.recordsets.delete(zone['id'], recordset['id']) elif recordset['type'] == 'CNAME': client.recordsets.delete(zone['id'], recordset['id']) with open(inputfilepath, 'r') as inputfile: records_to_add = yaml.load(inputfile) for key, value in records_to_add.iteritems(): if not key.endswith(zone_name): continue try: socket.inet_aton(value) # take zone name out (including the . before it) key = key[:-(len(zone_name)+1)] print("Creating DNS A record for: {} - {}".format(key, value)) rs = client.recordsets.create(zone['id'], key, 'A', [value]) except: print() for key, value in records_to_add.iteritems(): if not key.endswith(zone_name): continue try: socket.inet_aton(value) except: # take zone name out (and the . before it) key = key[:-(len(zone_name)+1)] if not value.endswith('.'): value = value + '.' print("Creating DNS CNAME record for: {} - {}".format(key, value)) rs = client.recordsets.create(zone['id'], key, 'CNAME', [value]) recordsets = client.recordsets.list(zone['id']) print("before: \n{}".format(json.dumps(recordsets, indent=4))) ######################################## if __name__ == "__main__": main()