From 92eb7acc1531c36711ed3d7672803d3cb30fa7c8 Mon Sep 17 00:00:00 2001 From: Greg Schueler Date: Thu, 27 Feb 2014 12:44:26 -0800 Subject: [PATCH] Add get Project/config endpoint --- .../java/org/rundeck/api/RundeckClient.java | 22 ++++++++++++++++- .../org/rundeck/api/RundeckClientTest.java | 11 +++++++++ .../betamax/tapes/get_project_configv11.yaml | 24 +++++++++++++++++++ 3 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 src/test/resources/betamax/tapes/get_project_configv11.yaml diff --git a/src/main/java/org/rundeck/api/RundeckClient.java b/src/main/java/org/rundeck/api/RundeckClient.java index 57ae3af..cd3739e 100644 --- a/src/main/java/org/rundeck/api/RundeckClient.java +++ b/src/main/java/org/rundeck/api/RundeckClient.java @@ -349,7 +349,7 @@ public class RundeckClient implements Serializable { RundeckApiException, RundeckApiLoginException, RundeckApiTokenException, IllegalArgumentException { - AssertUtil.notBlank(projectName, "projectName is mandatory to get the details of a project !"); + AssertUtil.notBlank(projectName, "projectName is mandatory to create a project !"); return new ApiCall(this) .post(new ApiPathBuilder("/projects").xml( projectDocument(projectName, configuration) @@ -359,6 +359,26 @@ public class RundeckClient implements Serializable { : "/project" ))); } + /** + * Return the configuration of a project + * + * @param projectName name of the project - mandatory + * + * @return a {@link ProjectConfig} instance - won't be null + * + * @throws RundeckApiException in case of error when calling the API (non-existent project with this name) + * @throws RundeckApiLoginException if the login fails (in case of login-based authentication) + * @throws RundeckApiTokenException if the token is invalid (in case of token-based authentication) + * @throws IllegalArgumentException if the projectName is blank (null, empty or whitespace) + */ + public ProjectConfig getProjectConfig(String projectName) throws + RundeckApiException, RundeckApiLoginException, + RundeckApiTokenException, IllegalArgumentException { + + AssertUtil.notBlank(projectName, "projectName is mandatory to get the config of a project !"); + return new ApiCall(this) + .get(new ApiPathBuilder("/project/", projectName, "/config"), new ProjectConfigParser("/config")); + } private Document projectDocument(String projectName, Map configuration) { RundeckProject project = new RundeckProject(); diff --git a/src/test/java/org/rundeck/api/RundeckClientTest.java b/src/test/java/org/rundeck/api/RundeckClientTest.java index c66ea7c..4ab1fe7 100644 --- a/src/test/java/org/rundeck/api/RundeckClientTest.java +++ b/src/test/java/org/rundeck/api/RundeckClientTest.java @@ -91,6 +91,17 @@ public class RundeckClientTest { Assert.assertNotNull(project.getProjectConfig()); } + + @Test + @Betamax(tape = "get_project_configv11") + public void getProjectConfig() throws Exception { + ProjectConfig config = createClient(TEST_TOKEN_6, 11).getProjectConfig("monkey1"); + Assert.assertNotNull(config); + Assert.assertNotNull(config.getProperties()); + Assert.assertEquals(9,config.getProperties().size()); + Assert.assertEquals("monkey1", config.getProperties().get("project.name")); + } + @Test @Betamax(tape = "get_history") public void getHistory() throws Exception { diff --git a/src/test/resources/betamax/tapes/get_project_configv11.yaml b/src/test/resources/betamax/tapes/get_project_configv11.yaml new file mode 100644 index 0000000..033aa13 --- /dev/null +++ b/src/test/resources/betamax/tapes/get_project_configv11.yaml @@ -0,0 +1,24 @@ +!tape +name: get_project_configv11 +interactions: +- recorded: 2014-02-27T20:35:47.282Z + request: + method: GET + uri: http://rundeck.local:4440/api/11/project/monkey1/config + headers: + Accept: text/xml + Host: rundeck.local:4440 + Proxy-Connection: Keep-Alive + User-Agent: RunDeck API Java Client 11 + X-RunDeck-Auth-Token: Do4d3NUD5DKk21DR4sNK755RcPk618vn + response: + status: 200 + headers: + Content-Type: application/xml;charset=UTF-8 + Expires: Thu, 01 Jan 1970 00:00:00 GMT + Server: Jetty(7.6.0.v20120127) + Set-Cookie: JSESSIONID=bo96n10n268hsd1gi9y67nah;Path=/ + X-Rundeck-API-Version: '11' + X-Rundeck-API-XML-Response-Wrapper: 'false' + body: !!binary |- + PGNvbmZpZz4KICA8cHJvcGVydHkga2V5PSdwcm9qZWN0Lm5hbWUnIHZhbHVlPSdtb25rZXkxJyAvPgogIDxwcm9wZXJ0eSBrZXk9J3Byb2plY3Quc3NoLWF1dGhlbnRpY2F0aW9uJyB2YWx1ZT0ncHJpdmF0ZUtleScgLz4KICA8cHJvcGVydHkga2V5PSdzZXJ2aWNlLk5vZGVFeGVjdXRvci5kZWZhdWx0LnByb3ZpZGVyJyB2YWx1ZT0nanNjaC1zc2gnIC8+CiAgPHByb3BlcnR5IGtleT0ncmVzb3VyY2VzLnNvdXJjZS4xLmNvbmZpZy5pbmNsdWRlU2VydmVyTm9kZScgdmFsdWU9J3RydWUnIC8+CiAgPHByb3BlcnR5IGtleT0ncmVzb3VyY2VzLnNvdXJjZS4xLmNvbmZpZy5nZW5lcmF0ZUZpbGVBdXRvbWF0aWNhbGx5JyB2YWx1ZT0ndHJ1ZScgLz4KICA8cHJvcGVydHkga2V5PSdyZXNvdXJjZXMuc291cmNlLjEuY29uZmlnLmZpbGUnIHZhbHVlPScvVXNlcnMvZ3JlZy9ydW5kZWNrMmQvcHJvamVjdHMvbW9ua2V5MS9ldGMvcmVzb3VyY2VzLnhtbCcgLz4KICA8cHJvcGVydHkga2V5PSdwcm9qZWN0LnNzaC1rZXlwYXRoJyB2YWx1ZT0nL1VzZXJzL2dyZWcvLnNzaC9pZF9yc2EnIC8+CiAgPHByb3BlcnR5IGtleT0nc2VydmljZS5GaWxlQ29waWVyLmRlZmF1bHQucHJvdmlkZXInIHZhbHVlPSdqc2NoLXNjcCcgLz4KICA8cHJvcGVydHkga2V5PSdyZXNvdXJjZXMuc291cmNlLjEudHlwZScgdmFsdWU9J2ZpbGUnIC8+CjwvY29uZmlnPg==