diff --git a/src/main/java/org/rundeck/api/DefaultJobsImport.java b/src/main/java/org/rundeck/api/DefaultJobsImport.java
index d4d4010..5671451 100644
--- a/src/main/java/org/rundeck/api/DefaultJobsImport.java
+++ b/src/main/java/org/rundeck/api/DefaultJobsImport.java
@@ -1,6 +1,7 @@
package org.rundeck.api;
import org.rundeck.api.domain.RundeckJobsImportMethod;
+import org.rundeck.api.domain.RundeckJobsUUIDImportBehavior;
import java.io.InputStream;
@@ -11,6 +12,7 @@ public class DefaultJobsImport implements RundeckJobsImport{
private InputStream stream;
private FileType fileType;
private RundeckJobsImportMethod importMethod;
+ private RundeckJobsUUIDImportBehavior uuidImportBehavior;
private String project;
public InputStream getStream() {
@@ -44,4 +46,12 @@ public class DefaultJobsImport implements RundeckJobsImport{
public void setProject(final String project) {
this.project = project;
}
+
+ public RundeckJobsUUIDImportBehavior getUuidImportBehavior() {
+ return uuidImportBehavior;
+ }
+
+ public void setUuidImportBehavior(RundeckJobsUUIDImportBehavior uuidImportBehavior) {
+ this.uuidImportBehavior = uuidImportBehavior;
+ }
}
diff --git a/src/main/java/org/rundeck/api/RundeckClient.java b/src/main/java/org/rundeck/api/RundeckClient.java
index 2d97f9c..4edd396 100644
--- a/src/main/java/org/rundeck/api/RundeckClient.java
+++ b/src/main/java/org/rundeck/api/RundeckClient.java
@@ -869,6 +869,10 @@ public class RundeckClient implements Serializable {
.param("format", rundeckJobsImport.getFileType())
.param("dupeOption", rundeckJobsImport.getImportMethod())
.attach("xmlBatch", rundeckJobsImport.getStream());
+ if(null!=rundeckJobsImport.getUuidImportBehavior()) {
+ //API v9
+ request.param("uuidOption", rundeckJobsImport.getUuidImportBehavior());
+ }
if(null!=rundeckJobsImport.getProject()) {
//API v8
request.param("project", rundeckJobsImport.getProject());
diff --git a/src/main/java/org/rundeck/api/RundeckJobsImport.java b/src/main/java/org/rundeck/api/RundeckJobsImport.java
index dd31eb7..fe70e84 100644
--- a/src/main/java/org/rundeck/api/RundeckJobsImport.java
+++ b/src/main/java/org/rundeck/api/RundeckJobsImport.java
@@ -1,6 +1,7 @@
package org.rundeck.api;
import org.rundeck.api.domain.RundeckJobsImportMethod;
+import org.rundeck.api.domain.RundeckJobsUUIDImportBehavior;
import java.io.InputStream;
@@ -25,6 +26,11 @@ public interface RundeckJobsImport {
* @return
*/
public RundeckJobsImportMethod getImportMethod();
+ /**
+ * Return the import behavior
+ * @return
+ */
+ public RundeckJobsUUIDImportBehavior getUuidImportBehavior();
/**
* Return the project name
diff --git a/src/main/java/org/rundeck/api/RundeckJobsImportBuilder.java b/src/main/java/org/rundeck/api/RundeckJobsImportBuilder.java
index 2e94f75..69f8f24 100644
--- a/src/main/java/org/rundeck/api/RundeckJobsImportBuilder.java
+++ b/src/main/java/org/rundeck/api/RundeckJobsImportBuilder.java
@@ -1,6 +1,7 @@
package org.rundeck.api;
import org.rundeck.api.domain.RundeckJobsImportMethod;
+import org.rundeck.api.domain.RundeckJobsUUIDImportBehavior;
import java.io.InputStream;
@@ -20,6 +21,7 @@ public class RundeckJobsImportBuilder {
jobsImport.setFileType(original.getFileType());
jobsImport.setProject(original.getProject());
jobsImport.setImportMethod(original.getImportMethod());
+ jobsImport.setUuidImportBehavior(original.getUuidImportBehavior());
}
/**
@@ -58,6 +60,10 @@ public class RundeckJobsImportBuilder {
jobsImport.setImportMethod(behavior);
return this;
}
+ public RundeckJobsImportBuilder setUUIDImportBehavior(final RundeckJobsUUIDImportBehavior behavior) {
+ jobsImport.setUuidImportBehavior(behavior);
+ return this;
+ }
public RundeckJobsImport build() {
final RundeckJobsImport built = jobsImport;
diff --git a/src/main/java/org/rundeck/api/domain/RundeckJobsUUIDImportBehavior.java b/src/main/java/org/rundeck/api/domain/RundeckJobsUUIDImportBehavior.java
new file mode 100644
index 0000000..9a4a1b6
--- /dev/null
+++ b/src/main/java/org/rundeck/api/domain/RundeckJobsUUIDImportBehavior.java
@@ -0,0 +1,9 @@
+package org.rundeck.api.domain;
+
+/**
+ * $INTERFACE is ... User: greg Date: 1/16/14 Time: 11:38 AM
+ */
+public enum RundeckJobsUUIDImportBehavior {
+ PRESERVE,
+ REMOVE
+}
diff --git a/src/test/java/org/rundeck/api/RundeckClientTest.java b/src/test/java/org/rundeck/api/RundeckClientTest.java
index 8abfc6c..6865f1a 100644
--- a/src/test/java/org/rundeck/api/RundeckClientTest.java
+++ b/src/test/java/org/rundeck/api/RundeckClientTest.java
@@ -54,6 +54,7 @@ public class RundeckClientTest {
public static final String TEST_TOKEN_3 = "9RdEosesKP3se4oV9EKOd4s3RUeUS3ON";
public static final String TEST_TOKEN_4 = "sN5RRSNvu15DnV6EcNDdc2CkdPcv3s32";
public static final String TEST_TOKEN_5 = "C3O6d5O98Kr6Dpv71sdE4ERdCuU12P6d";
+ public static final String TEST_TOKEN_6 = "Do4d3NUD5DKk21DR4sNK755RcPk618vn";
@Rule
public Recorder recorder = new Recorder();
@@ -912,6 +913,83 @@ public class RundeckClientTest {
Assert.assertEquals("importJobsProjectParamV7", rundeckJob.getName());
Assert.assertEquals("testXYZ", rundeckJob.getProject());
}
+ /**
+ * Import jobs, project parameter v7 doesn' use parameter
+ * @throws Exception
+ */
+ @Test
+ @Betamax(tape = "import_jobs_uuid_param_remove_v9")
+ public void importJobsUUIDParamRemoveV9() throws Exception {
+ final RundeckClient client = createClient(TEST_TOKEN_6, 9);
+ InputStream stream=new ByteArrayInputStream(
+ ("\n" +
+ " \n" +
+ " testImportUUID\n" +
+ " INFO\n" +
+ " \n" +
+ " \n" +
+ " echo hi\n" +
+ " \n" +
+ " \n" +
+ " \n" +
+ " importJobsUUIDParamRemoveV9\n" +
+ " \n" +
+ "").getBytes("utf-8"));
+
+ final RundeckJobsImport jobsImport = RundeckJobsImportBuilder.builder()
+ .setStream(stream)
+ .setFileType(FileType.XML)
+ .setJobsImportMethod(RundeckJobsImportMethod.CREATE)
+ .setUUIDImportBehavior(RundeckJobsUUIDImportBehavior.REMOVE)
+ .setProject("test")
+ .build();
+ RundeckJobsImportResult rundeckJobsImportResult = client.importJobs(jobsImport);
+ Assert.assertEquals(0,rundeckJobsImportResult.getFailedJobs().size());
+ Assert.assertEquals(0,rundeckJobsImportResult.getSkippedJobs().size());
+ Assert.assertEquals(1,rundeckJobsImportResult.getSucceededJobs().size());
+ RundeckJob rundeckJob = rundeckJobsImportResult.getSucceededJobs().get(0);
+ Assert.assertEquals("importJobsUUIDParamRemoveV9", rundeckJob.getName());
+ Assert.assertFalse("testImportUUID".equals(rundeckJob.getId()));
+ Assert.assertEquals("b33c8bb1-4dfc-4661-a890-4164b264cc4a", rundeckJob.getId());
+ }
+ /**
+ * Import jobs, project parameter v7 doesn' use parameter
+ * @throws Exception
+ */
+ @Test
+ @Betamax(tape = "import_jobs_uuid_param_preserve_v9")
+ public void importJobsUUIDParamPreserveV9() throws Exception {
+ final RundeckClient client = createClient(TEST_TOKEN_6, 9);
+ InputStream stream=new ByteArrayInputStream(
+ ("\n" +
+ " \n" +
+ " testImportUUID\n" +
+ " INFO\n" +
+ " \n" +
+ " \n" +
+ " echo hi\n" +
+ " \n" +
+ " \n" +
+ " \n" +
+ " importJobsUUIDParamPreserveV9\n" +
+ " \n" +
+ "").getBytes("utf-8"));
+
+ final RundeckJobsImport jobsImport = RundeckJobsImportBuilder.builder()
+ .setStream(stream)
+ .setFileType(FileType.XML)
+ .setJobsImportMethod(RundeckJobsImportMethod.CREATE)
+ .setUUIDImportBehavior(RundeckJobsUUIDImportBehavior.PRESERVE)
+ .setProject("test")
+ .build();
+ RundeckJobsImportResult rundeckJobsImportResult = client.importJobs(jobsImport);
+ Assert.assertEquals(0,rundeckJobsImportResult.getFailedJobs().size());
+ Assert.assertEquals(0,rundeckJobsImportResult.getSkippedJobs().size());
+ Assert.assertEquals(1,rundeckJobsImportResult.getSucceededJobs().size());
+ RundeckJob rundeckJob = rundeckJobsImportResult.getSucceededJobs().get(0);
+ Assert.assertEquals("importJobsUUIDParamPreserveV9", rundeckJob.getName());
+ Assert.assertEquals("testImportUUID", rundeckJob.getId());
+ }
/**
* Running executions for all projects using API v9
* @throws Exception
diff --git a/src/test/resources/betamax/tapes/import_jobs_uuid_param_preserve_v9.yaml b/src/test/resources/betamax/tapes/import_jobs_uuid_param_preserve_v9.yaml
new file mode 100644
index 0000000..517189d
--- /dev/null
+++ b/src/test/resources/betamax/tapes/import_jobs_uuid_param_preserve_v9.yaml
@@ -0,0 +1,23 @@
+!tape
+name: import_jobs_uuid_param_preserve_v9
+interactions:
+- recorded: 2014-01-16T19:48:16.361Z
+ request:
+ method: POST
+ uri: http://rundeck.local:4440/api/9/jobs/import?format=xml&dupeOption=create&uuidOption=preserve&project=test
+ headers:
+ Content-Type: multipart/form-data; boundary=Vv9SewZI5E_1GRc0505bncu0VK9ZyEST8frI5x
+ Host: rundeck.local:4440
+ Proxy-Connection: Keep-Alive
+ Transfer-Encoding: chunked
+ User-Agent: RunDeck API Java Client 9
+ X-RunDeck-Auth-Token: Do4d3NUD5DKk21DR4sNK755RcPk618vn
+ response:
+ status: 200
+ headers:
+ Content-Type: text/xml;charset=UTF-8
+ Expires: Thu, 01 Jan 1970 00:00:00 GMT
+ Server: Jetty(7.6.0.v20120127)
+ Set-Cookie: JSESSIONID=1xnx5xlw417u9yjo2k4r2azlz;Path=/
+ body: "\n \n \n testImportUUID\n importJobsUUIDParamPreserveV9\n \n\
+ \ test\n http://dignan.local:4440/scheduledExecution/show/testImportUUID\n \n \n \n \n"
diff --git a/src/test/resources/betamax/tapes/import_jobs_uuid_param_remove_v9.yaml b/src/test/resources/betamax/tapes/import_jobs_uuid_param_remove_v9.yaml
new file mode 100644
index 0000000..b91861f
--- /dev/null
+++ b/src/test/resources/betamax/tapes/import_jobs_uuid_param_remove_v9.yaml
@@ -0,0 +1,23 @@
+!tape
+name: import_jobs_uuid_param_remove_v9
+interactions:
+- recorded: 2014-01-16T19:48:16.054Z
+ request:
+ method: POST
+ uri: http://rundeck.local:4440/api/9/jobs/import?format=xml&dupeOption=create&uuidOption=remove&project=test
+ headers:
+ Content-Type: multipart/form-data; boundary=g4k7Bv2F-yGqChdM2JJnQlCIXgmcZhb
+ Host: rundeck.local:4440
+ Proxy-Connection: Keep-Alive
+ Transfer-Encoding: chunked
+ User-Agent: RunDeck API Java Client 9
+ X-RunDeck-Auth-Token: Do4d3NUD5DKk21DR4sNK755RcPk618vn
+ response:
+ status: 200
+ headers:
+ Content-Type: text/xml;charset=UTF-8
+ Expires: Thu, 01 Jan 1970 00:00:00 GMT
+ Server: Jetty(7.6.0.v20120127)
+ Set-Cookie: JSESSIONID=1cc5yr3jhdhxs1d9zt0cxdt84z;Path=/
+ body: "\n \n \n b33c8bb1-4dfc-4661-a890-4164b264cc4a\n importJobsUUIDParamRemoveV9\n\
+ \ \n test\n http://dignan.local:4440/scheduledExecution/show/b33c8bb1-4dfc-4661-a890-4164b264cc4a\n \n \n \n \n"