Took me a bit to troubleshoot, when feeding create_nfs_alias() an object created using NfsAliasCreateParams() with path, name, and zone set, the API rejects it with Alias "/testnfs_s10" already exists.
Similar effect when not specifying the zone in the object but specifying the zone on the create_nfs_alias() call.
After some testing using isi cli tool with the --debug flag I found it that it does not like the health field included by NfsAliasCreateParams() because it is set to None. Manually crafting the payload without using NfsAliasCreateParams() and omitting the health field does work.
I'm guessing create_nfs_alias() is not properly dealing with the extra field set to None.