mirror of
				https://github.com/paperless-ngx/paperless-ngx.git
				synced 2025-11-03 19:17:13 -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:
		
							parent
							
								
									19f73f5782
								
							
						
					
					
						commit
						8884a4dfdf
					
				
							
								
								
									
										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:
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user