Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 21 additions & 2 deletions library/junos_cli
Original file line number Diff line number Diff line change
Expand Up @@ -63,9 +63,15 @@ options:
default: assumes ssh-key active
port:
description:
- TCP port number to use when connecting to the device
- port number to use when connecting to the device
required: false
default: 830
mode:
description:
- mode of console connection (telnet/serial). If mode is not
provided SSH connection is used.
required: false
default: None
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You may want to indicate that default is regular SSH connection

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done with changes. Please review.

timeout:
description:
- Set the NETCONF RPC timeout. Set this value to accommodate Cli
Expand Down Expand Up @@ -101,6 +107,15 @@ EXAMPLES = '''
logfile: cli.log
dest: "{{ inventory_hostname }}.xml"
format: xml

# Run cli over console server connection using PyEZ >= 2.0
- junos_cli:
cli="show chassis hardware"
host={{ inventory_hostname }}
port=7001
mode='telnet'
dest="{{ inventory_hostname }}.xml"
format='xml'
'''
from distutils.version import LooseVersion
import logging
Expand All @@ -115,6 +130,7 @@ def main():
user=dict(required=False, default=os.getenv('USER')),
passwd=dict(required=False, default=None),
port=dict(required=False, default=830),
mode=dict(required=False, default=None),
timeout=dict(required=False, type='int', default=0),
logfile=dict(required=False, default=None),
dest=dict(required=False, default=None),
Expand All @@ -133,6 +149,9 @@ def main():
except ImportError as ex:
module.fail_json(msg='ImportError: %s' % ex.message)

if args['mode'] is not None and LooseVersion(VERSION) < LooseVersion('2.0.0'):
module.fail_json(msg='junos-eznc >= 2.0.0 is required for console connection.')

logfile = args['logfile']
if logfile is not None:
logging.basicConfig(filename=logfile, level=logging.INFO,
Expand All @@ -143,7 +162,7 @@ def main():

try:
dev = Device(args['host'], user=args['user'], password=args['passwd'],
port=args['port'], gather_facts=False).open()
port=args['port'], mode=args['mode'], gather_facts=False).open()
except Exception as err:
msg = 'unable to connect to {0}: {1}'.format(args['host'], str(err))
logging.error(msg)
Expand Down
21 changes: 19 additions & 2 deletions library/junos_commit
Original file line number Diff line number Diff line change
Expand Up @@ -60,9 +60,15 @@ options:
default: assumes ssh-key active
port:
description:
- TCP port number to use when connecting to the device
- port number to use when connecting to the device
required: false
default: 830
mode:
description:
- mode of console connection (telnet/serial). If mode is not
provided SSH connection is used.
required: false
default: None
timeout:
description:
- Extend the NETCONF RPC timeout beyond the default value of
Expand Down Expand Up @@ -93,6 +99,14 @@ EXAMPLES = '''
host: "{{ inventory_hostname }}"
logfile=changes.log
comment="Non load commit"

# over console server connection using PyEZ >= 2.0
- name: junos commit
junos_commit:
host={{ inventory_hostname }}
port=7016
mode='telnet'
comment="commit with console connection via PyEZ"
'''

from distutils.version import LooseVersion
Expand All @@ -105,6 +119,7 @@ def main():
user=dict(required=False, default=os.getenv('USER')),
passwd=dict(required=False, default=None),
port=dict(required=False, default=830),
mode=dict(required=False, default=None),
timeout=dict(required=False, default=0),
logfile=dict(required=False, default=None),
comment=dict(required=False, default=None),
Expand All @@ -126,6 +141,8 @@ def main():
except ImportError as ex:
module.fail_json(msg='ImportError: %s' % ex.message)

if args['mode'] is not None and LooseVersion(VERSION) < LooseVersion('2.0.0'):
module.fail_json(msg='junos-eznc >= 2.0.0 is required for console connection.')

logfile = args['logfile']
if logfile is not None:
Expand All @@ -137,7 +154,7 @@ def main():

try:
dev = Device(args['host'], user=args['user'], password=args['passwd'],
port=args['port'], gather_facts=False).open()
port=args['port'], mode=args['mode'], gather_facts=False).open()
except Exception as err:
msg = 'unable to connect to {0}: {1}'.format(args['host'], str(err))
logging.error(msg)
Expand Down
23 changes: 21 additions & 2 deletions library/junos_get_config
Original file line number Diff line number Diff line change
Expand Up @@ -61,9 +61,15 @@ options:
default: assumes ssh-key active
port:
description:
- TCP port number to use when connecting to the device
- port number to use when connecting to the device
required: false
default: 830
mode:
description:
- mode of console connection (telnet/serial). If mode is not
provided SSH connection is used.
required: false
default: None
logfile:
description:
- Path on the local server where the progress status is logged
Expand Down Expand Up @@ -106,6 +112,15 @@ EXAMPLES = '''
format: xml
filter: "interfaces"
options: {inherit: inherit, groups: groups}

# over console server connection using PyEZ >= 2.0
- junos_get_config:
host: "{{ inventory_hostname }}"
logfile: get_config.log
dest: "{{ inventory_hostname }}.xml"
port: 7016
mode: 'telnet'
format: xml
'''
from distutils.version import LooseVersion
import logging
Expand All @@ -118,6 +133,7 @@ def main():
user=dict(required=False, default=os.getenv('USER')),
passwd=dict(required=False, default=None),
port=dict(required=False, default=830),
mode=dict(required=False, default=None),
logfile=dict(required=False, default=None),
dest=dict(required=True, default=None),
format=dict(required=False, choices=['text', 'xml'], default='text'),
Expand All @@ -137,6 +153,9 @@ def main():
except ImportError as ex:
module.fail_json(msg='ImportError: %s' % ex.message)

if args['mode'] is not None and LooseVersion(VERSION) < LooseVersion('2.0.0'):
module.fail_json(msg='junos-eznc >= 2.0.0 is required for console connection.')

results = {}

logfile = args['logfile']
Expand All @@ -149,7 +168,7 @@ def main():

try:
dev = Device(args['host'], user=args['user'], password=args['passwd'],
port=args['port'], gather_facts=False).open()
port=args['port'], mode=args['mode'], gather_facts=False).open()
except Exception as err:
msg = 'unable to connect to {0}: {1}'.format(args['host'], str(err))
logging.error(msg)
Expand Down
30 changes: 27 additions & 3 deletions library/junos_get_facts
Original file line number Diff line number Diff line change
Expand Up @@ -83,9 +83,15 @@ options:
default: None
port:
description:
- TCP port number to use when connecting to the device
- port number to use when connecting to the device
required: false
default: 830
mode:
description:
- mode of console connection (telnet/serial). If mode is not
provided SSH connection is used.
required: false
default: None
'''

EXAMPLES = '''
Expand All @@ -108,6 +114,19 @@ EXAMPLES = '''

- name: version
debug: msg="{{ junos.facts.version }}"

# retrieve facts using console server connection using PyEZ >= 2.0

- junos_get_facts:
host={{ inventory_hostname }}
mode="telnet"
port=7016
register: junos

# access the facts

- name: version
debug: msg="{{ junos.facts }}"
'''

import os
Expand All @@ -123,7 +142,8 @@ def main():
savedir=dict(required=False, default=None),
user=dict(required=False, default=os.getenv('USER')),
passwd=dict(required=False, default=None),
port=dict(required=False, default=830)),
port=dict(required=False, default=830),
mode=dict(required=False, default=None)),
supports_check_mode=True)

m_args = module.params
Expand All @@ -137,10 +157,14 @@ def main():
module.fail_json(msg='junos-eznc >= 1.2.2 is required for this module')
except ImportError as ex:
module.fail_json(msg='ImportError: %s' % ex.message)

if m_args['mode'] is not None and LooseVersion(VERSION) < LooseVersion('2.0.0'):
module.fail_json(msg='junos-eznc >= 2.0.0 is required for console connection.')
# -----------
# via NETCONF
# -----------
dev = Device(m_args['host'], user=m_args['user'], passwd=m_args['passwd'], port=m_args['port'])
dev = Device(m_args['host'], user=m_args['user'], passwd=m_args['passwd'], port=m_args['port'],
mode=m_args['mode'], gather_facts=True)
try:
dev.open()
except Exception as err:
Expand Down
45 changes: 33 additions & 12 deletions library/junos_get_table
Original file line number Diff line number Diff line change
Expand Up @@ -46,12 +46,17 @@ options:
for debugging purposes
required: false
default: None

port:
description:
- TCP port number to use when connecting to the device
- port number to use when connecting to the device
required: false
default: 830
mode:
description:
- mode of console connection (telnet/serial). If mode is not
provided SSH connection is used.
required: false
default: None
table:
description:
- Name of PyEZ Table
Expand Down Expand Up @@ -86,6 +91,14 @@ EXAMPLES = '''
# GET NEIGHBOR INFO USING CUSTOM LLDP TABLE IN CUSTOM PATH
- junos_get_table: table=NTCNeighborTable path=tables/ file=ntclldp.yaml host={{ inventory_hostname }} user={{ un }} passwd={{ pwd }}

#
- name: Table/View example via console server connection using PyEZ >= 2.0
junos_get_table:
table=RouteTable
file=routes.yml
host={{ inventory_hostname }}
port=7016
mode='telnet'
'''

RETURN = '''
Expand Down Expand Up @@ -122,6 +135,17 @@ from lxml import etree
from lxml.builder import E
import yaml

import_err_message = None
try:
from jnpr.junos import Device
from jnpr.junos.version import VERSION
import jnpr.junos.op as tables_dir
from jnpr.junos.factory.factory_loader import FactoryLoader
if not LooseVersion(VERSION) >= LooseVersion('1.2.2'):
import_err_message = 'junos-eznc >= 1.2.2 is required for this module'
except ImportError as ex:
import_err_message = 'ImportError: %s' % ex.message


TABLE_PATH = os.path.dirname(os.path.abspath(tables_dir.__file__))
CHOICES = ['list_of_dicts', 'juniper_items']
Expand Down Expand Up @@ -158,6 +182,7 @@ def main():
default=os.getenv('USER')),
passwd=dict(required=False, default=None),
port=dict(required=False, default=830),
mode=dict(required=False, default=None),
logfile=dict(required=False, default=None),
file=dict(required=True, default=None),
path=dict(required=False, default=TABLE_PATH),
Expand All @@ -169,15 +194,11 @@ def main():

args = module.params

try:
from jnpr.junos import Device
from jnpr.junos.version import VERSION
import jnpr.junos.op as tables_dir
from jnpr.junos.factory.factory_loader import FactoryLoader
if not LooseVersion(VERSION) >= LooseVersion('1.2.2'):
module.fail_json(msg='junos-eznc >= 1.2.2 is required for this module')
except ImportError as ex:
module.fail_json(msg='ImportError: %s' % ex.message)
if import_err_message is not None:
module.fail_json(msg=import_err_message)

if args['mode'] is not None and LooseVersion(VERSION) < LooseVersion('2.0.0'):
module.fail_json(msg='junos-eznc >= 2.0.0 is required for console connection')

logfile = args['logfile']
response_type = args['response_type']
Expand All @@ -195,7 +216,7 @@ def main():
args['port']))
try:
dev = Device(args['host'], user=args['user'], password=args['passwd'],
port=args['port'], gather_facts=False).open()
port=args['port'], mode=args['mode'], gather_facts=False).open()
except Exception as err:
msg = 'unable to connect to {0}: {1}'.format(args['host'], str(err))
logging.error(msg)
Expand Down
25 changes: 22 additions & 3 deletions library/junos_install_config
Original file line number Diff line number Diff line change
Expand Up @@ -130,9 +130,15 @@ options:
default: None
port:
description:
- TCP port number to use when connecting to the device
- port number to use when connecting to the device
required: false
default: 830
mode:
description:
- mode of console connection (telnet/serial). If mode is not
provided SSH connection is used.
required: false
default: None
confirm:
description:
- Provide a confirm in minutes to the commit of the configuration
Expand Down Expand Up @@ -172,6 +178,14 @@ EXAMPLES = '''
host={{ inventory_hostname }}
file=snmp.conf
replace=yes

# Install/load config using console server connection using PyEZ >= 2.0

- junos_install_config:
host={{ inventory_hostname }}
port=7016
mode='telnet'
file=default_new_switch.conf
'''

import logging
Expand All @@ -194,6 +208,9 @@ def _load_via_netconf(module):
except ImportError as ex:
module.fail_json(msg='ImportError: %s' % ex.message)

if args['mode'] is not None and LooseVersion(VERSION) < LooseVersion('2.0.0'):
module.fail_json(msg='junos-eznc >= 2.0.0 is required for console connection')

logfile = args['logfile']
if logfile is not None:
logging.basicConfig(filename=logfile, level=logging.INFO,
Expand All @@ -212,8 +229,9 @@ def _load_via_netconf(module):
logging.info("connecting to host: {0}@{1}:{2}".format(args['user'], args['host'], args['port']))

try:
dev = Device(args['host'], user=args['user'], password=args['passwd'], port=args['port'])
dev.open(gather_facts=False)
dev = Device(args['host'], user=args['user'], password=args['passwd'], port=args['port'],
mode=args['mode'], gather_facts=False)
dev.open()
except Exception as err:
msg = 'unable to connect to {0}: {1}'.format(args['host'], str(err))
logging.error(msg)
Expand Down Expand Up @@ -413,6 +431,7 @@ def main():
timeout=dict(required=False, default=0),
comment=dict(required=False, default=None),
port=dict(required=False, default=830),
mode=dict(required=False, default=None),
confirm=dict(required=False, default=None),
check_commit_wait=dict(required=False, default=None)
),
Expand Down
Loading