"Expected end of command" before on-error

Hi! I’m trying to idempotently create new system user via scripting, but for some reason I’m getting stupid error that makes no sense.

:if ( [/user group find where name=oxidized] ) do={
  :log info ("Group oxidized exists, bailing...")
} else={
  :log info ("Provisioning oxidized user: oxidized...")
  /user group add name=oxidized policy=read,ssh
} on-error={ :log info ("User provisioning error!") };

Why does script fail immediately? https://wiki.mikrotik.com/wiki/Manual:Scripting#Conditional_statement doesn’t show that I need to do more than :if () do={} else={}, so what gives? Really annoying.

You are adding a user group, not a user.

To add a user.

/user add name=test group=full

If the goal is to create a group, you need to change the code to make on-error work.
on-error needs to be started with do, and if any command innside fails, code in on-error runs.

:do {
	:if ( [/user group find where name=oxidized] ) do={
		:log info ("Group oxidized exists, bailing...")
	} else={
		:log info ("Provisioning oxidized user: oxidized...")
		/user group add name=oxidized policy=read,ssh}
} on-error={ :log info ("User provisioning error!")
}