将Vuls扫描CURL命令转换为Ansible URI模块配置遇阻,请求技术支持
解决Ansible URI模块转换Vuls扫描CURL命令的问题
你的核心问题有两个:一是Headers里的命令没有被执行,只是作为字符串传递了;二是没有正确处理--data-binary对应的包列表数据。下面是完整的修正Playbook,以及关键细节的解释:
完整Playbook配置
- hosts: localhost become: yes tasks: # 确保lsb-release包已安装(Debian/Ubuntu系需要) - name: Install lsb-release for system info apt: name: lsb-release state: present when: ansible_os_family == "Debian" # 收集系统信息变量 - name: Get OS Family command: lsb_release -si register: os_family_raw changed_when: false - name: Format OS Family to lowercase set_fact: os_family: "{{ os_family_raw.stdout | lower }}" - name: Get OS Release version command: lsb_release -sr register: os_release_raw changed_when: false - name: Get Kernel Release command: uname -r register: kernel_release_raw changed_when: false - name: Get Server Hostname command: hostname register: server_name_raw changed_when: false # 收集dpkg包列表数据 - name: Fetch dpkg package details command: dpkg-query -W -f="${binary:Package},${db:Status-Abbrev},${Version},${Source},${source:Version}\n" register: dpkg_package_list changed_when: false # 发送请求到Vuls服务器并保存结果 - name: Send data to Vuls scanning endpoint uri: method: POST url: https://abc.xyz.co/vuls headers: Content-Type: text/plain X-Vuls-OS-Family: "{{ os_family }}" X-Vuls-OS-Release: "{{ os_release_raw.stdout }}" X-Vuls-Kernel-Release: "{{ kernel_release_raw.stdout }}" X-Vuls-Server-Name: "{{ server_name_raw.stdout }}" body: "{{ dpkg_package_list.stdout }}" body_format: raw dest: /home/aman/vuls-report.json status_code: 200 when: not ansible_check_mode
关键修正点解释
- Headers命令执行问题:Ansible不会自动解析字符串中的Shell命令,所以必须用
command模块单独执行每个系统信息命令,通过register存储输出结果,再将结果传入Headers。比如OS家族名称通过lsb_release -si获取后,用lower过滤器转成小写,和原CURL逻辑一致。 - --data-binary的替代方案:CURL的
--data-binary对应Ansible URI模块的body参数,同时必须设置body_format: raw——因为我们发送的是纯文本格式的包列表,这个参数可以避免Ansible自动将Body转换成JSON格式,和原CURL的text/plainContent-Type匹配。 - 响应结果保存:用URI模块的
dest参数直接指定输出文件,替代CURL中的重定向>,这是Ansible的标准做法。 - 状态码校验:添加
status_code: 200可以确保请求成功,只有当服务器返回200状态码时,任务才会标记为成功,避免静默失败。 - changed_when: false:收集系统信息的命令不会修改系统状态,添加这个参数让Ansible标记这些任务为"未变更",符合Ansible的最佳实践。
内容的提问来源于stack exchange,提问作者Mr. Annonymous
相关产品推荐
相关产品推荐

