@ -26,7 +26,8 @@ NET_COMMON_ARGS = dict(
authorize = dict ( default = False , type = ' bool ' ) ,
auth_pass = dict ( no_log = True ) ,
transport = dict ( choices = [ ' cli ' , ' eapi ' ] ) ,
use_ssl = dict ( default = True , type = ' bool ' )
use_ssl = dict ( default = True , type = ' bool ' ) ,
provider = dict ( )
)
def to_list ( val ) :
@ -129,10 +130,10 @@ class Cli(object):
def send ( self , commands , encoding = ' text ' ) :
return self . shell . send ( commands )
class Eos Module( AnsibleModule ) :
class Network Module( AnsibleModule ) :
def __init__ ( self , * args , * * kwargs ) :
super ( Eos Module, self ) . __init__ ( * args , * * kwargs )
super ( Network Module, self ) . __init__ ( * args , * * kwargs )
self . connection = None
self . _config = None
@ -142,6 +143,14 @@ class EosModule(AnsibleModule):
self . _config = self . get_config ( )
return self . _config
def _load_params ( self ) :
params = super ( NetworkModule , self ) . _load_params ( )
provider = params . get ( ' provider ' ) or dict ( )
for key , value in provider . items ( ) :
if key in NET_COMMON_ARGS . keys ( ) :
params [ key ] = value
return params
def connect ( self ) :
if self . params [ ' transport ' ] == ' eapi ' :
self . connection = Eapi ( self )
@ -163,8 +172,18 @@ class EosModule(AnsibleModule):
commands . insert ( 0 , ' configure terminal ' )
responses = self . execute ( commands )
responses . pop ( 0 )
return responses
def config_replace ( self , commands ) :
if self . params [ ' transport ' ] == ' cli ' :
self . fail_json ( msg = ' config replace only supported over eapi ' )
cmd = ' configure replace terminal: '
commands = ' \n ' . join ( to_list ( commands ) )
command = dict ( cmd = cmd , input = commands )
self . execute ( command )
def execute ( self , commands , * * kwargs ) :
try :
return self . connection . send ( commands , * * kwargs )
@ -189,26 +208,19 @@ class EosModule(AnsibleModule):
def get_module ( * * kwargs ) :
""" Return instance of Eos Module
""" Return instance of Network Module
"""
argument_spec = NET_COMMON_ARGS . copy ( )
if kwargs . get ( ' argument_spec ' ) :
argument_spec . update ( kwargs [ ' argument_spec ' ] )
kwargs [ ' argument_spec ' ] = argument_spec
kwargs [ ' check_invalid_arguments ' ] = False
module = Eos Module( * * kwargs )
module = Network Module( * * kwargs )
# HAS_PARAMIKO is set by module_utils/shell.py
if module . params [ ' transport ' ] == ' cli ' and not HAS_PARAMIKO :
module . fail_json ( msg = ' paramiko is required but does not appear to be installed ' )
# copy in values from local action.
params = json_dict_unicode_to_bytes ( json . loads ( MODULE_COMPLEX_ARGS ) )
for key , value in params . iteritems ( ) :
module . params [ key ] = value
module . connect ( )
return module