- hosts: all vars: content: "Hello world!" proxy_image: quay.io/zuul-ci/zuul-storage-proxy:latest tasks: - name: Create clouds.yaml tempfile: state: file register: clouds_tempfile - name: Write clouds.yaml copy: src: clouds.yaml mode: "0644" dest: "{{ clouds_tempfile.path }}" - name: Create docker network command: docker network create --driver bridge swift-net - name: Start a swift AIO command: >- docker run -d --rm --name=swift --network=swift-net --publish="8080:8080" docker.io/bouncestorage/swift-aio:latest - name: Start the storage proxy command: >- docker run -d --rm --name=zuul-storage-proxy --network=swift-net --publish="8000:8000" --volume="{{ clouds_tempfile.path }}:/etc/openstack/clouds.yaml" --env CLOUD_NAMES=testcloud {{ proxy_image }} - name: Wait for swift to start uri: url: http://127.0.0.1:8080/auth/v1.0 headers: X-Storage-User: 'test:tester' X-Storage-Pass: 'testing' register: swift_result until: swift_result.status == 200 delay: 2 retries: 120 - name: Create swift container uri: url: http://127.0.0.1:8080/v1/AUTH_test/testcontainer headers: X-Auth-Token: '{{ swift_result.x_auth_token }}' method: PUT status_code: [201, 202] - name: Verify swift container uri: url: http://127.0.0.1:8080/v1/AUTH_test/testcontainer headers: X-Auth-Token: '{{ swift_result.x_auth_token }}' status_code: [200, 204] register: result until: result.status in [200, 204] delay: 2 retries: 15 - name: Create swift object uri: url: http://127.0.0.1:8080/v1/AUTH_test/testcontainer/testobject headers: X-Auth-Token: '{{ swift_result.x_auth_token }}' method: PUT status_code: [201, 202] body: "{{ content }}" - name: Verify swift object uri: url: http://127.0.0.1:8080/v1/AUTH_test/testcontainer/testobject headers: X-Auth-Token: '{{ swift_result.x_auth_token }}' register: result until: result.status == 200 delay: 2 retries: 15 # The actual test (at mountpoint /): - name: Get object via proxy from / uri: url: http://127.0.0.1:8000/testcontainer/testobject return_content: true register: retrieved_object - name: Verify content at / assert: that: - retrieved_object.content == content # Restart the proxy with a different mount point - name: Stop storage proxy command: docker kill zuul-storage-proxy - name: Start the storage proxy command: >- docker run -d --rm --name=zuul-storage-proxy --network=swift-net --publish="8000:8000" --volume="{{ clouds_tempfile.path }}:/etc/openstack/clouds.yaml" --env CLOUD_NAMES=testcloud --env MOUNTPOINT=/logs {{ proxy_image }} # The actual test (at mountpoint /logs): - name: Get object via proxy at /logs uri: url: http://127.0.0.1:8000/logs/testcontainer/testobject return_content: true register: retrieved_object - name: Verify content at /logs assert: that: - retrieved_object.content == content - name: Stop swift command: docker kill swift - name: Stop storage proxy command: docker kill zuul-storage-proxy - name: Remove docker network command: docker network rm swift-net - name: Delete clouds.yaml file: state: absent path: "{{ clouds_tempfile.path }}"