diff --git a/ansible.cfg b/ansible.cfg deleted file mode 100644 index 7854967..0000000 --- a/ansible.cfg +++ /dev/null @@ -1,4 +0,0 @@ -[defaults] -roles_path = roles -vault_password_file=tests/vault_key.sh -;filter_plugins = plugins/filter diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100755 index 734a26d..0000000 --- a/docker-compose.yml +++ /dev/null @@ -1,18 +0,0 @@ ---- -version: '3.2' -services: - portainer: - image: portainer/portainer-ce - container_name: portainer - ports: - - 9000:9000 - volumes: - - portainer_data:/data - - some_volume:/some_dir - - /var/run/docker.sock:/var/run/docker.sock - -volumes: - some_volume: - portainer_data: - external: true - name: portainer_data diff --git a/host_vars/localhost.yml b/host_vars/localhost.yml deleted file mode 100644 index d2ffd79..0000000 --- a/host_vars/localhost.yml +++ /dev/null @@ -1,23 +0,0 @@ -$ANSIBLE_VAULT;1.1;AES256 -31343237643365393335643262646139363037616365623238316536313238386237353436643738 -3332376365393138633962373132633562363035396161650a323039646238373162333366353533 -37333238643437623538343630393065313463313038616538613838366638636433313637313630 -3733623838373864320a373636303030373737336265353165373463306233333033393266343838 -31323634313531343262323561636438326166343461373133393166303630303865316661356165 -64366435343933396131313665336437363234393239663831363033356433383330323964613833 -36346436383739623163343130376465333465316139303437666333386633313132336234383936 -65353437336637353739373837343766333266396263396562366463626332363061383435353132 -34616134396136333266323930343866663332373864623537623765303435366331613466376137 -63346337303461623036306362306235366365646137316165376634316230396239623132363337 -35363932663361313533663436633532313732646564663463393233316231623361336332336135 -39356338363336336231643661313062303734316539653031313630363866303464643438653035 -37393039623961386539303235636562653130343237336332643639346631326633363366373466 -62356536356664353466383131306664653132393837663635366466613665626535323930366637 -38646263326264313363386634363834626638383563346361386165323430383266646631626362 -64303263383138353739656534623734623638653438353666623464656461316636626564326536 -34616163626539383265353963333734313363343162663434356337393266313637323732346231 -33373835373465666637663330653337373130373732303632326530336132333236313466653239 -30383632363337333833666132363563363361623865616134613538373439353836346366353065 -34356134633038653839333430313738613531653634333430373635373239653362393461306330 -35326532303432316636666134353534626139316331333538356165313965613739653665616237 -3165353731626130666639346263333865316362623134373463 diff --git a/playbook.yml b/playbook.yml deleted file mode 100644 index 5064363..0000000 --- a/playbook.yml +++ /dev/null @@ -1,107 +0,0 @@ ---- -- hosts: localhost - connection: local - become: true - - tasks: -# - debug: msg="{{ 'test' | a_filter }}" - - name: Install Docker Module for Python - pip: - name: - - docker - - docker-compose - - boto3 - - - name: Remove Portainer - docker_compose: - project_src: 'tests' - state: absent - - - name: Remove portainer volume - docker_volume: - name: portainer_data - state: absent - - - name: Create portainer volume - docker_volume: - name: portainer_data - state: present - - - name: Deploy Portainer - docker_compose: - project_src: 'tests' - state: present - - - - name: Portainer | Wait for ready - uri: - url: http://localhost:9000 - method: GET - status_code: 200 - register: result - until: result.status == 200 - retries: 60 - delay: 1 - - - debug: msg="{{result}}" - - - name: Register Portainer Admin User - uri: - url: http://localhost:9000/api/users/admin/init - method: POST - body: - Username: admin - Password: "adminadminadmin" - status_code: 200 - body_format: json - register: result - until: result.status == 200 - retries: 60 - delay: 1 - - - name: Backup Portainer - include_role: - name: docker_s3_backup - vars: - container_backup: portainer - - - name: Remove Portainer - docker_compose: - project_src: 'tests' - state: absent - - - name: Remove portainer volume - docker_volume: - name: portainer_data - state: absent - - - name: Restore Portainer Volume - include_role: - name: docker_s3_volume_restore - vars: - docker_backup_restore_latest_s3_key: true - docker_backup_s3_restores: - - volume_name: portainer_data - - - name: Deploy Portainer - docker_compose: - project_src: 'tests' - state: present - - - name: Auth as old user - uri: - url: http://localhost:9000/api/auth - method: POST - body: - Username: admin - Password: "adminadminadmin" - status_code: 200 - body_format: json - register: result - until: result.status == 200 - retries: 60 - delay: 1 - - - assert: - that: - - result.status == 200 diff --git a/plugins/filter/filters.py b/plugins/filter/filters.py new file mode 100644 index 0000000..d58572e --- /dev/null +++ b/plugins/filter/filters.py @@ -0,0 +1,15 @@ +#!/usr/bin/python +class FilterModule(object): + def filters(self): + return { + 'keep_last': self._keep_last, + } + + """ + _keep_last keeps the last n items of a list of lists + """ + def _keep_last(self, list_of_lists, num_to_keep): + lists_to_return = [] + for list_items in list_of_lists: + lists_to_return.append(list_items[0:-num_to_keep]) + return lists_to_return diff --git a/roles/docker_s3_backup/files/scripts/determine-s3-keys-to-delete.py b/roles/docker_s3_backup/files/scripts/determine-s3-keys-to-delete.py deleted file mode 100644 index 44435b0..0000000 --- a/roles/docker_s3_backup/files/scripts/determine-s3-keys-to-delete.py +++ /dev/null @@ -1,21 +0,0 @@ -#!/usr/bin/python -import os - - -def main(): - s3_result = eval(os.getenv("S3_RESULTS")) - num_backups_to_keep = int(os.getenv("NUM_BACKUPS_TO_KEEP")) - - items_to_delete = [] - for res in s3_result: - s3_keys = res["s3_keys"] - # fetch all of the backups before the desired number. - # these are the ones we want to delete. - items_to_delete.extend(s3_keys[0:-num_backups_to_keep]) - - for item in items_to_delete: - print(item) - - -if __name__ == "__main__": - main() diff --git a/roles/docker_s3_backup/filter_plugins/filters.py b/roles/docker_s3_backup/filter_plugins/filters.py deleted file mode 100644 index 05fc881..0000000 --- a/roles/docker_s3_backup/filter_plugins/filters.py +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/python -class FilterModule(object): - def filters(self): - return { - 'a_filter': self.a_filter, - } - - def a_filter(self, a_variable): - a_new_variable = a_variable + ' CRAZY NEW FILTER' - return a_new_variable diff --git a/roles/docker_s3_backup/tasks/main.yml b/roles/docker_s3_backup/tasks/main.yml index 3c13211..e963c3c 100644 --- a/roles/docker_s3_backup/tasks/main.yml +++ b/roles/docker_s3_backup/tasks/main.yml @@ -5,8 +5,6 @@ - name: Determine backup timestamp. ansible.builtin.set_fact: backup_time="{{ ansible_date_time.iso8601 }}" -- debug: msg="{{ 'test' | a_filter }}" - - name: Install Python dependencies ansible.builtin.pip: name: @@ -71,21 +69,9 @@ register: s3_list_outputs with_items: "{{ volume_mounts }}" -#- name: Copy Python Script -# ansible.builtin.copy: -# src: scripts/determine-s3-keys-to-delete.py -# dest: /tmp/determine-s3-keys-to-delete.py -# mode: 0775 - -# TODO: do this in a more native way rather than a python script reading env vars. -- name: Determine which backups should be deleted. -# ansible.builtin.script: /tmp/determine-s3-keys-to-delete.py - ansible.builtin.script: scripts/determine-s3-keys-to-delete.py - environment: - S3_RESULTS: "{{ s3_list_outputs.results }}" - NUM_BACKUPS_TO_KEEP: "{{ docker_backup_retain_count }}" - register: python_output - changed_when: false +- name: Find keys to delete. + set_fact: + s3_keys_to_delete: "{{ s3_list_outputs.results | map(attribute='s3_keys') | keep_last(docker_backup_retain_count) | flatten }}" - name: Delete old backups. amazon.aws.aws_s3: @@ -96,4 +82,4 @@ s3_url: "{{ docker_backup_aws_s3_url }}" object: "{{ item }}" mode: delobj - with_items: "{{ python_output.stdout_lines }}" + with_items: "{{ s3_keys_to_delete }}" diff --git a/tests/ansible.cfg b/tests/ansible.cfg index 7854967..9acce73 100644 --- a/tests/ansible.cfg +++ b/tests/ansible.cfg @@ -1,4 +1,4 @@ [defaults] roles_path = roles vault_password_file=tests/vault_key.sh -;filter_plugins = plugins/filter +filter_plugins = plugins/filter diff --git a/tests/playbook.yml b/tests/playbook.yml index 5064363..c91d143 100644 --- a/tests/playbook.yml +++ b/tests/playbook.yml @@ -4,7 +4,6 @@ become: true tasks: -# - debug: msg="{{ 'test' | a_filter }}" - name: Install Docker Module for Python pip: name: