Hosted Chef API - client resource discrepancies


#1

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\nhjUcCmsJAg
MBAAEwDQYJKoZIhvcNAQEFBQADgYEAOG2RQRTePGB3bTYfZB/+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”
]
}

  1. 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


#2

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”
]
}

  1. 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
https://github.com/reset


#3

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\nhjUcCmsJAg
MBAAEwDQYJKoZIhvcNAQEFBQADgYEAOG2RQRTePGB3bTYfZB/+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”
]
}

  1. 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
https://github.com/reset


#4

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:
https://github.com/opscode/chef/blob/master/chef/lib/chef/api_client.rb#L243


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

On Aug 14, 2012, at 7:51 PM, Jamie Winsor jamie@vialstudios.com 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
https://github.com/reset

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”
]
}

  1. 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
https://github.com/reset


#5

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

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:
https://github.com/opscode/chef/blob/master/chef/lib/chef/api_client.rb#L243


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

On Aug 14, 2012, at 7:51 PM, Jamie Winsor <jamie@vialstudios.com (mailto:jamie@vialstudios.com)> 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
https://github.com/reset

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\nhjUcCm
sJAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAOG2RQRTePGB3bTYfZB/+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”
]
}

  1. 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
https://github.com/reset


#6

Hi Jamie,

On Tue, Aug 14, 2012 at 8:33 PM, Jamie Winsor jamie@vialstudios.com wrote:

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

Hmm, I tried the following just now using shef and received a new client:

api.post("clients", {:name => "client-902", :admin => false})

The difference is the json_class key. Here’s what happens if I add one:

api.post("clients", {:name => "client-904", :admin => false,

:json_class => “Chef::ApiClient”})
[2012-08-14T21:04:36-07:00] INFO: HTTP Request Returned 400 Bad
Request: , Clientname must not be blank, Clientname has an invalid
format
Net::HTTPServerException: 400 “Bad Request”

That is one rather unfortunate error message.

In OHC, clients are not represented by the Chef::ApiClient class and
this is likely part of the issue. Note that GET /clients/:client in
OHC returns a JSON object with no json_class, so at least there is
some consistency there.

Does this help you?

  • seth


Seth Falcon | Development Lead | Opscode | @sfalcon


#7

That is exactly what I was looking for. Thanks for the support Seth!

I attempted a number of different permutations of this request but must have missed this one :frowning:

@resetexistence

On Aug 14, 2012, at 9:09 PM, Seth Falcon seth@opscode.com wrote:

Hi Jamie,

On Tue, Aug 14, 2012 at 8:33 PM, Jamie Winsor jamie@vialstudios.com wrote:

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

Hmm, I tried the following just now using shef and received a new client:

api.post(“clients”, {:name => “client-902”, :admin => false})

The difference is the json_class key. Here’s what happens if I add one:

api.post(“clients”, {:name => “client-904”, :admin => false,
:json_class => “Chef::ApiClient”})
[2012-08-14T21:04:36-07:00] INFO: HTTP Request Returned 400 Bad
Request: , Clientname must not be blank, Clientname has an invalid
format
Net::HTTPServerException: 400 “Bad Request”

That is one rather unfortunate error message.

In OHC, clients are not represented by the Chef::ApiClient class and
this is likely part of the issue. Note that GET /clients/:client in
OHC returns a JSON object with no json_class, so at least there is
some consistency there.

Does this help you?

  • seth


Seth Falcon | Development Lead | Opscode | @sfalcon