@@ -28,6 +28,10 @@ import (
2828type CertificateServiceIface interface {
2929 UploadCustomCertificate (p * UploadCustomCertificateParams ) (* UploadCustomCertificateResponse , error )
3030 NewUploadCustomCertificateParams (certificate string , domainsuffix string ) * UploadCustomCertificateParams
31+ ListCAProviders (p * ListCAProvidersParams ) (* ListCAProvidersResponse , error )
32+ NewListCAProvidersParams () * ListCAProvidersParams
33+ ProvisionCertificate (p * ProvisionCertificateParams ) (* ProvisionCertificateResponse , error )
34+ NewProvisionCertificateParams (hostid string ) * ProvisionCertificateParams
3135}
3236
3337type UploadCustomCertificateParams struct {
@@ -213,3 +217,205 @@ type UploadCustomCertificateResponse struct {
213217 Jobstatus int `json:"jobstatus"`
214218 Message string `json:"message"`
215219}
220+
221+ type ListCAProvidersParams struct {
222+ p map [string ]interface {}
223+ }
224+
225+ func (p * ListCAProvidersParams ) toURLValues () url.Values {
226+ u := url.Values {}
227+ if p .p == nil {
228+ return u
229+ }
230+ if v , found := p .p ["name" ]; found {
231+ u .Set ("name" , v .(string ))
232+ }
233+ return u
234+ }
235+
236+ func (p * ListCAProvidersParams ) SetName (v string ) {
237+ if p .p == nil {
238+ p .p = make (map [string ]interface {})
239+ }
240+ p .p ["name" ] = v
241+ }
242+
243+ func (p * ListCAProvidersParams ) ResetName () {
244+ if p .p != nil && p .p ["name" ] != nil {
245+ delete (p .p , "name" )
246+ }
247+ }
248+
249+ func (p * ListCAProvidersParams ) GetName () (string , bool ) {
250+ if p .p == nil {
251+ p .p = make (map [string ]interface {})
252+ }
253+ value , ok := p .p ["name" ].(string )
254+ return value , ok
255+ }
256+
257+ // You should always use this function to get a new ListCAProvidersParams instance,
258+ // as then you are sure you have configured all required params
259+ func (s * CertificateService ) NewListCAProvidersParams () * ListCAProvidersParams {
260+ p := & ListCAProvidersParams {}
261+ p .p = make (map [string ]interface {})
262+ return p
263+ }
264+
265+ // Lists available certificate authority providers in CloudStack
266+ func (s * CertificateService ) ListCAProviders (p * ListCAProvidersParams ) (* ListCAProvidersResponse , error ) {
267+ resp , err := s .cs .newRequest ("listCAProviders" , p .toURLValues ())
268+ if err != nil {
269+ return nil , err
270+ }
271+
272+ var r ListCAProvidersResponse
273+ if err := json .Unmarshal (resp , & r ); err != nil {
274+ return nil , err
275+ }
276+
277+ return & r , nil
278+ }
279+
280+ type ListCAProvidersResponse struct {
281+ Count int `json:"count"`
282+ CAProviders []* CAProvider `json:"caprovider"`
283+ }
284+
285+ type CAProvider struct {
286+ Description string `json:"description"`
287+ JobID string `json:"jobid"`
288+ Jobstatus int `json:"jobstatus"`
289+ Name string `json:"name"`
290+ }
291+
292+ type ProvisionCertificateParams struct {
293+ p map [string ]interface {}
294+ }
295+
296+ func (p * ProvisionCertificateParams ) toURLValues () url.Values {
297+ u := url.Values {}
298+ if p .p == nil {
299+ return u
300+ }
301+ if v , found := p .p ["hostid" ]; found {
302+ u .Set ("hostid" , v .(string ))
303+ }
304+ if v , found := p .p ["provider" ]; found {
305+ u .Set ("provider" , v .(string ))
306+ }
307+ if v , found := p .p ["reconnect" ]; found {
308+ vv := strconv .FormatBool (v .(bool ))
309+ u .Set ("reconnect" , vv )
310+ }
311+ return u
312+ }
313+
314+ func (p * ProvisionCertificateParams ) SetHostid (v string ) {
315+ if p .p == nil {
316+ p .p = make (map [string ]interface {})
317+ }
318+ p .p ["hostid" ] = v
319+ }
320+
321+ func (p * ProvisionCertificateParams ) ResetHostid () {
322+ if p .p != nil && p .p ["hostid" ] != nil {
323+ delete (p .p , "hostid" )
324+ }
325+ }
326+
327+ func (p * ProvisionCertificateParams ) GetHostid () (string , bool ) {
328+ if p .p == nil {
329+ p .p = make (map [string ]interface {})
330+ }
331+ value , ok := p .p ["hostid" ].(string )
332+ return value , ok
333+ }
334+
335+ func (p * ProvisionCertificateParams ) SetProvider (v string ) {
336+ if p .p == nil {
337+ p .p = make (map [string ]interface {})
338+ }
339+ p .p ["provider" ] = v
340+ }
341+
342+ func (p * ProvisionCertificateParams ) ResetProvider () {
343+ if p .p != nil && p .p ["provider" ] != nil {
344+ delete (p .p , "provider" )
345+ }
346+ }
347+
348+ func (p * ProvisionCertificateParams ) GetProvider () (string , bool ) {
349+ if p .p == nil {
350+ p .p = make (map [string ]interface {})
351+ }
352+ value , ok := p .p ["provider" ].(string )
353+ return value , ok
354+ }
355+
356+ func (p * ProvisionCertificateParams ) SetReconnect (v bool ) {
357+ if p .p == nil {
358+ p .p = make (map [string ]interface {})
359+ }
360+ p .p ["reconnect" ] = v
361+ }
362+
363+ func (p * ProvisionCertificateParams ) ResetReconnect () {
364+ if p .p != nil && p .p ["reconnect" ] != nil {
365+ delete (p .p , "reconnect" )
366+ }
367+ }
368+
369+ func (p * ProvisionCertificateParams ) GetReconnect () (bool , bool ) {
370+ if p .p == nil {
371+ p .p = make (map [string ]interface {})
372+ }
373+ value , ok := p .p ["reconnect" ].(bool )
374+ return value , ok
375+ }
376+
377+ // You should always use this function to get a new ProvisionCertificateParams instance,
378+ // as then you are sure you have configured all required params
379+ func (s * CertificateService ) NewProvisionCertificateParams (hostid string ) * ProvisionCertificateParams {
380+ p := & ProvisionCertificateParams {}
381+ p .p = make (map [string ]interface {})
382+ p .p ["hostid" ] = hostid
383+ return p
384+ }
385+
386+ // Issues and propagates client certificate on a connected host/agent using configured CA plugin
387+ func (s * CertificateService ) ProvisionCertificate (p * ProvisionCertificateParams ) (* ProvisionCertificateResponse , error ) {
388+ resp , err := s .cs .newRequest ("provisionCertificate" , p .toURLValues ())
389+ if err != nil {
390+ return nil , err
391+ }
392+
393+ var r ProvisionCertificateResponse
394+ if err := json .Unmarshal (resp , & r ); err != nil {
395+ return nil , err
396+ }
397+
398+ // If we have a async client, we need to wait for the async result
399+ if s .cs .async {
400+ b , err := s .cs .GetAsyncJobResult (r .JobID , s .cs .timeout )
401+ if err != nil {
402+ if err == AsyncTimeoutErr {
403+ return & r , err
404+ }
405+ return nil , err
406+ }
407+
408+ if err := json .Unmarshal (b , & r ); err != nil {
409+ return nil , err
410+ }
411+ }
412+
413+ return & r , nil
414+ }
415+
416+ type ProvisionCertificateResponse struct {
417+ Displaytext string `json:"displaytext"`
418+ JobID string `json:"jobid"`
419+ Jobstatus int `json:"jobstatus"`
420+ Success bool `json:"success"`
421+ }
0 commit comments