github.com/huaweicloud/golangsdk@v0.0.0-20210831081626-d823fe11ceba/openstack/compute/v2/extensions/keypairs/results.go (about)

     1  package keypairs
     2  
     3  import (
     4  	"github.com/huaweicloud/golangsdk"
     5  	"github.com/huaweicloud/golangsdk/pagination"
     6  )
     7  
     8  // KeyPair is an SSH key known to the OpenStack Cloud that is available to be
     9  // injected into servers.
    10  type KeyPair struct {
    11  	// Name is used to refer to this keypair from other services within this
    12  	// region.
    13  	Name string `json:"name"`
    14  
    15  	// Fingerprint is a short sequence of bytes that can be used to authenticate
    16  	// or validate a longer public key.
    17  	Fingerprint string `json:"fingerprint"`
    18  
    19  	// PublicKey is the public key from this pair, in OpenSSH format.
    20  	// "ssh-rsa AAAAB3Nz..."
    21  	PublicKey string `json:"public_key"`
    22  
    23  	// PrivateKey is the private key from this pair, in PEM format.
    24  	// "-----BEGIN RSA PRIVATE KEY-----\nMIICXA..."
    25  	// It is only present if this KeyPair was just returned from a Create call.
    26  	PrivateKey string `json:"private_key"`
    27  
    28  	// UserID is the user who owns this KeyPair.
    29  	UserID string `json:"user_id"`
    30  }
    31  
    32  // KeyPairPage stores a single page of all KeyPair results from a List call.
    33  // Use the ExtractKeyPairs function to convert the results to a slice of
    34  // KeyPairs.
    35  type KeyPairPage struct {
    36  	pagination.SinglePageBase
    37  }
    38  
    39  // IsEmpty determines whether or not a KeyPairPage is empty.
    40  func (page KeyPairPage) IsEmpty() (bool, error) {
    41  	ks, err := ExtractKeyPairs(page)
    42  	return len(ks) == 0, err
    43  }
    44  
    45  // ExtractKeyPairs interprets a page of results as a slice of KeyPairs.
    46  func ExtractKeyPairs(r pagination.Page) ([]KeyPair, error) {
    47  	type pair struct {
    48  		KeyPair KeyPair `json:"keypair"`
    49  	}
    50  	var s struct {
    51  		KeyPairs []pair `json:"keypairs"`
    52  	}
    53  	err := (r.(KeyPairPage)).ExtractInto(&s)
    54  	results := make([]KeyPair, len(s.KeyPairs))
    55  	for i, pair := range s.KeyPairs {
    56  		results[i] = pair.KeyPair
    57  	}
    58  	return results, err
    59  }
    60  
    61  type keyPairResult struct {
    62  	golangsdk.Result
    63  }
    64  
    65  // Extract is a method that attempts to interpret any KeyPair resource response
    66  // as a KeyPair struct.
    67  func (r keyPairResult) Extract() (*KeyPair, error) {
    68  	var s struct {
    69  		KeyPair *KeyPair `json:"keypair"`
    70  	}
    71  	err := r.ExtractInto(&s)
    72  	return s.KeyPair, err
    73  }
    74  
    75  // CreateResult is the response from a Create operation. Call its Extract method
    76  // to interpret it as a KeyPair.
    77  type CreateResult struct {
    78  	keyPairResult
    79  }
    80  
    81  // GetResult is the response from a Get operation. Call its Extract method to
    82  // interpret it as a KeyPair.
    83  type GetResult struct {
    84  	keyPairResult
    85  }
    86  
    87  // DeleteResult is the response from a Delete operation. Call its ExtractErr
    88  // method to determine if the call succeeded or failed.
    89  type DeleteResult struct {
    90  	golangsdk.ErrResult
    91  }