예제 #1
0
    def testAttrAndQueryEqual(self):

        d1 = clusto.get_by_name('d1')
        d2 = clusto.get_by_name('d2')
        d3 = clusto.get_by_name('d3')

        self.assertEqual(d1.attrs('a'), d1.attr_query('a'))

        self.assertEqual(d1.attrs('a', 1), d1.attr_query('a', 1))

        self.assertEqual(d1.attrs('a', 1, number=True), 
                         d1.attr_query('a', 1, number=True))

        self.assertEqual(d1.attrs('a', 1, number=5), 
                         d1.attr_query('a', 1, number=5))

        self.assertEqual(d1.attrs(value='dee'), 
                         d1.attr_query(value='dee'))


        self.assertEqual(d1.attrs(value='_foo'), 
                         d1.attr_query(value='_foo'))

        self.assertEqual(d1.attrs(key='_foo'), 
                         d1.attr_query(key='_foo'))

        self.assertEqual(d1.attrs(key='a', subkey=None), 
                         d1.attr_query(key='a', subkey=None))

        self.assertEqual(d1.attrs(value=d2), 
                         d1.attr_query(value=d2))


        self.assertEqual(d1.attrs(subkey='z'),
                         d1.attr_query(subkey='z'))
예제 #2
0
    def testVMDestroy(self):

        vmm = clusto.get_by_name("vmm")

        vs1 = BasicVirtualServer("vs1")
        vs1.set_attr("system", subkey="memory", value=1000)
        vs1.set_attr("system", subkey="disk", value=50)
        vs1.set_attr("system", subkey="cpucount", value=2)

        vs2 = BasicVirtualServer("vs2")
        vs2.set_attr("system", subkey="memory", value=5000)
        vs2.set_attr("system", subkey="disk", value=50)
        vs2.set_attr("system", subkey="cpucount", value=2)

        vs3 = BasicVirtualServer("vs3")
        vs3.set_attr("system", subkey="memory", value=1000)
        vs3.set_attr("system", subkey="disk", value=50)
        vs3.set_attr("system", subkey="cpucount", value=1)

        s1 = clusto.get_by_name("s1")
        s2 = clusto.get_by_name("s2")

        vmm.allocate(vs1)
        vmm.allocate(vs2)

        self.assertRaises(ResourceException, vmm.allocate, vs3)

        vmm.deallocate(vs2)

        vmm.allocate(vs3)

        self.assertEqual([r.value for r in vmm.resources(vs3)], [clusto.get_by_name("s2")])
예제 #3
0
파일: http.py 프로젝트: verma7/clusto
    def get_action(self, request, match):
        group = match.groupdict()
        try:
            obj = clusto.get_by_name(group['name'])
        except LookupError:
            return Response(status=404, body='404 Not Found\n')

        if obj.type != group['objtype']:
            response = Response(status=302)
            response.headers.add(
                'Location',
                str('/%s/%s/%s' %
                    (obj.type, obj.name, group.get('action', ''))))
            return response

        action = group.get('action', 'show')
        handler = self.types.get(group['objtype'], EntityAPI)
        if not obj:
            obj = clusto.get_by_name(group['name'])
        h = handler(obj)
        if hasattr(h, action):
            f = getattr(h, action)
            response = f(request)
        else:
            response = Response(status=404,
                                body='404 Not Found\nInvalid action\n')
        return response
예제 #4
0
    def testVMManagerAllocate(self):

        s1 = clusto.get_by_name("s1")
        s2 = clusto.get_by_name("s2")

        vs1 = BasicVirtualServer("vs1")
        vs1.set_attr("system", subkey="memory", value=1000)
        vs1.set_attr("system", subkey="disk", value=50)
        vs1.set_attr("system", subkey="cpucount", value=1)

        vs2 = BasicVirtualServer("vs2")
        vs2.set_attr("system", subkey="memory", value=8000)
        vs2.set_attr("system", subkey="disk", value=1000)
        vs2.set_attr("system", subkey="cpucount", value=1)

        vs3 = BasicVirtualServer("vs3")
        vs3.set_attr("system", subkey="memory", value=800)
        vs3.set_attr("system", subkey="disk", value=100)
        vs3.set_attr("system", subkey="cpucount", value=3)

        vmm = clusto.get_by_name("vmm")

        vmm.allocate(vs1)

        self.assertEqual(len(vmm.resources(vs1)), 1)

        self.assert_(vmm.resources(vs1)[0].value in [s1, s2])

        vmm.allocate(vs2)

        self.assertEqual([r.value for r in vmm.resources(vs2)], [s2])

        self.assertRaises(ResourceException, vmm.allocate, vs3)
예제 #5
0
    def testAttrAndQueryEqual(self):

        d1 = clusto.get_by_name('d1')
        d2 = clusto.get_by_name('d2')

        self.assertEqual(d1.attrs('a'), d1.attr_query('a'))

        self.assertEqual(d1.attrs('a', 1), d1.attr_query('a', 1))

        self.assertEqual(d1.attrs('a', 1, number=True),
                         d1.attr_query('a', 1, number=True))

        self.assertEqual(d1.attrs('a', 1, number=5),
                         d1.attr_query('a', 1, number=5))

        self.assertEqual(d1.attrs(value='dee'), d1.attr_query(value='dee'))

        self.assertEqual(d1.attrs(value='_foo'), d1.attr_query(value='_foo'))

        self.assertEqual(d1.attrs(key='_foo'), d1.attr_query(key='_foo'))

        self.assertEqual(d1.attrs(key='a', subkey=None),
                         d1.attr_query(key='a', subkey=None))

        self.assertEqual(d1.attrs(value=d2), d1.attr_query(value=d2))

        self.assertEqual(d1.attrs(subkey='z'), d1.attr_query(subkey='z'))
예제 #6
0
    def testVMDestroy(self):

        vmm = clusto.get_by_name('vmm')


        vs1 = BasicVirtualServer('vs1')
        vs1.set_attr('system', subkey='memory', value=1000)
        vs1.set_attr('system', subkey='disk', value=50)
        vs1.set_attr('system', subkey='cpucount', value=2)

        vs2 = BasicVirtualServer('vs2')
        vs2.set_attr('system', subkey='memory', value=5000)
        vs2.set_attr('system', subkey='disk', value=50)
        vs2.set_attr('system', subkey='cpucount', value=2)

        vs3 = BasicVirtualServer('vs3')
        vs3.set_attr('system', subkey='memory', value=1000)
        vs3.set_attr('system', subkey='disk', value=50)
        vs3.set_attr('system', subkey='cpucount', value=1)

        s1 = clusto.get_by_name('s1')
        s2 = clusto.get_by_name('s2')
        
        vmm.allocate(vs1)
        vmm.allocate(vs2)

        self.assertRaises(ResourceException, vmm.allocate, vs3)

        vmm.deallocate(vs2)

        vmm.allocate(vs3)

        self.assertEqual([r.value for r in vmm.resources(vs3)],
                         [clusto.get_by_name('s2')])
예제 #7
0
    def testAddingAndRemovingHosts(self):

        s1 = clusto.get_by_name('s1')
        s2 = clusto.get_by_name('s2')
        s3 = BasicServer('s3')
        s3.set_attr('system', subkey='memory', value=16000)
        s3.set_attr('system', subkey='disk', value=2500)
        s3.set_attr('system', subkey='cpucount', value=2)
        
        vmm = clusto.get_by_name('vmm')

        vs1 = BasicVirtualServer('vs1')
        vs1.set_attr('system', subkey='memory', value=1000)
        vs1.set_attr('system', subkey='disk', value=50)
        vs1.set_attr('system', subkey='cpucount', value=2)

        self.assertRaises(ResourceException, vmm.allocate, vs1, s3)

        vmm.allocate(vs1, s1)

        self.assertRaises(ResourceException, vmm.remove, s1)
        vmm.deallocate(vs1)
        vmm.remove(s1)

        vmm.insert(s3)

        vmm.allocate(vs1, s3)
예제 #8
0
    def testVMManagerAllocate(self):

        s1 = clusto.get_by_name('s1')
        s2 = clusto.get_by_name('s2')
        
        vs1 = BasicVirtualServer('vs1')
        vs1.set_attr('system', subkey='memory', value=1000)
        vs1.set_attr('system', subkey='disk', value=50)
        vs1.set_attr('system', subkey='cpucount', value=1)

        vs2 = BasicVirtualServer('vs2')
        vs2.set_attr('system', subkey='memory', value=8000)
        vs2.set_attr('system', subkey='disk', value=1000)
        vs2.set_attr('system', subkey='cpucount', value=1)

        vs3 = BasicVirtualServer('vs3')
        vs3.set_attr('system', subkey='memory', value=800)
        vs3.set_attr('system', subkey='disk', value=100)
        vs3.set_attr('system', subkey='cpucount', value=3)

        vmm = clusto.get_by_name('vmm')

        vmm.allocate(vs1)

        self.assertEqual(len(vmm.resources(vs1)), 1)

        self.assert_(vmm.resources(vs1)[0].value in [s1, s2])

        vmm.allocate(vs2)

        self.assertEqual([r.value for r in vmm.resources(vs2)], [s2])

        self.assertRaises(ResourceException, vmm.allocate, vs3)
예제 #9
0
    def testfqdn(self):

        s1 = clusto.get_by_name('bs1')
        s2 = clusto.get_by_name('bs2')

        self.assertEqual(s1.fqdns, [])

        s2.add_fqdn("test.example.com")

        self.assertEqual(["test.example.com"],
                         s2.fqdns)

        s2.add_fqdn("test2.example.com")
        
        clusto.flush()

        self.assertEqual(sorted(["test.example.com",
                                 "test2.example.com"]),
                         sorted(s2.fqdns))

        s2.remove_fqdn("test.example.com")

        
        self.assertEqual(["test2.example.com"],
                         s2.fqdns)
예제 #10
0
    def testfqdn(self):

        s1 = clusto.get_by_name('bs1')
        s2 = clusto.get_by_name('bs2')

        self.assertEqual(s1.fqdns, [])

        s2.add_fqdn("test.example.com")

        self.assertEqual(["test.example.com"],
                         s2.fqdns)

        s2.add_fqdn("test2.example.com")
        
        clusto.flush()

        self.assertEqual(sorted(["test.example.com",
                                 "test2.example.com"]),
                         sorted(s2.fqdns))

        s2.remove_fqdn("test.example.com")

        
        self.assertEqual(["test2.example.com"],
                         s2.fqdns)
예제 #11
0
def get(name, driver=None):
    """
Tries to fetch a clusto object from a given name, optionally validating
the driver given. Returns:

 *  HTTP Error 404 if the object could not be found
 *  HTTP Error 409 if the object does not match the expected driver
 *  Clusto object otherwise
"""

    status = None
    obj = None
    msg = None
    if driver and driver not in clusto.driverlist:
        status = 412
        msg = u'The driver "%s" is not a valid driver' % (driver,)
    else:
        try:
            if driver:
                obj = clusto.get_by_name(name, assert_driver=clusto.driverlist[driver])
            else:
                obj = clusto.get_by_name(name)

        except LookupError as le:
            status = 404
            msg = u'Object "%s" not found (%s)' % (name, str(le),)

        except TypeError:
            status = 409
            msg = u'The driver for object "%s" is not "%s"' % (name, driver,)

    return obj, status, msg
예제 #12
0
    def testAddingAndRemovingHosts(self):

        s1 = clusto.get_by_name("s1")
        s2 = clusto.get_by_name("s2")
        s3 = BasicServer("s3")
        s3.set_attr("system", subkey="memory", value=16000)
        s3.set_attr("system", subkey="disk", value=2500)
        s3.set_attr("system", subkey="cpucount", value=2)

        vmm = clusto.get_by_name("vmm")

        vs1 = BasicVirtualServer("vs1")
        vs1.set_attr("system", subkey="memory", value=1000)
        vs1.set_attr("system", subkey="disk", value=50)
        vs1.set_attr("system", subkey="cpucount", value=2)

        self.assertRaises(ResourceException, vmm.allocate, vs1, s3)

        vmm.allocate(vs1, s1)

        self.assertRaises(ResourceException, vmm.remove, s1)
        vmm.deallocate(vs1)
        vmm.remove(s1)

        vmm.insert(s3)

        vmm.allocate(vs1, s3)
예제 #13
0
    def testBindingIPtoOSPort(self):

        s1 = clusto.get_by_name('bs1')
        s2 = clusto.get_by_name('bs2')
                
        ipm = IPManager('ipman', netmask='255.255.255.0', baseip='192.168.1.0')

        s1.bind_ip_to_osport('192.168.1.20', 'eth0', porttype='nic-eth', portnum=1)
예제 #14
0
    def testBasicServerCreation(self):

        s1 = clusto.get_by_name('bs1')
        s2 = clusto.get_by_name('bs2')

        self.assertEqual(s1.model, '7000')
        self.assertEqual(s1.manufacturer, 'ibm')
        self.assertEqual(s2.model, 'ab1200')
        self.assertEqual(s2.manufacturer, 'sun')
예제 #15
0
    def testAllocateManyNames(self):

        ngen = clusto.get_by_name('foonamegen')

        for i in xrange(50):
            ngen.allocate(Driver)

        self.assertRaises(LookupError, clusto.get_by_name, 'foo0051')
        self.assertEqual(clusto.get_by_name('foo0050').name, 'foo0050')
예제 #16
0
    def testAllocateManyNames(self):
        
        ngen = clusto.get_by_name('foonamegen')

        for i in xrange(50):
            ngen.allocate(Driver)

        self.assertRaises(LookupError, clusto.get_by_name, 'foo0051')
        self.assertEqual(clusto.get_by_name('foo0050').name, 'foo0050')
예제 #17
0
    def testBasicServerCreation(self):

        s1 = clusto.get_by_name('bs1')
        s2 = clusto.get_by_name('bs2')

        self.assertEqual(s1.model, '7000')
        self.assertEqual(s1.manufacturer, 'ibm')
        self.assertEqual(s2.model, 'ab1200')
        self.assertEqual(s2.manufacturer, 'sun')
예제 #18
0
 def lookup(self, name):
     try:
         server = clusto.get_by_name(name)
         return server
     except LookupError:
         try:
             server = clusto.get_by_name(name.split('.', 1)[0])
             return server
         except LookupError:
             return False
예제 #19
0
    def testNamedDriverCreation(self):
        ngen = clusto.get_by_name('foonamegen')
        
        s1 = ngen.allocate(Driver)

        clusto.flush()

        d1 = clusto.get_by_name('foo0001')

        self.assertEquals(s1.name, d1.name)
예제 #20
0
    def testTransactionRollback3(self):

        d1 = Entity('d1')

        clusto.begin_transaction()
        d2 = Entity('d2')
        clusto.rollback_transaction()

        clusto.get_by_name('d1')
        self.assertRaises(LookupError, clusto.get_by_name, 'd2')
예제 #21
0
    def testBindingIPtoOSPort(self):

        s1 = clusto.get_by_name('bs1')
        s2 = clusto.get_by_name('bs2')
                
        ipm1 = IPManager('ipman1', netmask='255.255.255.0', baseip='192.168.1.0')
        ipm2 = IPManager('ipman2', netmask='255.255.255.0', baseip='192.168.2.0')

        s1.bind_ip_to_osport('192.168.1.20', 'eth0', porttype='nic-eth', portnum=1)
        s1.bind_ip_to_osport('192.168.2.20', 'eth1', porttype='nic-eth', portnum=2)
예제 #22
0
    def testNamedDriverCreation(self):
        ngen = clusto.get_by_name('foonamegen')

        s1 = ngen.allocate(Driver)

        clusto.flush()

        d1 = clusto.get_by_name('foo0001')

        self.assertEquals(s1.name, d1.name)
예제 #23
0
    def testTransactionRollback3(self):

        d1 = Entity('d1')

        clusto.begin_transaction()
        d2 = Entity('d2')
        clusto.rollback_transaction()

        clusto.get_by_name('d1')
        self.assertRaises(LookupError, clusto.get_by_name, 'd2')
예제 #24
0
    def testGetByNames(self):

        names = ['e3','e1','e2']
        entities = [clusto.get_by_name(x) for x in names]

        self.assertEqual(entities, clusto.get_by_names(names))

        self.assertEqual([clusto.get_by_name('e3'),
                          None,
                          clusto.get_by_name('e1')],
                         clusto.get_by_names(['e3', 'shouldfail', 'e1']))
예제 #25
0
    def testTransactionCommit(self):

        try:
            clusto.begin_transaction()

            c1 = Entity('c1')
            clusto.commit()
        except Exception:
            clusto.rollback_transaction()

        clusto.get_by_name('c1')
예제 #26
0
    def testGetByNames(self):

        names = ['e3', 'e1', 'e2']
        entities = [clusto.get_by_name(x) for x in names]

        self.assertEqual(entities, clusto.get_by_names(names))

        self.assertEqual(
            [clusto.get_by_name('e3'), None,
             clusto.get_by_name('e1')],
            clusto.get_by_names(['e3', 'shouldfail', 'e1']))
예제 #27
0
    def testTransactionCommit(self):

        try:
            clusto.begin_transaction()

            c1 = Entity('c1')
            clusto.commit()
        except Exception:
            clusto.rollback_transaction()

        clusto.get_by_name('c1')
예제 #28
0
    def testPoolCreate(self):

        p3 = Pool('p3')
        d3 = Driver('d3')

        clusto.flush()

        q = clusto.get_by_name('p3')

        self.assertTrue(isinstance(q, Pool))

        self.assertFalse(isinstance(clusto.get_by_name('d3'), Pool))
예제 #29
0
파일: pooltests.py 프로젝트: egon010/clusto
    def testPoolCreate(self):

        p3 = Pool('p3')
        d3 = Driver('d3')
        
        clusto.flush()

        q = clusto.get_by_name('p3')

        self.assertTrue(isinstance(q, Pool))

        self.assertFalse(isinstance(clusto.get_by_name('d3'), Pool))
예제 #30
0
    def testServerRackLocation(self):

        r = clusto.get_by_name('r1')
        s = clusto.get_by_name('s1')

        self.assertEqual(BasicRack.get_rack_and_u(s)['RU'], [1])

        self.assertEqual(r.get_device_in(12), clusto.get_by_name('sw1'))

        self.assertEqual(r.get_device_in(10), clusto.get_by_name('p1'))

        self.assertEqual(r.get_device_in(11), clusto.get_by_name('p1'))
예제 #31
0
    def testBadRollback(self):

        clusto.begin_transaction()

        d1 = Entity('d1')

        clusto.get_by_name('d1')

        d2 = Entity('d2')
        clusto.commit()

        self.assertRaises(TransactionException, clusto.rollback_transaction)
예제 #32
0
    def testBadRollback(self):

        clusto.begin_transaction()

        d1 = Entity('d1')

        clusto.get_by_name('d1')

        d2 = Entity('d2')
        clusto.commit()

        self.assertRaises(TransactionException, clusto.rollback_transaction)
예제 #33
0
    def testEntityRename(self):

        curver = clusto.get_latest_version_number()

        e1 = Entity('e1')

        e1.add_attr('foo',1)
        e1.add_attr('foo',2)

        e1attrs = [a.to_tuple for a in e1.attrs]
        
        midver = clusto.get_latest_version_number()

        clusto.rename('e1', 't1')

        postrenamever = clusto.get_latest_version_number()
        
        t1 = clusto.get_by_name('t1')

        self.assertEqual(sorted(e1attrs),
                         sorted([a.to_tuple for a in t1.entity.attrs]))

        
        t1.del_attrs('foo', 2)

        self.assertRaises(LookupError, clusto.get_by_name, 'e1')

        self.assertEqual(sorted(t1.attrs('foo',1)),
                         sorted(t1.attrs()))

        SESSION.clusto_version = midver

        self.assertRaises(LookupError, clusto.get_by_name, 't1')

        e = clusto.get_by_name('e1')

        self.assertEqual(sorted(e1attrs),
                         sorted([a.to_tuple for a in e.attrs()]))

        
        for a in e.attrs():
            self.assertEqual(e.entity.deleted_at_version,
                             a.deleted_at_version)

        SESSION.clusto_version = postrenamever

        self.assertEqual(e.entity.deleted_at_version,
                         t1.entity.version)

        for a in t1.attrs():
            self.assertEqual(e.entity.deleted_at_version,
                             a.version)
 def test_log_event_creation(self):
     l = LogEvent(source_entity = self.host, 
                  user="******", 
                  event_type=clusto.get_by_name("test event"), 
                  timestamp=datetime.datetime.utcnow(), 
                  description="test description",
                  test_param = "test")
     self.assertEquals(l.source_entity, self.host)
     self.assertEquals(l.user, "test")
     self.assertEquals(l.event_type, clusto.get_by_name("test event"))
     self.assertEquals(type(l.timestamp), datetime.datetime)
     self.assertEquals(l.description, "test description")
     self.assertEquals(l.test_param, "test")
     self.assertRaises(TypeError, LogEvent)
예제 #35
0
    def testServerRackLocation(self):

        r = clusto.get_by_name('r1')
        s = clusto.get_by_name('s1')
        
        self.assertEqual(BasicRack.get_rack_and_u(s)['RU'], [1])

        self.assertEqual(r.get_device_in(12),
                         clusto.get_by_name('sw1'))

        self.assertEqual(r.get_device_in(10),
                         clusto.get_by_name('p1'))

        self.assertEqual(r.get_device_in(11),
                         clusto.get_by_name('p1'))
예제 #36
0
    def testReservingResource(self):

        s1 = clusto.get_by_name('s1')
        s2 = clusto.get_by_name('s2')

        vmm = clusto.get_by_name('vmm')

        vs1 = BasicVirtualServer('vs1')
        vs1.set_attr('system', subkey='memory', value=1000)
        vs1.set_attr('system', subkey='disk', value=50)
        vs1.set_attr('system', subkey='cpucount', value=2)

        vmm.allocate(vmm, s1)

        self.assertRaises(ResourceException, vmm.allocate, vs1, s1)
예제 #37
0
    def testReservingResource(self):

        s1 = clusto.get_by_name("s1")
        s2 = clusto.get_by_name("s2")

        vmm = clusto.get_by_name("vmm")

        vs1 = BasicVirtualServer("vs1")
        vs1.set_attr("system", subkey="memory", value=1000)
        vs1.set_attr("system", subkey="disk", value=50)
        vs1.set_attr("system", subkey="cpucount", value=2)

        vmm.allocate(vmm, s1)

        self.assertRaises(ResourceException, vmm.allocate, vs1, s1)
예제 #38
0
    def testDeleteVersion(self):

        curver = clusto.get_latest_version_number()

        e1 = Entity('e1')
        etest = clusto.get_by_name('e1')
        e1.delete()

        self.assertRaises(LookupError, clusto.get_by_name, 'e1')

        e1a = Entity('e1')

        etest = clusto.get_by_name('e1')

        self.assertEqual(etest.entity.version, curver + 3)
예제 #39
0
    def testPoolDelete(self):

        p5 = Pool('p5')
        d1 = clusto.get_by_name('d1')

        p5.insert(d1)
        
        clusto.flush()

        self.assertTrue(isinstance(clusto.get_by_name('p5'), Pool))

        clusto.get_by_name('p5').entity.delete()

        clusto.flush()

        self.assertRaises(LookupError, clusto.get_by_name, 'p5')
예제 #40
0
    def testPoolsIterator(self):

        
        A = Pool('A')

        d1, d2 = [clusto.get_by_name(i) for i in ['d1', 'd2']]

        B = Pool('B')
        C = Pool('C')
        A1 = Pool('A1')
        B2 = Pool('B2')
        B1 = Pool('B1')
        C1 = Pool('C1')

        C1.insert(C)
        B1.insert(B)
        A1.insert(B)

        A1.insert(A)
        B2.insert(A)

        A.insert(d1)
        B.insert(d1)
        C.insert(d1)

        clusto.flush()

        self.assertEqual([x.name for x in Pool.get_pools(d1)],
                         [u'A', u'B', u'C', u'A1', u'B2', u'B1', u'A1', u'C1'])

        self.assertEqual([x.name for x in Pool.get_pools(d1, allPools=False)],
                         [u'A', u'B', u'C'])
예제 #41
0
    def __init__(self, source_entity, user, event_type, timestamp, description=None, **kwargs):
        """Create a new LogEvent instance
        
        Keyword arguments:
        source_entity -- the source entity that is associated with the log event
        user -- the user that triggered the log event
        event_type -- the type of event that occured
        time_stamp -- the datetime when the log event occured
        description -- the string describing the event (default None)

        """
        try:
            name_manager = clusto.get_by_name("LogEvent_name_manager")
        except LookupError:
            name_manager = SimpleNameManager("LogEvent_name_manager", basename="Log", digits=10)

        try:
            clusto.begin_transaction()

            name, num = name_manager.allocator()
            
            super(LogEvent, self).__init__(name, event_type = event_type,
                                           source_entity =source_entity,
                                           timestamp = timestamp,
                                           user = user,
                                           description = description)

            name_manager.allocate(self, name)
            for key in kwargs:
                self.add_attr(key=key, value=kwargs[key])
            clusto.commit()
        except:
            clusto.rollback_transaction()
            raise
예제 #42
0
    def testRackContents(self):

        rackname = 'ashrack101'

        rack = Rack(rackname)

        t1 = Thing('t1')
        t2 = Thing('t2')
        t3 = Thing('t3')

        rack.addToRack(t3, [1, 2])
        rack.addToRack(t2, [32])
        rack.addToRack(t1, [23, 24, 25])

        clusto.flush()

        contents = rack.getRackContents()

        self.assert_(contents[1].name == contents[2].name == 't3')
        self.assert_(contents[32].name == 't2')
        self.assert_(
            contents[23].name == contents[24].name == contents[25].name == 't1'
        )

        t1.delete()

        clusto.flush()

        rack = clusto.get_by_name(rackname)
        contents = rack.getRackContents()
        clusto.flush()

        self.assertEqual(len(contents), 3)
예제 #43
0
파일: http.py 프로젝트: szaydel/clusto
    def setattr(self, request):
        '''
        Set an attribute on this object.

        Requires HTTP parameters "key" and "value"
        Optional parameters are "subkey", "number" and "datatype"
        where "datatype" could be "relation", "int" or string by default
        '''
        kwargs = dict(request.params.items())
        datatype = kwargs.get('datatype', None)
        kwargs.pop('datatype', None)

        if datatype == 'relation':
            try:
                kwargs['value'] = clusto.get_by_name(kwargs['value'].rsplit('/', 1)[1])
            except LookupError:
                return Response(status=400, body='400 Element Not Found\n')
        elif datatype == 'int':
            kwargs['value'] = int(kwargs['value'])
        else:
            kwargs['value'] = str(kwargs['value'])

        if 'number' in kwargs:
            kwargs['number'] = int(kwargs['number'])
        self.obj.set_attr(**kwargs)
        return self.show(request)
예제 #44
0
파일: rename.py 프로젝트: verma7/clusto
 def run(self, args):
     try:
         obj = clusto.get_by_name(args.oldname[0])
     except LookupError, e:
         self.debug(e)
         self.error('"%s" does not exist' % args.oldname[0])
         return -1
예제 #45
0
파일: pool.py 프로젝트: mgeggie-uber/clusto
 def _get_pool(self, pool):
     p = clusto.get_by_name(pool)
     self.debug('%s is %s' % (pool, p))
     if not p or not isinstance(p, clusto.drivers.pool.Pool):
         self.error('The pool "%s" does not exist or is not a pool' % pool)
         return False
     return p
예제 #46
0
    def testAllocateGivenName(self):

        ngen = clusto.get_by_name('foonamegen')

        d = ngen.allocate(Driver, 'testname')

        self.assertEqual(d.name, 'testname')
예제 #47
0
파일: basicracktests.py 프로젝트: wt/clusto
    def testAddingToRack(self):

        r1 = clusto.get_by_name('r1')

        s1 = BasicServer('s1')

        r1.insert(s1, 1)

        rt = clusto.get_by_name('r1')
        st = clusto.get_by_name('s1')

        self.assertEqual(len(r1.contents(subkey='ru')), 1)

        self.assertEqual(r1.contents(subkey='ru')[0].name, 's1')

        self.assertEqual(s1.parents(clusto_drivers=[BasicRack])[0].name, 'r1')
예제 #48
0
    def run(self, args):
        "Main run method"

        objects = []
        for _ in args.instances:
            try:
                objects.append(clusto.get_by_name(_))
            except LookupError:
                self.warn('Could not find instance %s in the clusto database' % (_,))
                if args.command == 'create':
                    self.info('Creating clusto object for %s' % (_,))
                    objects.append(self._instance_driver(_))
            except Exception as e:
                self.critical(e)
                return
        kwargs = dict(args.__dict__.items())
        for _ in ('command', 'config', 'dsn', 'loglevel', 'instances',):
            kwargs.pop(_)
        kwargs['objects'] = objects
        self.debug(kwargs)
        # Only the create command should (and in fact, *must*) receive an empty list of objects
        if not objects:
            self.error('Cannot run with an empty list of instances')
            return 1
        return (getattr(self, 'run_%s' % (args.command, ))(**kwargs))
예제 #49
0
    def testDeleteVersion(self):

        curver = clusto.get_latest_version_number()

        e1 = Entity('e1')
        etest = clusto.get_by_name('e1')
        e1.delete()


        self.assertRaises(LookupError, clusto.get_by_name, 'e1')

        e1a = Entity('e1')

        etest = clusto.get_by_name('e1')

        self.assertEqual(etest.entity.version, curver+3)
예제 #50
0
    def testTransactionRollback2(self):

        try:
            clusto.begin_transaction()

            c1 = Entity('c1')

            raise Exception()
        except Exception:

            clusto.rollback_transaction()

        c2 = Entity('c2')

        self.assertRaises(LookupError, clusto.get_by_name, 'c1')
        clusto.get_by_name('c2')
예제 #51
0
    def testTransactionRollback2(self):

        try:
            clusto.begin_transaction()

            c1 = Entity('c1')

            raise Exception()
        except Exception:

            clusto.rollback_transaction()

        c2 = Entity('c2')

        self.assertRaises(LookupError, clusto.get_by_name, 'c1')
        clusto.get_by_name('c2')
예제 #52
0
    def testRackContents(self):

        rackname = 'ashrack101'

        rack = Rack(rackname)

        t1 = Thing('t1')
        t2 = Thing('t2')
        t3 = Thing('t3')

        rack.addToRack(t3, [1,2])
        rack.addToRack(t2, [32])
        rack.addToRack(t1, [23,24,25])

        clusto.flush()

        contents = rack.getRackContents()

        self.assert_(contents[1].name == contents[2].name =='t3')
        self.assert_(contents[32].name == 't2')
        self.assert_(contents[23].name == contents[24].name
                     == contents[25].name == 't1')

        t1.delete()

        clusto.flush()

        rack = clusto.get_by_name(rackname)
        contents = rack.getRackContents()
        clusto.flush()
        
        self.assertEqual(len(contents), 3)
예제 #53
0
파일: snmp.py 프로젝트: verma7/clusto
def update_clusto(trap):
    ts = strftime('[%Y-%m-%d %H:%M:%S]')
    if trap['operation'] != 1:
        return

    if not trap['mac'].startswith('00'):
        return

    switch = IPManager.get_devices(trap['switch'])
    if not switch:
        log.warning('Unknown trap source: %s' % trap['switch'])
        return
    else:
        switch = switch[0]

    if not switch.attrs(
            key='snmp', subkey='discovery', value=1,
            merge_container_attrs=True):
        log.debug(
            'key=snmp, subkey=discovery for %s not set to 1, ignoring trap' %
            switch.name)
        return

    rack = switch.parents(clusto_types=['rack'])[0]

    try:
        factory = rackfactory.get_factory(rack.name)
        if not factory:
            log.warning('Unable to locate rack factory for %s' % rack.name)
            return
    except:
        log.error(format_exc())
        return

    server = switch.get_connected('nic-eth', trap['port'])
    if not server:
        servernames = clusto.get_by_name('servernames')
        clusto.SESSION.clusto_description = 'SNMP allocate new server'
        driver = factory.get_driver(trap['port'])
        server = servernames.allocate(driver)
        log.info('Created new %s on %s port %s: %s' %
                 (driver.__name__, trap['switch'], trap['port'], server.name))

    try:
        clusto.begin_transaction()
        if not trap['mac'] in server.attr_values(
                key='bootstrap', subkey='mac', value=trap['mac']):
            log.debug('Adding bootstrap mac to', server.name)
            server.add_attr(key='bootstrap', subkey='mac', value=trap['mac'])

        factory.add_server(server, trap['port'])
        switch.set_port_attr('nic-eth', trap['port'], 'vlan', trap['vlan'])

        clusto.SESSION.clusto_description = 'SNMP update MAC and connections on %s' % server.name
        clusto.commit()
    except:
        log.error(format_exc())
        clusto.rollback_transaction()

    log.debug(repr(trap))
예제 #54
0
파일: driver.py 프로젝트: wt/clusto
    def __init__(self, name_driver_entity, **kwargs):

        if not isinstance(name_driver_entity, (str, unicode, Entity, Driver)):
            raise TypeError("First argument must be a string, "
                            "Driver, or Entity.")

        if isinstance(name_driver_entity, Driver):
            return

        if isinstance(name_driver_entity, Entity):

            self.entity = name_driver_entity
            self._choose_best_driver()
            return
        elif isinstance(name_driver_entity, (str, unicode)):

            try:
                existing = clusto.get_by_name(name_driver_entity)
            except LookupError, x:
                existing = None

            if existing:
                raise NameException("Driver with the name %s already exists."
                                    % (name_driver_entity))


            self.entity = Entity(name_driver_entity,
                                 driver=self._driver_name,
                                 clustotype=self._clusto_type)
예제 #55
0
파일: pool.py 프로젝트: daonb/clusto
 def _get_pool(self, pool):
     p = clusto.get_by_name(pool)
     self.debug('%s is %s' % (pool, p))
     if not p or not isinstance(p, clusto.drivers.pool.Pool):
         self.error('The pool "%s" does not exist or is not a pool')
         return False
     return p
예제 #56
0
    def testAllocateGivenName(self):

        ngen = clusto.get_by_name('foonamegen')

        d = ngen.allocate(Driver, 'testname')

        self.assertEqual(d.name, 'testname')
예제 #57
0
파일: pooltests.py 프로젝트: egon010/clusto
    def testPoolsIterator(self):

        
        A = Pool('A')

        d1, d2 = [clusto.get_by_name(i) for i in ['d1', 'd2']]

        B = Pool('B')
        C = Pool('C')
        A1 = Pool('A1')
        B2 = Pool('B2')
        B1 = Pool('B1')
        C1 = Pool('C1')

        C1.insert(C)
        B1.insert(B)
        A1.insert(B)

        A1.insert(A)
        B2.insert(A)

        A.insert(d1)
        B.insert(d1)
        C.insert(d1)

        clusto.flush()

        self.assertEqual([x.name for x in Pool.get_pools(d1)],
                         [u'A', u'B', u'C', u'A1', u'B2', u'B1', u'A1', u'C1'])

        self.assertEqual([x.name for x in Pool.get_pools(d1, allPools=False)],
                         [u'A', u'B', u'C'])
예제 #58
0
파일: list_pool.py 프로젝트: verma7/clusto
    def run(self, args):
        serverset = None
        for pool in args.pool:
            pool = clusto.get_by_name(pool)
            contents = pool.contents(search_children=args.recursive)
            if args.type:
                contents = [x for x in contents if x.type == args.type]
            contents = set(contents)

            if serverset is None:
                serverset = contents
            else:
                serverset = serverset.intersection(pool)

        for server in serverset:
            if args.names:
                print server.name
            else:
                try:
                    ip = server.get_ips()
                    ip.sort(key=lambda x: IP(x))
                except Exception, e:
                    self.debug(e)
                    ip = None

                if ip:
                    print ' '.join(ip)
                else:
                    print server.name