[chef] Re: Re: Hosted Chef API - client resource discrepancies


Chronological Thread 
  • From: Jamie Winsor < >
  • To:
  • Subject: [chef] Re: Re: Hosted Chef API - client resource discrepancies
  • Date: Tue, 14 Aug 2012 20:33:19 -0700

Hey Seth,

That's what I started out with when I realized that the Private/Hosted Chef solutions did not accept this request body. The Open Source Server does, however.

Here is the request response output from attempting to create a new client with this body (note, I have removed the authorization headers):

Request

[2012-08-14T20:29:41-07:00] DEBUG: {:method=>:post, :body=>"{\"chef_type\":\"client\",\"json_class\":\"Chef::ApiClient\",\"name\":\"ridley_test\",\"admin\":false}", :url=">#<Addressable::URI:0x3fee1e828b8c" URI:https://api.opscode.com:443/organizations/vialstudios/clients>, "Accept"=>"application/json", "Content-Type"=>"application/json", "X-Chef-Version"=>"10.12.0", "Content-Length"=>"93"}

Response

[2012-08-14T20:29:42-07:00] DEBUG: {:method=>:post, :body=>"{\"error\":[null,\"Clientname must not be blank\",\"Clientname has an invalid format\"]}", :url=">#<Addressable::URI:0x3fee1e828b8c" URI:https://api.opscode.com:443/organizations/vialstudios/clients>, :status=>400, :response_headers=>{"server"=>"nginx/1.0.5", "date"=>"Wed, 15 Aug 2012 03:29:42 GMT", "content-type"=>"application/json; charset=utf-8", "transfer-encoding"=>"chunked", "connection"=>"keep-alive", "status"=>"400 Bad Request"}

-- 
Jamie Winsor
@resetexistence
https://github.com/reset

On Tuesday, August 14, 2012 at 8:26 PM, Seth Chisamore wrote:

Jamie,
Try changing the 'clientname' attribute to a 'name' attribute.

The minimal client create body for OHC/OPC should be:

{"name":"ridley-test", "admin":false}

This should work across all flavors of Chef Server, as this is also the same format used by the api client leveraged by chef-client:

--
Seth Chisamore
Software Development Engineer, Opscode, Inc.
IRC, Skype, Twitter, Github: schisamo

On Aug 14, 2012, at 7:51 PM, Jamie Winsor < "> > wrote:

Hey Noah,

Thanks for your quick response. I verified that I'm sending the 'orgname', 'validator', 'client name', and 'certificate' attributes with my request and ditching the FOSS specific attributes but am still receiving the same error. Have you tested the Python client lately against the current installation of Hosted Chef?

Request Body
{\"chef_type\":\"client\",\"json_class\":\"Chef::ApiClient\",\"clientname\":\"ridley-test\",\"validator\":false,\"certificate\":null,\"orgname\":\"vialstudios\"}"


Response Body
"{\"error\":[null,\"Clientname must not be blank\",\"Clientname has an invalid format\"]}"

--
Jamie Winsor
@resetexistence

On Tuesday, August 14, 2012 at 2:59 PM, Noah Kantrowitz wrote:

Check out https://github.com/coderanger/pychef/blob/master/chef/client.py. The implementation is a bit different between the FOSS server and the Hosted/Private server.

--Noah

On Aug 15, 2012, at 5:57 AM, Jamie Winsor wrote:

I'm working on a thread safe Chef API client with async capabilities for dispatching parallel requests to a Chef Server. Through writing my acceptance tests I've noticed that the client resource has a few discrepancies with creation and retrieval of clients than what is outlined in the official documentation: http://wiki.opscode.com/display/chef/Server+API. It's worth noting that this documentation reflects the behavior of the Open Source Server correctly.

Retrieving a client: GET /clients/[NAME]

1. client response does not contain an 'admin' field or value
2. client response contains an additional 'orgname' attribute
3. client response contains an additional 'validator' attribute
4. client response contains an additional field 'clientname' which is identical to 'name'
5. client response contains an additional field 'certificate' which appears to be a private key?

See the raw response below:

{
"orgname": "vialstudios",
"validator": false,
"clientname": "asdf",
"name": "asdf",
"certificate": "-----BEGIN CERTIFICATE-----\\nMIIDOjCCAqOgAwIBAgIE85XemDANBgkqhkiG9w0BAQUFADCBnjELMAkGA1UEBhMC\\nVVMxEzARBgNVBAgMCldhc2hpbmd0b24xEDAOBgNVBAcMB1NlYXR0bGUxFjAUBgNV\\nBAoMDU9wc2NvZGUsIEluYy4xHDAaBgNVBAsME0NlcnRpZmljYXRlIFNlcnZpY2Ux\\nMjAwBgNVBAMMKW9wc2NvZGUuY29tL2VtYWlsQWRkcmVzcz1hdXRoQG9wc2NvZGUu\\nY29tMCAXDTEyMDgxNDE5NDQyN1oYDzIxMDEwODI0MTk0NDI3WjCBnTEQMA4GA1UE\\nBxMHU2VhdHRsZTETMBEGA1UECBMKV2FzaGluZ3RvbjELMAkGA1UEBhMCVVMxHDAa\\nBgNVBAsTE0NlcnRpZmljYXRlIFNlcnZpY2UxFjAUBgNVBAoTDU9wc2NvZGUsIElu\\nYy4xMTAvBgNVBAMUKFVSSTpodHRwOi8vb3BzY29kZS5jb20vR1VJRFMvY2xpZW50\\nX2d1aWQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzvS0Z+gVic+Rn\\ncxN/P3D1lDq0St+hAtp9U+4FgInjoSWZFP9LWKoWIebRxH8axZCX2eVGwOsK2Pju\\n8zmG78n1J41ymxSIJBGeL7QjDuAXdHA7YAlBbhslK74KGdEqOqpxghVJG6doJf3/\\nYBQYQD3tonkuoyG43M79288l9MhvjglhKY8C9MZcj9rLebuySuhANRuBrdtF2CEg\\nX5/zNSr2WKnOFurBXnaKEefSpkUEAFkqiMCxcWSG05de1TRkqXuWs+8lRwl8OLo7\\n4lCFNwQEbJwdoS/R/yHMOO1fy3UbyRBZXW3FkvyoD4vxZkMWcbZohPd0TAA4StI8\\nhjUcCmsJAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAOG2RQRTePGB3bTYfZB/+HXnx\\nBuQexVfofaE3zh8iXBZA2Jl25iMAB6lkm7C6Ku7etviCytQCl6dLR6g3k1ApCy7y\\nTZKUYn/TPTViC9FmyFq5s2TeJzusmN7LBEi094MoiGwpr92nuvh79SKQI4KXgqK0\\n38zQYaVAylQPNfIe/7M=\\n-----END CERTIFICATE-----\\n"
}

Creating a client: POST /clients
1. creating a client with a JSON body containing a 'name' and 'admin' field with a proper string and boolean value results in the error:

400 - Bad Request
{
"error": [
null,
"Clientname must not be blank",
"Clientname has an invalid format"
]
}

2. even by specifying an additional 'clientname' field with a value the same error is returned.


Are there any updated docs regarding the client creation API or dealing with client permissions via the API in Private/Hosted Chef?

--
Jamie Winsor
@resetexistence




Archive powered by MHonArc 2.6.16.

§