Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

# 

# (c) 2016 Red Hat Inc. 

# 

# This file is part of Ansible 

# 

# Ansible is free software: you can redistribute it and/or modify 

# it under the terms of the GNU General Public License as published by 

# the Free Software Foundation, either version 3 of the License, or 

# (at your option) any later version. 

# 

# Ansible is distributed in the hope that it will be useful, 

# but WITHOUT ANY WARRANTY; without even the implied warranty of 

# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 

# GNU General Public License for more details. 

# 

# You should have received a copy of the GNU General Public License 

# along with Ansible. If not, see <http://www.gnu.org/licenses/>. 

# 

from __future__ import (absolute_import, division, print_function) 

__metaclass__ = type 

 

import sys 

import copy 

 

from ansible import constants as C 

from ansible.module_utils._text import to_text 

from ansible.module_utils.connection import Connection 

from ansible.plugins.action.normal import ActionModule as _ActionModule 

from ansible.module_utils.network.common.utils import load_provider 

from ansible.module_utils.network.nxos.nxos import nxos_provider_spec 

 

try: 

from __main__ import display 

except ImportError: 

from ansible.utils.display import Display 

display = Display() 

 

 

class ActionModule(_ActionModule): 

 

def run(self, tmp=None, task_vars=None): 

del tmp # tmp no longer has any effect 

 

socket_path = None 

 

if self._play_context.connection == 'network_cli': 

provider = self._task.args.get('provider', {}) 

48 ↛ 49line 48 didn't jump to line 49, because the condition on line 48 was never true if any(provider.values()): 

display.warning('provider is unnecessary when using network_cli and will be ignored') 

50 ↛ 82line 50 didn't jump to line 82, because the condition on line 50 was never false elif self._play_context.connection == 'local': 

provider = load_provider(nxos_provider_spec, self._task.args) 

transport = provider['transport'] or 'cli' 

 

display.vvvv('connection transport is %s' % transport, self._play_context.remote_addr) 

 

if transport == 'cli': 

pc = copy.deepcopy(self._play_context) 

pc.connection = 'network_cli' 

pc.network_os = 'nxos' 

pc.remote_addr = provider['host'] or self._play_context.remote_addr 

pc.port = int(provider['port'] or self._play_context.port or 22) 

pc.remote_user = provider['username'] or self._play_context.connection_user 

pc.password = provider['password'] or self._play_context.password 

pc.private_key_file = provider['ssh_keyfile'] or self._play_context.private_key_file 

pc.timeout = int(provider['timeout'] or C.PERSISTENT_COMMAND_TIMEOUT) 

 

display.vvv('using connection plugin %s (was local)' % pc.connection, pc.remote_addr) 

connection = self._shared_loader_obj.connection_loader.get('persistent', pc, sys.stdin) 

 

socket_path = connection.run() 

display.vvvv('socket_path: %s' % socket_path, pc.remote_addr) 

72 ↛ 73line 72 didn't jump to line 73, because the condition on line 72 was never true if not socket_path: 

return {'failed': True, 

'msg': 'unable to open shell. Please see: ' + 

'https://docs.ansible.com/ansible/network_debug_troubleshooting.html#unable-to-open-shell'} 

 

task_vars['ansible_socket'] = socket_path 

 

else: 

self._task.args['provider'] = ActionModule.nxapi_implementation(provider, self._play_context) 

else: 

return {'failed': True, 'msg': 'Connection type %s is not valid for this module' % self._play_context.connection} 

 

if (self._play_context.connection == 'local' and transport == 'cli') or self._play_context.connection == 'network_cli': 

# make sure we are in the right cli context which should be 

# enable mode and not config module 

if socket_path is None: 

socket_path = self._connection.socket_path 

 

conn = Connection(socket_path) 

out = conn.get_prompt() 

92 ↛ 93line 92 didn't jump to line 93, because the condition on line 92 was never true while to_text(out, errors='surrogate_then_replace').strip().endswith(')#'): 

display.vvvv('wrong context, sending exit to device', self._play_context.remote_addr) 

conn.send_command('exit') 

out = conn.get_prompt() 

 

result = super(ActionModule, self).run(task_vars=task_vars) 

return result 

 

@staticmethod 

def nxapi_implementation(provider, play_context): 

provider['transport'] = 'nxapi' 

103 ↛ 106line 103 didn't jump to line 106, because the condition on line 103 was never false if provider.get('host') is None: 

provider['host'] = play_context.remote_addr 

 

106 ↛ 112line 106 didn't jump to line 112, because the condition on line 106 was never false if provider.get('port') is None: 

107 ↛ 108line 107 didn't jump to line 108, because the condition on line 107 was never true if provider.get('use_ssl'): 

provider['port'] = 443 

else: 

provider['port'] = 80 

 

112 ↛ 115line 112 didn't jump to line 115, because the condition on line 112 was never false if provider.get('timeout') is None: 

provider['timeout'] = C.PERSISTENT_COMMAND_TIMEOUT 

 

115 ↛ 118line 115 didn't jump to line 118, because the condition on line 115 was never false if provider.get('username') is None: 

provider['username'] = play_context.connection_user 

 

118 ↛ 121line 118 didn't jump to line 121, because the condition on line 118 was never false if provider.get('password') is None: 

provider['password'] = play_context.password 

 

121 ↛ 124line 121 didn't jump to line 124, because the condition on line 121 was never false if provider.get('use_ssl') is None: 

provider['use_ssl'] = False 

 

124 ↛ 127line 124 didn't jump to line 127, because the condition on line 124 was never false if provider.get('validate_certs') is None: 

provider['validate_certs'] = True 

 

return provider