Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 12 additions & 2 deletions tasks/cleanup.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,15 @@
---
# Clean up releases
- name: ANSISTRANO | Gather releases
find:
paths: "{{ ansistrano_releases_path }}"
file_type: directory
recurse: false
register: ansistrano_releases
when: ansistrano_keep_releases | int > 0

- name: ANSISTRANO | Clean up releases
shell: ls -1dt {{ ansistrano_releases_path }}/* | tail -n +{{ ansistrano_keep_releases | int + 1 }} | xargs rm -rf
file:
path: "{{ item.path }}"
state: absent
loop: "{{ (ansistrano_releases.files | sort(attribute='mtime', reverse=true))[ansistrano_keep_releases | int:] }}"
when: ansistrano_keep_releases | int > 0
28 changes: 9 additions & 19 deletions tasks/update-code/unarchive.yml
Original file line number Diff line number Diff line change
@@ -1,32 +1,22 @@
---
- name: ANSISTRANO | Unarchive | Unarchive source
unarchive:
copy: no
src: "{{ ansistrano_archived_file }}"
dest: "{{ ansistrano_release_path.stdout }}"
exclude: "{{ ansistrano_unarchive_exclude }}"
extra_opts: "{{ ansistrano_unarchive_extra_opts }}"
when: ansistrano_unarchive_owner == "default" and ansistrano_unarchive_group == "default"

- name: ANSISTRANO | Unarchive | Unarchive source
fail:
msg: "must set ansistrano_unarchive_group and ansistrano_unarchive_owner"
assert:
that:
- (ansistrano_unarchive_owner == "default") == (ansistrano_unarchive_group == "default")
fail_msg: "must set ansistrano_unarchive_group and ansistrano_unarchive_owner"
when: >
(ansistrano_unarchive_owner == "default" and ansistrano_unarchive_group != "default") or
(ansistrano_unarchive_owner != "default" and ansistrano_unarchive_group == "default")
ansistrano_unarchive_owner == "default" or
ansistrano_unarchive_group == "default"

- name: ANSISTRANO | Unarchive | Unarchive source with owner and group
- name: ANSISTRANO | Unarchive | Unarchive source
unarchive:
copy: no
src: "{{ ansistrano_archived_file }}"
dest: "{{ ansistrano_release_path.stdout }}"
owner: "{{ ansistrano_unarchive_owner }}"
group: "{{ ansistrano_unarchive_group }}"
owner: "{{ ansistrano_unarchive_owner if ansistrano_unarchive_owner != 'default' else omit }}"
group: "{{ ansistrano_unarchive_group if ansistrano_unarchive_group != 'default' else omit }}"
exclude: "{{ ansistrano_unarchive_exclude }}"
extra_opts: "{{ ansistrano_unarchive_extra_opts }}"
when: >
ansistrano_unarchive_owner != "default" and
ansistrano_unarchive_group != "default"

- name: ANSISTRANO | Unarchive | Delete archived file
file:
Expand Down
52 changes: 52 additions & 0 deletions test/rsync-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,58 @@
roles:
- { role: local-ansistrano }

- name: When deploying with release cleanup enabled
hosts: all
vars:
ansistrano_deploy_to: "/tmp/cleanup-my-app.com"
pre_tasks:
- name: Set the first fixed release version
set_fact:
ansistrano_release_version: "20000101000000Z"
ansistrano_keep_releases: 1
roles:
- { role: local-ansistrano }

- name: And deploying a newer release with release cleanup enabled
hosts: all
vars:
ansistrano_deploy_to: "/tmp/cleanup-my-app.com"
pre_tasks:
- name: Set the second fixed release version
set_fact:
ansistrano_release_version: "20000101000001Z"
ansistrano_keep_releases: 1
roles:
- { role: local-ansistrano }

- name: Then only the newest release should remain
hosts: all
vars:
ansistrano_deploy_to: "/tmp/cleanup-my-app.com"
tasks:
- name: Assert the oldest release was removed
stat:
path: "{{ ansistrano_deploy_to }}/releases/20000101000000Z"
register: old_release

- name: Assert the newest release still exists
stat:
path: "{{ ansistrano_deploy_to }}/releases/20000101000001Z"
register: new_release

- name: Assert current points to the newest release
stat:
path: "{{ ansistrano_deploy_to }}/current"
register: current_release

- name: Assert old release was removed and newest release kept
assert:
that:
- old_release.stat.exists is defined and not old_release.stat.exists
- new_release.stat.exists is defined and new_release.stat.exists
- current_release.stat.islnk is defined and current_release.stat.islnk
- current_release.stat.lnk_target == "./releases/20000101000001Z"

- name: When deploying fails before symlink
hosts: all
vars:
Expand Down
Loading