- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page
infoblox_client.objects.... Create isn't throwing duplicate errors.. Why?
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
09-05-2023 07:36 AM
I'm trying to create an options filter using infoblox_client.objects.Fitleroption.create(). Even with check_if_exists=True and update_if_exists=False, it returns the already existing _ref. In fact, while production is not changed, the object it returns to me has my fields updated in it, even though the production _ref never updated. I don't seem to have any way of finding out that it didn't update because create() does not return a tuple with status, nor does it return None because the create failed, nor does it throw an Exception. That looks like a huge oversight.
The only way I can be sure I'm doing this correctly is if use infoblox_client.connection.create_object(). That will throw a duplicate error like this:
Error: Cannot create 'filteroption' object(s): b'{ "Error": "AdmConDataError: None (IBDataConflictError: IB.Data.Conflictuplicate object \'willNotWork2\' of type \'dhcp_option_filter\' already exists in the database.)", \n "code": "Client.Ibap.Data.Conflict", \n "text": "Duplicate object \'willNotWork2\' of type \'dhcp_option_filter\' already exists in the database.", \n "trace": " File \\"ibapapachemod.py\\", line 477, in handlerequest\\n File \\"/infoblox/common/lib/python/infoblox/one/admin_conn/wapibase.py\\", line 1474, in execute\\n File \\"/infoblox/common/lib/python/infoblox/one/admin_conn/wapibase.py\\", line 1430, in _exec_handler\\n File \\"/infoblox/common/lib/python/infoblox/one/admin_conn/wapihandler.py\\", line 1324, in execute\\n"\n}' [code 400].
In fact, the only error it raises is if the API returns muliple objects, which makes no sense:
| Class methods inherited from InfobloxObject:
|
| _search(connector, return_fields=None, search_extattrs=None, force_proxy=False, max_results=None, paging=False, **kwargs) from builtins.type
|
| create(connector, check_if_exists=True, update_if_exists=False, **kwargs) from builtins.type
| Create the object in NIOS.
|
| Args:
| check_if_exists: If True, create method will attempt
| to fetch the object to check if it exists.
| update_if_exists: If True, create method will attempt
| to update the object if one exists.
|
| Raises:
| InfobloxFetchGotMultipleObjects: Raised only when check_if_exists
| is True. The fetch method can raise this error when API return
| multiple objects.
|
| Returns: Created Infoblox object.
I have also tried the create_check_exists, to see the existing object's ref and make sure I'm not crazy. Here is the search first, to get the ref:
apply_as_class="False", bootfile="noboot.pxe", comment="A test fromDGF 23", expression="(substring(option vendor-class-identifier,0,20)="PXEClient:Arch:00000")", name="willNotWork2", option_space="DHCP", _ref="filteroption/ZG5zLmRoY3Bfb3B0aW9uX2ZpbHRlciR3aWxsTm90V29yazI:willNotWork2"
Here is the Fiteroption.create( check_if_exists=True, update_if_exists=false, **kwargs):
Filteroption: apply_as_class="False", bootfile="noboot.pxe", comment="A test fromDGF 34", expression="(substring(option vendor-class-identifier,0,20)="PXEClient:Arch:00000")", name="willNotWork2", _ref="filteroption/ZG5zLmRoY3Bfb3B0aW9uX2ZpbHRlciR3aWxsTm90V29yazI:willNotWork2"
Is the object.NAME.create() going to be a problem for everyone? Why does it exist when we need to use connection.create_object() for proper error handling?
Thank you,
David