コード例 #1
0
    def testSettingUpServer(self):
        
        from clusto.drivers import SimpleEntityNameManager

        servernames = SimpleEntityNameManager('servernames',
                                              basename='server',
                                              digits=4
                                              )

        newserver = servernames.allocate(BasicServer)
        

        sw = clusto.get_by_name('sw1')
        p1 = clusto.get_by_name('p1')
        r = clusto.get_by_name('r1')

        self.assertEqual('server0001', newserver.name)


        self.assertRaises(TypeError, r.insert, newserver, 1)

        r.insert(newserver,2)
        p1.connect_ports('pwr-nema-5', 1, newserver, 1)
        sw.connect_ports('nic-eth', 1, newserver, 1)
        sw.connect_ports('nic-eth', 3, p1, 1)

        self.assertEqual(BasicRack.get_rack_and_u(newserver)['rack'], r)

        ipman = IPManager('subnet-10.0.0.1', netmask='255.255.255.0', baseip='10.0.0.1')

        newserver.bind_ip_to_osport('10.0.0.2', 'eth0', porttype='nic-eth', portnum=1)

        ipvals = newserver.attrs(value='10.0.0.2')
        self.assertEqual(len(ipvals), 1)

        self.assertEqual(ipvals[0].value, '10.0.0.2')

        self.assertEqual(clusto.get_by_attr('ip', '10.0.0.2'), [newserver])


        aserver = servernames.allocate(BasicServer)

        ipattr = ipman.allocate(aserver)
        
        aserver.bind_ip_to_osport(ipattr.value, 'eth0', porttype='nic-eth', portnum=1)

        ip = aserver.attr_values(ipattr.key, number=ipattr.number, subkey=ipattr.subkey)

        self.assertEqual(aserver.get_port_attr('nic-eth', 1, 'osportname'),
                         'eth0')

        self.assertEqual(len(aserver.attrs(subkey='osportname', value='eth0')),
                         2)

        self.assertEqual(aserver.attrs(IPManager._attr_name,
                                       subkey='ipstring',
                                       number=aserver.attrs(IPManager._attr_name,
                                                            subkey='osportname',
                                                            value='eth0')[0].number,
                                       )[0].value,
                         '10.0.0.1')

        ipattr2 = ipman.allocate(aserver)

        self.assertEqual(sorted(aserver.get_ips()),
                         sorted(['10.0.0.1', '10.0.0.3']))
コード例 #2
0
    def testSettingUpServer(self):

        from clusto.drivers import SimpleEntityNameManager

        servernames = SimpleEntityNameManager('servernames',
                                              basename='server',
                                              digits=4)

        newserver = servernames.allocate(BasicServer)

        sw = clusto.get_by_name('sw1')
        p1 = clusto.get_by_name('p1')
        r = clusto.get_by_name('r1')

        self.assertEqual('server0001', newserver.name)

        self.assertRaises(TypeError, r.insert, newserver, 1)

        r.insert(newserver, 2)
        p1.connect_ports('pwr-nema-5', 1, newserver, 1)
        sw.connect_ports('nic-eth', 1, newserver, 1)
        sw.connect_ports('nic-eth', 3, p1, 1)

        self.assertEqual(BasicRack.get_rack_and_u(newserver)['rack'], r)

        ipman = IPManager('subnet-10.0.0.1',
                          netmask='255.255.255.0',
                          baseip='10.0.0.1')

        newserver.bind_ip_to_osport('10.0.0.2',
                                    'eth0',
                                    porttype='nic-eth',
                                    portnum=1)

        ipvals = newserver.attrs(value='10.0.0.2')
        self.assertEqual(len(ipvals), 1)

        self.assertEqual(ipvals[0].value, '10.0.0.2')

        self.assertEqual(clusto.get_by_attr('ip', '10.0.0.2'), [newserver])

        aserver = servernames.allocate(BasicServer)

        ipattr = ipman.allocate(aserver)

        aserver.bind_ip_to_osport(ipattr.value,
                                  'eth0',
                                  porttype='nic-eth',
                                  portnum=1)

        ip = aserver.attr_values(ipattr.key,
                                 number=ipattr.number,
                                 subkey=ipattr.subkey)

        self.assertEqual(aserver.get_port_attr('nic-eth', 1, 'osportname'),
                         'eth0')

        self.assertEqual(len(aserver.attrs(subkey='osportname', value='eth0')),
                         2)

        self.assertEqual(
            aserver.attrs(
                IPManager._attr_name,
                subkey='ipstring',
                number=aserver.attrs(IPManager._attr_name,
                                     subkey='osportname',
                                     value='eth0')[0].number,
            )[0].value, '10.0.0.1')

        ipattr2 = ipman.allocate(aserver)

        self.assertEqual(sorted(aserver.get_ips()),
                         sorted(['10.0.0.1', '10.0.0.3']))
コード例 #3
0
def get_by_attr():
    """
One of the main ``clusto`` operations. Parameters:

* Required: the ``key`` parameter
* Optional: the ``subkey`` parameter
* Optional: the ``value`` parameter

Examples:

.. code:: bash

    $ ${get} ${server_url}/by-attr
    "Provide a key to use get_by_attr"
    HTTP: 412
    Content-type: application/json

    $ ${get} -d 'key=nonkey' ${server_url}/by-attr
    []
    HTTP: 200
    Content-type: application/json

    $ ${get} -d 'key=key1' -d 'subkey=subkey1' -d 'value=value1' ${server_url}/by-attr
    [
        "/basicserver/testserver1"
    ]
    HTTP: 200
    Content-type: application/json

    $ ${get} -H 'Clusto-Mode: expanded' -d 'key=key1' ${server_url}/by-attr
    [
        {
            "attrs": [
                {
                    "datatype": "string",
                    "key": "key1",
                    "number": null,
                    "subkey": "subkey1",
                    "value": "value1"
                }
            ],
            "contents": [],
            "driver": "basicserver",
            "name": "testserver1",
            "parents": [
                "/pool/singlepool",
                "/pool/multipool"
            ]
        },
        {
            "attrs": [
                {
                    "datatype": "string",
                    "key": "key1",
                    "number": null,
                    "subkey": "subkey2",
                    "value": "value2"
                }
            ],
            "contents": [],
            "driver": "basicserver",
            "name": "testserver2",
            "parents": [
                "/pool/multipool"
            ]
        }
    ]
    HTTP: 200
    Content-type: application/json

"""
    params = ['key', 'subkey', 'value']
    kwargs = {}
    for param in params:
        val = bottle.request.params.get(param)
        if val:
            kwargs[param] = val

    if not kwargs.get('key'):
        return util.dumps('Provide a key to use get_by_attr', 412)

    mode = bottle.request.headers.get('Clusto-Mode', default='compact')
    headers = {
        'Clusto-Minify': bottle.request.headers.get('Clusto-Minify', default='False')
    }

    try:
        ents = clusto.get_by_attr(**kwargs)
        results = []
        for ent in ents:
            results.append(util.show(ent, mode))
        return util.dumps(results, headers=headers)
    except TypeError as te:
        return util.dumps('%s' % (te,), 409)
    except LookupError as le:
        return util.dumps('%s' % (le,), 404)
    except Exception as e:
        return util.dumps('%s' % (e,), 500)
コード例 #4
0
def get_by_attr():
    """
One of the main ``clusto`` operations. Parameters:

* Required: the ``key`` parameter
* Optional: the ``subkey`` parameter
* Optional: the ``value`` parameter

Examples:

.. code:: bash

    $ ${get} ${server_url}/by-attr
    "Provide a key to use get_by_attr"
    HTTP: 412
    Content-type: application/json

    $ ${get} -d 'key=nonkey' ${server_url}/by-attr
    []
    HTTP: 200
    Content-type: application/json

    $ ${get} -d 'key=key1' -d 'subkey=subkey1' -d 'value=value1' ${server_url}/by-attr
    [
        "/basicserver/testserver1"
    ]
    HTTP: 200
    Content-type: application/json

    $ ${get} -H 'Clusto-Mode: expanded' -d 'key=key1' ${server_url}/by-attr
    [
        {
            "attrs": [
                {
                    "datatype": "string",
                    "key": "key1",
                    "number": null,
                    "subkey": "subkey1",
                    "value": "value1"
                }
            ],
            "contents": [],
            "driver": "basicserver",
            "ips": [],
            "name": "testserver1",
            "parents": [
                "/pool/singlepool",
                "/pool/multipool"
            ],
            "type": "server"
        },
        {
            "attrs": [
                {
                    "datatype": "string",
                    "key": "key1",
                    "number": null,
                    "subkey": "subkey2",
                    "value": "value2"
                }
            ],
            "contents": [],
            "driver": "basicserver",
            "ips": [],
            "name": "testserver2",
            "parents": [
                "/pool/multipool"
            ],
            "type": "server"
        }
    ]
    HTTP: 200
    Content-type: application/json

"""
    params = ['key', 'subkey', 'value']
    kwargs = {}
    for param in params:
        val = bottle.request.params.get(param)
        if val:
            kwargs[param] = val

    if not kwargs.get('key'):
        return util.dumps('Provide a key to use get_by_attr', 412)

    mode = bottle.request.headers.get('Clusto-Mode', default='compact')

    try:
        ents = clusto.get_by_attr(**kwargs)
        results = []
        for ent in ents:
            results.append(util.show(ent, mode))
        return util.dumps(results)
    except TypeError as te:
        return util.dumps('%s' % (te,), 409)
    except LookupError as le:
        return util.dumps('%s' % (le,), 404)
    except Exception as e:
        return util.dumps('%s' % (e,), 500)