Changeset - 80299693b896
[Not reviewed]
10 4 1
Branko Majic (branko) - 4 years ago 2020-09-15 14:22:41
branko@majic.rs
MAR-150: Use fixtures for X.509 artefacts in the wsgi_website role:

- Removed the statically generated artefacts.
- Generate X.509 artefacts for tests using Gimmecert.
- Updated paths to point to generated artefacts.
- Introduced cleanup playbook for removing generated artefacts.
15 files changed with 67 insertions and 857 deletions:
0 comments (0 inline, 0 general)
roles/wsgi_website/molecule/default/cleanup.yml
Show inline comments
 
new file 100644
 
---
 

	
 
- name: Clean-up fixtures
 
  hosts: localhost
 
  connection: local
 
  gather_facts: false
 
  tasks:
 

	
 
    - name: Remove X.509 material
 
      file:
 
        path: "{{ item }}"
 
        state: absent
 
      with_items:
 
        - "tests/data/x509"
 
        - "tests/data/.gimmecert"
roles/wsgi_website/molecule/default/molecule.yml
Show inline comments
 
@@ -26,6 +26,8 @@ platforms:
 

	
 
provisioner:
 
  name: ansible
 
  playbooks:
 
    cleanup: cleanup.yml
 
  config_options:
 
    defaults:
 
      force_valid_group_names: "ignore"
roles/wsgi_website/molecule/default/playbook.yml
Show inline comments
 
@@ -5,23 +5,23 @@
 
  vars:
 
    # common
 
    ca_certificates:
 
      testca: "{{ lookup('file', 'tests/data/x509/ca.cert.pem') }}"
 
      testca: "{{ lookup('file', 'tests/data/x509/ca/level1.cert.pem') }}"
 

	
 
    # web_server
 
    default_https_tls_certificate: "{{ lookup('file', 'tests/data/x509/wsgi-website_https.cert.pem') }}"
 
    default_https_tls_key: "{{ lookup('file', 'tests/data/x509/wsgi-website_https.key.pem') }}"
 
    default_https_tls_certificate: "{{ lookup('file', 'tests/data/x509/server/wsgi-website_https.cert.pem') }}"
 
    default_https_tls_key: "{{ lookup('file', 'tests/data/x509/server/wsgi-website_https.key.pem') }}"
 

	
 
  roles:
 
    - role: wsgi_website
 
      fqdn: parameters-mandatory
 
      https_tls_certificate: "{{ lookup('file', 'tests/data/x509/parameters-mandatory_https.cert.pem') }}"
 
      https_tls_key: "{{ lookup('file', 'tests/data/x509/parameters-mandatory_https.key.pem') }}"
 
      https_tls_certificate: "{{ lookup('file', 'tests/data/x509/server/parameters-mandatory_https.cert.pem') }}"
 
      https_tls_key: "{{ lookup('file', 'tests/data/x509/server/parameters-mandatory_https.key.pem') }}"
 
      wsgi_application: testapp:application
 

	
 
    - role: wsgi_website
 
      fqdn: parameters-optional.local
 
      https_tls_certificate: "{{ lookup('file', 'tests/data/x509/parameters-optional.local_https.cert.pem') }}"
 
      https_tls_key: "{{ lookup('file', 'tests/data/x509/parameters-optional.local_https.key.pem') }}"
 
      https_tls_certificate: "{{ lookup('file', 'tests/data/x509/server/parameters-optional.local_https.cert.pem') }}"
 
      https_tls_key: "{{ lookup('file', 'tests/data/x509/server/parameters-optional.local_https.key.pem') }}"
 
      additional_nginx_config:
 
        - comment: Custom missing page.
 
          value: error_page 404 /my/own/error/page;
 
@@ -83,8 +83,8 @@
 
      wsgi_requirements:
 
        - futures==3.1.0
 
        - gunicorn==19.7.0
 
      https_tls_certificate: "{{ lookup('file', 'tests/data/x509/parameters-paste-req_https.cert.pem') }}"
 
      https_tls_key: "{{ lookup('file', 'tests/data/x509/parameters-paste-req_https.key.pem') }}"
 
      https_tls_certificate: "{{ lookup('file', 'tests/data/x509/server/parameters-paste-req_https.cert.pem') }}"
 
      https_tls_key: "{{ lookup('file', 'tests/data/x509/server/parameters-paste-req_https.key.pem') }}"
 

	
 
- hosts: wsgi-website
 
  become: true
roles/wsgi_website/molecule/default/prepare.yml
Show inline comments
 
---
 

	
 
- name: Set-up fixtures
 
  hosts: localhost
 
  connection: local
 
  gather_facts: false
 
  tasks:
 

	
 
    - name: Initialise CA hierarchy
 
      command: "gimmecert init"
 
      args:
 
        creates: ".gimmecert/ca/level1.cert.pem"
 
        chdir: "tests/data/"
 

	
 
    - name: Generate server private keys and certificates
 
      command:
 
      args:
 
        chdir: "tests/data/"
 
        creates: ".gimmecert/server/{{ item.name }}.cert.pem"
 
        argv:
 
          - "gimmecert"
 
          - "server"
 
          - "{{ item.name }}"
 
          - "{{ item.fqdn }}"
 
      with_items:
 
        - name: parameters-mandatory_https
 
          fqdn: parameters-mandatory
 
        - name: parameters-optional.local_https
 
          fqdn: parameters-optional.local
 
        - name: parameters-paste-req_https
 
          fqdn: parameters-paste-req
 
        - name: wsgi-website_https
 
          fqdn: wsgi-website
 

	
 
    - name: Set-up link to generated X.509 material
 
      file:
 
        src: ".gimmecert"
 
        dest: "tests/data/x509"
 
        state: link
 

	
 
- name: Prepare
 
  hosts: all
 
  gather_facts: false
roles/wsgi_website/molecule/default/tests/data/x509/ca.cert.pem
Show inline comments
 
deleted file
roles/wsgi_website/molecule/default/tests/data/x509/ca.key.pem
Show inline comments
 
deleted file
roles/wsgi_website/molecule/default/tests/data/x509/parameters-mandatory_https.cert.pem
Show inline comments
 
deleted file
roles/wsgi_website/molecule/default/tests/data/x509/parameters-mandatory_https.key.pem
Show inline comments
 
deleted file
roles/wsgi_website/molecule/default/tests/data/x509/parameters-optional.local_https.cert.pem
Show inline comments
 
deleted file
roles/wsgi_website/molecule/default/tests/data/x509/parameters-optional.local_https.key.pem
Show inline comments
 
deleted file
roles/wsgi_website/molecule/default/tests/data/x509/parameters-paste-req_https.cert.pem
Show inline comments
 
deleted file
roles/wsgi_website/molecule/default/tests/data/x509/parameters-paste-req_https.key.pem
Show inline comments
 
deleted file
roles/wsgi_website/molecule/default/tests/data/x509/wsgi-website_https.cert.pem
Show inline comments
 
deleted file
roles/wsgi_website/molecule/default/tests/data/x509/wsgi-website_https.key.pem
Show inline comments
 
deleted file
roles/wsgi_website/molecule/default/tests/test_default.py
Show inline comments
 
@@ -453,11 +453,11 @@ def test_static_file_directory(host, directory_path, expected_owner, expected_gr
 

	
 
@pytest.mark.parametrize("private_key_path, certificate_path, expected_private_key, expected_certificate", [
 
    ('/etc/ssl/private/parameters-mandatory_https.key', '/etc/ssl/certs/parameters-mandatory_https.pem',
 
     'tests/data/x509/parameters-mandatory_https.key.pem', 'tests/data/x509/parameters-mandatory_https.cert.pem'),
 
     'tests/data/x509/server/parameters-mandatory_https.key.pem', 'tests/data/x509/server/parameters-mandatory_https.cert.pem'),
 
    ('/etc/ssl/private/parameters-optional.local_https.key', '/etc/ssl/certs/parameters-optional.local_https.pem',
 
     'tests/data/x509/parameters-optional.local_https.key.pem', 'tests/data/x509/parameters-optional.local_https.cert.pem'),
 
     'tests/data/x509/server/parameters-optional.local_https.key.pem', 'tests/data/x509/server/parameters-optional.local_https.cert.pem'),
 
    ('/etc/ssl/private/parameters-paste-req_https.key', '/etc/ssl/certs/parameters-paste-req_https.pem',
 
     'tests/data/x509/parameters-paste-req_https.key.pem', 'tests/data/x509/parameters-paste-req_https.cert.pem'),
 
     'tests/data/x509/server/parameters-paste-req_https.key.pem', 'tests/data/x509/server/parameters-paste-req_https.cert.pem'),
 
])
 
def test_nginx_tls_files(host, private_key_path, certificate_path, expected_private_key, expected_certificate):
 
    """
0 comments (0 inline, 0 general)