使用fortios_monitor升级FortiGate-60F遇-586错误求助
问题解答
1. 错误码-586的含义
错误码-586是Fortinet设备返回的文件上传格式不兼容/内容验证失败错误,通常出现在固件文件的编码、格式不符合设备要求时——你在file_content前添加的x"前缀破坏了Base64编码内容,导致设备无法解析上传的固件文件,触发了这个错误。
2. 成功完成固件升级的修正方案
问题核心
你的playbook中file_content的处理逻辑存在两处错误:
- 多余的
x"前缀让设备识别到无效的文件格式 - 额外的
| string过滤会干扰二进制固件文件的编码转换
修正后的Playbook
- hosts: fortigates collections: - fortinet.fortios connection: httpapi gather_facts: "False" vars: vdom: "root" ansible_httpapi_use_ssl: yes ansible_httpapi_validate_certs: no ansible_httpapi_port: 443 tasks: - name: Upgrade firmware fortinet.fortios.fortios_monitor: vdom: "{{ vdom }}" selector: 'upgrade.system.firmware' params: source: "upload" filename: 'FGT_60F-v6-build1911-FORTINET.out' file_content: "{{ lookup('file', './FGT_60F-v6-build1911-FORTINET.out') | b64encode }}"
关键修正点
- 移除
file_content值前的x"前缀,直接传递Base64编码后的固件内容 - 删除
| string过滤,因为lookup('file')读取二进制固件文件后,直接做Base64编码即可,转字符串会引入编码异常
额外注意事项
- 确认固件文件路径正确,Ansible节点能正常读取该文件
- 升级前确保设备无未保存的配置变更,处于稳定状态
- 升级后设备会自动重启,可添加以下任务等待设备恢复:
- name: Wait for FortiGate to reboot and reconnect wait_for: host: "{{ inventory_hostname }}" port: 443 delay: 60 timeout: 300
内容的提问来源于stack exchange,提问作者JehhmD
相关产品推荐
相关产品推荐

