| Summary: | [REST API] Inadequate response when creating or querying domains | ||
|---|---|---|---|
| Product: | OKD | Reporter: | Xavier Coulon <xcoulon> |
| Component: | Pod | Assignee: | Lili Nader <lnader> |
| Status: | CLOSED CURRENTRELEASE | QA Contact: | libra bugs <libra-bugs> |
| Severity: | high | Docs Contact: | |
| Priority: | high | ||
| Version: | 2.x | CC: | adietish, jialiu, mfisher, mpatel |
| Target Milestone: | --- | Keywords: | Triaged |
| Target Release: | --- | ||
| Hardware: | Unspecified | ||
| OS: | Unspecified | ||
| Whiteboard: | |||
| Fixed In Version: | Doc Type: | Bug Fix | |
| Doc Text: | Story Points: | --- | |
| Clone Of: | Environment: | ||
| Last Closed: | 2012-04-13 18:30:14 UTC | Type: | --- |
| Regression: | --- | Mount Type: | --- |
| Documentation: | --- | CRM: | |
| Verified Versions: | Category: | --- | |
| oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |
| Cloudforms Team: | --- | Target Upstream Version: | |
Also, the response misses the <data> element to embed the <domain> element. Having a consistent <data> element accross all types of responses makes the parsing easier Same behavior when querying the user:
<response>
<messages/>
<type>user</type>
<user>
<login>xcoulon+test</login>
<links>
<link>
<rel>Add new SSH key</rel>
<method>POST</method>
<href>/user/keys</href>
<optional-params/>
<required-params>
<param>
<description>Name of the application</description>
<type>string</type>
<name>name</name>
<valid-options/>
</param>
<param>
<description>Type of Key</description>
<type>string</type>
<name>type</name>
<valid-options>
<valid-option>ssh-rsa</valid-option>
<valid-option>ssh-dss</valid-option>
</valid-options>
</param>
<param>
<description>The key portion of an rsa key (excluding ssh-rsa and comment)</description>
<type>string</type>
<name>content</name>
<valid-options/>
</param>
</required-params>
</link>
<link>
<rel>Get SSH keys</rel>
<method>GET</method>
<href>/user/keys</href>
<optional-params/>
<required-params/>
</link>
<link>
<rel>Get user information</rel>
<method>GET</method>
<href>/user</href>
<optional-params/>
<required-params/>
</link>
</links>
</user>
<status>ok</status>
<version>1.0</version>
</response>
Marking as URGENT, like for issue #806382 Verified this bug with devenv_1679, and PASS.
When creating, updating or querying for an existing domain, link to create new domain has been removed, and <data> element is shown up now, and <domain> element is embedded into <data> element.
$ curl -k -X POST -H 'Accept: application/xml' -H 'Content-type: application/json' -d '{'\''namespace'\'':jialiu}' --user jialiu:214214 https://ec2-23-20-46-167.compute-1.amazonaws.com/broker/rest/domains
<?xml version="1.0" encoding="UTF-8"?>
<response>
<status>created</status>
<version>1.0</version>
<type>domain</type>
<data>
<domain>
<links>
<link>
<method>POST</method>
<rel>Create new application</rel>
<href>/domains/jialiu/applications</href>
<optional-params/>
<required-params>
<param>
<type>string</type>
<description>Name of the application</description>
<valid-options/>
<name>name</name>
</param>
<param>
<type>string</type>
<description>UUID of the application template</description>
<valid-options/>
<name>template</name>
</param>
</required-params>
</link>
<link>
<method>GET</method>
<rel>List applications</rel>
<href>/domains/jialiu/applications</href>
<optional-params/>
<required-params/>
</link>
<link>
<method>PUT</method>
<rel>Update domain</rel>
<href>/domains/jialiu</href>
<optional-params/>
<required-params>
<param>
<type>string</type>
<description>Name of the domain</description>
<valid-options/>
<name>namespace</name>
</param>
</required-params>
</link>
<link>
<method>GET</method>
<rel>Get domain</rel>
<href>/domains/jialiu</href>
<optional-params/>
<required-params/>
</link>
<link>
<method>POST</method>
<rel>Create new application</rel>
<href>/domains/jialiu/applications</href>
<optional-params>
<optional-param>
<type>boolean</type>
<description>Mark application as scalable</description>
<valid-options>
<valid-option>true</valid-option>
<valid-option>false</valid-option>
</valid-options>
<default-value>false</default-value>
<name>scale</name>
</optional-param>
<optional-param>
<type>string</type>
<description>The size of the gear</description>
<valid-options>
<valid-option>small</valid-option>
<valid-option>micro</valid-option>
<valid-option>medium</valid-option>
<valid-option>large</valid-option>
<valid-option>exlarge</valid-option>
<valid-option>jumbo</valid-option>
</valid-options>
<default-value>small</default-value>
<name>node_profile</name>
</optional-param>
</optional-params>
<required-params>
<param>
<type>string</type>
<description>Name of the application</description>
<valid-options/>
<name>name</name>
</param>
<param>
<type>string</type>
<description>framework-type, e.g: php-5.3</description>
<valid-options>
<valid-option>nodejs-0.6</valid-option>
<valid-option>jbossas-7</valid-option>
<valid-option>python-2.6</valid-option>
<valid-option>jenkins-1.4</valid-option>
<valid-option>ruby-1.8</valid-option>
<valid-option>diy-0.1</valid-option>
<valid-option>php-5.3</valid-option>
<valid-option>perl-5.10</valid-option>
</valid-options>
<name>cartridge</name>
</param>
</required-params>
</link>
<link>
<method>DELETE</method>
<rel>Delete domain</rel>
<href>/domains/jialiu</href>
<optional-params>
<optional-param>
<type>boolean</type>
<description>Force delete domain. i.e. delete any applications under this domain</description>
<valid-options>
<valid-option>true</valid-option>
<valid-option>false</valid-option>
</valid-options>
<default-value>false</default-value>
<name>force</name>
</optional-param>
</optional-params>
<required-params/>
</link>
</links>
<suffix>dev.rhcloud.com</suffix>
<namespace>jialiu</namespace>
</domain>
</data>
<messages/>
</response>
user resource is also fixed. link for "Get user information" is removed, and <data> element is shown up now, and <user> element is embedded into <data> element.
curl -k -X GET -H 'Accept: application/xml' --user jialiu:214214 https://ec2-23-20-46-167.compute-1.amazonaws.com/broker/rest/user
<?xml version="1.0" encoding="UTF-8"?>
<response>
<status>ok</status>
<version>1.0</version>
<type>user</type>
<data>
<user>
<login>jialiu</login>
<links>
<link>
<method>POST</method>
<rel>Add new SSH key</rel>
<href>/user/keys</href>
<optional-params/>
<required-params>
<param>
<type>string</type>
<description>Name of the application</description>
<valid-options/>
<name>name</name>
</param>
<param>
<type>string</type>
<description>Type of Key</description>
<valid-options>
<valid-option>ssh-rsa</valid-option>
<valid-option>ssh-dss</valid-option>
</valid-options>
<name>type</name>
</param>
<param>
<type>string</type>
<description>The key portion of an rsa key (excluding ssh-rsa and comment)</description>
<valid-options/>
<name>content</name>
</param>
</required-params>
</link>
<link>
<method>GET</method>
<rel>Get SSH keys</rel>
<href>/user/keys</href>
<optional-params/>
<required-params/>
</link>
</links>
</user>
</data>
<messages/>
</response>
During testing, I found some other issue, open Bug 807977 to track it. |
when creating, updating or querying for an existing domain, the response contains a link within the domain to create a new one. This link should be a sibbling element to the domain one, not one of its children: <response> <domain> <links> <link> <rel>Get domain</rel> <href>/domains/foobar</href> <optional-params/> <method>GET</method> <required-params/> </link> <link> <rel>Update domain</rel> <href>/domains/foobar</href> <optional-params/> <method>PUT</method> <required-params> <param> <name>namespace</name> <description>Name of the domain</description> <valid-options/> <type>string</type> </param> </required-params> </link> <link> <rel>Delete domain</rel> <href>/domains/foobar</href> <optional-params> <optional-param> <default-value>false</default-value> <name>force</name> <description>Force delete domain. i.e. delete any applications under this domain</description> <valid-options>true or false</valid-options> <type>boolean</type> </optional-param> </optional-params> <method>DELETE</method> <required-params/> </link> <link> <rel>Create new domain</rel> <href>/domains</href> <optional-params/> <method>POST</method> <required-params> <param> <name>namespace</name> <description>Name of the domain</description> <valid-options/> <type>string</type> </param> </required-params> </link> <link> <rel>Create new application</rel> <href>/domains/foobar/applications</href> <optional-params/> <method>POST</method> <required-params> <param> <name>name</name> <description>Name of the application</description> <valid-options/> <type>string</type> </param> <param> <name>template</name> <description>UUID of the application template</description> <valid-options/> <type>string</type> </param> </required-params> </link> <link> <rel>Create new application</rel> <href>/domains/foobar/applications</href> <optional-params/> <method>POST</method> <required-params> <param> <name>name</name> <description>Name of the application</description> <valid-options/> <type>string</type> </param> <param> <name>cartridge</name> <description>framework-type, e.g: php-5.3</description> <valid-options> <valid-option>raw-0.1</valid-option> <valid-option>php-5.3</valid-option> <valid-option>jenkins-1.4</valid-option> <valid-option>jbossas-7</valid-option> <valid-option>nodejs-0.6</valid-option> <valid-option>python-2.6</valid-option> <valid-option>perl-5.10</valid-option> <valid-option>ruby-1.8</valid-option> </valid-options> <type>string</type> </param> </required-params> </link> <link> <rel>List applications</rel> <href>/domains/foobar/applications</href> <optional-params/> <method>GET</method> <required-params/> </link> </links> <namespace>foobar</namespace> </domain> <version>1.0</version> <type>domain</type> <status>created</status> <messages/> </response>