keypair api

This commit is contained in:
Jesse Andrews 2011-08-06 13:08:53 -07:00 committed by termie
parent 811ba10e51
commit d25c627add
4 changed files with 114 additions and 0 deletions

@ -1,6 +1,7 @@
from novaclient import client
from novaclient.v1_1 import flavors
from novaclient.v1_1 import images
from novaclient.v1_1 import keypairs
from novaclient.v1_1 import servers
from novaclient.v1_1 import zones
@ -27,6 +28,9 @@ class Client(object):
self.flavors = flavors.FlavorManager(self)
self.images = images.ImageManager(self)
self.servers = servers.ServerManager(self)
# extensions
self.keypairs = keypairs.KeypairManager(self)
self.zones = zones.ZoneManager(self)
self.client = client.HTTPClient(username,

@ -0,0 +1,63 @@
# Copyright 2011 OpenStack LLC.
# All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
"""
Keypair interface (1.1 extension).
"""
from novaclient import base
class Keypair(base.Resource):
"""
A keypair is a ssh key that can be injected into a server on launch.
"""
def __repr__(self):
return "<Keypair: %s>" % self.uuid
@property
def uuid(self):
return self.key_name
def delete(self):
self.manager.delete(self)
class KeypairManager(base.ManagerWithFind):
resource_class = Keypair
def create(self, key_name):
"""
Create a keypair
:param key_name: name for the keypair to create
"""
body = {'keypair': {'key_name': key_name}}
return self._create('/extras/keypairs', body, 'keypair')
def delete(self, key):
"""
Delete a keypair
:param key: The :class:`Keypair` (or its ID) to delete.
"""
self._delete('/extras/keypairs/%s' % (base.getid(key)))
def list(self):
"""
Get a list of keypairs.
"""
return self._list('/extras/keypairs', 'keypairs')

@ -373,3 +373,21 @@ class FakeHTTPClient(base_client.HTTPClient):
def delete_zones_1(self, **kw):
return (202, None)
#
# Keypairs
#
def get_extras_keypairs(self, *kw):
return (200, {"keypairs": [
{'fingerprint': 'FAKE_KEYPAIR', 'key_name': 'test'}
]})
def delete_extras_keypairs_test(self, **kw):
return (202, None)
def post_extras_keypairs(self, body, **kw):
assert body.keys() == ['keypair']
fakes.assert_has_keys(body['keypair'],
required=['key_name'])
r = {'keypair': self.get_extras_keypairs()[1]['keypairs'][0]}
return (202, r)

@ -0,0 +1,29 @@
from novaclient import exceptions
from novaclient.v1_1 import keypairs
from tests.v1_1 import fakes
from tests import utils
cs = fakes.FakeClient()
class KeypairsTest(utils.TestCase):
def test_list_keypairs(self):
kps = cs.keypairs.list()
cs.assert_called('GET', '/extras/keypairs')
[self.assertTrue(isinstance(kp, keypairs.Keypair)) for kp in kps]
def test_delete_keypair(self):
kp = cs.keypairs.list()[0]
kp.delete()
cs.assert_called('DELETE', '/extras/keypairs/test')
cs.keypairs.delete('test')
cs.assert_called('DELETE', '/extras/keypairs/test')
cs.keypairs.delete(kp)
cs.assert_called('DELETE', '/extras/keypairs/test')
def test_create_keypair(self):
kp = cs.keypairs.create("foo")
cs.assert_called('POST', '/extras/keypairs')
self.assertTrue(isinstance(kp, keypairs.Keypair))