代码之家  ›  专栏  ›  技术社区  ›  Lesley L

如何在发送电子邮件后删除临时文件

  •  0
  • Lesley L  · 技术社区  · 2 年前

    我想在成功发送电子邮件后删除临时文件,但如果电子邮件任务失败,请将其保留在原位。

    这是我的任务:

      - name: send email
        mail:
          host: smtp.example.com
          port: 25
          from: "{{ emailme }}"
          to: "{{ emailme }}"
          subject: "initial config script for {{ uppercase_hostname }}"
          body: "Here it is"
          attach: "{{ tempfilename }}"
        notify: remove temp file
        changed_when: true
    

    我不得不添加“changed_when”,因为当电子邮件成功发送时,邮件模块会返回“ok”,所以通常不会通知处理程序。但也许电子邮件操作会失败——临时文件仍然会被删除。

    如果电子邮件任务失败,我如何保留文件?如果SMTP服务器出现故障或配置错误,可能会发生这种情况,在这种情况下,我可能需要通过其他方法获取文件。也许有一种方法可以让我把“ok”状态视为“已更改”?

    1 回复  |  直到 2 年前
        1
  •  1
  •   itsmedannyc    2 年前

    如果电子邮件任务失败,您可以使用阻止错误处理将文件保留在原位。例如:

    - name: Send email and conditionally remove temp file
      block:
    
      - name: Send email 
        mail:
          host: smtp.example.com
          port: 25
          from: "{{ emailme }}"
          to: "{{ emailme }}"  
          subject: "Initial config script for {{ uppercase_hostname }}"
          body: "Here it is"
          attach: "{{ tempfilename }}"
        changed_when: true
    
      - name: Remove temp file
        file:
          path: "{{ tempfilename }}"
          state: absent
    
      rescue:
    
      - name: Debug message that file was left due to failure
        debug:
          msg: "Email failed, leaving {{ tempfilename }} in place."
    

    这将在一个块中同时运行电子邮件和临时文件删除任务。如果其中一个失败,它将进入救援部分,跳过删除文件,并打印一条调试消息,说明由于失败,文件保留在原位。

    关键是使用阻塞和救援来定义一组共同成功或失败的任务。通过这种方式,您可以对失败采取有条件的操作。

    推荐文章