HarlemSquirrel
HarlemSquirrel

Reputation: 10124

Ansible: How to delete a folder and file inside a directory in a single task?

I'm using Ansible 2.3.2.0 and am trying to delete a file and folder inside a directory in one task.

Right now I have this

tasks:

  - name: Removing existing war
    file:
      path: /usr/share/tomcat/webapps/app.war
      state: absent

  - name: Removing existing folder
    file:
      path: /usr/share/tomcat/webapps/app
      state: absent

I cannot simply remove the webapps folder because I do not want to delete other files and folders in there. I want to reduce the number of tasks because I am using Duo push auth and this adds to the deploy time. I've tried looping over files and file globs but for some reason it never works.

http://docs.ansible.com/ansible/latest/playbooks_loops.html#looping-over-files

Upvotes: 9

Views: 40796

Answers (2)

spencerwjensen
spencerwjensen

Reputation: 702

If you simply want to delete a directory and its contents, just use the file module and pass the path to the directory only:

tasks:
 - name: Removing
   file:
     path: /usr/share/tomcat/webapps/app
     state: absent

See this post: Ansible: How to delete files and folders inside a directory?

and from the ansible docs:

If absent, directories will be recursively deleted, and files or symlinks will be unlinked.

see: http://docs.ansible.com/ansible/latest/file_module.html

Upvotes: 5

zigarn
zigarn

Reputation: 11595

Simply iterate over the two values:

tasks:
  - name: Removing
    file:
      path: "{{ item }}"
      state: absent
    with_items:
      - /usr/share/tomcat/webapps/app.war
      - /usr/share/tomcat/webapps/app

But it will still create 2 tasks executions: one for each item.

Upvotes: 14

Related Questions