Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python
- import requests
- import getpass
- import json
- from pprint import pprint
- from requests.packages.urllib3.exceptions import InsecureRequestWarning
- requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
- host = "10.188.131.20"
- base_url = "https://" + host + "/rest/"
- fabrics = [
- {"name": "FLEX-A-USCHA-COLO1-FAB-A", "key": "10:00:50:EB:1A:A9:29:80"},
- {"name": "FLEX-A-USCHA-COLO1-FAB-B", "key":"10:00:50:EB:1A:A8:98:54"},
- {"name":"FLEX-B-USCHA-COLO1-FAB-A", "key":"10:00:50:EB:1A:A9:11:00"},
- {"name":"FLEX-B-USCHA-COLO1-FAB-B", "key":"10:00:50:EB:1A:5B:F7:C0"}
- ]
- def get_fabrics(session,host):
- url = base_url + "resourcegroups/All/fcfabrics"
- #print url
- try:
- response = session.get(url=url)
- #print response
- return json.loads(response.content)
- except:
- print "Unable to retrieve fabrics"
- return None
- return response.content
- def login(session):
- url = base_url + "login"
- try:
- response = session.post(url=url)
- #print dir(response)
- #print response
- #print response.headers
- except Exception as e:
- print e
- print "Unable to login"
- return None
- return response.headers['WStoken']
- def logout(connection, WStoken):
- url = base_url + 'logout'
- print("URL: " + url)
- connection.request('POST', url,
- headers={"WStoken": WStoken,
- "Accept": "application/vnd.brocade.networkadvisor+json;version=v1"})
- print("Logging out of BNA...")
- # Get the response
- response = connection.getresponse()
- # Display the response status
- print("Status=", response.status)
- # If successful (status = 204), display the returned Network Advisor session token
- if response.status == 204:
- print("Logout successful!")
- else:
- print(response.status, response.reason)
- connection.close()
- #step1 - dont use
- def start_zoning(WStoken):
- print("Starting Zoning Transaction...")
- data = {
- "lsanZoning": "false",
- "action": "START"
- }
- headers = {
- "WStoken": WStoken,
- "Accept": "application/vnd.brocade.networkadvisor+json;version=v1",
- "Content-type": "application/vnd.brocade.networkadvisor+json;version=v1"
- }
- url = base_url + 'resourcegroups/All/fcfabrics/{}/controlzonetransaction'
- for fabric_key in [fabric['key'] for fabric in fabrics]:
- print("URL: " + url)
- r = requests.post(url.format(fabric_key), data=json.dumps(data), headers=headers)
- print("Status=", r.status_code)
- # If successful (status = 204), continue with creation of Aliases, Zones and commit transaction
- if r.status_code == 204:
- return True
- else:
- return False
- #step2
- def create_zoning_objects(WStoken, payload):
- print("Creating Aliases and Zones...")
- url = base_url + 'resourcegroups/All/fcfabrics/{}/createzoningobject'
- config = make_zoning_payload()
- data=payload
- headers={
- "WStoken": WStoken,
- "Accept": "application/vnd.brocade.networkadvisor+json;version=v1",
- "Content-type": "application/vnd.brocade.networkadvisor+json;version=v1"
- }
- if confirm("Create the following zoning object:", data):
- for fabric in fabrics:
- r = requests.post(url.format(fabric['key']), data=json.dumps(data), headers=headers)
- print("Status=", r.status_code)
- return True
- else:
- return False
- def make_zoning_payload():
- payload = {"zones": [], "zoneAliases": []}
- while again("Do you want to create an alias?"):
- name = input('Alias name: ')
- wwn = input('Enter all wwns seperated by commas: ')
- payload['zoneAliases'].append({"name":name, "memberNames":wwn.split(',')})
- while again("Do you want to create a zone? "):
- name = input("Zone name")
- aliases = input("Enter all aliases for this zone seperated by commas:")
- payload['zones'].append({"name": name, "aliasNames": aliases.split(',')})
- return payload
- def test_zoning_payload():
- return {
- "zones": [{
- "name": "host1_hba0_array_sp0", #make parameter
- "aliasNames": [
- "host_hba0",
- "array_sp0"],
- "type": "STANDARD"
- }],
- "zoneAliases": [{
- "name": "host_hba0",
- "memberNames": [
- "11:22:33:44:55:66:77:88"
- ]},{
- "name": "array_sp0",
- "memberNames": [
- "88:77:66:55:44:33:22:11"
- ]}]}
- #step 3
- def make_cfg_payload():
- payload = {"action":"ADD", "zoneSets":[]}
- while again("Do you want to add a zone to cfg?"):
- name = input("fabric name:")
- zones = input("zone_names:")
- payload['zoneNames'].append({"name": name, "zoneNames": zones.split(',')})
- return payload
- def test_cfg_payload():
- return {
- "action": "ADD",
- "zoneSets": [
- {
- "name": "home_fabric",
- "zoneNames": [
- "host1_hba0_array_sp0"
- ]
- }
- ]
- }
- def add_zoning_to_CFG(WStoken, payload):
- print("Adding Zones to CFG...")
- url = base_url + 'resourcegroups/All/fcfabrics/{}/updatezoningobject'
- data = make_cfg_payload()
- headers = {
- "WStoken": WStoken,
- "Accept": "application/vnd.brocade.networkadvisor+json;version=v1",
- "Content-type": "application/vnd.brocade.networkadvisor+json;version=v1"
- }
- if confirm("Add the following zone to the cfg:", data):
- for fabric in fabrics:
- r = requests.post(url.format(fabric['key']), data=json.dumps(data), headers=headers)
- print("Status=", r.status_code)
- return True
- else:
- return False
- #step 4
- def commit_zoning_transaction(WStoken):
- print("Committing Zoning Transaction...")
- url = base_url + 'resourcegroups/All/fcfabrics/{}/controlzonetransaction'
- data = {
- "lsanZoning": "false",
- "action": "COMMIT"
- }
- headers = {
- "WStoken": WStoken,
- "Accept": "application/vnd.brocade.networkadvisor+json;version=v1",
- "Content-type": "application/vnd.brocade.networkadvisor+json;version=v1"
- }
- if confirm("Are you ready to commit?", None):
- for fabric in fabrics:
- r = requests.post(url.format(fabric['key']), data=json.dumps(data), headers=headers)
- print("Status=", r.status_code)
- return True
- else:
- return False
- #step 5
- def activate_CFG(connection, WStoken):
- print("Activating CFG...")
- url = base_url + 'resourcegroups/All/fcfabrics/{}/zonesets/home_fabric-false/activate'
- data = {
- }
- headers = {
- "WStoken": WStoken,
- "Accept": "application/vnd.brocade.networkadvisor+json;version=v1",
- "Content-type": "application/vnd.brocade.networkadvisor+json;version=v1"
- }
- for fabric in fabrics:
- print("URL: " + url)
- r = requests.post(url.format(fabric['key']), data=json.dumps(data), headers=headers)
- print("Status=", r.status_code)
- print()
- url = base_url + 'resourcegroups/All/fcfabrics/' + fabric[0]['key'] + '/zonedbs'
- print("URL: " + url)
- print("Displaying updated contents of Zoning DB for fabric" + fabric[0]['name'] + "...")
- connection.connect()
- connection.request('GET', url,
- headers={"WStoken": WStoken,
- "Accept": "application/vnd.brocade.networkadvisor+json;version=v1"})
- # Get the response
- response = connection.getresponse()
- # Display the response status
- print("Status=", response.status)
- # If successful (status = 200), display the returned list in JSON format
- if response.status == 200:
- print("Zone DB:")
- json_response_bytes = response.read()
- json_response_string = str(json_response_bytes, encoding='utf8')
- zone_db_dict = json.loads(json_response_string)
- print(json.dumps(zone_db_dict, indent=4))
- else:
- print(response.status, response.reason)
- connection.close()
- ###GET USER INTERACTION#####
- def again(prompt):
- response = input(prompt)
- if response in 'yes':
- return True
- return False
- def confirm(message, object):
- print(message)
- pprint(object)
- return again("Does this look right? :")
- user = getpass.getuser()
- password = getpass.getpass("Enter your password: ")
- session = requests.Session()
- session.verify = False
- session.headers.update({"WSUsername":"%s" % user ,"WSPassword":"%s" % password,"Accept":"application/vnd.brocade.networkadvisor+json;version=v1"})
- session.auth = (user,password)
- token = login(session)
- session.headers.update({"WStoken":"%s" % token})
- content = get_fabrics(session,host)
- start_zoning(token)
- payload = make_zoning_payload()
- print json.dumps(content,indent=4)
- wwn = content['fcFabrics'][0]['principalSwitchWwn']
- #print content
- #TODO: look for collisions
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement