Skip to content
This repository was archived by the owner on Feb 10, 2018. It is now read-only.

Commit

Permalink
add get_config (#52)
Browse files Browse the repository at this point in the history
Thanks @grizz
  • Loading branch information
grizz authored and mirceaulinic committed Sep 26, 2016
1 parent 658339a commit dcaf134
Show file tree
Hide file tree
Showing 5 changed files with 96 additions and 7 deletions.
1 change: 1 addition & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ script:
- nosetests --with-coverage --cover-package napalm_junos -v TestJunOSDriver:TestGetterJunOSDriver.test_traceroute
- nosetests --with-coverage --cover-package napalm_junos -v TestJunOSDriver:TestGetterJunOSDriver.test_get_users
- nosetests --with-coverage --cover-package napalm_junos -v TestJunOSDriver:TestGetterJunOSDriver.test_get_optics
- nosetests --with-coverage --cover-package napalm_junos -v TestJunOSDriver:TestGetterJunOSDriver.test_get_config
- cd ../..
- coverage combine test/unit/.coverage
after_success: coveralls
23 changes: 23 additions & 0 deletions napalm_junos/junos.py
Original file line number Diff line number Diff line change
Expand Up @@ -1325,3 +1325,26 @@ def get_optics(self):
optics_detail[intf_optic_item[0]] = intf_optics

return optics_detail

def get_config(self, retrieve='all'):
rv = {
'startup': '',
'running': '',
'candidate': ''
}

options = {
'format': 'text',
'database': 'candidate'
}

if retrieve in ('candidate', 'all'):
config = self.device.rpc.get_config(filter_xml=None, options=options)
rv['candidate'] = config.text.encode('ascii', 'replace')

if retrieve in ('running', 'all'):
options['database'] = 'committed'
config = self.device.rpc.get_config(filter_xml=None, options=options)
rv['running'] = config.text.encode('ascii', 'replace')

return rv
21 changes: 14 additions & 7 deletions test/unit/TestJunOSDriver.py
Original file line number Diff line number Diff line change
Expand Up @@ -119,17 +119,24 @@ def response(self, **rpc_args):
'junos/mock_data/{}{}.txt'.format(self.item, instance))
return lxml.etree.fromstring(xml_string)

def get_config(self, get_cmd='', options={}):
def get_config(self, get_cmd=None, filter_xml=None, options={}):

# get_cmd is an XML tree that requests a specific part of the config
# E.g.: <configuration><protocols><bgp><group/></bgp></protocols></configuration>

get_cmd_str = lxml.etree.tostring(get_cmd)
filename = get_cmd_str.replace('<', '_')\
.replace('>', '_')\
.replace('/', '_')\
.replace('\n', '')\
.replace(' ', '')
if get_cmd is not None:
get_cmd_str = lxml.etree.tostring(get_cmd)
filename = get_cmd_str.replace('<', '_')\
.replace('>', '_')\
.replace('/', '_')\
.replace('\n', '')\
.replace(' ', '')

# no get_cmd means it should mock the eznc get_config
else:
filename = 'get_config__' + '__'.join(
['{0}_{1}'.format(k, v) for k, v in options.items()]
)

xml_string = self._device.read_txt_file(
'junos/mock_data/{filename}.txt'.format(
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<configuration>
<system>
<login>
<user>
<name>dummy-test</name>
<uid>1717</uid>
<class>unauthorized</class>
<authentication>
<encrypted-password>$1$waUQAEpO$kSmdRL84F5sCoWKHZ8/kU1</encrypted-password>
<ssh-rsa>
<name>
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC4pFn+shPwTb2yELO4L7NtQrKOJXNeCl1jel9STXVaGnRAnuc2PXl35vnWmcUq6YbUEcgUTRzzXfmelJKuVJTJIlMXii7h2xkbQp0YZIEs4P8ipwnRBAxFfk/ZcDsN3mjep4/yjN56eorF5xs7zP9HbqbJ1dsqk1p3A/9LIL7l6YewLBCwJj6D+fWSJ0/YW+7oH17Fk2HH+tw0L5PcWLHkwA4t60iXn16qDbIk/ze6jv2hDGdCdz7oYQeCE55CCHOHMJWYfN3jcL4s0qv8/u6Ka1FVkV7iMmro7ChThoV/5snI4Ljf2wKqgHH7TfNaCfpU0WvHAnTs8zhOrGScSrtb mircea@master-roshi
</name>
</ssh-rsa>
<ssh-dsa>
<name>
ssh-dss AAAAB3NzaC1kc3MAAACBAIiXYWuYhY7Wyd3E4JYpT/ilm7Q6G/wLlxPgbx4BWRQL8SbVvP/DVLv+1/4aHk4SvPJmYbcGQbx0tz0pHa3YLmGieLQLVZo44K3IvUXaLf7noUKogwDdGVJ6NRxCROo/uUaU9m8mm4vEQkPgkmrRzNHq1B56AvPmTrRFJc5xPewXAAAAFQDiqOM9bw03MbT4jf59lFSlexRiiQAAAIA0ZJ2dNV9IzeWNexsoQfSz2ABx3INnFvjUAMlWZQtIXAqwUhKAvQBFi6vTpWL9nK4nCUvENyHIgX8S8eG2F1+pRFUHILajiJWkb0+0hGXIgE+rtdsdSCbMzggTOnhr4nMuUqedtas7uwGgOkNoEtsC6uSe0iSf3QbGjyrp8423lAAAAIAR0X7xTJCnV25i14SfelgVztVCl44C/E2A9+EBBR2Dp4CEg3cbstf6Z768S2TxOMpWTr7c81zKI6Ij7qLWxiUlTO7yS3ikiBOpEHbihGeHLn01rHcuGh9+SmOFKeIoq6WJHfZQInO/++WLTtwaZgZzIa1mw18SiFlHFeIX0MfYcA== mircea@master-roshi
</name>
</ssh-dsa>
<ssh-ecdsa>
<name>
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBFAvVeQxnECAx/HcSfcLdNqCqsjdm64QfVdxBT15pmvzw4eV2RWibqZTfCNbybM5FsB0/jEb2EH2JND4GCBzxUg= mircea@master-roshi
</name>
</ssh-ecdsa>
</authentication>
</user>
</login>
</system>
</configuration>
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<configuration>
<system>
<login>
<user>
<name>dummy-test</name>
<uid>1717</uid>
<class>unauthorized</class>
<authentication>
<encrypted-password>$1$waUQAEpO$kSmdRL84F5sCoWKHZ8/kU1</encrypted-password>
<ssh-rsa>
<name>
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC4pFn+shPwTb2yELO4L7NtQrKOJXNeCl1jel9STXVaGnRAnuc2PXl35vnWmcUq6YbUEcgUTRzzXfmelJKuVJTJIlMXii7h2xkbQp0YZIEs4P8ipwnRBAxFfk/ZcDsN3mjep4/yjN56eorF5xs7zP9HbqbJ1dsqk1p3A/9LIL7l6YewLBCwJj6D+fWSJ0/YW+7oH17Fk2HH+tw0L5PcWLHkwA4t60iXn16qDbIk/ze6jv2hDGdCdz7oYQeCE55CCHOHMJWYfN3jcL4s0qv8/u6Ka1FVkV7iMmro7ChThoV/5snI4Ljf2wKqgHH7TfNaCfpU0WvHAnTs8zhOrGScSrtb mircea@master-roshi
</name>
</ssh-rsa>
<ssh-dsa>
<name>
ssh-dss AAAAB3NzaC1kc3MAAACBAIiXYWuYhY7Wyd3E4JYpT/ilm7Q6G/wLlxPgbx4BWRQL8SbVvP/DVLv+1/4aHk4SvPJmYbcGQbx0tz0pHa3YLmGieLQLVZo44K3IvUXaLf7noUKogwDdGVJ6NRxCROo/uUaU9m8mm4vEQkPgkmrRzNHq1B56AvPmTrRFJc5xPewXAAAAFQDiqOM9bw03MbT4jf59lFSlexRiiQAAAIA0ZJ2dNV9IzeWNexsoQfSz2ABx3INnFvjUAMlWZQtIXAqwUhKAvQBFi6vTpWL9nK4nCUvENyHIgX8S8eG2F1+pRFUHILajiJWkb0+0hGXIgE+rtdsdSCbMzggTOnhr4nMuUqedtas7uwGgOkNoEtsC6uSe0iSf3QbGjyrp8423lAAAAIAR0X7xTJCnV25i14SfelgVztVCl44C/E2A9+EBBR2Dp4CEg3cbstf6Z768S2TxOMpWTr7c81zKI6Ij7qLWxiUlTO7yS3ikiBOpEHbihGeHLn01rHcuGh9+SmOFKeIoq6WJHfZQInO/++WLTtwaZgZzIa1mw18SiFlHFeIX0MfYcA== mircea@master-roshi
</name>
</ssh-dsa>
<ssh-ecdsa>
<name>
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBFAvVeQxnECAx/HcSfcLdNqCqsjdm64QfVdxBT15pmvzw4eV2RWibqZTfCNbybM5FsB0/jEb2EH2JND4GCBzxUg= mircea@master-roshi
</name>
</ssh-ecdsa>
</authentication>
</user>
</login>
</system>
</configuration>

0 comments on commit dcaf134

Please sign in to comment.