Ejemplo n.º 1
0
 def place(self, block=True):
     if get_domain() == None:
         print 'SDB Persistence Domain not set'
         domain_name = self.get_string('Specify SDB Domain')
         set_domain(domain_name)
     s = ServerSet()
     for item in self.items:
         r = item.ami.run(min_count=1, max_count=item.quantity,
                          key_name=item.key.name, user_data=item.get_userdata_string(),
                          security_groups=item.groups, instance_type=item.instance_type,
                          placement=item.zone.name)
         if block:
             states = [i.state for i in r.instances]
             if states.count('running') != len(states):
                 print states
                 time.sleep(15)
                 states = [i.update() for i in r.instances]
         for i in r.instances:
             server = Server()
             server.name = item.name
             server.instance_id = i.id
             server.reservation = r
             server.save()
             s.append(server)
     if len(s) == 1:
         return s[0]
     else:
         return s
Ejemplo n.º 2
0
 def find(cls, **params):
     keys = params.keys()
     if len(keys) > 4:
         raise SDBPersistanceError('Too many fields, max is 4')
     parts = ["['__type__'='%s'] union ['__lineage__'starts-with'%s']" % (cls.__name__, cls.get_lineage())]
     properties = cls.find_properties()
     for key in keys:
         found = False
         for property in properties:
             if property.name == key:
                 found = True
                 if isinstance(property, ScalarProperty):
                     checker = property.checker
                     parts.append("['%s' = '%s']" % (key, checker.to_string(params[key])))
                 else:
                     raise SDBPersistanceError('%s is not a searchable field' % key)
         if not found:
             raise SDBPersistanceError('%s is not a valid field' % key)
     query = ' intersection '.join(parts)
     domain = get_domain()
     if domain:
         rs = domain.query(query)
     else:
         rs = []
     return object_lister(None, rs)
Ejemplo n.º 3
0
 def place(self, block=True):
     if get_domain() == None:
         print('SDB Persistence Domain not set')
         domain_name = self.get_string('Specify SDB Domain')
         set_domain(domain_name)
     s = ServerSet()
     for item in self.items:
         r = item.ami.run(min_count=1, max_count=item.quantity,
                          key_name=item.key.name, user_data=item.get_userdata_string(),
                          security_groups=item.groups, instance_type=item.instance_type,
                          placement=item.zone.name)
         if block:
             states = [i.state for i in r.instances]
             if states.count('running') != len(states):
                 print(states)
                 time.sleep(15)
                 states = [i.update() for i in r.instances]
         for i in r.instances:
             server = Server()
             server.name = item.name
             server.instance_id = i.id
             server.reservation = r
             server.save()
             s.append(server)
     if len(s) == 1:
         return s[0]
     else:
         return s
Ejemplo n.º 4
0
def test(domain_name):
    print 'Initialize the Persistance system'
    set_domain(domain_name)
    print 'Call test1'
    s1 = test1()
    # now create a new instance and read the saved data from SDB
    print 'Now sleep to wait for things to converge'
    time.sleep(5)
    print 'Now lookup the object and compare the fields'
    s2 = TestScalar(s1.id)
    assert s1.name == s2.name
    assert s1.description == s2.description
    assert s1.size == s2.size
    assert s1.offset == s2.offset
    assert s1.foo == s2.foo
    #assert s1.date == s2.date
    print 'Call test2'
    s2 = test2(s1.name)
    print 'Call test3'
    s3 = test3(s1)
    print 'Call test4'
    s4 = test4(s1, s3)
    print 'Call test5'
    s6 = test6()
    s5 = test5(s6)
    domain = get_domain()
    item1 = domain.get_item(s1.id)
    item2 = domain.get_item(s2.id)
    item3 = domain.get_item(s3.id)
    item4 = domain.get_item(s4.id)
    item5 = domain.get_item(s5.id)
    item6 = domain.get_item(s6.id)
    return [(s1, item1), (s2, item2), (s3, item3), (s4, item4), (s5, item5), (s6, item6)]
Ejemplo n.º 5
0
 def list(cls, max_items=None):
     domain = get_domain()
     if domain:
         rs = domain.query("['__type__' = '%s']" % cls.__name__, max_items=max_items)
     else:
         rs = []
     return object_lister(cls, rs)
Ejemplo n.º 6
0
 def get_related_objects(self, ref_name, ref_cls=None):
     domain = get_domain()
     if domain:
         query = "['%s' = '%s']" % (ref_name, self.id)
         if ref_cls:
             query += " intersection ['__type__'='%s']" % ref_cls.__name__
         rs = domain.query(query)
     else:
         rs = []
     return object_lister(ref_cls, rs)
Ejemplo n.º 7
0
 def save(self):
     attrs = {'__type__' : self.__class__.__name__,
              '__module__' : self.__class__.__module__,
              '__lineage__' : self.get_lineage()}
     for property in self.find_properties():
         attrs[property.name] = property.to_string(self)
     domain = get_domain()
     if domain:
         domain.put_attributes(self.id, attrs, replace=True)
         self.auto_update = True
Ejemplo n.º 8
0
 def load(self, obj):
     domain = get_domain()
     a = domain.get_attributes(obj.id, self.name)
     # try to get the attribute value from SDB
     if self.name in a:
         value = self.checker.from_string(a[self.name])
         setattr(obj, self.slot_name, value)
     # if it's not there, set the value to the default value
     else:
         self.__set__(obj, self.checker.default)
Ejemplo n.º 9
0
 def update_config(self):
     if not self.config.has_section('Credentials'):
         self.config.add_section('Credentials')
         self.config.set('Credentials', 'aws_access_key_id', self.ec2.aws_access_key_id)
         self.config.set('Credentials', 'aws_secret_access_key', self.ec2.aws_secret_access_key)
     if not self.config.has_section('Pyami'):
         self.config.add_section('Pyami')
     sdb_domain = get_domain()
     if sdb_domain:
         self.config.set('Pyami', 'server_sdb_domain', sdb_domain.name)
         self.config.set('Pyami', 'server_sdb_name', self.name)
Ejemplo n.º 10
0
 def update_config(self):
     if not self.config.has_section('Credentials'):
         self.config.add_section('Credentials')
         self.config.set('Credentials', 'aws_access_key_id', self.ec2.aws_access_key_id)
         self.config.set('Credentials', 'aws_secret_access_key', self.ec2.aws_secret_access_key)
     if not self.config.has_section('Pyami'):
         self.config.add_section('Pyami')
     sdb_domain = get_domain()
     if sdb_domain:
         self.config.set('Pyami', 'server_sdb_domain', sdb_domain)
         self.config.set('Pyami', 'server_sdb_name', self.name)
Ejemplo n.º 11
0
 def __set__(self, obj, value):
     if not isinstance(value, list):
         raise SDBPersistanceError('Value must be a list')
     self._list = value
     str_list = []
     for value in self._list:
         str_list.append(self.checker.to_string(value))
     domain = get_domain()
     try:
         domain.put_attributes(obj.id, {self.name : str_list}, replace=True)
     except:
         print 'problem setting value: %s' % value
Ejemplo n.º 12
0
 def __init__(self, id=None):
     self.id = id
     if self.id:
         self.auto_update = True
         domain = get_domain()
         if domain:
             attrs = domain.get_attributes(self.id, '__type__')
             if len(attrs.keys()) == 0:
                 raise SDBPersistanceError('Object %s: not found' % self.id)
     else:
         self.id = str(uuid.uuid4())
         self.auto_update = False
Ejemplo n.º 13
0
 def load(self, obj):
     if obj != None:
         _list = []
         domain = get_domain()
         a = domain.get_attributes(obj.id, self.name)
         if self.name in a:
             lst = a[self.name]
             if not isinstance(lst, list):
                 lst = [lst]
             for value in lst:
                 value = self.checker.from_string(value)
                 _list.append(value)
     setattr(obj, self.slot_name, MultiValue(self, obj, _list))
Ejemplo n.º 14
0
 def get(cls, id=None, **params):
     domain = get_domain()
     if domain and id:
         a = domain.get_attributes(id, '__type__')
         if a.has_key('__type__'):
             return cls(id)
         else:
             raise SDBPersistanceError('%s object with id=%s does not exist' % (cls.__name__, id))
     else:
         rs = cls.find(**params)
         try:
             obj = rs.next()
         except StopIteration:
             raise SDBPersistanceError('%s object matching query does not exist' % cls.__name__)
         try:
             rs.next()
         except StopIteration:
             return obj
         raise SDBPersistanceError('Query matched more than 1 item')
Ejemplo n.º 15
0
 def save(self, obj):
     domain = get_domain()
     domain.put_attributes(obj.id, {self.name : self.to_string(obj)}, replace=True)
Ejemplo n.º 16
0
 def append(self, value):
     self.checker.check(value)
     self._list.append(value)
     domain = get_domain()
     domain.put_attributes(self.object.id, {self.name: self.checker.to_string(value)}, replace=False)
Ejemplo n.º 17
0
 def __delitem__(self, key):
     item = self[key]
     self._list.__delitem__(key)
     domain = get_domain()
     domain.delete_attributes(self.object.id, {self.name: [self.checker.to_string(item)]})
Ejemplo n.º 18
0
 def delete(self):
     domain = get_domain()
     if domain:
         domain.delete_attributes(self.id)