05-25-2022 04:51 PM
Hi Experts,
I am looking for some guidance to import network objects onto FTD via the api-explorer. I am able to create a single host using the GUI explorer. Any help on how the syntax would be if I want to import multiple objects via the api-explorer is appreciated.
I tested and see that the following syntax for a single host, how do i modify this for multiple hosts?
{
"name": "abc"
"value": "x.x.x.x"
"type": "networkobject"
"subType": "HOST"
}
05-26-2022 01:47 AM
Here is the Python script I can use the CSV file if you have a bulk of hosts. The CSV file used should be stored in the same directory as the script, and it must be referenced when calling the script like so: python <script.py> <csvfile.csv>. Here is the CSV file I used for the hosts:
name,value,type,description Host-1,10.0.1.10,host,Host 1 Host-2,10.0.2.10,host,Host 2
Python Script
import csv
import json
import sys
import requests
import os
server = "https://192.168.45.45"
username = "api"
password = "cisco"
headers = {'Content-Type': 'application/json'}
api_auth_path = "/api/fmc_platform/v1/auth/generatetoken"
auth_url = server + api_auth_path
r = None
def yes_or_no(question):
answer = raw_input(question + "(y/n): ").lower().strip()
print("")
while not(answer == "y" or answer == "yes" or \
answer == "n" or answer == "no"):
print("Input yes or no")
answer = raw_input(question + "(y/n):").lower().strip()
print("")
if answer[0] == "y":
return True
else:
return False
csvfile = open(sys.argv[1])
objects = csv.DictReader(csvfile)
print('\nThis script will attempt to create objects via an API call')
if yes_or_no('\nDo you want to continue?'):
()
else:
quit()
try:
print('\n\nPlease wait connection to FMC...')
requests.packages.urllib3.disable_warnings()
r = requests.post(auth_url, headers=headers,
auth=requests.auth.HTTPBasicAuth(username,password), verify=False)
auth_headers = r.headers
auth_token = auth_headers.get('X-auth-access-token', default=None)
if auth_token == None:
print("auth_token not found. Exiting...")
sys.exit()
except Exception as err:
print ("Error in generating auth token --> "+str(err))
sys.exit()
headers['X-auth-access-token'] = auth_token
print('...Connected! Auth token collected successfully (' + auth_token + (')\n'))
api_path = "/api/fmc_config/v1/domain/e276abec-e0f2-11e3-8169-6d9ed49b625f/object/hosts"
url = server + api_path
if (url[-1] == '/'):
url = url[:-1]
for object in objects:
post_data = {
"name": object["name"],
"type": object["type"],
"value": object["value"],
"description": object["description"],
}
print('\n*************************************')
print('Creating object: ' + object["name"])
try:
r = requests.post(url, data=json.dumps(post_data), headers=headers, verify=False)
status_code = r.status_code
resp = r.text
log = open('api.log', 'a')
print(" Status code: "+str(status_code))
json_resp = json.loads(resp)
log.write('\n---------------------------------------------------------------------\n')
log.write(json.dumps(json_resp,sort_keys=True,indent=4, separators=(',', ': ')))
if status_code == 201 or status_code == 202:
print (" SUCCESS ")
elif status_code == 400:
print (" Message: ") + resp + ('\n')
else:
r.raise_for_status()
print (" Message: ") + resp + ('\n')
except requests.exceptions.HTTPError as err:
print ("Error in connection --> "+str(err))
finally:
if r: r.close()
print('\nLog file "api.log" appended\n')
api.log will logging what object it has created on the FMC.
07-15-2022 12:03 PM
Hello,
How can we do it in FDM? Our firepower version is 6.4.0.15.
Please help.
Discover and save your favorite ideas. Come back to expert answers, step-by-step guides, recent topics, and more.
New here? Get started with these tips. How to use Community New member guide