diff --git a/SmartMove/SmartConnector/smartconnector.py b/SmartMove/SmartConnector/smartconnector.py
index 57f7b41..cd328ec 100644
--- a/SmartMove/SmartConnector/smartconnector.py
+++ b/SmartMove/SmartConnector/smartconnector.py
@@ -150,6 +150,17 @@ def addUserObjectToServer(client, apiCommand, payload, userObjectNamePostfix=1,
#if we have time object need to fill name with condition 11 symbols as max length
payload['name'] = userObjectNameInitial[:-(len(str(userObjectNamePostfix))+1)] + '_' + str(userObjectNamePostfix)
userObjectNamePostfix += 1
+ elif args.reuse_group_name.lower() == "true" and \
+ (apiCommand == 'add-group'
+ or apiCommand == 'add-service-group'
+ or apiCommand == 'add-time-group'
+ or apiCommand == 'add-group-with-exclusion'
+ or apiCommand == 'add-application-site-group'):
+ # In the case of duplicate names and the user uses the 'reuse-group-name' flag,
+ # the smartconnector will not create a new name, it will add the data to the existing name
+ addedObject = res_add_obj.data
+ isObjectAdded = True
+ addedObject["name"] = payload['name']
else:
payload['name'] = userObjectNameInitial + '_' + str(userObjectNamePostfix)
userObjectNamePostfix += 1
@@ -158,6 +169,7 @@ def addUserObjectToServer(client, apiCommand, payload, userObjectNamePostfix=1,
else:
addedObject = res_add_obj.data
isObjectAdded = True
+
return addedObject
@@ -581,7 +593,11 @@ def processNetGroups(client, userNetworkGroups, mergedNetworkObjectsMap):
mergedGroupsNamesDict, False)
if addedNetworkGroup is not None:
mergedGroupsNamesDict[userNetworkGroupNameInitial] = addedNetworkGroup['name']
- printStatus(None, "REPORT: " + userNetworkGroupNameInitial + " is added as " + addedNetworkGroup['name'])
+ if 'errors' in addedNetworkGroup:
+ if 'More than one object' in addedNetworkGroup['errors'][0]['message']:
+ printStatus(None, "REPORT: Using the existing object '{}'".format(addedNetworkGroup['name']))
+ else:
+ printStatus(None, "REPORT: " + userNetworkGroupNameInitial + " is added as " + addedNetworkGroup['name'])
publishCounter = publishUpdate(publishCounter, True)
userNetworkGroup["Name"] = addedNetworkGroup['name']
if userNetworkGroup['TypeName'] != 'CheckPoint_GroupWithExclusion':
@@ -817,7 +833,11 @@ def processServicesGroups(client, userServicesGroups, mergedServicesMap):
mergedServicesGroupsNamesMap, False)
if addedServicesGroup is not None:
mergedServicesGroupsNamesMap[userServicesGroupNameInitial] = addedServicesGroup['name']
- printStatus(None, "REPORT: " + userServicesGroupNameInitial + " is added as " + addedServicesGroup['name'])
+ if 'errors' in addedServicesGroup:
+ if 'More than one object' in addedServicesGroup['errors'][0]['message']:
+ printStatus(None, "REPORT: Using the existing object '{}'".format(addedServicesGroup['name']))
+ else:
+ printStatus(None, "REPORT: " + userServicesGroupNameInitial + " is added as " + addedServicesGroup['name'])
publishCounter = publishUpdate(publishCounter, True)
userServicesGroup["Name"] = addedServicesGroup['name']
processGroupWithMembers(client, "add-service-group", userServicesGroup, mergedServicesMap,
@@ -850,7 +870,11 @@ def processTimesGroups(client, userTimesGroups, mergedTimesNamesMap):
mergedTimesGroupsNamesMap, False)
if addedTimesGroup is not None:
mergedTimesGroupsNamesMap[userTimesGroupNameInitial] = addedTimesGroup['name']
- printStatus(None, "REPORT: " + userTimesGroupNameInitial + " is added as " + addedTimesGroup['name'])
+ if 'errors' in addedTimesGroup:
+ if 'More than one object' in addedTimesGroup['errors'][0]['message']:
+ printStatus(None, "REPORT: Using the existing object '{}'".format(addedTimesGroup['name']))
+ else:
+ printStatus(None, "REPORT: " + userTimesGroupNameInitial + " is added as " + addedTimesGroup['name'])
publishCounter = publishUpdate(publishCounter, True)
userTimesGroup["Name"] = addedTimesGroup['name']
processGroupWithMembers(client, "add-time-group", userTimesGroup, mergedTimesNamesMap,
@@ -1230,6 +1254,9 @@ def processNatRules(client, addedPackage, userNatRules, mergedNetworkObjectsMap,
help="The name/uid of the domain you want to log into in an MDS environment.")
args_parser.add_argument('--replace-from-global-first', default="false",
help="The argument indicates that SmartConnector should use 'Global' objects at first, by default it uses 'Local' objects. [true, false]")
+args_parser.add_argument('--reuse-group-name', default="false",
+ help="The argument indicates that SmartConnector should use reuse the group by name instead "
+ "of creating a new group, take cautions. [true, false]")
args = args_parser.parse_args()
@@ -1267,6 +1294,10 @@ def processNatRules(client, addedPackage, userNatRules, mergedNetworkObjectsMap,
"smartconnector.py: error: argument --replace-from-global-first: invalid boolean value: '" + args.replace_from_global_first + "'")
print("")
args_parser.print_help()
+elif args.reuse_group_name.lower() != "true" and args.reuse_group_name.lower() != "false":
+ print("")
+ printStatus(None, None, "smartconnector.py: error: argument --reuse-group-name: invalid boolean value: '" + args.reuse_group_name + "'")
+ print("")
else:
if args.replace_from_global_first.lower() == "true":
isReplaceFromGlobalFirst = True
@@ -1284,6 +1315,7 @@ def processNatRules(client, addedPackage, userNatRules, mergedNetworkObjectsMap,
printStatus(None, "file: " + args.file)
printStatus(None, "threshold: " + str(args.threshold))
printStatus(None, "replace-from-global-first: " + str(isReplaceFromGlobalFirst))
+ printStatus(None, "reuse-group-name: " + str(args.reuse_group_name).lower())
printStatus(None, "===========================================")
printStatus(None, "reading and parsing processes are started for JSON file: " + args.file)
with open(args.file) as json_file:
@@ -1391,7 +1423,7 @@ def processNatRules(client, addedPackage, userNatRules, mergedNetworkObjectsMap,
mergedNetworkObjectsMap.update(processHosts(client, userHosts))
mergedNetworkObjectsMap.update(processNetworks(client, userNetworks))
mergedNetworkObjectsMap.update(processRanges(client, userRanges))
- mergedNetworkObjectsMap.update(processNetGroups(client, userNetGroups, mergedNetworkObjectsMap))
+ mergedNetworkObjectsMap.update(processNetGroups(client, userNetGroups, mergedNetworkObjectsMap))
mergedNetworkObjectsMap.update(processSimpleGateways(client, userSimpleGateways))
mergedNetworkObjectsMap.update(processZones(client, userZones))
mergedServicesObjectsMap = {}
@@ -1409,4 +1441,4 @@ def processNatRules(client, addedPackage, userNatRules, mergedNetworkObjectsMap,
processNatRules(client, addedPackage, userNatRules, mergedNetworkObjectsMap, mergedServicesObjectsMap)
printStatus(None, "==========")
file_log.close()
-# END
\ No newline at end of file
+# END
diff --git a/SmartMove/SmartMove.csproj b/SmartMove/SmartMove.csproj
index a1ed131..fde7a89 100644
--- a/SmartMove/SmartMove.csproj
+++ b/SmartMove/SmartMove.csproj
@@ -177,6 +177,10 @@
+
+ {d5c34605-141d-47f9-a838-c7b9470236a1}
+ CheckPointObjects
+
{2221dbe4-0775-4bbd-9cbc-33a20e0a09e7}
CiscoMigration