Ansible运行剧本提示Juniper.junos角色未找到,安装后仍报错如何解决
问题根因
- 安装路径与运行用户不匹配:执行安装命令时添加了
sudo,会把角色、集合安装到root用户的Ansible资源目录下,而你是用普通用户pagdas运行playbook的,Ansible只会在报错提示的/home/pagdas/相关路径下搜索资源,无法读取root用户目录下的安装内容。 - 新旧资源调用逻辑不兼容:你安装的
juniper.device是Juniper官方推出的新版Ansible集合,不需要通过roles字段调用旧的Juniper.junos角色,原有playbook的调用方式只适配已经停止维护的旧版角色。
解决方案
推荐使用官方维护的新版juniper.device集合,操作步骤如下:
- 卸载之前用root身份安装的冲突资源:
sudo ansible-galaxy remove Juniper.junos sudo ansible-galaxy collection remove juniper.device
- 切换为普通用户执行安装命令,不要加sudo:
ansible-galaxy collection install juniper.device
- 修改
/home/pagdas/aja2/uptime.yaml内容,删除roles段的旧角色调用,调整模块名适配新集合,修改后完整内容如下:
--- - name: Get device uptime hosts: - all connection: local gather_facts: no vars_prompt: - name: username prompt: Junos Username private: no - name: password prompt: Junos Password private: yes tasks: - name: get uptime using galaxy module juniper.device.command: commands: - show system uptime provider: host: "{{ ansible_host }}" port: 22 user: "{{ username }}" passwd: "{{ password }}"
可选方案(无需调整playbook,继续使用旧版角色):
如果你坚持使用原有写法,直接执行普通用户的旧角色安装命令即可:ansible-galaxy install Juniper.junos安装完成后直接运行原有playbook即可正常执行。
内容的提问来源于stack exchange,提问作者pantelis athanasiou
相关产品推荐
相关产品推荐

