<s> '''<STR_LIT>''' <EOL> from __future__ import absolute_import <EOL> import logging <EOL> import salt . ext . six as six <EOL> if six . PY3 : <EOL> import ipaddress <EOL> else : <EOL> import salt . ext . ipaddress as ipaddress <EOL> def long_range ( start , end ) : <EOL> while start < end : <EOL> yield start <EOL> start += <NUM_LIT:1> <EOL> import salt . utils <EOL> log = logging . getLogger ( __name__ ) <EOL> _IPSET_FAMILIES = { <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> } <EOL> _IPSET_SET_TYPES = [ <EOL> '<STR_LIT>' , <EOL> '<STR_LIT>' , <EOL> '<STR_LIT>' , <EOL> '<STR_LIT>' , <EOL> '<STR_LIT>' , <EOL> '<STR_LIT>' , <EOL> '<STR_LIT>' , <EOL> '<STR_LIT>' , <EOL> '<STR_LIT>' , <EOL> '<STR_LIT>' , <EOL> '<STR_LIT>' , <EOL> '<STR_LIT>' , <EOL> '<STR_LIT>' <EOL> ] <EOL> _CREATE_OPTIONS = { <EOL> '<STR_LIT>' : [ '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' ] , <EOL> '<STR_LIT>' : [ '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' ] , <EOL> '<STR_LIT>' : [ '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' ] , <EOL> '<STR_LIT>' : [ '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' ] , <EOL> '<STR_LIT>' : [ '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' ] , <EOL> '<STR_LIT>' : [ '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' ] , <EOL> '<STR_LIT>' : [ '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' ] , <EOL> '<STR_LIT>' : [ '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' ] , <EOL> '<STR_LIT>' : [ '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' ] , <EOL> '<STR_LIT>' : [ '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' ] , <EOL> '<STR_LIT>' : [ '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' ] , <EOL> '<STR_LIT>' : [ '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' ] , <EOL> '<STR_LIT>' : [ '<STR_LIT:size>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' ] , <EOL> } <EOL> _CREATE_OPTIONS_REQUIRED = { <EOL> '<STR_LIT>' : [ '<STR_LIT>' ] , <EOL> '<STR_LIT>' : [ '<STR_LIT>' ] , <EOL> '<STR_LIT>' : [ '<STR_LIT>' ] , <EOL> '<STR_LIT>' : [ ] , <EOL> '<STR_LIT>' : [ ] , <EOL> '<STR_LIT>' : [ ] , <EOL> '<STR_LIT>' : [ ] , <EOL> '<STR_LIT>' : [ ] , <EOL> '<STR_LIT>' : [ ] , <EOL> '<STR_LIT>' : [ ] , <EOL> '<STR_LIT>' : [ ] , <EOL> '<STR_LIT>' : [ ] , <EOL> '<STR_LIT>' : [ ] <EOL> } <EOL> _ADD_OPTIONS = { <EOL> '<STR_LIT>' : [ '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' ] , <EOL> '<STR_LIT>' : [ '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' ] , <EOL> '<STR_LIT>' : [ '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' ] , <EOL> '<STR_LIT>' : [ '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' ] , <EOL> '<STR_LIT>' : [ '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' ] , <EOL> '<STR_LIT>' : [ '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' ] , <EOL> '<STR_LIT>' : [ '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' ] , <EOL> '<STR_LIT>' : [ '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' ] , <EOL> '<STR_LIT>' : [ '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' ] , <EOL> '<STR_LIT>' : [ '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' ] , <EOL> '<STR_LIT>' : [ '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' ] , <EOL> '<STR_LIT>' : [ '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' ] , <EOL> '<STR_LIT>' : [ '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' ] , <EOL> } <EOL> def __virtual__ ( ) : <EOL> '''<STR_LIT>''' <EOL> if salt . utils . which ( '<STR_LIT>' ) : <EOL> return True <EOL> return ( False , '<STR_LIT>' ) <EOL> def _ipset_cmd ( ) : <EOL> '''<STR_LIT>''' <EOL> return salt . utils . which ( '<STR_LIT>' ) <EOL> def version ( ) : <EOL> '''<STR_LIT>''' <EOL> cmd = '<STR_LIT>' . format ( _ipset_cmd ( ) ) <EOL> out = __salt__ [ '<STR_LIT>' ] ( cmd ) . split ( ) <EOL> return out [ <NUM_LIT:1> ] <EOL> def new_set ( set = None , set_type = None , family = '<STR_LIT>' , comment = False , ** kwargs ) : <EOL> '''<STR_LIT>''' <EOL> ipset_family = _IPSET_FAMILIES [ family ] <EOL> if not set : <EOL> return '<STR_LIT>' <EOL> if not set_type : <EOL> return '<STR_LIT>' <EOL> if set_type not in _IPSET_SET_TYPES : <EOL> return '<STR_LIT>' <EOL> for item in _CREATE_OPTIONS_REQUIRED [ set_type ] : <EOL> if item not in kwargs : <EOL> return '<STR_LIT>' . format ( item ) <EOL> cmd = '<STR_LIT>' . format ( _ipset_cmd ( ) , set , set_type ) <EOL> for item in _CREATE_OPTIONS [ set_type ] : <EOL> if item in kwargs : <EOL> cmd = '<STR_LIT>' . format ( cmd , item , kwargs [ item ] ) <EOL> if '<STR_LIT>' in _CREATE_OPTIONS [ set_type ] : <EOL> cmd = '<STR_LIT>' . format ( cmd , ipset_family ) <EOL> if comment : <EOL> cmd = '<STR_LIT>' . format ( cmd ) <EOL> out = __salt__ [ '<STR_LIT>' ] ( cmd , python_shell = False ) <EOL> if not out : <EOL> out = True <EOL> return out <EOL> def delete_set ( set = None , family = '<STR_LIT>' ) : <EOL> '''<STR_LIT>''' <EOL> if not set : <EOL> return '<STR_LIT>' <EOL> cmd = '<STR_LIT>' . format ( _ipset_cmd ( ) , set ) <EOL> out = __salt__ [ '<STR_LIT>' ] ( cmd , python_shell = False ) <EOL> if not out : <EOL> out = True <EOL> return out <EOL> def rename_set ( set = None , new_set = None , family = '<STR_LIT>' ) : <EOL> '''<STR_LIT>''' <EOL> if not set : <EOL> return '<STR_LIT>' <EOL> if not new_set : <EOL> return '<STR_LIT>' <EOL> settype = _find_set_type ( set ) <EOL> if not settype : <EOL> return '<STR_LIT>' <EOL> settype = _find_set_type ( new_set ) <EOL> if settype : <EOL> return '<STR_LIT>' <EOL> cmd = '<STR_LIT>' . format ( _ipset_cmd ( ) , set , new_set ) <EOL> out = __salt__ [ '<STR_LIT>' ] ( cmd , python_shell = False ) <EOL> if not out : <EOL> out = True <EOL> return out <EOL> def list_sets ( family = '<STR_LIT>' ) : <EOL> '''<STR_LIT>''' <EOL> cmd = '<STR_LIT>' . format ( _ipset_cmd ( ) ) <EOL> out = __salt__ [ '<STR_LIT>' ] ( cmd , python_shell = False ) <EOL> _tmp = out . split ( '<STR_LIT:\n>' ) <EOL> count = <NUM_LIT:0> <EOL> sets = [ ] <EOL> sets . append ( { } ) <EOL> for item in _tmp : <EOL> if len ( item ) == <NUM_LIT:0> : <EOL> count = count + <NUM_LIT:1> <EOL> sets . append ( { } ) <EOL> continue <EOL> key , value = item . split ( '<STR_LIT::>' , <NUM_LIT:1> ) <EOL> sets [ count ] [ key ] = value [ <NUM_LIT:1> : ] <EOL> return sets <EOL> def check_set ( set = None , family = '<STR_LIT>' ) : <EOL> '''<STR_LIT>''' <EOL> if not set : <EOL> return '<STR_LIT>' <EOL> setinfo = _find_set_info ( set ) <EOL> if not setinfo : <EOL> return False <EOL> return True <EOL> def add ( set = None , entry = None , family = '<STR_LIT>' , ** kwargs ) : <EOL> '''<STR_LIT>''' <EOL> if not set : <EOL> return '<STR_LIT>' <EOL> if not entry : <EOL> return '<STR_LIT>' <EOL> setinfo = _find_set_info ( set ) <EOL> if not setinfo : <EOL> return '<STR_LIT>' . format ( set ) <EOL> settype = setinfo [ '<STR_LIT>' ] <EOL> cmd = '<STR_LIT>' . format ( entry ) <EOL> if '<STR_LIT>' in kwargs : <EOL> if '<STR_LIT>' not in setinfo [ '<STR_LIT>' ] : <EOL> return '<STR_LIT>' . format ( set ) <EOL> if '<STR_LIT>' in kwargs or '<STR_LIT>' in kwargs : <EOL> if '<STR_LIT>' not in setinfo [ '<STR_LIT>' ] : <EOL> return '<STR_LIT>' . format ( set ) <EOL> if '<STR_LIT>' in kwargs : <EOL> if '<STR_LIT>' not in setinfo [ '<STR_LIT>' ] : <EOL> return '<STR_LIT>' . format ( set ) <EOL> cmd = '<STR_LIT>' . format ( cmd , kwargs [ '<STR_LIT>' ] ) <EOL> for item in _ADD_OPTIONS [ settype ] : <EOL> if item in kwargs : <EOL> cmd = '<STR_LIT>' . format ( cmd , item , kwargs [ item ] ) <EOL> current_members = _find_set_members ( set ) <EOL> if cmd in current_members : <EOL> return '<STR_LIT>' . format ( cmd , set ) <EOL> cmd = '<STR_LIT>' . format ( _ipset_cmd ( ) , set , cmd ) <EOL> out = __salt__ [ '<STR_LIT>' ] ( cmd , python_shell = False ) <EOL> if len ( out ) == <NUM_LIT:0> : <EOL> return '<STR_LIT>' <EOL> return '<STR_LIT>' . format ( out ) <EOL> def delete ( set = None , entry = None , family = '<STR_LIT>' , ** kwargs ) : <EOL> '''<STR_LIT>''' <EOL> if not set : <EOL> return '<STR_LIT>' <EOL> if not entry : <EOL> return '<STR_LIT>' <EOL> settype = _find_set_type ( set ) <EOL> if not settype : <EOL> return '<STR_LIT>' . format ( set ) <EOL> cmd = '<STR_LIT>' . format ( _ipset_cmd ( ) , set , entry ) <EOL> out = __salt__ [ '<STR_LIT>' ] ( cmd , python_shell = False ) <EOL> if len ( out ) == <NUM_LIT:0> : <EOL> return '<STR_LIT>' <EOL> return '<STR_LIT>' . format ( out ) <EOL> def check ( set = None , entry = None , family = '<STR_LIT>' ) : <EOL> '''<STR_LIT>''' <EOL> if not set : <EOL> return '<STR_LIT>' <EOL> if not entry : <EOL> return '<STR_LIT>' <EOL> settype = _find_set_type ( set ) <EOL> if not settype : <EOL> return '<STR_LIT>' . format ( set ) <EOL> if isinstance ( entry , list ) : <EOL> entries = entry <EOL> else : <EOL> _entry = entry . split ( ) [ <NUM_LIT:0> ] <EOL> _entry_extra = entry . split ( ) [ <NUM_LIT:1> : ] <EOL> if _entry . find ( '<STR_LIT:->' ) != - <NUM_LIT:1> and _entry . count ( '<STR_LIT:->' ) == <NUM_LIT:1> : <EOL> start , end = _entry . split ( '<STR_LIT:->' ) <EOL> if settype == '<STR_LIT>' : <EOL> if _entry_extra : <EOL> entries = [ '<STR_LIT:U+0020>' . join ( [ str ( ipaddress . ip_address ( ip ) ) , '<STR_LIT:U+0020>' . join ( _entry_extra ) ] ) for ip in long_range ( <EOL> ipaddress . ip_address ( start ) , <EOL> ipaddress . ip_address ( end ) + <NUM_LIT:1> <EOL> ) ] <EOL> else : <EOL> entries = [ '<STR_LIT:U+0020>' . join ( [ str ( ipaddress . ip_address ( ip ) ) ] ) for ip in long_range ( <EOL> ipaddress . ip_address ( start ) , <EOL> ipaddress . ip_address ( end ) + <NUM_LIT:1> <EOL> ) ] <EOL> elif settype == '<STR_LIT>' : <EOL> networks = ipaddress . summarize_address_range ( ipaddress . ip_address ( start ) , <EOL> ipaddress . ip_address ( end ) ) <EOL> entries = [ ] <EOL> for network in networks : <EOL> _network = [ str ( ip ) for ip in ipaddress . ip_network ( network ) ] <EOL> if len ( _network ) == <NUM_LIT:1> : <EOL> if _entry_extra : <EOL> __network = '<STR_LIT:U+0020>' . join ( [ str ( _network [ <NUM_LIT:0> ] ) , '<STR_LIT:U+0020>' . join ( _entry_extra ) ] ) <EOL> else : <EOL> __network = '<STR_LIT:U+0020>' . join ( [ str ( _network [ <NUM_LIT:0> ] ) ] ) <EOL> else : <EOL> if _entry_extra : <EOL> __network = '<STR_LIT:U+0020>' . join ( [ str ( network ) , '<STR_LIT:U+0020>' . join ( _entry_extra ) ] ) <EOL> else : <EOL> __network = '<STR_LIT:U+0020>' . join ( [ str ( network ) ] ) <EOL> entries . append ( __network ) <EOL> else : <EOL> entries = [ entry ] <EOL> elif _entry . find ( '<STR_LIT:/>' ) != - <NUM_LIT:1> and _entry . count ( '<STR_LIT:/>' ) == <NUM_LIT:1> : <EOL> if settype == '<STR_LIT>' : <EOL> if _entry_extra : <EOL> entries = [ '<STR_LIT:U+0020>' . join ( [ str ( ip ) , '<STR_LIT:U+0020>' . join ( _entry_extra ) ] ) for ip in ipaddress . ip_network ( _entry ) ] <EOL> else : <EOL> entries = [ '<STR_LIT:U+0020>' . join ( [ str ( ip ) ] ) for ip in ipaddress . ip_network ( _entry ) ] <EOL> elif settype == '<STR_LIT>' : <EOL> _entries = [ str ( ip ) for ip in ipaddress . ip_network ( _entry ) ] <EOL> if len ( _entries ) == <NUM_LIT:1> : <EOL> if _entry_extra : <EOL> entries = [ '<STR_LIT:U+0020>' . join ( [ _entries [ <NUM_LIT:0> ] , '<STR_LIT:U+0020>' . join ( _entry_extra ) ] ) ] <EOL> else : <EOL> entries = [ '<STR_LIT:U+0020>' . join ( [ _entries [ <NUM_LIT:0> ] ] ) ] <EOL> else : <EOL> entries = [ entry ] <EOL> else : <EOL> entries = [ entry ] <EOL> else : <EOL> entries = [ entry ] <EOL> current_members = _find_set_members ( set ) <EOL> for entry in entries : <EOL> if entry not in current_members : <EOL> return False <EOL> return True <EOL> def test ( set = None , entry = None , family = '<STR_LIT>' , ** kwargs ) : <EOL> '''<STR_LIT>''' <EOL> if not set : <EOL> return '<STR_LIT>' <EOL> if not entry : <EOL> return '<STR_LIT>' <EOL> settype = _find_set_type ( set ) <EOL> if not settype : <EOL> return '<STR_LIT>' . format ( set ) <EOL> cmd = '<STR_LIT>' . format ( _ipset_cmd ( ) , set , entry ) <EOL> out = __salt__ [ '<STR_LIT>' ] ( cmd , python_shell = False ) <EOL> if out [ '<STR_LIT>' ] > <NUM_LIT:0> : <EOL> return False <EOL> return True <EOL> def flush ( set = None , family = '<STR_LIT>' ) : <EOL> '''<STR_LIT>''' <EOL> settype = _find_set_type ( set ) <EOL> if not settype : <EOL> return '<STR_LIT>' . format ( set ) <EOL> ipset_family = _IPSET_FAMILIES [ family ] <EOL> if set : <EOL> cmd = '<STR_LIT>' . format ( _ipset_cmd ( ) , set ) <EOL> else : <EOL> cmd = '<STR_LIT>' . format ( _ipset_cmd ( ) ) <EOL> out = __salt__ [ '<STR_LIT>' ] ( cmd , python_shell = False ) <EOL> if len ( out ) == <NUM_LIT:0> : <EOL> return True <EOL> else : <EOL> return False <EOL> def _find_set_members ( set ) : <EOL> '''<STR_LIT>''' <EOL> cmd = '<STR_LIT>' . format ( _ipset_cmd ( ) , set ) <EOL> out = __salt__ [ '<STR_LIT>' ] ( cmd , python_shell = False ) <EOL> if out [ '<STR_LIT>' ] > <NUM_LIT:0> : <EOL> return False <EOL> _tmp = out [ '<STR_LIT>' ] . split ( '<STR_LIT:\n>' ) <EOL> members = [ ] <EOL> startMembers = False <EOL> for i in _tmp : <EOL> if startMembers : <EOL> members . append ( i ) <EOL> if '<STR_LIT>' in i : <EOL> startMembers = True <EOL> return members <EOL> def _find_set_info ( set ) : <EOL> '''<STR_LIT>''' <EOL> cmd = '<STR_LIT>' . format ( _ipset_cmd ( ) , set ) <EOL> out = __salt__ [ '<STR_LIT>' ] ( cmd , python_shell = False ) <EOL> if out [ '<STR_LIT>' ] > <NUM_LIT:0> : <EOL> return False <EOL> setinfo = { } <EOL> _tmp = out [ '<STR_LIT>' ] . split ( '<STR_LIT:\n>' ) <EOL> for item in _tmp : <EOL> if '<STR_LIT::>' in item : <EOL> key , value = item . split ( '<STR_LIT::>' , <NUM_LIT:1> ) <EOL> setinfo [ key ] = value [ <NUM_LIT:1> : ] <EOL> return setinfo <EOL> def _find_set_type ( set ) : <EOL> '''<STR_LIT>''' <EOL> setinfo = _find_set_info ( set ) <EOL> if setinfo : <EOL> return setinfo [ '<STR_LIT>' ] <EOL> else : <EOL> return False </s>
