@ -28,7 +28,11 @@
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
# USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
import re
from ansible . module_utils . _text import to_text
from ansible . module_utils . basic import env_fallback , return_values
from ansible . module_utils . network import NetworkError
from ansible . module_utils . network_common import to_list , ComplexList
from ansible . module_utils . connection import exec_command
@ -44,18 +48,19 @@ sros_argument_spec = {
' provider ' : dict ( type = ' dict ' )
}
def check_args ( module , warnings ) :
provider = module . params [ ' provider ' ] or { }
for key in sros_argument_spec :
if key != ' provider ' and module . params [ key ] :
warnings . append ( ' argument %s has been deprecated and will be '
' removed in a future version ' % key )
warnings . append ( ' argument %s has been deprecated and will be removed in a future version ' % key )
if provider :
for param in ( ' password ' , ) :
if provider . get ( param ) :
module . no_log_values . update ( return_values ( provider [ param ] ) )
def get_config ( module , flags = [ ] ) :
cmd = ' admin display-config '
cmd + = ' ' . join ( flags )
@ -66,11 +71,12 @@ def get_config(module, flags=[]):
except KeyError :
rc , out , err = exec_command ( module , cmd )
if rc != 0 :
module . fail_json ( msg = ' unable to retrieve current config ' , stderr = err)
cfg = str ( out ) . strip ( )
module . fail_json ( msg = ' unable to retrieve current config ' , stderr = to_text( err, errors = ' surrogate_or_strict ' ) )
cfg = to_text ( out , errors = ' surrogate_or_strict ' ) . strip ( )
_DEVICE_CONFIGS [ cmd ] = cfg
return cfg
def to_commands ( module , commands ) :
spec = {
' command ' : dict ( key = True ) ,
@ -88,38 +94,14 @@ def run_commands(module, commands, check_rc=True):
cmd = module . jsonify ( cmd )
rc , out , err = exec_command ( module , cmd )
if check_rc and rc != 0 :
module . fail_json ( msg = err, rc = rc )
responses . append ( out)
module . fail_json ( msg = to_text( err, errors = ' surrogate_or_strict ' ) , rc = rc )
responses . append ( to_text( out, errors = ' surrogate_or_strict ' ) )
return responses
def load_config ( module , commands ) :
for command in to_list ( commands ) :
rc , out , err = exec_command ( module , command )
if rc != 0 :
module . fail_json ( msg = err, command = command , rc = rc )
module . fail_json ( msg = to_text( err, errors = ' surrogate_or_strict ' ) , command = command , rc = rc )
exec_command ( module , ' exit all ' )
def rollback_enabled ( self ) :
if self . _rollback_enabled is not None :
return self . _rollback_enabled
resp = self . execute ( [ ' show system rollback ' ] )
match = re . search ( r ' ^Rollback Location \ s+: \ s( \ S+) ' , resp [ 0 ] , re . M )
self . _rollback_enabled = match . group ( 1 ) != ' None '
return self . _rollback_enabled
def load_config_w_rollback ( self , commands ) :
if self . rollback_enabled :
self . execute ( [ ' admin rollback save ' ] )
try :
self . configure ( commands )
except NetworkError :
if self . rollback_enabled :
self . execute ( [ ' admin rollback revert latest-rb ' ,
' admin rollback delete latest-rb ' ] )
raise
if self . rollback_enabled :
self . execute ( [ ' admin rollback delete latest-rb ' ] )