Ansible Playbook copy模块执行报错及多证书文件备份需求咨询
报错原因排查
- 参数不兼容错误:
warn是shell、command等执行命令类模块的专属参数,ansible.builtin.copy模块本身无该参数配置项,你在copy任务下新增了args: warn: no配置,直接触发了模块不支持参数的报错。 - 返回值调用错误:
copy模块执行完成后返回的结果集不存在stdout_lines字段,该字段仅在调用执行Shell命令的模块时才会生成,你后续debug输出query1.stdout_lines也会触发后续报错。
多文件备份+验证Playbook实现
以下为可直接运行的完整实现,支持批量备份多份证书、自动追加.old后缀,同时完成备份结果校验:
--- - name: 备份PostgreSQL服务器证书并验证结果 hosts: all become: true become_user: postgres vars: # 按需修改为你实际需要备份的证书文件绝对路径列表,可自由增减 cert_files: - /<替换为实际绝对路径>/Config/file.crt - /<替换为实际绝对路径>/Config/file.key tasks: # 批量备份证书,自动追加.old后缀 - name: 备份证书文件为.old格式 ansible.builtin.copy: remote_src: yes src: "{{ item }}" dest: "{{ item }}.old" # 如果不需要覆盖已存在的历史.old备份,删除下一行force配置即可 force: yes loop: "{{ cert_files }}" # 执行文件列表查询验证备份结果 - name: 校验证书备份结果 shell: | hostname echo -e "\n==== 原始证书文件列表 ====" ls -l --time-style=long-iso {{ cert_files | join(' ') }} echo -e "\n==== 备份后.old后缀文件列表 ====" ls -l --time-style=long-iso {{ cert_files | map('regex_replace', '$', '.old') | list | join(' ') }} register: cert_check_result args: warn: no - name: 输出校验结果 debug: msg: "{{ cert_check_result.stdout_lines }}"
执行命令保持原有逻辑即可:ansible-playbook pg_ckCerts3.yml --ask-become-pass --limit <替换为实际服务器名>
内容的提问来源于stack exchange,提问作者K. Hilbert
相关产品推荐
相关产品推荐

