Support api v9 uuidOption for jobs import #8

This commit is contained in:
Greg Schueler 2014-01-16 12:01:58 -08:00
parent 8707881c08
commit db647eb944
8 changed files with 159 additions and 0 deletions

View file

@ -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;
}
}

View file

@ -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());

View file

@ -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

View file

@ -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;

View file

@ -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
}

View file

@ -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(
("<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
* @throws Exception

View file

@ -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>"

View file

@ -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>"