mirror of
				https://github.com/paperless-ngx/paperless-ngx.git
				synced 2025-10-30 03:56:23 -05:00 
			
		
		
		
	molecule scenario to test upgrading from releases
Provide a separate scenario to install the last release, then update to the current one. Also includes improved deployment verification (check if uploading a .txt through the API works).
This commit is contained in:
		
							
								
								
									
										9
									
								
								.github/workflows/ansible.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										9
									
								
								.github/workflows/ansible.yml
									
									
									
									
										vendored
									
									
								
							| @@ -26,10 +26,15 @@ jobs: | |||||||
|           docker --version |           docker --version | ||||||
|           molecule --version |           molecule --version | ||||||
|           python --version |           python --version | ||||||
|       - name: Test with molecule |       - name: Test fresh installation with molecule | ||||||
|         run: | |         run: | | ||||||
|           cd ansible |           cd ansible | ||||||
|           molecule test |           molecule test -s fresh | ||||||
|  |         working-directory: "${{ github.repository }}" | ||||||
|  |       - name: Test release update with molecule | ||||||
|  |         run: | | ||||||
|  |           cd ansible | ||||||
|  |           molecule test -s update | ||||||
|         working-directory: "${{ github.repository }}" |         working-directory: "${{ github.repository }}" | ||||||
|   # # https://galaxy.ansible.com/docs/contributing/importing.html |   # # https://galaxy.ansible.com/docs/contributing/importing.html | ||||||
|   # release: |   # release: | ||||||
|   | |||||||
| @@ -1,7 +0,0 @@ | |||||||
| --- |  | ||||||
| - name: Converge |  | ||||||
|   hosts: all |  | ||||||
|   tasks: |  | ||||||
|     - name: "Include ansible" |  | ||||||
|       include_role: |  | ||||||
|         name: "ansible" |  | ||||||
| @@ -1,14 +0,0 @@ | |||||||
| --- |  | ||||||
| # This is an example playbook to execute Ansible tests. |  | ||||||
|  |  | ||||||
| - name: Verify |  | ||||||
|   hosts: all |  | ||||||
|   gather_facts: false |  | ||||||
|   tasks: |  | ||||||
|   - name: check if webserver is up |  | ||||||
|     uri: |  | ||||||
|       url: http://localhost:8000 |  | ||||||
|       status_code: [200, 302] |  | ||||||
|       return_content: yes |  | ||||||
|     register: landingpage |  | ||||||
|     failed_when: "'Sign in</button>' not in landingpage.content" |  | ||||||
							
								
								
									
										7
									
								
								ansible/molecule/fresh/converge.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								ansible/molecule/fresh/converge.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | |||||||
|  | --- | ||||||
|  | - name: fresh installation | ||||||
|  |   hosts: all | ||||||
|  |   tasks: | ||||||
|  |     - name: install paperless-ng with default parameters | ||||||
|  |       include_role: | ||||||
|  |         name: ansible | ||||||
							
								
								
									
										60
									
								
								ansible/molecule/fresh/verify.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								ansible/molecule/fresh/verify.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,60 @@ | |||||||
|  | --- | ||||||
|  | - name: Verify | ||||||
|  |   hosts: all | ||||||
|  |   gather_facts: false | ||||||
|  |  | ||||||
|  |   vars_files: | ||||||
|  |     - ../../defaults/main.yml | ||||||
|  |  | ||||||
|  |   tasks: | ||||||
|  |     - name: check if webserver is up | ||||||
|  |       uri: | ||||||
|  |         url: http://localhost:8000 | ||||||
|  |         status_code: [200, 302] | ||||||
|  |         return_content: yes | ||||||
|  |       register: landingpage | ||||||
|  |       failed_when: "'Sign in</button>' not in landingpage.content" | ||||||
|  |  | ||||||
|  |     - name: check if document posting works | ||||||
|  |       uri: | ||||||
|  |         url: http://localhost:8000/api/documents/post_document/ | ||||||
|  |         method: POST | ||||||
|  |         body_format: form-multipart | ||||||
|  |         body: | ||||||
|  |           document: | ||||||
|  |             content: FOO | ||||||
|  |             filename: document.txt | ||||||
|  |             mime_type: text/plain | ||||||
|  |         headers: | ||||||
|  |           Authorization: 'Basic {{ (paperlessng_superuser_name + ":" + paperlessng_superuser_password) | b64encode }}' | ||||||
|  |         return_content: yes | ||||||
|  |       register: post_document | ||||||
|  |       failed_when: "'OK' not in post_document.content" | ||||||
|  |  | ||||||
|  |     - name: verify uploaded document has been accepted | ||||||
|  |       uri: | ||||||
|  |         url: http://localhost:8000/api/logs/ | ||||||
|  |         headers: | ||||||
|  |           Authorization: 'Basic {{ (paperlessng_superuser_name + ":" + paperlessng_superuser_password) | b64encode }}' | ||||||
|  |         return_content: yes | ||||||
|  |       register: logs | ||||||
|  |       failed_when: "'Consuming document.txt' not in logs.content" | ||||||
|  |  | ||||||
|  |     # assumes txt consumption finished by now, might have to sleep a bit | ||||||
|  |     - name: verify uploaded document has been consumed | ||||||
|  |       uri: | ||||||
|  |         url: http://localhost:8000/api/logs/ | ||||||
|  |         headers: | ||||||
|  |           Authorization: 'Basic {{ (paperlessng_superuser_name + ":" + paperlessng_superuser_password) | b64encode }}' | ||||||
|  |         return_content: yes | ||||||
|  |       register: logs | ||||||
|  |       failed_when: "'document consumption finished' not in logs.content" | ||||||
|  |  | ||||||
|  |     - name: verify uploaded document is avaiable | ||||||
|  |       uri: | ||||||
|  |         url: http://localhost:8000/api/documents/1/ | ||||||
|  |         headers: | ||||||
|  |           Authorization: 'Basic {{ (paperlessng_superuser_name + ":" + paperlessng_superuser_password) | b64encode }}' | ||||||
|  |         return_content: yes | ||||||
|  |       register: document | ||||||
|  |       failed_when: "'Not found.' in document.content or 'FOO' not in document.content" | ||||||
							
								
								
									
										11
									
								
								ansible/molecule/update/converge.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								ansible/molecule/update/converge.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | |||||||
|  | --- | ||||||
|  | - name: update previous release to newest release | ||||||
|  |   hosts: all | ||||||
|  |   tasks: | ||||||
|  |     - name: set current version as installation target | ||||||
|  |       set_fact: | ||||||
|  |         paperlessng_version: 0.9.14 | ||||||
|  |  | ||||||
|  |     - name: update to newest paperless-ng release | ||||||
|  |       include_role: | ||||||
|  |         name: ansible | ||||||
							
								
								
									
										35
									
								
								ansible/molecule/update/molecule.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								ansible/molecule/update/molecule.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,35 @@ | |||||||
|  | --- | ||||||
|  | dependency: | ||||||
|  |   name: galaxy | ||||||
|  | driver: | ||||||
|  |   name: docker | ||||||
|  | platforms: | ||||||
|  |   - name: ubuntu_focal | ||||||
|  |     image: jrei/systemd-ubuntu:20.04 | ||||||
|  |     privileged: true | ||||||
|  |     volumes: | ||||||
|  |       - /sys/fs/cgroup:/sys/fs/cgroup:ro | ||||||
|  |     tmpfs: | ||||||
|  |       - /tmp | ||||||
|  |       - /run | ||||||
|  |       - /run/lock | ||||||
|  |     override_command: False | ||||||
|  |   # ubuntu 18.04 bionic works except that | ||||||
|  |   #   the default redis configuration expects IPv6 which is not enabled in docker by default | ||||||
|  |   #   the default Python environment is configured for ASCII instead of UTF-8 | ||||||
|  |   # ubuntu 16.04 xenial only has Python 3.5 which is EOL and breaks multiple dependencies | ||||||
|  |   - name: debian_buster | ||||||
|  |     image: jrei/systemd-debian:10 | ||||||
|  |     privileged: true | ||||||
|  |     volumes: | ||||||
|  |       - /sys/fs/cgroup:/sys/fs/cgroup:ro | ||||||
|  |     tmpfs: | ||||||
|  |       - /tmp | ||||||
|  |       - /run | ||||||
|  |       - /run/lock | ||||||
|  |     override_command: False | ||||||
|  |   # debian 9 stretch only has Python 3.5 which is EOL and breaks multiple dependencies | ||||||
|  | provisioner: | ||||||
|  |   name: ansible | ||||||
|  | verifier: | ||||||
|  |   name: ansible | ||||||
							
								
								
									
										10
									
								
								ansible/molecule/update/prepare.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								ansible/molecule/update/prepare.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | |||||||
|  | - name: install previous release | ||||||
|  |   hosts: all | ||||||
|  |   tasks: | ||||||
|  |     - name: set previous version as installation target | ||||||
|  |       set_fact: | ||||||
|  |         paperlessng_version: 0.9.13 | ||||||
|  |  | ||||||
|  |     - name: install previous paperless-ng release | ||||||
|  |       include_role: | ||||||
|  |         name: ansible | ||||||
							
								
								
									
										60
									
								
								ansible/molecule/update/verify.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								ansible/molecule/update/verify.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,60 @@ | |||||||
|  | --- | ||||||
|  | - name: Verify | ||||||
|  |   hosts: all | ||||||
|  |   gather_facts: false | ||||||
|  |  | ||||||
|  |   vars_files: | ||||||
|  |     - ../../defaults/main.yml | ||||||
|  |  | ||||||
|  |   tasks: | ||||||
|  |     - name: check if webserver is up | ||||||
|  |       uri: | ||||||
|  |         url: http://localhost:8000 | ||||||
|  |         status_code: [200, 302] | ||||||
|  |         return_content: yes | ||||||
|  |       register: landingpage | ||||||
|  |       failed_when: "'Sign in</button>' not in landingpage.content" | ||||||
|  |  | ||||||
|  |     - name: check if document posting works | ||||||
|  |       uri: | ||||||
|  |         url: http://localhost:8000/api/documents/post_document/ | ||||||
|  |         method: POST | ||||||
|  |         body_format: form-multipart | ||||||
|  |         body: | ||||||
|  |           document: | ||||||
|  |             content: FOO | ||||||
|  |             filename: document.txt | ||||||
|  |             mime_type: text/plain | ||||||
|  |         headers: | ||||||
|  |           Authorization: 'Basic {{ (paperlessng_superuser_name + ":" + paperlessng_superuser_password) | b64encode }}' | ||||||
|  |         return_content: yes | ||||||
|  |       register: post_document | ||||||
|  |       failed_when: "'OK' not in post_document.content" | ||||||
|  |  | ||||||
|  |     - name: verify uploaded document has been accepted | ||||||
|  |       uri: | ||||||
|  |         url: http://localhost:8000/api/logs/ | ||||||
|  |         headers: | ||||||
|  |           Authorization: 'Basic {{ (paperlessng_superuser_name + ":" + paperlessng_superuser_password) | b64encode }}' | ||||||
|  |         return_content: yes | ||||||
|  |       register: logs | ||||||
|  |       failed_when: "'Consuming document.txt' not in logs.content" | ||||||
|  |  | ||||||
|  |     # assumes txt consumption finished by now, might have to sleep a bit | ||||||
|  |     - name: verify uploaded document has been consumed | ||||||
|  |       uri: | ||||||
|  |         url: http://localhost:8000/api/logs/ | ||||||
|  |         headers: | ||||||
|  |           Authorization: 'Basic {{ (paperlessng_superuser_name + ":" + paperlessng_superuser_password) | b64encode }}' | ||||||
|  |         return_content: yes | ||||||
|  |       register: logs | ||||||
|  |       failed_when: "'document consumption finished' not in logs.content" | ||||||
|  |  | ||||||
|  |     - name: verify uploaded document is avaiable | ||||||
|  |       uri: | ||||||
|  |         url: http://localhost:8000/api/documents/1/ | ||||||
|  |         headers: | ||||||
|  |           Authorization: 'Basic {{ (paperlessng_superuser_name + ":" + paperlessng_superuser_password) | b64encode }}' | ||||||
|  |         return_content: yes | ||||||
|  |       register: document | ||||||
|  |       failed_when: "'Not found.' in document.content or 'FOO' not in document.content" | ||||||
| @@ -155,7 +155,7 @@ | |||||||
|  |  | ||||||
| - name: move paperless-ng | - name: move paperless-ng | ||||||
|   command: |   command: | ||||||
|     cmd: "cp -a {{ tempdir.path }}/paperless-ng/ {{ paperlessng_directory }}" |     cmd: "cp -a {{ tempdir.path }}/paperless-ng/. {{ paperlessng_directory }}" | ||||||
|   when: not reconfigure_only |   when: not reconfigure_only | ||||||
|  |  | ||||||
| - name: remove temporary directory | - name: remove temporary directory | ||||||
| @@ -367,7 +367,7 @@ | |||||||
|     owner: "{{ paperlessng_system_user }}" |     owner: "{{ paperlessng_system_user }}" | ||||||
|     group: "{{ paperlessng_system_group }}" |     group: "{{ paperlessng_system_group }}" | ||||||
|     mode: g-w,o-rwx |     mode: g-w,o-rwx | ||||||
|   when: venv.changed or not not reconfigure_only |   when: venv.changed or not reconfigure_only | ||||||
|  |  | ||||||
| - name: configure ghostscript for PDF | - name: configure ghostscript for PDF | ||||||
|   lineinfile: |   lineinfile: | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Fabian Koller
					Fabian Koller