{"record":{"id":"12608929029906a3","repo":"jenkinsci/jenkins","slug":"node-already-exists","errorCode":null,"errorMessage":"Node ' already exists","messagePattern":"Node ' already exists","errorType":"exception","errorClass":"IllegalStateException","httpStatus":null,"severity":"error","filePath":"core/src/main/java/hudson/cli/CreateNodeCommand.java","lineNumber":64,"sourceCode":"        return Messages.CreateNodeCommand_ShortDescription();\n    }\n\n    @Override\n    protected int run() throws Exception {\n\n        final Jenkins jenkins = Jenkins.get();\n        jenkins.checkPermission(Computer.CREATE);\n\n        final Node newNode = (Node) Jenkins.XSTREAM2.fromXML(stdin);\n\n        if (nodeName != null) {\n\n            // Using deprecated method but it's contract is preserved\n            newNode.setNodeName(nodeName);\n        }\n\n        if (jenkins.getNode(newNode.getNodeName()) != null) {\n            throw new IllegalStateException(\"Node '\" + newNode.getNodeName() + \"' already exists\");\n        }\n\n        jenkins.addNode(newNode);\n\n        return 0;\n    }\n\n}\n","sourceCodeStart":46,"sourceCodeEnd":73,"githubUrl":"https://github.com/jenkinsci/jenkins/blob/2e228ff40b14dbc8b14ffbc6edf0e4383cf744fc/core/src/main/java/hudson/cli/CreateNodeCommand.java#L46-L73","documentation":"`CreateNodeCommand.run()` deserializes a Node from stdin, optionally overrides its name from the NODE argument, then checks `jenkins.getNode(newNode.getNodeName()) != null`. If a node with that name exists, IllegalStateException 'Node '<name>' already exists' is thrown before `addNode`. Node names must be unique.","triggerScenarios":"Running `java -jar jenkins-cli.jar create-node <name> < node.xml` (or create-node with a name inside the XML) where a node/agent with that name already exists.","commonSituations":"Re-running create-node after a prior success; importing agent XML whose name collides; re-adding a previously removed-but-not-deleted agent.","solutions":["Delete the existing node first: `java -jar jenkins-cli.jar delete-node <name>`, then create.","Choose a different node name (pass a unique NODE argument or edit the XML's name).","In scripts, check `jenkins.getNode(name) == null` before creating."],"exampleFix":"// before:\n//   java -jar jenkins-cli.jar create-node agent1 < agent.xml  // agent1 exists\n//   -> IllegalStateException: Node 'agent1' already exists\n//\n// after: delete then recreate, or use a new name\n//   java -jar jenkins-cli.jar delete-node agent1\n//   java -jar jenkins-cli.jar create-node agent1 < agent.xml","handlingStrategy":"validation","validationCode":"// Ensure node name is free before create-node\nif (jenkins.getNode(newNode.getNodeName()) != null) {\n    throw new IllegalStateException(\"Node '\" + newNode.getNodeName() + \"' already exists\");\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Check node existence before creating; delete stale nodes first.","Generate unique node names in provisioning scripts."],"tags":["jenkins","cli","node","agent","duplicate","create"],"backgroundTag":null,"analyzedSha":"2e228ff40b14dbc8b14ffbc6edf0e4383cf744fc","analyzedAt":"2026-08-14T07:07:15.274Z","schemaVersion":2},"datasetVersion":"2026-08-14T10:17:34.591Z"}