You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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:
    d /home/user_account/.ansible/pc 0700 user_account user_account 7d -
    
    配置为7天清理一次,避免连接过程中socket文件被删除。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 07:46:01