Juniper Networks支持使用Ansible管理运行Junos操作系统(Junos OS)的设备。本集合托管在Ansible Galaxy网站,名称为juniper.device,包含一系列Ansible模块,用于在Junos OS设备上执行特定的操作和配置任务,包括:安装和升级Junos OS、网络中新Junos设备的配置、加载配置变更、检索设备信息、重置/重启/关闭设备等。
注意:该Ansible集合仍在开发中,命名空间/模块实现可能会有变化。建议专业实施时暂时使用juniper.junos角色,详情参见https://github.com/Juniper/ansible-junos-stdlib/tree/roles%E3%80%82
Ansible Galaxy正升级为集合形式,并计划未来弃用角色。主分支现在支持juniper.device集合,juniper.junos角色已移至roles分支,详情参见https://github.com/Juniper/ansible-junos-stdlib/tree/roles%E3%80%82
Ansible 2.1及以上版本原生包含Junos核心模块,名称以junos_为前缀。本juniper.device集合中的模块名称以模块类型开头。两套模块可在同一Ansible控制机共存,Playbook可调用任一(或两者)模块。Juniper Networks建议编写新Playbook时使用本集合中的模块。
本集合包含以下模块:
使用juniper.device集合需安装2.6.0或更高版本的junos-eznc(PyEZ)。
除上述模块外,为jsnapy模块提供了jsnapy回调插件。该插件可在屏幕上打印jsnapy失败测试的额外信息,在Playbook RECAP后为每个失败测试打印日志,示例如下:
PLAY RECAP ********************************************************************* qfx10002-01 : ok=3 changed=0 unreachable=0 failed=1 qfx10002-02 : ok=3 changed=0 unreachable=0 failed=1 qfx5100-01 : ok=1 changed=0 unreachable=0 failed=1 JSNAPy Results for: qfx10002-01 ************************************************ Value of 'peer-state' not 'is-equal' at '//bgp-information/bgp-peer' with {"peer-as": "65200", "peer-state": "Active", "peer-address": "100.0.0.21"} Value of 'peer-state' not 'is-equal' at '//bgp-information/bgp-peer' with {"peer-as": "60021", "peer-state": "Idle", "peer-address": "192.168.0.1"} Value of 'oper-status' not 'is-equal' at '//interface-information/physical-interface[normalize-space(admin-status)='up' and logical-interface/address-family/address-family-name ]' with {"oper-status": "down", "name": "et-0/0/18"}
jsnapy插件目前处于实验阶段,欢迎提供反馈。回调插件默认不激活,需在Ansible配置文件[defaults]部分添加callback_whitelist变量启用:
ini[defaults] callback_whitelist = jsnapy
适用于网络管理员、DevOps工程师使用Ansible自动化管理Junos OS设备,包括设备配置部署、软件版本升级、网络状态监控、故障排查等场景,尤其适合大规模Junos设备集群的统一管理。
依赖项
控制机需安装以下依赖:
Ansible Galaxy集合安装
使用ansible-galaxy命令安装最新版本:
bashsudo ansible-galaxy collection install juniper.device
安装GitHub上的最新开发版本:
bashsudo ansible-galaxy collection install git+https://github.com/Juniper/ansible-junos-stdlib.git#/ansible_collections/juniper/device
更多信息参见Ansible集合使用文档。
Git克隆安装(测试用)
克隆仓库并运行env-setup脚本:
bashgit clone https://github.com/Juniper/ansible-junos-stdlib.git cd ansible-junos-stdlib source env-setup
脚本会设置$ANSIBLE_LIBRARY变量,包含仓库路径和系统Ansible库路径,示例:
bashecho $ANSIBLE_LIBRARY /home/user/ansible-junos-stdlib/library:/usr/share/ansible
Docker部署
Docker镜像包含JSNAPy和PyEZ,可直接从Docker Hub拉取并运行。
基本使用
拉取镜像并以交互方式运行ash shell:
bashdocker run -it --rm juniper/pyez-ansible
挂载主机目录
挂载当前工作目录到容器,方便访问Playbook文件:
bashdocker run -it --rm -v $PWD:/project juniper/pyez-ansible
执行Playbook
假设Playbook目录结构如下:
example/ ├── playbook.yml ├── hosts ├── vars/ ├── templates/ └── scripts/
进入目录并执行Playbook:
bashcd example/ docker run -it --rm -v $PWD:/playbooks juniper/pyez-ansible ansible-playbook -i hosts playbook.yml
可传递任意有效命令字符串给容器执行,例如创建别名简化命令:
bashalias pb-ansible="docker run -it --rm -v $PWD:/project juniper/pyez-ansible ansible-playbook" pb-ansible -i hosts playbook.yml
扩展容器功能
可通过环境变量或挂载文件安装额外依赖:
Alpine系统包:通过$APK环境变量指定包列表文件,或挂载/extras/apk.txt(每行一个包名):
bashdocker run -it --rm -v $PWD:/project -e APK="apk.txt" juniper/pyez-ansible # 或 docker run -it --rm -v $PWD/apk.txt:/extras/apk.txt juniper/pyez-ansible
Python包:通过$REQ环境变量指定pip requirements文件,或挂载/extras/requirements.txt:
bashdocker run -it --rm -v $PWD:/project -e REQ="requirements.txt" juniper/pyez-ansible # 或 docker run -it --rm -v $PWD/requirements.txt:/extras/requirements.txt juniper/pyez-ansible
Ansible包:通过$ROLES环境变量指定Ansible requirements文件,或挂载/extras/requirements.yml(支持集合和角色):
bashdocker run -it --rm -v $PWD:/project -e REQ="requirements.yml" juniper/pyez-ansible # 或 docker run -it --rm -v $PWD/requirements.yml:/extras/requirements.yml juniper/pyez-ansible
以下示例演示使用Ansible安装/升级Junos OS软件镜像:
yaml--- - name: 安装Junos OS hosts: dc1 collections: - juniper.device connection: local gather_facts: no vars: wait_time: 3600 pkg_dir: /var/tmp/junos-install OS_version: 14.1R1.10 OS_package: jinstall-14.1R1.10-domestic-signed.tgz log_dir: /var/log/ansible tasks: - name: 检查NETCONF连接性 wait_for: host={{ inventory_hostname }} port=830 timeout=5 - name: 安装Junos OS包 software: reboot: yes version: "{{ OS_version }}" package: "{{ pkg_dir }}/{{ OS_package }}" logfile: "{{ log_dir }}/software.log" register: sw notify: - 等待重启 handlers: - name: 等待重启 wait_for: host={{ inventory_hostname }} port=830 timeout={{ wait_time }} when: not sw.check_mode
MacOS Mojave及更高版本(>=10.14)
系统ssh-keygen创建的SSH密钥默认使用新的'OPENSSH'格式(即使指定-t rsa),可能影响ssh_private_key_file使用。处理方法:
ssh-keygen -m PEM -t rsa -b 4096head -n1 ~/.ssh/私钥文件,RSA密钥以-----BEGIN RSA PRIVATE KEY-----开头,OPENSSH密钥以-----BEGIN OPENSSH PRIVATE KEY-----开头ssh-keygen -p -m PEM -f ~/.ssh/私钥文件juniper.device集合由社区和Juniper Networks提供支持,遇到问题可:
Ansible核心Junos模块支持由Ansible提供,问题需提交至https://github.com/ansible/ansible/issues%E3%80%82
Juniper Networks积极维护此仓库,联系***获取更多信息。
当前贡献者: https://github.com/vnitinv, https://github.com/rahkumar651991, https://github.com/ntwrkguru
前任贡献者: https://github.com/stacywsmith, https://github.com/jeremyschulman, https://github.com/shermdog, https://github.com/dgarros, https://github.com/dgjnpr
Apache 2.0
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务