cc1  v2.1
CC1 source code docs
 All Classes Namespaces Files Functions Variables Pages
key_pair.py
Go to the documentation of this file.
1 # -*- coding: utf-8 -*-
2 # @COPYRIGHT_begin
3 #
4 # Copyright [2010-2014] Institute of Nuclear Physics PAN, Krakow, Poland
5 #
6 # Licensed under the Apache License, Version 2.0 (the "License");
7 # you may not use this file except in compliance with the License.
8 # You may obtain a copy of the License at
9 #
10 # http://www.apache.org/licenses/LICENSE-2.0
11 #
12 # Unless required by applicable law or agreed to in writing, software
13 # distributed under the License is distributed on an "AS IS" BASIS,
14 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 # See the License for the specific language governing permissions and
16 # limitations under the License.
17 #
18 # @COPYRIGHT_end
19 
20 ##
21 # @package src.ec2.key_pair
22 # EC2 actions for key pairs
23 #
24 # @copyright Copyright (c) 2012 Institute of Nuclear Physics PAS <http://www.ifj.edu.pl/>
25 # @author Oleksandr Gituliar <gituliar@gmail.com>
26 #
27 
28 from ec2.base.action import Action, CLMException
29 from ec2.error import InvalidKeyPair, MissingParameter, InvalidFilter
30 from ec2.helpers.filters import applyEc2Filters, validateEc2Filters
31 from ec2.helpers.parse import parseFilters, parseSequenceArguments
32 
33 
34 class CreateKeyPair(Action):
35  def _execute(self):
36  try:
37  key_name = self.parameters['KeyName']
38  except KeyError, error:
39  raise MissingParameter(parameter=error.args[0])
40  try:
41  id_rsa = self.cluster_manager.user.key.generate({'name': key_name})
42  except CLMException, error:
43  if error.status == 'ssh_key_already_exist':
44  raise InvalidKeyPair.Duplicate(key_name=key_name)
45  raise error
46  key_pair = self.cluster_manager.user.key.get({'name': key_name})
47  return {
48  'keyFingerprint': key_pair['fingerprint'],
49  'keyMaterial': id_rsa,
50  'keyName': key_name,
51  }
52 
53 
54 class DeleteKeyPair(Action):
55  def _execute(self):
56  try:
57  key_name = self.parameters['KeyName']
58  except KeyError, error:
59  raise MissingParameter(parameter=error.args[0])
60  try:
61  self.cluster_manager.user.key.delete({'name': key_name})
62  except CLMException, error:
63  pass # Amazon does not handle NotFound error here.
64 
65 
66 class DescribeKeyPairs(Action):
67 
68  translation_filters = {'key-name': 'name',
69  'fingerprint': 'fingerprint'}
70 
71  available_filters = ['key-name', 'fingerprint']
72 
73  def _execute(self):
74  key_names = parseSequenceArguments(self.parameters, prefix='KeyName.')
75 
76  filters = parseFilters(self.parameters)
77  if not validateEc2Filters(filters, self.available_filters):
78  raise InvalidFilter
79 
80  key_pairs = []
81  if key_names:
82  for key_name in key_names:
83  key_pairs.append(self.cluster_manager.user.key.get({'name': key_name}))
84  else:
85  key_pairs = self.cluster_manager.user.key.get_list()
86 # key_pairs = self.cluster_manager.send_request("/user/key/get_list/")
87 # key_pairs = self.cluster_manager.key.user.list()
88 
89  result = []
90 
91  for key_pair in key_pairs:
92 # if not key_names or key_pair in key_names:
93  result.append({'key-name': key_pair['name'],
94  'fingerprint': key_pair['fingerprint']
95  })
96 
97  result = applyEc2Filters(result, filters)
98 
99  print 'result:', result
100  return {
101  'key_pairs': result
102  }
103 
104 
105 class ImportKeyPair(Action):
106  def _execute(self):
107  import base64
108  try:
109  key_name = self.parameters['KeyName']
110  id_rsa_pub = base64.b64decode(self.parameters['PublicKeyMaterial'])
111  except KeyError, error:
112  raise MissingParameter(parameter=error.args[0])
113  try:
114  self.cluster_manager.user.key.add({'key': id_rsa_pub, 'name': key_name})
115  except CLMException, error:
116  raise error
117  key_pair = self.cluster_manager.user.key.get({'name': key_name})
118  return {
119  'keyFingerprint': key_pair['fingerprint'],
120  'keyName': key_name,
121  }
122