def destroy_myself(mgr_or_client, **kwargs):
    skip_fip = kwargs.pop('skip_fip',
                          kwargs.pop('skip_floatingip', False))
    force_rm_fip = kwargs.pop('force_rm_fip', False)
    if force_rm_fip:
        skip_fip = False
    spattern = mdata.get_name_search_pattern(**kwargs)
    net_client = Q._g_neutron_client(mgr_or_client)
    tenant_id = kwargs.pop('tenant_id', net_client.tenant_id)
    # rm floatingips: be aware that VMs' might have FIP attached
    # if fail, caller of d_myself should sleep then retry again
    if not skip_fip:
        # TODO(akang): no name attributes in floatingip
        # for now, delete fip if it is not ACTIVE status
        for fip in Q.floatingip_list(mgr_or_client, tenant_id=tenant_id):
            if force_rm_fip or fip['status'] != 'ACTIVE':
                Q.floatingip_delete(mgr_or_client, fip['id'])
    # rm routers
    routers = Q.router_list(mgr_or_client, tenant_id=tenant_id)
    for router in routers:
        if mdata.is_in_spattern(router['name'], spattern):
            delete_this_router(mgr_or_client, router)
    # rm networks/subnets
    for network in Q.network_list(mgr_or_client, tenant_id=tenant_id):
        if mdata.is_in_spattern(network['name'], spattern):
            # TODO(akang): if ports assoc to net, delete them first
            # look for network's subnet which is in port
            Q.network_delete(mgr_or_client, network['id'])

    for sg in Q.security_group_list(mgr_or_client, tenant_id=tenant_id):
        if (mdata.is_in_spattern(sg['name'], spattern) and
                sg['name'] not in ['default']):
            Q.security_group_delete(mgr_or_client, sg['id'])
def destroy_all_servers(mgr_or_client, **kwargs):
    spattern = mdata.get_name_search_pattern(**kwargs)
    for s in list_all_servers(mgr_or_client):
        if mdata.is_in_spattern(s['name'], spattern):
            server_delete(mgr_or_client, s['id'])
def destroy_my_servers(mgr_or_client, **kwargs):
    spattern = mdata.get_name_search_pattern(**kwargs)
    for s in server_list(mgr_or_client):
        # if spattern not provided, default is True
        if mdata.is_in_spattern(s['name'], spattern):
            server_delete(mgr_or_client, s['id'])