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

Ansible循环执行OpenSSL命令失败求助:无法找到CSR文件

问题排查:Ansible执行OpenSSL验证CSR文件时报文件不存在

问题描述

需对fetch模块生成的目录(示例结构host1.csr/req、host2.csr/req)中的CSR文件执行openssl req -text -noout -verify -in <CSR文件路径>命令,测试阶段仅保留两个目录。编写的Ansible Playbook通过语法检查,但执行时提示host1.csr、host2.csr文件不存在,尽管find模块已成功找到这两个文件。

错误分析

原Playbook存在以下关键问题:

  • 缺少循环逻辑:shell任务未使用loop遍历找到的CSR文件,无法逐个处理目标文件。
  • 变量引用错误:cmd中同时传入{{ csr }}(整个find结果对象)和{{ item.path }},前者会输出冗余结构内容,导致命令解析错误。
  • 缩进与符号问题:set_fact的变量定义未正确缩进,且使用了中文引号“/‘,会导致Ansible无法正确解析变量。
  • 不必要的basename处理:提取文件名而非完整路径,OpenSSL无法定位到文件实际位置。

修正后的Playbook

- name: Find CSR files
  ansible.builtin.find:
    paths: /etc/cert_dir/workstations
    file_type: file
    patterns: "*.csr"
    recurse: yes
  register: csr_result

- name: Extract full CSR file paths
  set_fact:
    csr_files: "{{ csr_result.files | map(attribute='path') | list }}"

- name: Debug found CSR files
  debug:
    msg: "Located CSR files: {{ csr_files }}"

- name: Verify CSR files with OpenSSL
  ansible.builtin.shell:
    cmd: openssl req -text -noout -verify -in {{ item }}
  loop: "{{ csr_files }}"
  register: openssl_verify_results

- name: Print verification outputs
  debug:
    msg: "{{ item.stdout_lines }}"
  loop: "{{ openssl_verify_results.results }}"

修正说明

  1. 变量命名优化:将register结果命名为csr_result,避免与后续变量混淆,提升可读性。
  2. 保留完整路径:直接提取文件的完整路径存入csr_files,确保OpenSSL能准确定位文件。
  3. 添加循环逻辑:通过loop: "{{ csr_files }}"实现对每个CSR文件的逐个处理。
  4. 修复符号与缩进:替换所有中文引号为英文引号,修正set_fact的缩进问题,确保变量正确定义。
  5. 新增结果输出:添加任务打印OpenSSL的验证结果,方便排查问题。

内容的提问来源于stack exchange,提问作者TR757

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 19:45:05