Lenovo cli bugfixes (#45278)

* To change all CLIs present in the code to latest CNOS CLI. One bug of executing with Lenovo Jakku switch is also getting fixed.

* To change the file names as the commands have changed from display to show

* To change to new CLI in test_cnos_comand.py as well
This commit is contained in:
Anil Kumar Muraleedharan 2018-09-12 20:01:45 +05:30 committed by Nathaniel Case
commit ac58c36ad0
16 changed files with 51 additions and 43 deletions

View file

@ -68,33 +68,37 @@ options:
required: true
port:
description:
- Specifies the port to use when building the connection to the remote device.
- Specifies the port to use when building the connection to the
remote device.
default: 22
username:
description:
- Configures the username to use to authenticate the connection to
the remote device. This value is used to authenticate
the SSH session. If the value is not specified in the task, the
value of environment variable C(ANSIBLE_NET_USERNAME) will be used instead.
value of environment variable C(ANSIBLE_NET_USERNAME) will be used
instead.
password:
description:
- Specifies the password to use to authenticate the connection to
the remote device. This value is used to authenticate
the SSH session. If the value is not specified in the task, the
value of environment variable C(ANSIBLE_NET_PASSWORD) will be used instead.
value of environment variable C(ANSIBLE_NET_PASSWORD) will be used
instead.
timeout:
description:
- Specifies the timeout in seconds for communicating with the network device
for either connecting or sending commands. If the timeout is
exceeded before the operation is completed, the module will error.
- Specifies the timeout in seconds for communicating with the network
device for either connecting or sending commands. If the timeout
is exceeded before the operation is completed, the module will
error.
default: 10
ssh_keyfile:
description:
- Specifies the SSH key to use to authenticate the connection to
the remote device. This value is the path to the
key used to authenticate the SSH session. If the value is not specified
in the task, the value of environment variable C(ANSIBLE_NET_SSH_KEYFILE)
will be used instead.
key used to authenticate the SSH session. If the value is not
specified in the task, the value of environment variable
C(ANSIBLE_NET_SSH_KEYFILE) will be used instead.
gather_subset:
version_added: "2.6"
description:
@ -231,7 +235,7 @@ class FactsBase(object):
class Default(FactsBase):
COMMANDS = ['display sys-info', 'display running-config']
COMMANDS = ['show sys-info', 'show running-config']
def populate(self):
super(Default, self).populate()
@ -297,12 +301,12 @@ class Default(FactsBase):
class Hardware(FactsBase):
COMMANDS = [
'display running-config'
'show running-config'
]
def populate(self):
super(Hardware, self).populate()
data = self.run(['display process memory'])
data = self.run(['show process memory'])
data = to_text(data, errors='surrogate_or_strict').strip()
data = data.replace(r"\n", "\n")
if data:
@ -331,7 +335,7 @@ class Hardware(FactsBase):
class Config(FactsBase):
COMMANDS = ['display running-config']
COMMANDS = ['show running-config']
def populate(self):
super(Config, self).populate()
@ -342,7 +346,7 @@ class Config(FactsBase):
class Interfaces(FactsBase):
COMMANDS = ['display interface brief']
COMMANDS = ['show interface brief']
def populate(self):
super(Interfaces, self).populate()
@ -350,10 +354,10 @@ class Interfaces(FactsBase):
self.facts['all_ipv4_addresses'] = list()
self.facts['all_ipv6_addresses'] = list()
data1 = self.run(['display interface status'])
data1 = self.run(['show interface status'])
data1 = to_text(data1, errors='surrogate_or_strict').strip()
data1 = data1.replace(r"\n", "\n")
data2 = self.run(['display interface mac-address'])
data2 = self.run(['show interface mac-address'])
data2 = to_text(data2, errors='surrogate_or_strict').strip()
data2 = data2.replace(r"\n", "\n")
lines1 = None
@ -364,7 +368,7 @@ class Interfaces(FactsBase):
lines2 = self.parse_interfaces(data2)
if lines1 is not None and lines2 is not None:
self.facts['interfaces'] = self.populate_interfaces(lines1, lines2)
data3 = self.run(['display lldp neighbors'])
data3 = self.run(['show lldp neighbors'])
data3 = to_text(data3, errors='surrogate_or_strict').strip()
data3 = data3.replace(r"\n", "\n")
if data3:
@ -372,9 +376,9 @@ class Interfaces(FactsBase):
if lines3 is not None:
self.facts['neighbors'] = self.populate_neighbors(lines3)
data4 = self.run(['display ip interface brief vrf all'])
data5 = self.run(['display ipv6 interface brief vrf all'])
data4 = to_text(data4, errors='surrogate_or_stdisplay').strip()
data4 = self.run(['show ip interface brief vrf all'])
data5 = self.run(['show ipv6 interface brief vrf all'])
data4 = to_text(data4, errors='surrogate_or_strict').strip()
data4 = data4.replace(r"\n", "\n")
data5 = to_text(data5, errors='surrogate_or_strict').strip()
data5 = data5.replace(r"\n", "\n")
@ -484,14 +488,24 @@ class Interfaces(FactsBase):
def populate_neighbors(self, lines3):
neighbors = dict()
device_name = ''
for line in lines3:
neighborSplit = line.split()
innerData = dict()
innerData['Local Interface'] = neighborSplit[1].strip()
innerData['Hold Time'] = neighborSplit[2].strip()
innerData['Capability'] = neighborSplit[3].strip()
innerData['Remote Port'] = neighborSplit[4].strip()
neighbors[neighborSplit[0].strip()] = innerData
count = len(neighborSplit)
if count == 5:
local_interface = neighborSplit[1].strip()
innerData['Device Name'] = neighborSplit[0].strip()
innerData['Hold Time'] = neighborSplit[2].strip()
innerData['Capability'] = neighborSplit[3].strip()
innerData['Remote Port'] = neighborSplit[4].strip()
neighbors[local_interface] = innerData
elif count == 4:
local_interface = neighborSplit[0].strip()
innerData['Hold Time'] = neighborSplit[1].strip()
innerData['Capability'] = neighborSplit[2].strip()
innerData['Remote Port'] = neighborSplit[3].strip()
neighbors[local_interface] = innerData
return neighbors
def parse_neighbors(self, neighbors):