cisco.ios.ios_config模块出现异常Socket路径错误求助
解决Ansible ios_config模块socket路径不存在的异常
问题场景
现有运行中的Ansible剧本,流程为:调用密码管理器API → 设置facts → 执行cisco.ios.ios_config备份配置,近期突然触发以下异常:
The full traceback is: File "/home/user_account/.local/lib/python3.10/site-packages/ansible_collections/cisco/ios/plugins/module_utils/network/ios/ios.py", line 60, in get_capabilities capabilities = Connection(module._socket_path).get_capabilities() File "/home/user_account/.local/lib/python3.10/site-packages/ansible/module_utils/connection.py", line 193, in __rpc__ response = self._exec_jsonrpc(name, *args, **kwargs) File "/home/user_account/.local/lib/python3.10/site-packages/ansible/module_utils/connection.py", line 140, in _exec_jsonrpc raise ConnectionError( fatal: [hostname]: FAILED! => changed=false invocation: module_args: after: null backup: true backup_options: dir_path: /home/user_account/backups/hostname filename: hostname_20240822T195858.txt before: null defaults: false diff_against: null diff_ignore_lines: null intended_config: null lines: null match: line multiline_delimiter: '@' parents: null replace: line running_config: null save_when: never src: null msg: socket path /home/user_account/.ansible/pc/e1b79382e1 does not exist or cannot be found. See Troubleshooting socket path issues in the Network Debug and Troubleshooting Guide
当前环境:Ansible core 2.17.0、Python 3.10.12、Ubuntu 22.04,已排除切换LibSSH、降级Ansible 2.14的方案。
排查与解决步骤
1. 调整持久化连接超时配置
Ansible持久化连接的超时设置可能导致socket被提前回收,修改ansible.cfg中的持久化连接参数:
[persistent_connection] persistent_connect_timeout = 30 # 延长连接超时时间,默认10秒 persistent_command_timeout = 60 # 延长命令执行超时时间,默认30秒 persistent_log_messages = True # 开启持久化连接日志,便于排查
2. 在API调用后重置SSH连接
密码管理器API调用可能耗时较长,导致之前建立的SSH连接超时失效,在API调用后添加重置连接的任务:
- name: 调用密码管理器API获取凭证 uri: url: "your_password_manager_api_url" method: GET register: password_manager_response - name: 设置facts set_fact: ansible_ssh_pass: "{{ password_manager_response.json.password }}" - name: 重置SSH连接,避免超时失效 meta: reset_connection - name: Backup configuration from switch stacks.... cisco.ios.ios_config: backup: true backup_options: filename: "{{ file_string }}.txt" dir_path: "/home/user_account/backups/{{ inventory_hostname }}"
3. 检查本地临时目录权限与清理规则
- 验证Ansible临时socket目录的权限,确保运行用户拥有读写权限:
ls -ld /home/user_account/.ansible/pc/ chown -R user_account:user_account /home/user_account/.ansible/ - 检查系统临时文件清理规则,Ubuntu 22.04默认的
systemd-tmpfiles可能会自动清理.ansible/pc目录,创建自定义规则文件/etc/tmpfiles.d/ansible.conf:
配置为7天清理一次,避免连接过程中socket文件被删除。d /home/user_account/.ansible/pc 0700 user_account user_account 7d -
4. 验证Paramiko版本兼容性
确认当前Paramiko版本与Ansible 2.17.0兼容(要求Paramiko ≥2.7.0):
pip3 show paramiko
若版本过低,升级到兼容版本:
pip3 install --upgrade paramiko==2.12.0
5. 启用DEBUG日志定位根因
执行剧本时开启最高级别的DEBUG日志,追踪socket创建与连接过程:
ANSIBLE_DEBUG=1 ansible-playbook your_playbook.yml -vvv
日志中会包含socket文件的创建时间、连接状态、超时触发点等信息,可精准定位问题。
内容的提问来源于stack exchange,提问作者Moridn
相关产品推荐
相关产品推荐

