def on_post(self, req, resp, tenant_id): body = json.loads(req.stream.read().decode()) try: name = body['keypair']['name'] key = body['keypair'].get('public_key', generate_random_key()) except (KeyError, TypeError): return bad_request(resp, 'Not all fields exist to create keypair.') validate_result = validate_keypair_name(resp, name) if not validate_result: return client = req.env['sl_client'] mgr = SshKeyManager(client) # Make sure the key with that label doesn't already exist existing_keys = mgr.list_keys(label=name) if existing_keys: return duplicate(resp, 'Duplicate key by that name') try: keypair = mgr.add_key(key, name) resp.body = {'keypair': format_keypair(keypair)} except SoftLayerAPIError as e: if 'Unable to generate a fingerprint' in e.faultString: return bad_request(resp, e.faultString) if 'SSH key already exists' in e.faultString: return duplicate(resp, e.faultString) raise
def execute(self, args): if args.get('--key'): key = args['--key'] else: key_file = open(expanduser(args['--file']), 'rU') key = key_file.read().strip() key_file.close() mgr = SshKeyManager(self.client) result = mgr.add_key(key, args['<label>'], args.get('--notes')) return "SSH key added: %s" % result.get('fingerprint')
def execute(self, args): if args.get('--key'): key = args['--key'] else: f = open(expanduser(args['--file']), 'rU') key = f.read().strip() f.close() mgr = SshKeyManager(self.client) result = mgr.add_key(key, args['<label>'], args.get('--notes')) if type(result) is dict and result.get('fingerprint'): return "SSH key added."
def execute(self, args): if args.get("--key"): key = args["--key"] else: f = open(expanduser(args["--file"]), "rU") key = f.read().strip() f.close() mgr = SshKeyManager(self.client) result = mgr.add_key(key, args["<label>"], args.get("--notes")) if type(result) is dict and result.get("fingerprint"): return "SSH key added."
class SshKeyTests(unittest.TestCase): def setUp(self): self.client = FixtureClient() self.sshkey = SshKeyManager(self.client) def test_add_key(self): key = 'pretend this is a public SSH key' label = 'Test label' notes = 'My notes' data = { 'key': key, 'label': label, 'notes': notes, } mcall = call(data) service = self.client['Security_Ssh_Key'] self.sshkey.add_key(key=key, label=label, notes=notes) service.createObject.assert_has_calls(mcall) def test_delete_key(self): id = 1234 mcall = call(id=id) service = self.client['Security_Ssh_Key'] self.sshkey.delete_key(id) service.deleteObject.assert_has_calls(mcall) def test_edit_key(self): id = 1234 label = 'Test label' notes = 'My notes' data = { 'label': label, 'notes': notes, } mcall = call(data, id=id) service = self.client['Security_Ssh_Key'] self.sshkey.edit_key(id, label=label, notes=notes) service.editObject.assert_has_calls(mcall) def test_get_key(self): id = 1234 mcall = call(id=id) service = self.client['Security_Ssh_Key'] self.sshkey.get_key(id) service.getObject.assert_has_calls(mcall) def test_list_keys(self): service = self.client['Account'] self.sshkey.list_keys(label='some label') service.getSshKeys.assert_called_with( filter={'sshKeys': {'label': {'operation': '_= some label'}}}) def test_resolve_ids_label(self): _id = self.sshkey._get_ids_from_label('Test 1') self.assertEqual(_id, ['100']) _id = self.sshkey._get_ids_from_label('nope') self.assertEqual(_id, [])