juniper / ansible-junos-stdlib Goto Github PK
View Code? Open in Web Editor NEWJunos modules for Ansible
License: Apache License 2.0
Junos modules for Ansible
License: Apache License 2.0
Documentation: Description is incorrect at:
https://github.com/Juniper/ansible-junos-stdlib/blob/master/library/junos_console_devicemode
short_description: Shutdown or Reboot the Junos device >> Should be changed to..
short_description: Device console module to change the "device mode"
Hello,
I am trying to download the Juniper.junos role and I am getting below error.
root@ubuntu:~# ansible-galaxy install Juniper.junos
ERROR! - you can use --ignore-errors to skip failed roles and finish processing the list.
With respect to changes made under:
Juniper/py-junos-eznc#237
We need to revert the changes made in
https://github.com/Juniper/ansible-junos-stdlib/pull/9/files
Which was done considering string (Error message) returning not boolean False in case of failure.
Now we might face something like:
"Unable to install the software: " + False
Traceback (most recent call last):
File "<pyshell#0>", line 1, in
"Unable to install the software: " + False
TypeError: cannot concatenate 'str' and 'bool' objects
Hence please revert back the changes in above given file.
I have created ansible module call noob-ex that will push minimal configuration on the ex device and to test this module I am using EX4500 device. my device is factory reset it's just new box having no configuration. At this stage when I tried to run this ansible playbook I got error like "msg: failure to load configuration, aborting"
Can anyone help me why I am getting this error? I am using pyez version 1.2.3
Below are my playbooks
node:
console:
server: x.x.x.x
port: xxxx
oob:
noob_ip_addr: x.x.x.x
oob:
gateway: x.x.x.x
networks: x.x.x.x
netconf_user: xxxxx
netconf_passwd: lxxxxx
task file for ansible-role-noob-ex
dpatel@dharpatel-ubuntu:~/Desktop/Ansible-Modules$ ansible-playbook ex-test.yml
PLAY [all_hosts] **************************************************************
TASK: [ansible-role-noob-ex | Creating NOOB config] ***************************
ok: [10.13.106.246]
TASK: [ansible-role-noob-ex | Checking NETCONF connectivity] ******************
failed: [10.13.106.246] => {"elapsed": 6, "failed": true, "item": ""}
msg: Timeout when waiting for 10.13.106.246:830
...ignoring
TASK: [ansible-role-noob-ex | loading minimal management configuration file] ***
failed: [10.13.106.246] => {"failed": true, "item": ""}
msg: failure to load configuration, aborting.
FATAL: all hosts have already failed -- aborting
PLAY RECAP ********************************************************************
to retry, use: --limit @/home/dpatel/ex-test.retry
10.13.106.246 : ok=2 changed=0 unreachable=0 failed=1
Hi all,
I am new to Juniper OS ( 12.1X44.3 ) and I have tried to setup security nat source with the following:
set security address-book global address dmz70 wildcard-address 192.168.7.0/255.255.255.0
set security address-book global address lan50 wildcard-address 192.168.5.0/255.255.255.0
set security address-book global address lan60 wildcard-address 192.168.6.0/255.255.255.0
set security address-book global address lan80 wildcard-address 192.168.8.0/255.255.255.0
set security address-book global address la2vpn wildcard-address 172.16.8.0/255.255.255.0
set security address-book global address sj2vpn wildcard-address 172.16.11.0/255.255.255.0
set security address-book global address sj wildcard-address 172.16.1.0/255.255.255.0
set security address-book global address va2-4 wildcard-address 10.0.4.0/255.255.255.0
set security address-book global address va2-8 wildcard-address 10.0.8.0/255.255.255.0
set security nat source rule-set snat-out from zone dmz
set security nat source rule-set snat-out from zone trust
set security nat source rule-set snat-out to zone untrust
set security nat source rule-set snat-out rule VPNNATOFF match source-address lan50
set security nat source rule-set snat-out rule VPNNATOFF match source-address lan60
set security nat source rule-set snat-out rule VPNNATOFF match source-address lan80
set security nat source rule-set snat-out rule VPNNATOFF match source-address la2vpn
set security nat source rule-set snat-out rule VPNNATOFF match source-address sj2vpn
set security nat source rule-set snat-out rule VPNNATOFF match source-address sj
set security nat source rule-set snat-out rule VPNNATOFF match source-address dmz70
set security nat source rule-set snat-out rule VPNNATOFF match destination-address va2-4
set security nat source rule-set snat-out rule VPNNATOFF match destination-address va2-8
set security nat source rule-set snat-out rule VPNNATOFF then source-nat off
set security nat source rule-set snat-out rule snat-out match source-address lan50
set security nat source rule-set snat-out rule snat-out match source-address lan60
set security nat source rule-set snat-out rule snat-out match source-address lan80
set security nat source rule-set snat-out rule snat-out match source-address dmz70
set security nat source rule-set snat-out rule snat-out then source-nat interface
Ansible playbook ran until completion without any errors but then I got this from the above. This is really unexpected and I just do not know where x.x.114.94/32 is from. I do not have anything in my config with this x.x.114.94/32 (x.x were replaced for security).
steven@sc2-jnpr-fw# show security nat source
rule-set snat-out {
from zone [ dmz trust ];
to zone untrust;csteven@sc2-jnpr-fw# show security nat source
rule-set snat-out {
from zone [ dmz trust ];
to zone untrust;
rule VPNNATOFF {
match {
source-address x.x.114.94/32;
destination-address x.x.114.94/32;
}
then {
source-nat {
off;
}
}
}
rule snat-out {
match {
source-address x.x.114.94/32;
}
then {
source-nat {
interface;
}
}
}
}
I grepped my config and nothing of x.x114.94/32 is in there except for the nat source entries.
steven@sc2-jnpr-fw# show |grep 114.94
source-address x.x.114.94/32;
destination-address x.x.114.94/32;
source-address x.x.114.94/32;
Thanks.
Hi,
After trying to push an upgrade on 3 similar EX2200, I got an error on only one of them:
Traceback (most recent call last):
File "/home/xionox/.ansible/tmp/ansible-tmp-1433407957.74-148018357886798/junos_install_os", line 1867, in <module>
main()
File "/home/xionox/.ansible/tmp/ansible-tmp-1433407957.74-148018357886798/junos_install_os", line 255, in main
results = junos_install_os(module, dev)
File "/home/xionox/.ansible/tmp/ansible-tmp-1433407957.74-148018357886798/junos_install_os", line 198, in junos_install_os
ok = sw.install(package, **sw_args)
File "/usr/local/lib/python2.7/dist-packages/jnpr/junos/utils/sw.py", line 385, in install
checksum=checksum)
File "/usr/local/lib/python2.7/dist-packages/jnpr/junos/utils/sw.py", line 283, in safe_copy
remote_checksum = self.remote_checksum(remote_package)
File "/usr/local/lib/python2.7/dist-packages/jnpr/junos/utils/sw.py", line 225, in remote_checksum
rsp = self.rpc.get_checksum_information(path=remote_package)
File "/usr/local/lib/python2.7/dist-packages/jnpr/junos/rpcmeta.py", line 137, in _exec_rpc
return self._junos.execute(rpc)
File "/usr/local/lib/python2.7/dist-packages/jnpr/junos/decorators.py", line 25, in wrapper
return function(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/jnpr/junos/device.py", line 520, in execute
raise EzErrors.RpcTimeoutError(self, rpc_cmd_e.tag, self.timeout)
jnpr.junos.exception.RpcTimeoutError: RpcTimeoutError(<myswitch>,get-checksum-information,30)
Calculating the md5 on the device works fine (and match the original file):
myswitch> file checksum md5 /var/tmp/junos-ex2200-12.3R9-S1.tgz
MD5 (/var/tmp/junos-ex2200-12.3R9-S1.tgz) = dab7e8ff0cfabcd55c29b94cbf716bbd
the 3 switches are running 11.4.
Please let me know if I can help.
Thanks
Enhance the module so that when --check is specified the configuration is loaded and then only a commit-check is performed. then the config change is discarded.
Module: junos_get_facts
Host Model: mx480.
Steps to reproduce:
name: Junos OS version
hosts: all
connection: local
gather_facts: no
tasks:
regress@vm-nomadic-ubuntu:~/ansible_junos/mydir_ansible$ ansible-playbook pb/facts --limit andrina -v
PLAY [Junos OS version] *******************************************************
TASK: [checking NETCONF] ******************************************************
ok: [andrina] => {"changed": false, "elapsed": 0, "item": "", "path": null, "port": 830, "search_regex": null, "state": "started"}
TASK: [Get Junos Facts] *******************************************************
ok: [andrina] => {"changed": false, "facts": {"2RE": true, "HOME": "/var/home/regress", "RE0": {"last_reboot_reason": "Router rebooted after a normal shutdown.", "mastership_state": "master", "model": "RE-S-1800x4", "status": "OK", "up_time": "7 days, 23 minutes, 36 seconds"}, "RE1": {"last_reboot_reason": "Router rebooted after a normal shutdown.", "mastership_state": "backup", "model": "RE-S-1800x4", "status": "OK", "up_time": "7 days, 23 minutes, 50 seconds"}, "domain": "englab.juniper.net", "fqdn": "andrina.englab.juniper.net", "hostname": "andrina", "ifd_style": "CLASSIC", "master": "RE0", "model": "MX480", "personality": "MX", "serialnumber": "JN10FE440AFB", "switch_style": "BRIDGE_DOMAIN", "version": "12.1-20140402.0", "version_RE0": "12.1-20140402.0", "version_RE1": "12.1-20140402.0"}}
PLAY RECAP ********************************************************************
andrina : ok=2 changed=0 unreachable=0 failed=0
regress@vm-nomadic-ubuntu:~/ansible_junos/mydir_ansible$ ansible-playbook pb/facts --limit andrina -v
PLAY [Junos OS version] *******************************************************
TASK: [checking NETCONF] ******************************************************
ok: [andrina] => {"changed": false, "elapsed": 0, "item": "", "path": null, "port": 830, "search_regex": null, "state": "started"}
TASK: [Get Junos Facts] *******************************************************
failed: [andrina] => {"failed": true, "parsed": false}
invalid output was: Traceback (most recent call last):
File "/home/regress/.ansible/tmp/ansible-tmp-1397213264.56-247484810680075/junos_get_facts", line 1305, in
main()
File "/home/regress/.ansible/tmp/ansible-tmp-1397213264.56-247484810680075/junos_get_facts", line 95, in main
dev.open()
File "/usr/local/lib/python2.7/dist-packages/jnpr/junos/device.py", line 247, in open
self.facts_refresh()
File "/usr/local/lib/python2.7/dist-packages/jnpr/junos/device.py", line 412, in facts_refresh
gather(self, self._facts)
File "/usr/local/lib/python2.7/dist-packages/jnpr/junos/facts/chassis.py", line 28, in chassis
facts['model'] = x_ch.find('description').text
AttributeError: 'NoneType' object has no attribute 'find' >>>>ERROR
FATAL: all hosts have already failed -- aborting
PLAY RECAP ********************************************************************
to retry, use: --limit @/home/regress/facts.retry
andrina : ok=1 changed=0 unreachable=0 failed=1
Junos get facts should return the device information after the switchover without errors.
Model; Any
Module: junos_get_facts_console.
Steps to reproduce:
The terminal server is incorrect in the playbook.
for Albert correct terminal server is bngsquid11 and on port 7026
YAML CODE HAS
console="--telnet=bngsquid49-7044.englab.juniper.net,7044"
Script returns:
failed: [albert] => {"failed": true, "parsed": false}
invalid output was: ERROR: bad_passwd
FATAL: all hosts have already failed -- aborting
Since the router is in amnesiac mode, there is no relevance to password. Should return something relevant like no reply from termserver or port.
plans to add support for config changes without having external file (just by supplying a single variable) like
Here what i am trying to implement, simple playbook
tasks:
- name: installing initial config to Amnesiac
junos_install_config:
host={{ inventory_hostname }}
user=root
console="--telnet={{TERMSERV}},{{TERMSERVPORT}}"
file=configs/initial.set
overwrite=yes
savedir=junos/inventory
logfile=junos/logs/initial.log
config is also very basic
set system root-authentication encrypted-password $1$usi5OLHO$2//owSkqcLsuwRb9hSeTI.
set interfaces ge-0/0/0 unit 0 family inet address 192.168.159.7/24
set system host-name router
set system time-zone GMT-3
set system services netconf ssh
set routing-options static route 0.0.0.0/0 next-hop 192.168.159.254
delete security
delete system services web-management
starting this playbook lead to ansible execution and at the task processing it just hangs
PLAY [servers] ****************************************************************
TASK: [installing initial config to Amnesiac] *********************************
^CERROR: interrupted
wireshark shows me smth interesting
...............
.........
XXXhostnameXXX (ttyd0)
login: root
root
--- JUNOS 12.1X46-D20.5 built 2014-05-14 20:38:10 UTC
.[3g.[24;9H.H.[24;17H.H.[24;25H.H.[24;33H.H.[24;41H.H.[24;49H.H.[24;57H.H.[24;65H.H.[24;73H.H
root@XXXhostnameXXX% xml-mode netconf need-trailer
xml-mode netconf need-trailer
when i tried manually do what script is supposed to i got an error
XXXhostnameXXX (ttyd0)
login: root
--- JUNOS 12.1X46-D20.5 built 2014-05-14 20:38:10 UTC
root@XXXhostnameXXX% xml-mode netconf need-trailer
so it seems to me the problem is in right formatting of *.set file
i did not test with *.conf and *.xml files
add the ability to rollback to a specific configuration, identified by number [1-50].
junos_rollback:
host={{ inventory_hostname }}
rollback=1
junos_install_config fails reporting a syntax error for a config that applies without error, nor warning, when committed manually.
Here's a log showing ansible failure and that the config can be applied correctly.
dgethings@ubuntu-server1 ~/git/jnpr_ps_16596_ansible
% ansible-playbook -i mx-hosts pe-tasks.yml
PLAY [Creating build directories for each host] *******************************
TASK: [set_fact ] *************************************************************
ok: [crtj-dc1-0401]
ok: [crtj-dc1-0001]
ok: [crtj-dc1-0002]
TASK: [create host build temp directory] **************************************
ok: [crtj-dc1-0401]
ok: [crtj-dc1-0001]
ok: [crtj-dc1-0002]
PLAY [Template-build DCI-PE] **************************************************
TASK: [pe | Apply PE configuration] *******************************************
failed: [crtj-dc1-0401] => {"changed": false, "failed": true, "file": "/home/dgethings/git/jnpr_ps_16596_ansible/build/crtj-dc1-0401/crtj-dc1-0401.conf", "item": ""}
msg: Unable to make changes
changed: [crtj-dc1-0001]
changed: [crtj-dc1-0002]
PLAY RECAP ********************************************************************
to retry, use: --limit @/home/dgethings/pe-tasks.retry
crtj-dc1-0001 : ok=3 changed=1 unreachable=0 failed=0
crtj-dc1-0002 : ok=3 changed=1 unreachable=0 failed=0
crtj-dc1-0401 : ok=2 changed=0 unreachable=0 failed=1
dgethings@ubuntu-server1 ~/git/jnpr_ps_16596_ansible
% grep crtj-dc1-0401 dg.log
2014-05-12 02:04:25,786:CONFIG:crtj-dc1-0401:connecting to host: jnpr@crtj-dc1-0401
2014-05-12 02:04:31,360:CONFIG:crtj-dc1-0401:pushing file: /home/dgethings/git/jnpr_ps_16596_ansible/build/crtj-dc1-0401/crtj-dc1-0401.conf
2014-05-12 02:04:31,360:CONFIG:crtj-dc1-0401:taking lock
2014-05-12 02:04:31,476:CONFIG:crtj-dc1-0401:loading config
2014-05-12 02:04:31,795:CONFIG:crtj-dc1-0401:unable to load config:syntax error
2014-05-12 02:04:31,795:CONFIG:crtj-dc1-0401:Unable to make changes
dgethings@ubuntu-server1 ~/git/jnpr_ps_16596_ansible
% scp /home/dgethings/git/jnpr_ps_16596_ansible/build/crtj-dc1-0401/crtj-dc1-0401.conf jnpr@crtj-dc1-0401:/var/tmp/
Password:
crtj-dc1-0401.conf 100% 13KB 12.7KB/s 00:00
dgethings@ubuntu-server1 ~/git/jnpr_ps_16596_ansible
% ssh jnpr@crtj-dc1-0401
Password:
--- JUNOS 13.3R1.6 built 2014-01-17 02:57:36 UTC
jnpr@crtj-dc1-0401-RE0> configure
Entering configuration mode
Users currently editing the configuration:
root terminal u0 (pid 2605) on since 2014-04-11 11:41:35 PDT, idle 4w2d 14:57
[edit]
[edit]
jnpr@crtj-dc1-0401-RE0# load override /var/tmp/crtj-dc1-0401.conf
load complete
[edit]
jnpr@crtj-dc1-0401-RE0# commit and-quit
commit complete
Exiting configuration mode
jnpr@crtj-dc1-0401-RE0> quit
regress@vm-nomadic-ubuntu:/usr/local/junos/log$ tail -f config.log
2014-05-30 09:14:48,197:CONFIG:triplane:connecting to host: regress@triplane
2014-05-30 09:14:55,017:CONFIG:triplane:pushing file: /usr/local/junos/config/only_policy.set
2014-05-30 09:14:55,017:CONFIG:triplane:taking lock
2014-05-30 09:14:55,081:CONFIG:triplane:loading config
2014-05-30 09:14:55,762:CONFIG:triplane:committing change, please be patient
2014-05-30 09:15:06,353:CONFIG:triplane:unlocking
2014-05-30 09:15:06,468:CONFIG:triplane:change completed
2014-05-30 09:18:24,603:CONFIG:triplane:connecting to host: regress@triplane
2014-05-30 09:18:30,883:CONFIG:triplane:pushing file: /usr/local/junos/config/triplane_noprotect.set
2014-05-30 09:18:30,883:CONFIG:triplane:taking lock
2014-05-30 09:18:30,998:CONFIG:triplane:loading config
2014-05-30 09:18:30,998:CONFIG:triplane:'exceptions.ValueError' object has no attribute 'rsp'
As of junos-pyez version 0.1.2 there are new Exceptions for the various login/auth failures. Need to expose this information into the ansible modules failure message.
Host: m120
Image location: /usr/local/junos/images/
Current Version on the host: 12.1R8
Playbook code:
- name: install Junos OS package
junos_install_os:
host={{ inventory_hostname }}
version=13.2R4.6
package=/usr/local/junos/images/jinstall-13.2R4.6-domestic-signed.tgz
logfile=/usr/local/junos/log/loadimage.log
register: sw
Issue:
Since the version on router is not equal to the install image version(13.2R4.6), Image install should go through, however, error appears:
regress@vm-nomadic-ubuntu:~/ansible_junos/mydir_ansible/pb/EXVC$ ansible-playbook software --limit richie -vvvv
PLAY [Junos OS] ***************************************************************
TASK: [checking NETCONF] ******************************************************
REMOTE_MODULE wait_for host=richie port=830 timeout=5
EXEC ['/bin/sh', '-c', 'mkdir -p $HOME/.ansible/tmp/ansible-tmp-1398683803.04-100297249877006 && chmod a+rx $HOME/.ansible/tmp/ansible-tmp-1398683803.04-100297249877006 && echo $HOME/.ansible/tmp/ansible-tmp-1398683803.04-100297249877006']
PUT /tmp/tmpc6zLw4 TO /home/regress/.ansible/tmp/ansible-tmp-1398683803.04-100297249877006/wait_for
EXEC ['/bin/sh', '-c', '/usr/bin/python /home/regress/.ansible/tmp/ansible-tmp-1398683803.04-100297249877006/wait_for; rm -rf /home/regress/.ansible/tmp/ansible-tmp-1398683803.04-100297249877006/ >/dev/null 2>&1']
ok: [richie] => {"changed": false, "elapsed": 1, "item": "", "path": null, "port": 830, "search_regex": null, "state": "started"}
TASK: [install Junos OS package] **********************************************
REMOTE_MODULE junos_install_os host=richie version=11.4R10.1 package=/var/tmp/jinstall-11.4R10.1-domestic-signed.tgz logfile=/usr/local/junos/log/loadimage.log
EXEC ['/bin/sh', '-c', 'mkdir -p $HOME/.ansible/tmp/ansible-tmp-1398683804.88-234934252741834 && chmod a+rx $HOME/.ansible/tmp/ansible-tmp-1398683804.88-234934252741834 && echo $HOME/.ansible/tmp/ansible-tmp-1398683804.88-234934252741834']
PUT /tmp/tmpAcHgHu TO /home/regress/.ansible/tmp/ansible-tmp-1398683804.88-234934252741834/junos_install_os
EXEC ['/bin/sh', '-c', '/usr/bin/env python2.7 /home/regress/.ansible/tmp/ansible-tmp-1398683804.88-234934252741834/junos_install_os; rm -rf /home/regress/.ansible/tmp/ansible-tmp-1398683804.88-234934252741834/ >/dev/null 2>&1']
failed: [richie] => {"changed": true, "check_mode": false, "failed": true, "ver": {"has": "12.1R8", "should": "11.4R10.1"}}
msg: Unable to install the software
FATAL: all hosts have already failed -- aborting
PLAY RECAP ********************************************************************
to retry, use: --limit @/home/regress/software.retry
richie : ok=1 changed=0 unreachable=0 failed=1
Expected Result:
Image install should go through.
If there is an issue: Appropriate error message should appear.
Current message does not provide any information to the user.
Switches with a single RE return "'has_2RE': True".
For example:
ok: [switch2] => {
"msg": "{u'domain': u'example.net', u'serialnumber': u'XXX', u'ifd_style': u'SWITCH', u'version_info': {u'major': [12, 3], u'type': u'R', u'build': 6, u'minor': u'6'}, u'version_RE0': u'12.3R6.6', u'RE0': {u'status': u'OK', u'last_reboot_reason': u'0x1:power cycle/failure ', u'model': u'EX2200-48T-4G', u'up_time': u'89 days, 2 hours, 2 minutes, 9 seconds', u'mastership_state': u'master'}, u'hostname': u'switch2', u'fqdn': u'switch2', u'has_2RE': True, u'switch_style': u'VLAN', u'version': u'12.3R6.6', u'master': u'RE0', u'HOME': u'/var/home/xionox', u'model': u'EX2200-48T-4G', u'vc_capable': True, u'personality': u'SWITCH'}"
}
Same thing with a EX4200-48PX
I am trying to get the library to work with ssh-key authentication. If the key is not protected by a password everything is fine. As soon as I protect it with a password I get the ConnectAuthError.
Other playbooks using the OpenSSH implementation connecting to Linux servers work just fine with the password protected key. I just get prompted by the system once for the password and they run.
Best regards,
Jesse
Specifying an SSH key with Ansible is not honored by the Juniper module. With the key loaded to the device, the following error occurs:
TASK: [Deploying Configuration] ***********************************************
failed: [cs01.hq.adap.tv] => {"failed": true}
msg: unable to connect to cs01.hq.adap.tv: ConnectAuthError(cs01.hq.adap.tv)
failed: [as01.hq.adap.tv] => {"failed": true}
msg: unable to connect to as01.hq.adap.tv: ConnectAuthError(as01.hq.adap.tv)
failed: [fw01.hq.adap.tv] => {"failed": true}
msg: unable to connect to fw01.hq.adap.tv: ConnectTimeoutError(fw01.hq.adap.tv)
FATAL: all hosts have already failed -- aborting
This is with the following hosts configuration:
[network_hq]
cs01.hq.adap.tv ansible_ssh_private_key_file=/home/ops/.ssh/rtr_rsa
as01.hq.adap.tv ansible_ssh_private_key_file=/home/ops/.ssh/rtr_rsa
fw01.hq.adap.tv ansible_ssh_private_key_file=/home/ops/.ssh/rtr_rsa
I have verified that I can ssh when using that key. The relevant configuration for the playbook:
tasks:
- name: Deploying Configuration
junos_install_config:
host={{ inventory_hostname }}
user=ansible
file=/tmp/{{ inventory_hostname }}.set
logfile=/etc/ansible/logs/{{ inventory_hostname }}.log
timeout="300"
And the log (which isn't helpful):
$ cat logs/cs01.hq.adap.tv.log
2014-06-13 09:24:57,657:CONFIG:cs01.hq.adap.tv:connecting to host: [email protected]
2014-06-13 09:39:48,110:CONFIG:cs01.hq.adap.tv:connecting to host: [email protected]
2014-06-13 10:05:38,849:CONFIG:cs01.hq.adap.tv:connecting to host: [email protected]
2014-06-13 10:09:00,972:CONFIG:cs01.hq.adap.tv:connecting to host: [email protected]
We are using 'junos_install_config' module to load a new configuration on a pre-configured juniper MX device
Device configuration:
interfaces {
lt-0/0/10 {
unit 0 {
encapsulation ethernet;
peer-unit 1;
family inet {
address 10.1.1.4/31;
}
}
unit 1 {
encapsulation ethernet;
peer-unit 0;
family inet {
address 10.1.1.5/31;
}
}
}
}
After doing commit check of following configuration on the juniper MX device through CLI, device reported below mentioned error:
interfaces {
lt-0/0/10 {
unit 1 {
peer-unit 1;
}
}
}
Error:
[edit interfaces]
'lt-0/0/10'
unit 0: peer-unit 1 refers to other unit
error: configuration check-out failed
While doing commit check of the same configuration through ansible-playbook using module 'junos_install_config' and got following exception :
failed: [**.__..*] => {"failed": true, "parsed": false}
invalid output was: Traceback (most recent call last):
File "/tmp/.ansible/tmp/ansible-tmp-1442855394.02-81768901013637/junos_install_config", line 1516, in
main()
File "/tmp/.ansible/tmp/ansible-tmp-1442855394.02-81768901013637/junos_install_config", line 420, in main
_ldr(module)
File "/tmp/.ansible/tmp/ansible-tmp-1442855394.02-81768901013637/junos_install_config", line 288, in _load_via_netconf
cu.commit_check()
File "/usr/local/lib/python2.7/dist-packages/jnpr/junos/utils/config.py", line 169, in commit_check
return JXML.rpc_error(err.xml)
AttributeError: 'exceptions.AttributeError' object has no attribute 'xml'
We feel that instead of exception we should have received proper error, can we fix this?
Environment:
Python 2.7.6
ansible-playbook 1.5.4
junos-eznc 1.2.2
Ubuntu
Please change the shebang from "/usr/bin/python" to "/usr/bin/env python" for all task scripts.
We are trying to run junos_install_config module using ssh key based authentication method instead of using password
we have generated public/private rsa key on one of our instance(ubuntu) and have created a user on the MX device with authentication as ssh-rsa
But While trying to use private-key in ansible-playbook junos module (junos_install_config) , ansible-playbook throws authentication error as "ConnectAuthError"
I have attached yaml file , hosts ,conf and output file for reference
yaml file :-
name: Change description of interface
hosts: all
roles:
- Juniper.junos
connection: local
gather_facts: no
tasks:
- name: Change description of interface
junos_install_config:
host={{ inventory_hostname }}
user={{ ansible_ssh_user }}
port=830
file=test.conf
overwrite=false
replace=false
timeout=0
diffs_file=commit_check_log
logfile=commit_log
test.conf file:-
interfaces{
ge-0/0/0 {
description "Ansible test";
}
}
host file:-
xxx.xx.xx.xxx ansible_connection=local ansible_ssh_user=testuser ansible_ssh_host=xxx.xx.xx.xxx
Command used for running playbook:-
ansible-playbook -i hosts load_config.yml --private-key="/xxxx/xxxx/xxxx/xx_key" -u testuser -vvvv
Output:-
PLAY [Get Device Facts] *******************************************************
TASK: [Change description of interface] ********************
msg: unable to connect to xxx.xx.xxx.xxx: ConnectAuthError(xxx.xx.xxx.xxx)
FATAL: all hosts have already failed -- aborting
Can you please help us in resolving this issue
I am getting the following error when using the junos_install_config module (v1.2.0):
TASK: [commit_config | Pushing config ... please wait] ************************
failed: [crtj-si38-0001] => {"failed": true}
msg: Unable to load config: 'list' object has no attribute 'getiterator'
The play is common across all devices but I only get the error with certain ones. For others it is working correctly. Here's the play:
I've located the offending code. It happens within the cu.load(**load_args) call within the junos_install_config module. It is not clear to me why load_args is not iterable in certain circumstances.
I've recently started getting errors trying to push configs to a couple of ex4200-48t series switches running 12.3R4.6
Ansible shows:
TASK: [Deploy configuration] **************************************************
failed: [device1.domain.net] => {"failed": true, "parsed": false}
Traceback (most recent call last):
File "/Users/cvicente/.ansible/tmp/ansible-tmp-1439845015.33-50192573969685/junos_install_config", line 2001, in <module>
main()
File "/Users/cvicente/.ansible/tmp/ansible-tmp-1439845015.33-50192573969685/junos_install_config", line 399, in main
_ldr(module)
File "/Users/cvicente/.ansible/tmp/ansible-tmp-1439845015.33-50192573969685/junos_install_config", line 303, in _load_via_netconf
dev.close()
File "/Library/Python/2.7/site-packages/jnpr/junos/device.py", line 502, in close
self._conn.close_session()
File "/Library/Python/2.7/site-packages/ncclient/manager.py", line 156, in wrapper
return self.execute(op_cls, *args, **kwds)
File "/Library/Python/2.7/site-packages/ncclient/manager.py", line 226, in execute
raise_mode=self._raise_mode).request(*args, **kwds)
File "/Library/Python/2.7/site-packages/ncclient/operations/session.py", line 28, in request
return self._request(new_ele("close-session"))
File "/Library/Python/2.7/site-packages/ncclient/operations/rpc.py", line 291, in _request
self._session.send(req)
File "/Library/Python/2.7/site-packages/ncclient/transport/session.py", line 147, in send
raise TransportError('Not connected to NETCONF server')
ncclient.transport.errors.TransportError: Not connected to NETCONF server
FATAL: all hosts have already failed -- aborting
The only error I see in the netconf logs on the device is:
Aug 17 20:45:25 [11848] Incoming: <?xml version="1.0" encoding="UTF-8"?><nc:rpc xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="urn:uuid:e32a4f4c-4520-11e5-9c26-3c15c2d90eda"><get-configuration compare="rollback" rollback="0" format="text"/></nc:rpc>]]>]]>
Aug 17 20:45:25 [11848] Outgoing: <!-- netconf error: syntax error, expecting <rpc> -->
Aug 17 20:45:26 [11848] Outgoing: <ok/>
Aug 17 20:45:26 [11848] Outgoing: <!-- session end at 2015-08-17 20:45:26 UTC -->
I'm not sure if it's related or not.
I'm a bit confused because we've been pushing configs to these switches for a long time now.
I'm running junos-py-ez 1.2.2 and ansible-junos-stdlib 1.1.0
I'd be very grateful for any clues.
Model : m120 (Richie)
configuration saved in .set file extension :
File contents:
set policy-options policy-statement P0 term term1 from route-type external
set policy-options policy-statement P0 term term1 then preference 0
set policy-options policy-statement P0 term term1 then accept
set policy-options policy-statement P1 term term1 from route-type external
task:
Problem:
Seems like .set is considered as a .conf and is throwing syntax error.
ONLY FOR M120. Tried on M10i DualRE/ EX VC / SRX cluster, works fine.
Output:
TASK: [Configure using ansible] ***********************************************
failed: [richie] => {"changed": false, "failed": true, "file": "/usr/local/junos/config/only_policy.set"}
msg: Unable to make changes
FATAL: all hosts have already failed -- aborting
Log File:
2014-05-26 16:33:17,354:CONFIG:richie:connecting to host: regress@richie
2014-05-26 16:33:21,905:CONFIG:richie:pushing file: /usr/local/junos/config/only_policy.set
2014-05-26 16:33:21,905:CONFIG:richie:taking lock
2014-05-26 16:33:22,020:CONFIG:richie:loading config
2014-05-26 16:33:22,451:CONFIG:richie:Unable to make changes
Worked fine on Popeye, albert, triplane.
When I use the junos_install_os with a stack of EX4300 in a VC, only the Master RE reboots at the end and the playbook fails. I have to manually reboot the other members in the virtual chassis to finalize the installation.
Thanks,
Patrick
When you have a playbook you run in check-only mode, modules that don't support check_mode are skipped. I noticed junos_get_facts doesn't support check_mode. Since this module does not change state on the remote device, I can't think of any reason why NOT to support check_mode. Or is there some detail I am missing?
It should be a simple fix to make this module check mode compatible and I'm happy to send a pull request.
add module that will retrieve the entire configuration and store it to file. something like:
junos_get_config:
host={{ inventory_hostname }}
dest=saveconfs/{{ inventory_hostname }}.conf
possible options:
format=['text' | 'xml'] - select the file format; defaults to text
timestamp=[BOOLEAN] - append a timestamp to the filename; default False
other ideas?
I'm trying to retrieve router configurations with the task:
this works fine with my SRX routers, but i got a blank file with my J2320 10.4R10.7 routers. Nothing wrong in the log:
2015-10-02 12:52:56,542:CONFIG::connecting to host: user@host:830
2015-10-02 12:52:56,642:ncclient.transport.ssh:Connected (version 2.0, client OpenSSH_4.4)
2015-10-02 12:52:57,145:ncclient.transport.ssh:Authentication (password) successful!
2015-10-02 12:52:57,913:ncclient.transport.session:initialized: session-id=70914 | server_capabilities=['http://xml.juniper.net/dmi/system/1.0', 'urn:ietf:params:xml:ns:netconf:capability:confirmed-commit:1.0', 'http://xml.juniper.net/netconf/junos/1.0', 'urn:ietf:params:xml:ns:netconf:capability:validate:1.0', 'urn:ietf:params:xml:ns:netconf:capability:candidate:1.0', 'urn:ietf:params:xml:ns:netconf:capability:url:1.0?protocol=http,ftp,file', 'urn:ietf:params:xml:ns:netconf:base:1.0']
2015-10-02 12:52:57,913:CONFIG::Getting config with options={'format': 'text'}
2015-10-02 12:52:57,920:ncclient.operations.rpc:Requesting 'ExecuteRpc'
2015-10-02 12:52:58,048:ncclient.operations.rpc:Requesting 'CloseSession'
If i change the format to xml i got the following error:
2015-10-02 12:56:01,810:CONFIG::Getting config with options={'format': 'xml'}
2015-10-02 12:56:01,816:ncclient.operations.rpc:Requesting 'ExecuteRpc'
2015-10-02 12:56:01,890:CONFIG::Uncaught exception - please report: Type 'bool' cannot be serialized.
The example that comes with ncclient works ok with xml:
from ncclient import manager
with manager.connect(host="", port=830, username="", password="<password", hostkey_verify=False, device_params={'name':'junos'}) as m:
c = m.get_config(source='running').data_xml
with open("%s.xml" % "", 'w') as f:
f.write(c)
any ideas?
Hi,
Right now if the network device returns an error, it's properly logged in the logfile, while only "Unable to make changes" is returned to Ansible. To me, the most verbose/useful error should be returned to Ansible.
If so, I think nothing gets caught in the "except CommitError" and defaults to "except Exception".
I'll wait before trying to send a pull request :P
Thx!
Model : Any
Module: junos_zeroize
While testing junos_zeroize, found that there is no support for logging provided. It only returns changed “true” or “false”.
It gives a better understanding of what is happening on the device if the device logs can be captured and logged.
At current the savedir variable is only used for netconify. Extend this to support both modes.
Temporary work around:
---
- name: Get Device Facts
hosts: all
connection: local
gather_facts: no
tasks:
- name: Checking NETCONF connectivity
wait_for: host={{ inventory_hostname }} port=22 timeout=5
- name: Retrieve information from devices running Junos OS
junos_get_facts:
host={{ inventory_hostname }}
user=user
passwd=passwd
register: junos
- name: version
debug: msg="{{ junos.facts }}"
- copy: content="{{ junos }}" dest=./{{ inventory_hostname }}.json
This may not be a bug in this module, but I'd like to ask here in case someone has any clues. The issue is that, when deploying changes, we randomly see these lines in the diffs:
[edit system login]
- message "\n\n UNAUTHORIZED ACCESS TO THIS DEVICE IS PROHIBITED.\n Explicit permission is required to access or configure this device.\n\n Unauthorized attempts and actions to access or use this\n system may result in civil and/or criminal penalties.\n\n All action taken on or against this device is logged and monitored.\n\n\n ";
+ message "\n\n UNAUTHORIZED ACCESS TO THIS DEVICE IS PROHIBITED.\n Explicit permission is required to access or configure this device.\n\n Unauthorized attempts and actions to access or use this\n system may result in civil and/or criminal penalties.\n\n All action taken on or against this device is logged and monitored.\n\n\n ";
The template that covers this section looks like this (we use XML format):
<login>
<message>
UNAUTHORIZED ACCESS TO THIS DEVICE IS PROHIBITED.
Explicit permission is required to access or configure this device.
Unauthorized attempts and actions to access or use this
system may result in civil and/or criminal penalties.
All action taken on or against this device is logged and monitored.
</message>
I say "randomly" because we see the diffs coming from some devices, sometimes.
It is particularly problematic when we do periodic "dry-runs" to detect variations from the canonical configurations.
Thanks in advance for any pointers.
Add the ability to load configuration stored locally on the Junos filesystem. Perhaps something like:
junos_install_config:
host={{ inventory_hostname }}
file=my_backup.conf
on_host=yes
assumes that the file "my_backup.conf" is located in the $HOME directory on the Junos device.
I believe I am running into a bug with either the Ansible module and/or the junos-eznc module. I have a simple playbook to install a configuration on a device (have tried this on multiple devices, all fail, this is on a EX2200-C, 12.3R6.6, with Ansible vs 1.9.1, Ansible Module v1.1.0, junos-eznc 1.2.0).
The test scenario is to update the VLAN configuration on one or more ports, the existing configuration has ge-0/0/7 with VL0001 configured and I want to change it to VL0002, this fails as there appears to be no way to update the configuration (the only option I have seen is the overwrite option which blasts the entire configuration).
show interfaces ge-0/0/7
description TEST;
unit 0 {
family ethernet-switching {
port-mode access;
vlan {
members VL0001-192.168.1.0_24;
}
}
}
---
- name: Load Junos Config
hosts: juniper
roles:
- Juniper.junos
connection: local
gather_facts: no
tasks:
- name: Verifying NETCONF
wait_for: host={{ ansible_ssh_host }} port=830
- name: Set System Login Message
junos_install_config:
host={{ ansible_ssh_host }}
file=load_config.conf
overwrite=false
user={{ juniper_user }}
logfile="/tmp/junos_ansible.log
interfaces {
ge-0/0/7 {
description TEST;
unit 0 {
family ethernet-switching {
port-mode access;
vlan {
members VL0002;
}
}
}
}
}
ansible-playbook -i /etc/ansible/hosts /etc/ansible/playbooks/load_config.yml
PLAY [Load Junos Config] ******************************************************
TASK: [Verifying NETCONF] *****************************************************
ok: [sw01.lab]
TASK: [Update VLAN] **********************************************
failed: [sw01.lab] => {"changed": false, "failed": true, "file": "/etc/ansible/playbooks/load_config.conf"}
msg: Unable to commit configuration:error,None,Access interface <ge-0/0/7.0> has more than one vlan member: <VL0002> and <VL0001>
FATAL: all hosts have already failed -- aborting
PLAY RECAP ********************************************************************
to retry, use: --limit @/home/ansible/load_config.retry
sw01.lab : ok=1 changed=0 unreachable=0 failed=1
Is there a way to update the configuration (or delete the specific stanza prior to the update) for stanza's that can take only a single value or is this just a limitation of the module? Full disclosure, I have run into this same problem with the junos-eznc module while testing out Python scripts and have found no resolution to this issue either (for that module it was recommended to use the "delete: vlan" command just before the stanza, but that did not work), given that the Junos Ansible module uses junos-eznc I am guessing I am running into the same issue.
Same as the has_2RE, it would be useful if get_facts could returns the POE capability of the device as well. (None, POE, POE+)
Thanks
Currently, when ansible-junos-stdlib tails to connect to a target host, ansible sees it as "failed" while it should reports it as "unreachable". especially as ansible-playbook has different return code for failed vs unreachable.
For example:
msg: unable to connect to xxx: ConnectTimeoutError(xxx)
[...]
xxx : ok=1 changed=0 unreachable=0 failed=1
Thanks
Model : Any
Module: junos_zeroize
While testing junos_zeroize, found that there is no support for logging provided. It only returns changed “true” or “false”.
It gives a better understanding of what is happening on the device if the device logs can be captured and logged.
reference :
Juniper/py-junos-eznc#233
qfx required need to be True or False. below 2 line contradict each other.
https://github.com/Juniper/ansible-junos-stdlib/blob/master/library/junos_console_devicemode#L74
https://github.com/Juniper/ansible-junos-stdlib/blob/master/library/junos_console_devicemode#L112
console argument is not described under Documentation->options
https://github.com/Juniper/ansible-junos-stdlib/blob/master/library/junos_console_devicemode#L111
Ansible output (redacted):
TASK: [Deploy configuration] **************************************************
failed: [router.example.net] => {"changed": false, "failed": true, "file": "/mypath/config.xml"}
msg: Unable to make changes
FATAL: all hosts have already failed -- aborting
PLAY RECAP ********************************************************************
to retry, use: --limit @/Users/myuser/deploy.retry
router.example.net : ok=4 changed=0 unreachable=0 failed=1
Netconf log file in router.example.net shows:
Mar 10 14:43:06 [37567] Outgoing: <rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:junos="http://xml.juniper.net/junos/13.2X51/junos" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="urn:uuid:c5c2a4ee-c733-11e4-8b93-3c15c2d90eda">
Mar 10 14:43:06 [37567] Outgoing: <commit-results>
Mar 10 14:43:12 [37567] Outgoing: <rpc-error>
Mar 10 14:43:12 [37567] Outgoing: <error-type>application</error-type>
Mar 10 14:43:12 [37567] Outgoing: <error-tag>invalid-value</error-tag>
Mar 10 14:43:12 [37567] Outgoing: <error-severity>warning</error-severity>
Mar 10 14:43:12 [37567] Outgoing: <error-path>[edit routing-instances BACKNET protocols]</error-path>
Mar 10 14:43:12 [37567] Outgoing: <error-message>mgd: requires 'bgp' license</error-message>
Mar 10 14:43:12 [37567] Outgoing: <error-info>
Mar 10 14:43:12 [37567] Outgoing: <bad-element>bgp</bad-element>
Mar 10 14:43:12 [37567] Outgoing: </error-info>
Mar 10 14:43:12 [37567] Outgoing: </rpc-error>
Mar 10 14:43:49 [37567] Outgoing: <routing-engine junos:style="normal">
Mar 10 14:43:49 [37567] Outgoing: <name>fpc0</name>
Mar 10 14:43:49 [37567] Outgoing: <commit-check-success/>
Mar 10 14:44:14 [37567] Outgoing: <commit-success/>
Mar 10 14:44:16 [37567] Outgoing: </routing-engine>
Mar 10 14:44:16 [37567] Outgoing: </commit-results>
Mar 10 14:44:16 [37567] Outgoing: <ok/>
Mar 10 14:44:16 [37567] Outgoing: </rpc-reply>
Mar 10 14:44:16 [37567] Outgoing: ]]>]]>
Mar 10 14:44:16 [37567] Incoming: <?xml version="1.0" encoding="UTF-8"?><nc:rpc xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="urn:uuid:e98608d7-c733-11e4-bc64-3c15c2d90eda"><nc:close-session/></nc:rpc>]]>]]>
Mar 10 14:44:16 [37567] Outgoing: <rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:junos="http://xml.juniper.net/junos/13.2X51/junos" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="urn:uuid:e98608d7-c733-11e4-bc64-3c15c2d90eda">
Mar 10 14:44:16 [37567] Outgoing: <ok/>
Mar 10 14:44:16 [37567] Outgoing: </rpc-reply>
We are working on the license thing, but the configuration is actually committed, so Ansible incorrectly reports that changes could not be made.
Host: Asthra
Model: srx5500
Running version on the router: 11.4R7
Installing version : 11.4R7
The version on the router and playbook code is same. Hence should abort.
But the playbook result is not clear:
TASK: [install Junos OS package] **********************************************
ok: [asthra] => {"changed": false, "check_mode": false, "ver": {"has": "11.4R7", "should": "11.4R7"}}
User has to open the log and see the actual error:
2014-05-12 14:42:23,815:asthra:upgrade pending reboot cycle, please be patient.
2014-05-12 14:42:23,930:asthra:pausing: 10
2014-05-12 14:42:33,940:asthra:process completed OK.
2014-05-12 14:55:13,503:asthra:No need to perform upgrade: 11.4R7
Instead, the same message can be printed as a part of playbook result.
Code junos_install_os:
if need_upgrade is False:
do_log("No need to perform upgrade: {}".format( has_ver ))
An additional message to be printed as result:
results['msg'] = "No need to perform upgrade: {}"
In standard mode, I can use relative paths:
tasks:
- name: Fetch Juniper configs
junos_get_config:
host="{{ inventory_hostname }}"
dest="configs/{{ inventory_hostname }}.conf"
format=text
user={{ LAB_USER }}
passwd={{ LAB_PASSWORD }}
logfile=logs/get_configs.log
register: config
When I invoke async:
tasks:
- name: Fetch Juniper configs
junos_get_config:
host="{{ inventory_hostname }}"
dest="configs/{{ inventory_hostname }}.conf"
format=text
user={{ LAB_USER }}
passwd={{ LAB_PASSWORD }}
logfile=logs/get_configs.log
async: 45
poll: 1
register: config
I get the error:
msg: Uncaught exception - please report: [Errno 2] No such file or directory: 'configs/<<router>>.conf' failed: [<<router>>] => {"ansible_job_id": "561876101247.26669", "changed": false, "failed": true, "finished": 1}
However, if I set full paths:
tasks:
- name: Fetch Juniper configs
junos_get_config:
host="{{ inventory_hostname }}"
dest="/opt/ansible/configs/{{ inventory_hostname }}.conf"
format=text
user={{ LAB_USER }}
passwd={{ LAB_PASSWORD }}
logfile=/opt/ansible/logs/get_configs.log
async: 45
poll: 1
register: config
everything works.
We have tried on both an EX4200 and SRX240 and get this error using this playbook. We thought it may be a PyEZ version but we have tried 1.2.2 and 1.2.3
TASK: [Install Junos OS package] **********************************************
failed: [10.210.14.170] => {"failed": true, "parsed": false}
Traceback (most recent call last):
File "/home/htpcguides/.ansible/tmp/ansible-tmp-1440670135.82-236773385389926/junos_install_os", line 1874, in <module>
main()
File "/home/htpcguides/.ansible/tmp/ansible-tmp-1440670135.82-236773385389926/junos_install_os", line 256, in main
results = junos_install_os(module, dev)
File "/home/htpcguides/.ansible/tmp/ansible-tmp-1440670135.82-236773385389926/junos_install_os", line 199, in junos_install_os
ok = sw.install(package, **sw_args)
File "/home/htpcguides/.local/lib/python2.7/site-packages/jnpr/junos/utils/sw.py", line 386, in install
checksum=checksum)
File "/home/htpcguides/.local/lib/python2.7/site-packages/jnpr/junos/utils/sw.py", line 267, in safe_copy
self.put(package, remote_path, progress)
File "/home/htpcguides/.local/lib/python2.7/site-packages/jnpr/junos/utils/sw.py", line 131, in put
scp.put(package, remote_path)
File "/home/htpcguides/.local/lib/python2.7/site-packages/scp.py", line 154, in put
self._send_files(files)
File "/home/htpcguides/.local/lib/python2.7/site-packages/scp.py", line 245, in _send_files
self._progress(basename, size, 0)
TypeError: update_my_progress() takes exactly 2 arguments (3 given)
Model: All supported Models
Ansible module: junos_install_os
Use case: Juniper router allows user to override existing configuration and install image using "no-validate" flag.
Current code:
def main():
module = AnsibleModule(
argument_spec = dict(
host=dict(required=True),
package=dict(required=True),
user=dict(required=False, default=os.getenv('USER')),
passwd=dict(required=False, default=None),
version=dict(required=False, default=None),
logfile=dict(required=False, default=None),
no_copy=dict(required=False, choices=BOOLEANS, default=False),
reboot=dict(required=False, choices=BOOLEANS, default=True),
reboot_pause=dict(required=False, type='int', default=10)
),
supports_check_mode = True
)
Already there is no-copy option available. Support for no-validate flag is needed.
Guys,
I'm trying to use commit check in library/junos_install_config.
Added commit_check:1 in the play-book but it didnt work.
I changed the script (junos_install_config) to make it work.
I'm not sure if its an issue or if I'm using it wrong.
Let me know. if its an issue, I'll send you the fix I did.
Thank you,
Aaron Prat
Exceptions raised in the underlying netconify library are not being handled by Ansible.
TASK: [Reset to baseline config] **********************************************
failed: [stag] => {"failed": true, "parsed": false}
invalid output was: ERROR: bad_passwd
Relo of issue reported on py-junos-eznc #216
https://github.com/Juniper/ansible-junos-stdlib/blob/master/library/junos_console_devicemode#L96
port as per description is Mandatory but cannot be seen under AnsibleModule.
qfx default value mimatch between none and node.
https://github.com/Juniper/ansible-junos-stdlib/blob/master/library/junos_console_devicemode#L76
https://github.com/Juniper/ansible-junos-stdlib/blob/master/library/junos_console_devicemode#L112
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.