@command(api='cyclades')
class network_disconnect(object):
- """Disconnect a server from a network"""
-
- def main(self, server_id, network_id):
- self.client.disconnect_server(server_id, network_id)
+ """Disconnect a nic that connects a server to a network"""
+ def main(self, nic_id):
+ try:
+ server_id = nic_id.split('-')[1]
+ self.client.disconnect_server(server_id, nic_id)
+ except IndexError:
+ print('nid_id format: nic-<server_id>-<nic_index>')
@command(api='image')
class image_public(object):
"""OpenStack Compute API 1.1 client"""
def raise_for_status(self, r):
- d = r.json
- key = d.keys()[0]
- val = d[key]
- message = '%s: %s' % (key, val.get('message', ''))
- details = val.get('details', '')
+ try:
+ d = r.json
+ key = d.keys()[0]
+ val = d[key]
+ message = '%s: %s' % (key, val.get('message', ''))
+ details = val.get('details', '')
+ except AttributeError:
+ message = 'Request responded with error code '+unicode(r.status_code)
+ details = unicode(r.request.method)+' '+unicode(r.url)
raise ClientError(message, r.status_code, details)
def list_servers(self, detail=False):
req = {'firewallProfile': {'profile': profile}}
self.post(path, json=req, success=202)
- def list_server_nic_details(self, server_id, network=None):
+ def list_server_nics(self, server_id):
path = path4url('servers', server_id, 'ips')
- if network:
- path += path4url(network)
r = self.get(path, success=200)
- if network:
- return [r.json['network']]
- else:
- return r.json['attachments']['values']
+ return r.json['addresses']['values']
def get_server_stats(self, server_id):
path = path4url('servers', server_id, 'stats')
req = {'add': {'serverRef': server_id}}
self.post(path, json=req, success=202)
- def disconnect_server(self, server_id, network_id):
- matched_nets = [net for net in self.list_server_nic_details(server_id) if net['network_id'] == network_id]
- path = path4url('networks', network_id, 'action')
- for nic in matched_nets:
- req = {'remove': {'attachment': unicode(nic['id'])}}
+ def disconnect_server(self, server_id, nic_id):
+ server_nets = self.list_server_nics(server_id)
+ nets = [(net['id'],net['network_id']) for net in server_nets if nic_id == net['id']]
+ print('Found:'+unicode(nets))
+ for (nic_id, network_id) in nets:
+ print('\n\n\nNow i am willing to DESTROY nic %s of net %s\n\n\n' % (nic_id, network_id))
+ path = path4url('networks', network_id, 'action')
+ req = dict(remove=dict(attachment=unicode(nic_id)))
self.post(path, json=req, success=202)