import error: No module named plugins.action.normal

18 views
Skip to first unread message

jnau...@juniper.net

unread,
Dec 7, 2018, 6:03:45 PM12/7/18
to Ansible Project
Hi All,

When we attempt to use Ansible on a bare metal server running centos 6.5, single python2.7 the "juniper_junos_config:" module gives us this error "import error: No module named plugins.action.normal". This works fine on another Ubuntu server. I hope someone here may have some thoughts on what is wrong.

p-mon01{jnaughton}~/network-ansible/ansible [1038] $ ansible-playbook -i hosts-lab playbooks/lab-push.pb.yaml -vvv
ansible-playbook 2.7.0
config file = /home/jnaughton/network-ansible/ansible/ansible.cfg
configured module search path = [u'/home/jnaughton/network-ansible/ansible/modules']
ansible python module location = /usr/local/lib/python2.7/site-packages/ansible
executable location = /usr/local/bin/ansible-playbook
python version = 2.7.14 (default, Oct 19 2018, 14:48:27) [GCC 4.4.7 20120313 (Red Hat 4.4.7-11)]
Using /home/jnaughton/network-ansible/ansible/ansible.cfg as config file
Parsed /home/jnaughton/network-ansible/ansible/hosts-lab inventory source with ini plugin

PLAYBOOK: lab-push.pb.yaml *************************************************************************************************
1 plays in playbooks/lab-push.pb.yaml
Username: labtech
Password:

PLAY [Load and generate a configuration and push to a device running Junos OS] *********************************************
META: ran handlers

TASK [load configure file into device] *************************************************************************************
task path: /home/jnaughton/network-ansible/ansible/playbooks/lab-push.pb.yaml:24
<10.95.7.5> ESTABLISH LOCAL CONNECTION FOR USER: jnaughton
<10.95.7.5> EXEC /bin/sh -c 'echo ~jnaughton && sleep 0'
<10.95.7.5> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo /home/jnaughton/.ansible/tmp/ansible-tmp-1543333736.61-164598744816379 `" && echo ansible-tmp-1543333736.61-164598744816379="` echo /home/jnaughton/.ansible/tmp/ansible-tmp-1543333736.61-164598744816379 `" ) && sleep 0'
Using module file /home/jnaughton/.ansible/roles/Juniper.Junos/library/juniper_junos_config.py
<10.95.7.5> PUT /home/jnaughton/.ansible/tmp/ansible-local-229118drPfu/tmpjeSXDq TO /home/jnaughton/.ansible/tmp/ansible-tmp-1543333736.61-164598744816379/AnsiballZ_juniper_junos_config.py
<10.95.7.5> EXEC /bin/sh -c 'chmod u+x /home/jnaughton/.ansible/tmp/ansible-tmp-1543333736.61-164598744816379/ /home/jnaughton/.ansible/tmp/ansible-tmp-1543333736.61-164598744816379/AnsiballZ_juniper_junos_config.py && sleep 0'
<10.95.7.5> EXEC /bin/sh -c '/usr/bin/python /home/jnaughton/.ansible/tmp/ansible-tmp-1543333736.61-164598744816379/AnsiballZ_juniper_junos_config.py && sleep 0'
<10.95.7.5> EXEC /bin/sh -c 'rm -f -r /home/jnaughton/.ansible/tmp/ansible-tmp-1543333736.61-164598744816379/ > /dev/null 2>&1 && sleep 0'
The full traceback is:
Traceback (most recent call last):
File "/home/jnaughton/.ansible/tmp/ansible-tmp-1543333736.61-164598744816379/AnsiballZ_juniper_junos_config.py", line 113, in <module>
_ansiballz_main()
File "/home/jnaughton/.ansible/tmp/ansible-tmp-1543333736.61-164598744816379/AnsiballZ_juniper_junos_config.py", line 105, in _ansiballz_main
invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)
File "/home/jnaughton/.ansible/tmp/ansible-tmp-1543333736.61-164598744816379/AnsiballZ_juniper_junos_config.py", line 48, in invoke_module
imp.load_module('__main__', mod, module, MOD_DESC)
File "/tmp/ansible_juniper_junos_config_payload_rUnJEK/__main__.py", line 741, in <module>
File "/tmp/ansible_juniper_junos_config_payload_rUnJEK/ansible_juniper_junos_config_payload.zip/ansible/module_utils/juniper_j nos_common.py", line 40, in <module>
ImportError: No module named plugins.action.normal
fatal: [10.95.7.5]: FAILED! => {
"changed": false,
"module_stderr": "Traceback (most recent call last):\n File \"/home/jnaughton/.ansible/tmp/ansible-tmp-1543333736.61-164598744816379/AnsiballZ_juniper_junos_config.py\", line 113, in <module>\n _ansiballz_main()\n File \"/home/jnaughton/.ansible/tmp/ansible-tmp-1543333736.61-164598744816379/AnsiballZ_juniper_junos_config.py\", line 105, in _ansiballz_main\n invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)\n File \"/home/jnaughton/.ansible/tmp/ansible-tmp-1543333736.61-164598744816379/AnsiballZ_juniper_junos_config.py\", line 48, in invoke_module\n imp.load_module('__main__', mod, module, MOD_DESC)\n File \"/tmp/ansible_juniper_junos_config_payload_rUnJEK/__main__.py\", line 741, in <module>\n File \"/tmp/ansible_juniper_junos_config_payload_rUnJEK/ansible_juniper_junos_config_payload.zip/ansible/module_utils/juniper_junos_comm on.py\", line 40, in <module>\nImportError: No module named plugins.action.normal\n",
"module_stdout": "",
"msg": "MODULE FAILURE\nSee stdout/stderr for the exact error",
"rc": 1
}

PLAY RECAP *****************************************************************************************************************
10.95.7.5 : ok=0 changed=0 unreachable=0 failed=1


The Juniper.Junos role is installed:

p-mon01{jnaughton}~/network-ansible/ansible [1039] $ ansible-galaxy list
- Juniper.Junos, 2.1.0
p-mon01{jnaughton}~/network-ansible/ansible [1040] $ ansible-galaxy Juniper.Junos info

Role: Juniper.Junos
description: Network build automation of Junos devices.
active: True
commit: 019573cc435cd7c8c6eb54cce286cce1209d7b91
commit_message: Merge pull request #372 from rsmekala/master

Prepare the 2.1.0 release
commit_url: https://github.com/Juniper/ansible-junos-stdlib/commit/019573cc435cd7c8c6eb54cce286cce1209d7b91
company: Juniper Networks, Inc.
created: 2016-02-26T11:54:40.759806Z
dependencies: []
download_count: 61453
forks_count: 117
galaxy_info:
author: Juniper
categories: ['networking']
company: Juniper Networks, Inc.
galaxy_tags: ['networking', 'junos', 'juniper']
license: Apache 2.0
min_ansible_version: 2.1
platforms: [{'name': 'junos', 'versions': ['all']}]
github_branch: master
github_repo: ansible-junos-stdlib
github_user: Juniper
id: 8138
imported: 2018-06-01T05:42:42.847519-04:00
install_date: Mon Nov 19 21:49:07 2018
intalled_version: 2.1.0
is_valid: True
issue_tracker_url: https://github.com/Juniper/ansible-junos-stdlib/issues
license: Apache 2.0
min_ansible_version: 2.1
modified: 2018-06-30T05:11:19.035846Z
open_issues_count: 26
path: [u'/home/jnaughton/.ansible/roles']
role_type: ANS
stargazers_count: 197
travis_status_url:


Here is the  Ansible config file
p-mon01{jnaughton}~/network-ansible/ansible [1022] $ grep ^[^#] ansible.cfg
[defaults]
inventory = hosts
library = ./modules
forks = 50
ansible_python_interpreter = /usr/local/bin/python   <-- this looks correct
gathering = smart
roles_path = /home/jnaughton/.ansible/roles
host_key_checking = False
fact_caching = jsonfile
fact_caching_timeout = 86400
fact_caching_connection = /tmp
retry_files_enabled = False
[privilege_escalation]
[paramiko_connection]
[ssh_connection]
[accelerate]
[selinux]
[colors]
highlight = white
verbose = blue
warn = bright purple
error = red
debug = dark gray
deprecate = purple
skip = cyan
unreachable = red
ok = green
changed = yellow
diff_add = green
diff_remove = red
diff_lines = cyan


The Python version looks correct. 
p-mon01{jnaughton}~ [1005] $ which python
/usr/local/bin/python
p-mon01{jnaughton}~ [1006] $ python
Python 2.7.14 (default, Oct 19 2018, 14:48:27)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-11)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import jnpr.junos
>>> jnpr.junos.__version__
'2.2.0'
>>> quit()


The playbook
p-mon01{jnaughton}~/network-ansible/ansible/playbooks [1017] $ cat lab-push.pb.yaml
---
- name: Load and generate a configuration and push to a device running Junos OS
gather_facts: no
connection: local
hosts: LAB
roles:
- Juniper.Junos
vars_prompt:
- name: netconf_user
prompt: Username
private: no
- name: netconf_password
prompt: Password
private: yes
gather_facts: no
vars:
credentials:
host: "{{ inventory_hostname }}"
port: 830
username: "{{ netconf_user }}"
password: "{{ netconf_password }}"

tasks:
- name: load configure file into device
juniper_junos_config:
provider: "{{ credentials }}"
src: "/home/jnaughton/network-ansible/ansible/lab.set"
comment: Updated by Ansible

# - name: load configure file into device
# junos_install_config:
# host={{ inventory_hostname }}
# file=/home/jnaughton/network-ansible/ansible/{{ inventory_hostname }}.set


And the roles directory look correct
p-mon01{jnaughton}~/network-ansible/ansible [1023] $ ls /home/jnaughton/.ansible/roles
Juniper.Junos
#####################
p-mon01{jnaughton}~/.ansible/roles/Juniper.Junos/action_plugins [1039] $ ls -la
total 48
drwxrwxr-x 2 jnaughton jnaughton 4096 Nov 27 10:24 .
drwxrwxr-x 10 jnaughton jnaughton 4096 Nov 19 16:49 ..
lrwxrwxrwx 1 jnaughton jnaughton 30 Nov 19 16:49 juniper_junos_command.py -> juniper_junos_common_action.py
-rwxrwxr-x 1 jnaughton jnaughton 2308 Jun 1 05:17 juniper_junos_common_action.py
lrwxrwxrwx 1 jnaughton jnaughton 30 Nov 19 16:49 juniper_junos_config.py -> juniper_junos_common_action.py
-rw-rw-r-- 1 jnaughton jnaughton 657 Nov 27 10:24 juniper_junos_config.pyc
lrwxrwxrwx 1 jnaughton jnaughton 30 Nov 19 16:49 juniper_junos_facts.py -> juniper_junos_common_action.py
lrwxrwxrwx 1 jnaughton jnaughton 30 Nov 19 16:49 juniper_junos_jsnapy.py -> juniper_junos_common_action.py
lrwxrwxrwx 1 jnaughton jnaughton 30 Nov 19 16:49 juniper_junos_ping.py -> juniper_junos_common_action.py
lrwxrwxrwx 1 jnaughton jnaughton 30 Nov 19 16:49 juniper_junos_pmtud.py -> juniper_junos_common_action.py
lrwxrwxrwx 1 jnaughton jnaughton 30 Nov 19 16:49 juniper_junos_rpc.py -> juniper_junos_common_action.py
lrwxrwxrwx 1 jnaughton jnaughton 30 Nov 19 16:49 juniper_junos_software.py -> juniper_junos_common_action.py
lrwxrwxrwx 1 jnaughton jnaughton 30 Nov 19 16:49 juniper_junos_srx_cluster.py -> juniper_junos_common_action.py
lrwxrwxrwx 1 jnaughton jnaughton 30 Nov 19 16:49 juniper_junos_system.py -> juniper_junos_common_action.py
lrwxrwxrwx 1 jnaughton jnaughton 30 Nov 19 16:49 juniper_junos_table.py -> juniper_junos_common_action.py
lrwxrwxrwx 1 jnaughton jnaughton 30 Nov 19 16:49 _junos_cli.py -> juniper_junos_common_action.py
-rwxrwxr-x 1 jnaughton jnaughton 3124 Jun 1 05:17 _junos_commit.py
-rwxrwxr-x 1 jnaughton jnaughton 3039 Jun 1 05:17 _junos_get_config.py
lrwxrwxrwx 1 jnaughton jnaughton 30 Nov 19 16:49 _junos_get_facts.py -> juniper_junos_common_action.py
lrwxrwxrwx 1 jnaughton jnaughton 30 Nov 19 16:49 _junos_get_table.py -> juniper_junos_common_action.py
-rwxrwxr-x 1 jnaughton jnaughton 4138 Jun 1 05:17 _junos_install_config.py
lrwxrwxrwx 1 jnaughton jnaughton 30 Nov 19 16:49 _junos_install_os.py -> juniper_junos_common_action.py
lrwxrwxrwx 1 jnaughton jnaughton 30 Nov 19 16:49 _junos_jsnapy.py -> juniper_junos_common_action.py
lrwxrwxrwx 1 jnaughton jnaughton 30 Nov 19 16:49 _junos_ping.py -> juniper_junos_common_action.py
lrwxrwxrwx 1 jnaughton jnaughton 30 Nov 19 16:49 _junos_pmtud.py -> juniper_junos_common_action.py
-rwxrwxr-x 1 jnaughton jnaughton 3206 Jun 1 05:17 _junos_rollback.py
lrwxrwxrwx 1 jnaughton jnaughton 30 Nov 19 16:49 _junos_rpc.py -> juniper_junos_common_action.py
-rwxrwxr-x 1 jnaughton jnaughton 4253 Jun 1 05:17 _junos_shutdown.py
lrwxrwxrwx 1 jnaughton jnaughton 30 Nov 19 16:49 _junos_srx_cluster.py -> juniper_junos_common_action.py
-rwxrwxr-x 1 jnaughton jnaughton 3311 Jun 1 05:17 _junos_zeroize.py

Dick Visser

unread,
Dec 8, 2018, 8:48:23 AM12/8/18
to ansible...@googlegroups.com
Could it be that you're mixing a virtualenv with OS package provided modules...?
> --
> You received this message because you are subscribed to the Google Groups "Ansible Project" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to ansible-proje...@googlegroups.com.
> To post to this group, send email to ansible...@googlegroups.com.
> To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/51164413-bdff-40b1-8fea-2f607cc1b3bb%40googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.



--
Dick Visser
Trust & Identity Service Operations Manager
GÉANT

jnau...@juniper.net

unread,
Dec 10, 2018, 10:12:10 AM12/10/18
to Ansible Project
Hi Dick,

No we are not using the virtualenv tool.  
Reply all
Reply to author
Forward
0 new messages