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']))
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']))
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)
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)