Uploaded image for project: 'jclouds'
  1. jclouds
  2. JCLOUDS-967

Client object doesn't populate public key

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 1.9.0, 2.0.0
    • 2.0.0
    • jclouds-chef
    • None

    Description

      Chef's API for version 12 returns a different set of values that those shown on the chef api documentation and expected by jclouds. For example, jclouds' ChefApi.getClient("chef-client.example.com") produces the call below:

      GET https://192.168.242.169:443/organizations/mytestorg/clients/chef-client.example.com
      

      Returns the following:

      {"public_key":"-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoNgWKe36NI0aLIaRxj2i\nF3OgVNnrW0A7I6x7IMo5MbKZQIU0WIMYUdNElOGI8EuSOvocSfetfOGAwTNTNOeB\ndWIv05/WeMzgMNxtdmsiKqW/1T45Z6Q+h3dxDJGr+PM9gQ56RGnytZ5IaJ7c/AJH\n+Vm1Loe8VFk4SZWOmrD0RxfIHMGDpkwfVhZsT76IdS9cDnm2bhxadHx0qiG6wyl5\nkheTFyObmiMl+KjEQi8Ws8+JlmFdrQhJRcvNeFR6CXuF+8sgr3euvBzFfl3GCdhM\n0jFMBp1GE6wpgz7BgMhMYFuUWLYqub094PgqcmAs5SUTzTK8NNNscp563Ol/2vMl\nPQIDAQAB\n-----END PUBLIC KEY-----\n","name":"chef-client.example.com","clientname":"chef-client.example.com","validator":false,"orgname":"mytestorg","json_class":"Chef::ApiClient","chef_type":"client"}
      

      Just for reference, this is the same call made by knife client show <client_name> as shown below:

      adrian.bravo@ABRAVO-01:~$ knife client show chef-client.example.com
      admin:      false
      chef_type:  client
      json_class: Chef::ApiClient
      name:       chef-client.example.com
      public_key: -----BEGIN PUBLIC KEY-----
      MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoNgWKe36NI0aLIaRxj2i
      F3OgVNnrW0A7I6x7IMo5MbKZQIU0WIMYUdNElOGI8EuSOvocSfetfOGAwTNTNOeB
      dWIv05/WeMzgMNxtdmsiKqW/1T45Z6Q+h3dxDJGr+PM9gQ56RGnytZ5IaJ7c/AJH
      +Vm1Loe8VFk4SZWOmrD0RxfIHMGDpkwfVhZsT76IdS9cDnm2bhxadHx0qiG6wyl5
      kheTFyObmiMl+KjEQi8Ws8+JlmFdrQhJRcvNeFR6CXuF+8sgr3euvBzFfl3GCdhM
      0jFMBp1GE6wpgz7BgMhMYFuUWLYqub094PgqcmAs5SUTzTK8NNNscp563Ol/2vMl
      PQIDAQAB
      -----END PUBLIC KEY-----
      
      validator:  false
      

      The code in jclouds Client class expects it to come back with a private key and a certificate field instead. Those fields remain null after the call above, but there is no way to access the public key.

      I've added the public key attribute to Client and updated the rest of the class accordingly to be able to retrieve the public key after such a call without removing the private key and certificate fields that are useful for other calls (and maybe older versions). The code works and the current tests pass. I would like to submit a PR with the fix as soon as I have some tests written. I would appreciate some help pointing out where those tests should live and which type of tests are you expecting for a minor fix like this (added an attribute, a getter, and adapted the class to take it into account).

      Thanks!

      Attachments

        Activity

          People

            Unassigned Unassigned
            adrianbn Adrian Bravo
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: