From d3f116052c588f086bd53b6b9b8d7139e7496e85 Mon Sep 17 00:00:00 2001 From: Gabriel Augendre Date: Fri, 11 Oct 2024 00:24:06 +0200 Subject: [PATCH] add test_headers --- .ansible-lint | 2 + playbooks/apps/files/test_headers/app.py | 47 +++++++++++++++++++ .../files/test_headers/docker-compose.yaml | 8 ++++ playbooks/apps/test_headers.yaml | 25 ++++++++++ 4 files changed, 82 insertions(+) create mode 100644 playbooks/apps/files/test_headers/app.py create mode 100644 playbooks/apps/files/test_headers/docker-compose.yaml create mode 100644 playbooks/apps/test_headers.yaml diff --git a/.ansible-lint b/.ansible-lint index b8b22c9..8d16520 100644 --- a/.ansible-lint +++ b/.ansible-lint @@ -1,3 +1,5 @@ --- profile: production strict: true +exclude_paths: + - "**/docker-compose.yaml" diff --git a/playbooks/apps/files/test_headers/app.py b/playbooks/apps/files/test_headers/app.py new file mode 100644 index 0000000..2795b93 --- /dev/null +++ b/playbooks/apps/files/test_headers/app.py @@ -0,0 +1,47 @@ +""" +Very simple HTTP server in python for logging requests +Usage:: + ./server.py [] +""" +from http.server import BaseHTTPRequestHandler, HTTPServer +import logging + +class S(BaseHTTPRequestHandler): + def _set_response(self): + self.send_response(200) + self.send_header('Content-type', 'text/html') + self.end_headers() + + def do_GET(self): + logging.info("GET request,\nPath: %s\nHeaders:\n%s\n", str(self.path), str(self.headers)) + self._set_response() + self.wfile.write("GET request for {}".format(self.path).encode('utf-8')) + + def do_POST(self): + content_length = int(self.headers['Content-Length']) # <--- Gets the size of data + post_data = self.rfile.read(content_length) # <--- Gets the data itself + logging.info("POST request,\nPath: %s\nHeaders:\n%s\n\nBody:\n%s\n", + str(self.path), str(self.headers), post_data.decode('utf-8')) + + self._set_response() + self.wfile.write("POST request for {}".format(self.path).encode('utf-8')) + +def run(server_class=HTTPServer, handler_class=S, port=8080): + logging.basicConfig(level=logging.INFO) + server_address = ('', port) + httpd = server_class(server_address, handler_class) + logging.info('Starting httpd on port %s...\n', port) + try: + httpd.serve_forever() + except KeyboardInterrupt: + pass + httpd.server_close() + logging.info('Stopping httpd...\n') + +if __name__ == '__main__': + from sys import argv + + if len(argv) == 2: + run(port=int(argv[1])) + else: + run() diff --git a/playbooks/apps/files/test_headers/docker-compose.yaml b/playbooks/apps/files/test_headers/docker-compose.yaml new file mode 100644 index 0000000..2f8d517 --- /dev/null +++ b/playbooks/apps/files/test_headers/docker-compose.yaml @@ -0,0 +1,8 @@ +services: + app: + image: python:3.13-slim + command: python /app/app.py + volumes: + - ./:/app + ports: + - "9008:8080" diff --git a/playbooks/apps/test_headers.yaml b/playbooks/apps/test_headers.yaml new file mode 100644 index 0000000..60e2e81 --- /dev/null +++ b/playbooks/apps/test_headers.yaml @@ -0,0 +1,25 @@ +--- +- name: Setup test_headers + hosts: servers + gather_facts: false + tasks: + - name: Write app.py + ansible.builtin.copy: + src: files/test_headers/app.py + dest: "{{ dir }}/app.py" + mode: "0644" + owner: gaugendre + group: gaugendre + - name: Write docker-compose.yaml + ansible.builtin.copy: + src: files/test_headers/docker-compose.yaml + dest: "{{ dir }}/docker-compose.yaml" + mode: "0644" + owner: gaugendre + group: gaugendre + - name: Ensure service is started + community.docker.docker_compose_v2: + project_src: "{{ dir }}" + state: present + vars: + dir: /mnt/data/test_headers