随便记录一下好了
#!/usr/bin/env python #################################### #Input: host, user_name and password #Output: Delete Unbond Port #################################### import subprocess import json keystone_port = '5000' neutron_port = '9696' content_type = '-H "Content-type: application/json"' accept = '-H "Accept: application/json"' #Modify by yourself host = '' user_name = '' password = '' tenant_name = 'Project_%s' %user_name def Pipe(cmd): try: proc = subprocess.Popen(cmd, shell = True, stdout = subprocess.PIPE) return proc.communicate()[0] except Exception, e: print('Execute failed, command: %s, error: %s' %(cmd, str(e))) return None def System(cmd): try: s = subprocess.Popen(cmd, shell = True, stdout = None) s.wait() except Exception, e: print('Execute failed, command: %s, error: %s' %(cmd, str(e))) return None class HTTPRESTful(object): ''' HTTP API, curl ''' def __init__(self): print('Now, more public ports for us, congratulations ~!') def get_tenant_id_and_token(self): ''' get tenant_id and token ''' keystone_url = 'http://%s:%s/v2.0/tokens' %(host, keystone_port) keystone_body = '{"auth": {"tenantName": "%s", "passwordCredentials": {"username": "%s", "password": "%s"}}}' %(tenant_name, user_name, password) cmd = "curl -s -X POST %s %s %s -d \'%s\'" %(keystone_url, content_type, accept, keystone_body) token_get = json.loads(Pipe(cmd)) self.token = token_get['access']['token']['id'] self.tenant_id = token_get['access']['token']['tenant']['id'] def get_and_delete_unbond_port(self): ''' get all unbond public port ''' neutron_url = 'http://%s:%s/v2.0/ports?vnetwork=public&tenant_id=%s' %(host, neutron_port, self.tenant_id) x_auth_token = '-H "X-Auth-Token: %s"' %self.token cmd = "curl -s -X GET \'%s\' %s %s" %(neutron_url, accept, x_auth_token) port_list = json.loads(Pipe(cmd))['ports'] print 'Delete Unbond Port From: %s' %user_name print '========================================================================' for port in port_list: if len(port['device_id']) == 0: print 'Delete Unbond Port: %s' %(port['id']) self.delete_port(port['id']) print '========================================================================' def delete_port(self, port_id): ''' delete port ''' neutron_url = 'http://%s:%s/v2.0/ports/%s' %(host, neutron_port, port_id) x_auth_token = '-H "X-Auth-Token: %s"' %self.token cmd = 'curl -s -X DELETE %s %s' %(neutron_url, x_auth_token) System(cmd) if __name__ == '__main__': restful = HTTPRESTful() restful.get_tenant_id_and_token() restful.get_and_delete_unbond_port()