Bulk Change Owners of Structures and Generators

This article is for Data Center. Visit Cloud

Bulk Change Owners of Structures and Generators



import com.onresolve.scriptrunner.runner.customisers.WithPlugin import com.onresolve.scriptrunner.runner.ScriptRunnerImpl import com.almworks.jira.structure.api.StructureComponents import com.almworks.jira.structure.api.auth.StructureAuth import com.almworks.jira.structure.api.structure.Structure import com.almworks.jira.structure.api.sync.SyncInstance @Grab(group = 'com.almworks.jira.structure', module = 'structure-api', version = '*') @WithPlugin('com.almworks.jira.structure') def oldOwnerName = 'admin' def newOwnerName = 'alice' def resync = true // do full resync after update def components = ScriptRunnerImpl.getPluginComponent(StructureComponents) def structureManager = components.structureManager def syncManager = components.syncManager def oldOwner = Users.getByName(oldOwnerName) def newOwner = Users.getByName(newOwnerName) if (newOwner == null) { def message = "Cannot find user by username: $newOwnerName" log.error(message) return message } // The actual work is done here List<Structure> changedStructures = [] List<SyncInstance> changedSynchronizers = [] def success = false def exception = null try { StructureAuth.sudo { structureManager.getAllStructures(null, true).each { st -> // Change owner if (st.owner == oldOwner) { st.owner = newOwner st.saveChanges() changedStructures << st } // Change owner of synchronizers installed for this structure syncManager.getInstalledSynchronizersForStructure(st.id).each { sync -> if (sync.userKey == oldOwner?.key) { def enabled = syncManager.isAutosyncEnabled(sync.id) if (enabled) { syncManager.setAutosyncEnabled(sync.id, false) syncManager.updateSynchronizer(sync.id, sync.parameters, newOwner) if (resync) { syncManager.resync(sync.id, true, null) } else { syncManager.setAutosyncEnabled(sync.id, true) } } else { syncManager.updateSynchronizer(sync.id, sync.parameters, newOwner) } changedSynchronizers << sync } } } } success = true } catch (Exception e) { log.warn("Failed to change owner from '$oldOwnerName' to '$newOwnerName'", e) exception = e } // Output message about changed structures and synchronizers to the log and to the console output def msg = "Script to change owner from '$oldOwnerName' for '$newOwnerName' " + (success ? "finished successfully" : "failed (${exception && exception.message})") + "\n" + "Changed structures:\n" + changedStructures.collect({ "#${it.id} ${it.name}" }).join("\n") + "\n" + "Changed synchronizers:\n" + changedSynchronizers.collect({ "#${it.id} (for structure #${it.structureId})" }).join("\n") log.warn(msg) msg.replaceAll("\n", "<br>")