1
import boto,sys,euca_admin,re
2
from boto.exception import EC2ResponseError
3
from euca_admin.generic import BooleanResponse
4
from euca_admin import EucaAdmin
5
from optparse import OptionParser
6
from string import split
8
SERVICE_PATH = '/services/Properties'
13
def __init__(self, property_name=None, property_value=None, property_description=None, property_old_value=None):
14
self.property_name = property_name
15
self.property_value = property_value
16
self.property_description = property_description
17
self.property_old_value = property_old_value
18
self.euca = EucaAdmin(path=SERVICE_PATH)
23
str = 'PROPERTY\t%s\t%s' % (self.property_name, self.property_value)
24
if self.property_old_value is not None:
25
str = '%s was %s' % (str, self.property_old_value)
27
str = '%s\nDESCRIPTION\t%s\t%s' % (str, self.property_name, self.property_description)
30
def startElement(self, name, attrs, connection):
33
def endElement(self, name, value, connection):
34
if name == 'euca:name':
35
self.property_name = value
36
elif name == 'euca:value':
37
self.property_value = value
38
elif name == 'euca:oldValue':
39
self.property_old_value = value
40
elif name == 'euca:description':
41
self.property_description = value
43
setattr(self, name, value)
46
parser = OptionParser("usage: %prog [PROPERTY...]",version="Eucalyptus %prog VERSION")
47
parser.add_option("-v","--verbose",dest="verbose",action="store_true",help="Show property descriptions.")
50
def parse_describe(self):
52
(options,args) = self.get_parser().parse_args()
57
def cli_describe(self):
58
(options,args) = self.parse_describe()
61
def describe(self,props=None):
64
self.euca.connection.build_list_params(params,props,'Properties')
66
list = self.euca.connection.get_list('DescribeProperties', params, [('euca:item', Property)])
69
except EC2ResponseError, ex:
70
self.euca.handle_error(ex)
72
def get_parse_modify(self):
73
parser = self.get_parser()
74
parser.add_option("-p","--property",dest="props",action="append",help="Modify KEY to be VALUE. Can be given multiple times.",metavar="KEY=VALUE")
76
(options,args) = parser.parse_args()
80
print "ERROR No options were specified."
84
for i in options.props:
85
if not re.match("^[\w.]+=[\w\.]+$",i):
86
print "ERROR Options must be of the form KEY=VALUE. Illegally formatted option: %s" % i
92
(options,args) = self.get_parse_modify()
93
self.modify(options.props)
95
def modify(self,modify_list):
97
new_prop = split(i,"=")
98
if not len(new_prop) == 2:
99
print "ERROR Options must be of the form KEY=VALUE. Illegally formatted option: %s" % i
102
result = self.euca.connection.get_object('ModifyPropertyValue', {'Name':new_prop[0],'Value':new_prop[1]},Property)
104
except EC2ResponseError, ex:
105
self.euca.handle_error(ex)