summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLusheng Ji <lji@research.att.com>2017-10-21 11:04:15 -0400
committerLusheng Ji <lji@research.att.com>2017-10-21 11:06:07 -0400
commit68d5a7f0bd219cc52ad6d357b0f6cc6010979a2f (patch)
treee06c1bc073483d94f036bf537b0e96a843b6a83f
parent10388fd277107c5a6ab0da2c23380a30dc392fb0 (diff)
Add script and input for posting to Designate
Script and DNS record template input for posting the floating IP addresses of ONAP VMs to Designate. Issue-Id: DCAEGEN2-128 Change-Id: Ice16ef4ab4a267f6f374b232cbe84c1e96e8982f Signed-off-by: Lusheng Ji <lji@research.att.com>
-rwxr-xr-xscripts/designate_import.py138
-rw-r--r--scripts/designate_input_onap.yaml107
2 files changed, 245 insertions, 0 deletions
diff --git a/scripts/designate_import.py b/scripts/designate_import.py
new file mode 100755
index 0000000..df09f50
--- /dev/null
+++ b/scripts/designate_import.py
@@ -0,0 +1,138 @@
+#!/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 {}, usernaem {}, tenant {}".format(
+ sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[5]))
+ else:
+ print("Creating DNS records using record defs from {}, authurl {}, usernaem {}, tenant {}".format(
+ shell.env('OS_AUTH_URL'), shell.env('OS_USERNAME'), shell.env('OS_PASSWORD'), shell.env('OS_PROJECT_NAME')))
+
+ 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()
+
diff --git a/scripts/designate_input_onap.yaml b/scripts/designate_input_onap.yaml
new file mode 100644
index 0000000..04f8a5b
--- /dev/null
+++ b/scripts/designate_input_onap.yaml
@@ -0,0 +1,107 @@
+simpledemo.onap.org: {{ dns_floating_ip_addr }}
+
+vm1.aai.simpledemo.onap.org: {{ aai1_floating_ip_addr }}
+c1.vm1.aai.simpledemo.onap.org: {{ aai1_floating_ip_adr }}
+c2.vm1.aai.simpledemo.onap.org: {{ aai1_floating_ip_addr }}
+c3.vm1.aai.simpledemo.onap.org: {{ aai1_floating_ip_addr }}
+
+vm2.aai.simpledemo.onap.org: {{ aai2_floating_ip_addr }}
+c1.vm2.aai.simpledemo.onap.org: {{ aai2_floating_ip_addr }}
+c2.vm2.aai.simpledemo.onap.org: {{ aai2_floating_ip_addr }}
+c3.vm2.aai.simpledemo.onap.org: {{ aai2_floating_ip_addr }}
+
+vm1.appc.simpledemo.onap.org: {{ appc_floating_ip_addr }}
+c1.vm1.appc.simpledemo.onap.org: {{ appc_floating_ip_addr }}
+c2.vm1.appc.simpledemo.onap.org: {{ appc_floating_ip_addr }}
+
+vm1.sdc.simpledemo.onap.org: {{ sdc_floating_ip_addr }}
+c1.vm1.sdc.simpledemo.onap.org: {{ sdc_floating_ip_addr }}
+c2.vm1.sdc.simpledemo.onap.org: {{ sdc_floating_ip_addr }}
+c3.vm1.sdc.simpledemo.onap.org: {{ sdc_floating_ip_addr }}
+c4.vm1.sdc.simpledemo.onap.org: {{ sdc_floating_ip_addr }}
+
+vm1.dcae.simpledemo.onap.org: {{ dcae_floating_ip_addr }}
+c1.vm1.dcae.simpledemo.onap.org: {{ dcae_floating_ip_addr }}
+c2.vm1.dcae.simpledemo.onap.org: {{ dcae_floating_ip_addr }}
+c3.vm1.dcae.simpledemo.onap.org: {{ dcae_floating_ip_addr }}
+
+vm1.mso.simpledemo.onap.org: {{ so_floating_ip_addr }}
+c1.vm1.mso.simpledemo.onap.org: {{ so_floating_ip_addr }}
+c1.vm1.mso.simpledemo.onap.org: {{ so_floating_ip_addr }}
+
+vm1.policy.simpledemo.onap.org: {{ policy_floating_ip_addr }}
+c1.vm1.policy.simpledemo.onap.org: {{ policy_floating_ip_addr }}
+c2.vm1.policy.simpledemo.onap.org: {{ policy_floating_ip_addr }}
+c3.vm1.policy.simpledemo.onap.org: {{ policy_floating_ip_addr }}
+c4.vm1.policy.simpledemo.onap.org: {{ policy_floating_ip_addr }}
+c5.vm1.policy.simpledemo.onap.org: {{ policy_floating_ip_addr }}
+c6.vm1.policy.simpledemo.onap.org: {{ policy_floating_ip_addr }}
+c7.vm1.policy.simpledemo.onap.org: {{ policy_floating_ip_addr }}
+c8.vm1.policy.simpledemo.onap.org: {{ policy_floating_ip_addr }}
+
+vm1.sdnc.simpledemo.onap.org: {{ sdnc_floating_ip_addr }}
+c1.vm1.sdnc.simpledemo.onap.org: {{ sdnc_floating_ip_addr }}
+c2.vm1.sdnc.simpledemo.onap.org: {{ sdnc_floating_ip_addr }}
+c3.vm1.sdnc.simpledemo.onap.org: {{ sdnc_floating_ip_addr }}
+c4.vm1.sdnc.simpledemo.onap.org: {{ sdnc_floating_ip_addr }}
+
+vm1.vid.simpledemo.onap.org: {{ vid_floating_ip_addr }}
+c1.vm1.vid.simpledemo.onap.org: {{ vid_floating_ip_addr }}
+c2.vm1.vid.simpledemo.onap.org: {{ vid_floating_ip_addr }}
+
+vm1.portal.simpledemo.onap.org: {{ portal_floating_ip_addr }}
+c1.vm1.portal.simpledemo.onap.org: {{ portal_floating_ip_addr }}
+c2.vm1.portal.simpledemo.onap.org: {{ portal_floating_ip_addr }}
+
+vm1.robot.simpledemo.onap.org: {{ robot_floating_ip_addr }}
+c1.vm1.robot.simpledemo.onap.org: {{ robot_floating_ip_addr }}
+c2.vm1.robot.simpledemo.onap.org: {{ robot_floating_ip_addr }}
+
+vm1.clamp.simpledemo.onap.org: {{ clamp_floating_ip_addr }}
+c1.vm1.clamp.simpledemo.onap.org: {{ clamp_floating_ip_addr }}
+c2.vm1.clamp.simpledemo.onap.org: {{ clamp_floating_ip_addr }}
+
+vm1.mr.simpledemo.onap.org: {{ mr_floating_ip_addr }}
+
+vm1.openo.simpledemo.onap.org: {{ openo_floating_ip_addr }}
+
+collector.api.simpledemo.onap.org: {{ dcae_coll_floating_ip_addr }}
+
+
+aai.api.simpledemo.onap.org: 'vm1.aai.simpledemo.onap.org'
+aai.ui.simpledemo.onap.org: 'vm1.aai.simpledemo.onap.org'
+aai.searchservice.simpledemo.onap.org: 'vm1.aai.simpledemo.onap.org'
+aai.hbase.simpledemo.onap.org: 'vm2.aai.simpledemo.onap.org'
+aai.gremlinserver.simpledemo.onap.org: 'vm2.aai.simpledemo.onap.org'
+aai.elasticsearch.simpledemo.onap.org: 'vm2.aai.simpledemo.onap.org'
+
+appc.api.simpledemo.onap.org: 'vm1.appc.simpledemo.onap.org'
+
+sdc.api.simpledemo.onap.org: 'vm1.sdc.simpledemo.onap.org'
+
+dcae.api.simpledemo.onap.org: 'vm1.dcae.simpledemo.onap.org'
+
+mso.api.simpledemo.onap.org: 'vm1.mso.simpledemo.onap.org'
+
+policy.api.simpledemo.onap.org: 'vm1.policy.simpledemo.onap.org'
+
+sdnc.api.simpledemo.onap.org: 'vm1.sdnc.simpledemo.onap.org'
+
+vid.api.simpledemo.onap.org: 'vm1.vid.simpledemo.onap.org'
+
+portal.api.simpledemo.onap.org: 'vm1.portal.simpledemo.onap.org'
+
+ueb.api.simpledemo.onap.org: 'vm1.mr.simpledemo.onap.org'
+
+clamp.api.simpledemo.onap.org: 'vm1.clamp.simpledemo.onap.org'
+
+robot.api.simpledemo.onap.org: 'vm1.robot.simpledemo.onap.org'
+sniro.api.simpledemo.onap.org: 'vm1.robot.simpledemo.onap.org'
+
+msb.api.simpledemo.onap.org: 'vm1.openo.simpledemo.onap.org'
+mvim.api.simpledemo.onap.org: 'vm1.openo.simpledemo.onap.org'
+vnfsdk.api.simpledemo.onap.org: 'vm1.openo.simpledemo.onap.org'
+vfc.api.simpledemo.onap.org: 'vm1.openo.simpledemo.onap.org'
+uui.api.simpledemo.onap.org: 'vm1.openo.simpledemo.onap.org'
+esr.api.simpledemo.onap.org: 'vm1.openo.simpledemo.onap.org'
+