mirror of
https://github.com/Fishwaldo/rundeck-api-java-client.git
synced 2025-07-09 14:39:09 +00:00
Support api v9 uuidOption for jobs import #8
This commit is contained in:
parent
8707881c08
commit
db647eb944
8 changed files with 159 additions and 0 deletions
|
@ -1,6 +1,7 @@
|
||||||
package org.rundeck.api;
|
package org.rundeck.api;
|
||||||
|
|
||||||
import org.rundeck.api.domain.RundeckJobsImportMethod;
|
import org.rundeck.api.domain.RundeckJobsImportMethod;
|
||||||
|
import org.rundeck.api.domain.RundeckJobsUUIDImportBehavior;
|
||||||
|
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
|
||||||
|
@ -11,6 +12,7 @@ public class DefaultJobsImport implements RundeckJobsImport{
|
||||||
private InputStream stream;
|
private InputStream stream;
|
||||||
private FileType fileType;
|
private FileType fileType;
|
||||||
private RundeckJobsImportMethod importMethod;
|
private RundeckJobsImportMethod importMethod;
|
||||||
|
private RundeckJobsUUIDImportBehavior uuidImportBehavior;
|
||||||
private String project;
|
private String project;
|
||||||
|
|
||||||
public InputStream getStream() {
|
public InputStream getStream() {
|
||||||
|
@ -44,4 +46,12 @@ public class DefaultJobsImport implements RundeckJobsImport{
|
||||||
public void setProject(final String project) {
|
public void setProject(final String project) {
|
||||||
this.project = project;
|
this.project = project;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public RundeckJobsUUIDImportBehavior getUuidImportBehavior() {
|
||||||
|
return uuidImportBehavior;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUuidImportBehavior(RundeckJobsUUIDImportBehavior uuidImportBehavior) {
|
||||||
|
this.uuidImportBehavior = uuidImportBehavior;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -869,6 +869,10 @@ public class RundeckClient implements Serializable {
|
||||||
.param("format", rundeckJobsImport.getFileType())
|
.param("format", rundeckJobsImport.getFileType())
|
||||||
.param("dupeOption", rundeckJobsImport.getImportMethod())
|
.param("dupeOption", rundeckJobsImport.getImportMethod())
|
||||||
.attach("xmlBatch", rundeckJobsImport.getStream());
|
.attach("xmlBatch", rundeckJobsImport.getStream());
|
||||||
|
if(null!=rundeckJobsImport.getUuidImportBehavior()) {
|
||||||
|
//API v9
|
||||||
|
request.param("uuidOption", rundeckJobsImport.getUuidImportBehavior());
|
||||||
|
}
|
||||||
if(null!=rundeckJobsImport.getProject()) {
|
if(null!=rundeckJobsImport.getProject()) {
|
||||||
//API v8
|
//API v8
|
||||||
request.param("project", rundeckJobsImport.getProject());
|
request.param("project", rundeckJobsImport.getProject());
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package org.rundeck.api;
|
package org.rundeck.api;
|
||||||
|
|
||||||
import org.rundeck.api.domain.RundeckJobsImportMethod;
|
import org.rundeck.api.domain.RundeckJobsImportMethod;
|
||||||
|
import org.rundeck.api.domain.RundeckJobsUUIDImportBehavior;
|
||||||
|
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
|
||||||
|
@ -25,6 +26,11 @@ public interface RundeckJobsImport {
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public RundeckJobsImportMethod getImportMethod();
|
public RundeckJobsImportMethod getImportMethod();
|
||||||
|
/**
|
||||||
|
* Return the import behavior
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public RundeckJobsUUIDImportBehavior getUuidImportBehavior();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the project name
|
* Return the project name
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package org.rundeck.api;
|
package org.rundeck.api;
|
||||||
|
|
||||||
import org.rundeck.api.domain.RundeckJobsImportMethod;
|
import org.rundeck.api.domain.RundeckJobsImportMethod;
|
||||||
|
import org.rundeck.api.domain.RundeckJobsUUIDImportBehavior;
|
||||||
|
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
|
||||||
|
@ -20,6 +21,7 @@ public class RundeckJobsImportBuilder {
|
||||||
jobsImport.setFileType(original.getFileType());
|
jobsImport.setFileType(original.getFileType());
|
||||||
jobsImport.setProject(original.getProject());
|
jobsImport.setProject(original.getProject());
|
||||||
jobsImport.setImportMethod(original.getImportMethod());
|
jobsImport.setImportMethod(original.getImportMethod());
|
||||||
|
jobsImport.setUuidImportBehavior(original.getUuidImportBehavior());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -58,6 +60,10 @@ public class RundeckJobsImportBuilder {
|
||||||
jobsImport.setImportMethod(behavior);
|
jobsImport.setImportMethod(behavior);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
public RundeckJobsImportBuilder setUUIDImportBehavior(final RundeckJobsUUIDImportBehavior behavior) {
|
||||||
|
jobsImport.setUuidImportBehavior(behavior);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
public RundeckJobsImport build() {
|
public RundeckJobsImport build() {
|
||||||
final RundeckJobsImport built = jobsImport;
|
final RundeckJobsImport built = jobsImport;
|
||||||
|
|
|
@ -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
|
||||||
|
}
|
|
@ -54,6 +54,7 @@ public class RundeckClientTest {
|
||||||
public static final String TEST_TOKEN_3 = "9RdEosesKP3se4oV9EKOd4s3RUeUS3ON";
|
public static final String TEST_TOKEN_3 = "9RdEosesKP3se4oV9EKOd4s3RUeUS3ON";
|
||||||
public static final String TEST_TOKEN_4 = "sN5RRSNvu15DnV6EcNDdc2CkdPcv3s32";
|
public static final String TEST_TOKEN_4 = "sN5RRSNvu15DnV6EcNDdc2CkdPcv3s32";
|
||||||
public static final String TEST_TOKEN_5 = "C3O6d5O98Kr6Dpv71sdE4ERdCuU12P6d";
|
public static final String TEST_TOKEN_5 = "C3O6d5O98Kr6Dpv71sdE4ERdCuU12P6d";
|
||||||
|
public static final String TEST_TOKEN_6 = "Do4d3NUD5DKk21DR4sNK755RcPk618vn";
|
||||||
|
|
||||||
@Rule
|
@Rule
|
||||||
public Recorder recorder = new Recorder();
|
public Recorder recorder = new Recorder();
|
||||||
|
@ -912,6 +913,83 @@ public class RundeckClientTest {
|
||||||
Assert.assertEquals("importJobsProjectParamV7", rundeckJob.getName());
|
Assert.assertEquals("importJobsProjectParamV7", rundeckJob.getName());
|
||||||
Assert.assertEquals("testXYZ", rundeckJob.getProject());
|
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(
|
||||||
|
("<joblist>\n" +
|
||||||
|
" <job>\n" +
|
||||||
|
" <uuid>testImportUUID</uuid>\n" +
|
||||||
|
" <loglevel>INFO</loglevel>\n" +
|
||||||
|
" <sequence keepgoing='false' strategy='node-first'>\n" +
|
||||||
|
" <command>\n" +
|
||||||
|
" <exec>echo hi</exec>\n" +
|
||||||
|
" </command>\n" +
|
||||||
|
" </sequence>\n" +
|
||||||
|
" <description></description>\n" +
|
||||||
|
" <name>importJobsUUIDParamRemoveV9</name>\n" +
|
||||||
|
" </job>\n" +
|
||||||
|
"</joblist>").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(
|
||||||
|
("<joblist>\n" +
|
||||||
|
" <job>\n" +
|
||||||
|
" <uuid>testImportUUID</uuid>\n" +
|
||||||
|
" <loglevel>INFO</loglevel>\n" +
|
||||||
|
" <sequence keepgoing='false' strategy='node-first'>\n" +
|
||||||
|
" <command>\n" +
|
||||||
|
" <exec>echo hi</exec>\n" +
|
||||||
|
" </command>\n" +
|
||||||
|
" </sequence>\n" +
|
||||||
|
" <description></description>\n" +
|
||||||
|
" <name>importJobsUUIDParamPreserveV9</name>\n" +
|
||||||
|
" </job>\n" +
|
||||||
|
"</joblist>").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
|
* Running executions for all projects using API v9
|
||||||
* @throws Exception
|
* @throws Exception
|
||||||
|
|
|
@ -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: "<result success='true' apiversion='10'>\n <succeeded count='1'>\n <job index='1' href='http://dignan.local:4440/api/10/job/testImportUUID'>\n <id>testImportUUID</id>\n <name>importJobsUUIDParamPreserveV9</name>\n <group></group>\n\
|
||||||
|
\ <project>test</project>\n <url>http://dignan.local:4440/scheduledExecution/show/testImportUUID</url>\n </job>\n </succeeded>\n <failed count='0' />\n <skipped count='0' />\n</result>"
|
|
@ -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: "<result success='true' apiversion='10'>\n <succeeded count='1'>\n <job index='1' href='http://dignan.local:4440/api/10/job/b33c8bb1-4dfc-4661-a890-4164b264cc4a'>\n <id>b33c8bb1-4dfc-4661-a890-4164b264cc4a</id>\n <name>importJobsUUIDParamRemoveV9</name>\n\
|
||||||
|
\ <group></group>\n <project>test</project>\n <url>http://dignan.local:4440/scheduledExecution/show/b33c8bb1-4dfc-4661-a890-4164b264cc4a</url>\n </job>\n </succeeded>\n <failed count='0' />\n <skipped count='0' />\n</result>"
|
Loading…
Add table
Add a link
Reference in a new issue