~ubuntu-virt/ubuntu/maverick/eucalyptus/2.0

« back to all changes in this revision

Viewing changes to clc/tools/src/euca_admin/properties.py

  • Committer: Dave Walker (Daviey)
  • Date: 2010-06-21 12:59:20 UTC
  • mfrom: (1048.1.14 ubuntu)
  • Revision ID: davewalker@ubuntu.com-20100621125920-60uhixwq174elnj1
* New major upstream version merge, 1.7 (r1200).
* debian/patches/:
  - 02-Makefile.patch: Updated to reflect new code layout.
  - 07-local_support_euca_conf-in.patch: Updated to reflect new code layout.
  - 08-ubuntu-default-networking.patch: Refreshed.
  - 09-small-128-192MB.patch: Updated to point to new location.
  - 10-disable-iscsi.patch: Refreshed.
  - 11-state-cleanup-memleakfix.patch: Refreshed.
  - 15-fix-default-ramdisk.patch: Updated to point to new location.
  - 16-kvm_libvirt_xml_default_use_kvm.patch: Updated to reflect changes.
  - 17-fix_walrus_OOM_errors.patch: Removed, fixed upstream.
  - 18-priv_security.patch: Updated to reflect upstream changes.
  - 20-brute-force-webui.patch: Updated to reflect upstream changes. 

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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
 
7
 
 
8
SERVICE_PATH = '/services/Properties'
 
9
VERBOSE = False
 
10
class Property():
 
11
  
 
12
  
 
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)
 
19
 
 
20
          
 
21
  def __repr__(self):
 
22
    global VERBOSE
 
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)
 
26
    elif VERBOSE:
 
27
      str = '%s\nDESCRIPTION\t%s\t%s' % (str, self.property_name, self.property_description) 
 
28
    return str
 
29
 
 
30
  def startElement(self, name, attrs, connection):
 
31
      return None
 
32
 
 
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
 
42
    else:
 
43
      setattr(self, name, value)
 
44
 
 
45
  def get_parser(self):
 
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.")
 
48
    return parser
 
49
        
 
50
  def parse_describe(self):
 
51
    global VERBOSE
 
52
    (options,args) = self.get_parser().parse_args()  
 
53
    if options.verbose:
 
54
      VERBOSE = True
 
55
    return (options,args)
 
56
 
 
57
  def cli_describe(self):
 
58
    (options,args) = self.parse_describe()
 
59
    self.describe(args)
 
60
 
 
61
  def describe(self,props=None):
 
62
    params = {}
 
63
    if props:
 
64
      self.euca.connection.build_list_params(params,props,'Properties')
 
65
    try:
 
66
      list = self.euca.connection.get_list('DescribeProperties', params, [('euca:item', Property)])
 
67
      for i in list:
 
68
        print i
 
69
    except EC2ResponseError, ex:
 
70
      self.euca.handle_error(ex)
 
71
 
 
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")
 
75
    global VERBOSE
 
76
    (options,args) = parser.parse_args()
 
77
    if options.verbose:
 
78
      VERBOSE = True
 
79
    if not options.props:
 
80
      print "ERROR No options were specified."
 
81
      parser.print_help()
 
82
      sys.exit(1)
 
83
    else:
 
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
 
87
          parser.print_help()
 
88
          sys.exit(1)
 
89
    return (options,args)
 
90
 
 
91
  def cli_modify(self):
 
92
    (options,args) = self.get_parse_modify()
 
93
    self.modify(options.props)
 
94
 
 
95
  def modify(self,modify_list):
 
96
    for i in 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
 
100
        sys.exit(1)
 
101
      try:
 
102
        result = self.euca.connection.get_object('ModifyPropertyValue', {'Name':new_prop[0],'Value':new_prop[1]},Property)
 
103
        print result
 
104
      except EC2ResponseError, ex:
 
105
        self.euca.handle_error(ex)