307 lines
11 KiB
YAML
307 lines
11 KiB
YAML
name: CI
|
|
on:
|
|
pull_request:
|
|
schedule:
|
|
- cron: "0 3 * * *"
|
|
|
|
jobs:
|
|
mongodb-cache:
|
|
runs-on: ubuntu-20.04
|
|
defaults:
|
|
run:
|
|
working-directory: ansible_collections/community/mongodb
|
|
env:
|
|
ANSIBLE_CACHE_PLUGIN: "community.mongodb.mongodb"
|
|
ANSIBLE_CACHE_PLUGIN_CONNECTION: "mongodb://mongoadmin:secret@localhost:27017/cache?authSource=admin"
|
|
ANSIBLE_CACHE_PLUGIN_TIMEOUT: 0
|
|
strategy:
|
|
matrix:
|
|
versions:
|
|
- ansible_version: "stable-2.10"
|
|
python_version: "3.6"
|
|
- ansible_version: "stable-2.11"
|
|
python_version: "3.6"
|
|
- ansible_version: "devel"
|
|
python_version: "3.8"
|
|
|
|
steps:
|
|
|
|
- name: Check out code
|
|
uses: actions/checkout@v2
|
|
with:
|
|
path: ansible_collections/community/mongodb
|
|
|
|
- name: Set up Python ${{ matrix.versions.python_version }}
|
|
uses: actions/setup-python@v1
|
|
with:
|
|
python-version: ${{ matrix.versions.python_version }}
|
|
|
|
- name: Install ansible-base (${{ matrix.versions.ansible_version }})
|
|
uses: nick-invision/retry@v2
|
|
with:
|
|
timeout_minutes: 3
|
|
max_attempts: 3
|
|
command: pip install https://github.com/ansible/ansible/archive/${{ matrix.versions.ansible_version }}.tar.gz --disable-pip-version-check
|
|
|
|
- name: Build the collection
|
|
run: ansible-galaxy collection build
|
|
|
|
- name: Rename the build artifact
|
|
run: mv community-mongodb-*.tar.gz community-mongodb-latest.tar.gz
|
|
|
|
- name: Install collection
|
|
run: ansible-galaxy collection install community-mongodb-*.tar.gz
|
|
|
|
- name: Create docker volume
|
|
run: docker volume create mongocache
|
|
|
|
- name: Run the mongodb cache inside a docker container
|
|
run:
|
|
docker run -d --name mongocache -e MONGO_INITDB_ROOT_USERNAME=mongoadmin
|
|
-e MONGO_INITDB_ROOT_PASSWORD=secret -p 27017:27017
|
|
-v mongocache:/data/db mongo:latest
|
|
|
|
- name: Install mongodb-org-shell
|
|
uses: nick-invision/retry@v2
|
|
with:
|
|
timeout_minutes: 3
|
|
max_attempts: 3
|
|
command: sudo apt-get install mongodb-org-shell
|
|
|
|
# https://github.community/t/set-output-truncates-multiline-strings/16852/5
|
|
- name: Run ansible without pymongo installed to generate the warning
|
|
id: no-pymongo
|
|
run: |
|
|
output=$(ansible localhost -m setup 2>&1)
|
|
echo "$output"
|
|
output="${output//'%'/'%25'}"
|
|
output="${output//$'\n'/'%0A'}"
|
|
output="${output//$'\r'/'%0D'}"
|
|
echo "::set-output name=nopymongo::$output"
|
|
|
|
- name: Test cache handling of missing pymongo
|
|
uses: nick-invision/assert-action@v1
|
|
with:
|
|
expected: "The 'pymongo' python module is required for the mongodb fact cache"
|
|
actual: ${{ steps.no-pymongo.outputs.nopymongo }}
|
|
comparison: contains
|
|
|
|
- name: Install pymongo
|
|
uses: nick-invision/retry@v2
|
|
with:
|
|
timeout_minutes: 3
|
|
max_attempts: 3
|
|
command: pip install pymongo==3.12.2
|
|
|
|
- name: Run ansible to generate the mongodb cache
|
|
run: ansible localhost -m setup
|
|
|
|
- name: Query mongo to see what we have in the cache
|
|
id: mongo1
|
|
run: |
|
|
output=$(mongo cache --authenticationDatabase admin -u mongoadmin -p secret --eval "db.cache.find()")
|
|
echo "$output"
|
|
output="${output//'%'/'%25'}"
|
|
output="${output//$'\n'/'%0A'}"
|
|
output="${output//$'\r'/'%0D'}"
|
|
echo "::set-output name=mongo::$output"
|
|
|
|
- name: Test that we have something that looks like a cache record
|
|
uses: nick-invision/assert-action@v1
|
|
with:
|
|
expected: ansible_processor_count
|
|
actual: ${{ steps.mongo1.outputs.mongo }}
|
|
comparison: contains
|
|
|
|
- name: Collection should not have a ttl index
|
|
id: mongo2
|
|
run: |
|
|
output=$(mongo cache --authenticationDatabase admin -u mongoadmin -p secret --eval "db.cache.getIndexes()")
|
|
echo "$output"
|
|
output="${output//'%'/'%25'}"
|
|
output="${output//$'\n'/'%0A'}"
|
|
output="${output//$'\r'/'%0D'}"
|
|
echo "::set-output name=mongo::$output"
|
|
|
|
- name: Test that we don't have an index called ttl
|
|
uses: nick-invision/assert-action@v1
|
|
with:
|
|
expected: ttl
|
|
actual: ${{ steps.mongo2.outputs.mongo }}
|
|
comparison: notContains
|
|
|
|
- name: Test that we have good output from getindexes
|
|
uses: nick-invision/assert-action@v1
|
|
with:
|
|
expected: "_id_"
|
|
actual: ${{ steps.mongo2.outputs.mongo }}
|
|
comparison: contains
|
|
|
|
- name: Repeat the action to hit the cache again
|
|
run: ansible localhost -m setup
|
|
|
|
- name: Query mongo to see what we have in the cach3
|
|
id: mongo3
|
|
run: |
|
|
output=$(mongo cache --authenticationDatabase admin -u mongoadmin -p secret --eval "db.cache.find()")
|
|
echo "$output"
|
|
output="${output//'%'/'%25'}"
|
|
output="${output//$'\n'/'%0A'}"
|
|
output="${output//$'\r'/'%0D'}"
|
|
echo "::set-output name=mongo::$output"
|
|
|
|
- name: Test that we have something that looks like a cache record
|
|
uses: nick-invision/assert-action@v1
|
|
with:
|
|
expected: ansible_processor_count
|
|
actual: ${{ steps.mongo3.outputs.mongo }}
|
|
comparison: contains
|
|
|
|
- name: Collection should not have a ttl index
|
|
id: mongo4
|
|
run: |
|
|
output=$(mongo cache --authenticationDatabase admin -u mongoadmin -p secret --eval "db.cache.getIndexes()")
|
|
echo "$output"
|
|
output="${output//'%'/'%25'}"
|
|
output="${output//$'\n'/'%0A'}"
|
|
output="${output//$'\r'/'%0D'}"
|
|
echo "::set-output name=mongo::$output"
|
|
|
|
- name: Test that we don't have an index called ttl
|
|
uses: nick-invision/assert-action@v1
|
|
with:
|
|
expected: ttl
|
|
actual: ${{ steps.mongo4.outputs.mongo }}
|
|
comparison: notContains
|
|
|
|
- name: Test that we have good output from getindexes
|
|
uses: nick-invision/assert-action@v1
|
|
with:
|
|
expected: "_id_"
|
|
actual: ${{ steps.mongo4.outputs.mongo }}
|
|
comparison: contains
|
|
|
|
- name: Run the action again with a modified timeout
|
|
env:
|
|
ANSIBLE_CACHE_PLUGIN_TIMEOUT: 3600
|
|
run: ansible localhost -m setup
|
|
|
|
- name: Query mongo to see what we have in the cache
|
|
id: mongo5
|
|
run: |
|
|
output=$(mongo cache --authenticationDatabase admin -u mongoadmin -p secret --eval "db.cache.find()")
|
|
echo "$output"
|
|
output="${output//'%'/'%25'}"
|
|
output="${output//$'\n'/'%0A'}"
|
|
output="${output//$'\r'/'%0D'}"
|
|
echo "::set-output name=mongo::$output"
|
|
|
|
- name: Test that we have something that looks like a cache record
|
|
uses: nick-invision/assert-action@v1
|
|
with:
|
|
expected: ansible_processor_count
|
|
actual: ${{ steps.mongo5.outputs.mongo }}
|
|
comparison: contains
|
|
|
|
- name: Collection should have a ttl index
|
|
id: mongo6
|
|
run: |
|
|
output=$(mongo cache --authenticationDatabase admin -u mongoadmin -p secret --eval "db.cache.getIndexes()")
|
|
echo "$output"
|
|
output="${output//'%'/'%25'}"
|
|
output="${output//$'\n'/'%0A'}"
|
|
output="${output//$'\r'/'%0D'}"
|
|
echo "::set-output name=mongo::$output"
|
|
|
|
- name: Test that we do have an index called ttl
|
|
uses: nick-invision/assert-action@v1
|
|
with:
|
|
expected: ttl
|
|
actual: ${{ steps.mongo6.outputs.mongo }}
|
|
comparison: contains
|
|
|
|
- name: Repeat the action
|
|
env:
|
|
ANSIBLE_CACHE_PLUGIN_TIMEOUT: 3600
|
|
run: ansible localhost -m setup
|
|
|
|
- name: Query mongo to see what we have in the cache
|
|
id: mongo7
|
|
run: |
|
|
output=$(mongo cache --authenticationDatabase admin -u mongoadmin -p secret --eval "db.cache.find()")
|
|
echo "$output"
|
|
output="${output//'%'/'%25'}"
|
|
output="${output//$'\n'/'%0A'}"
|
|
output="${output//$'\r'/'%0D'}"
|
|
echo "::set-output name=mongo::$output"
|
|
|
|
- name: Test that we have something that looks like a cache record
|
|
uses: nick-invision/assert-action@v1
|
|
with:
|
|
expected: ansible_processor_count
|
|
actual: ${{ steps.mongo7.outputs.mongo }}
|
|
comparison: contains
|
|
|
|
- name: Collection should have a ttl index
|
|
id: mongo8
|
|
run: |
|
|
output=$(mongo cache --authenticationDatabase admin -u mongoadmin -p secret --eval "db.cache.getIndexes()")
|
|
echo "$output"
|
|
output="${output//'%'/'%25'}"
|
|
output="${output//$'\n'/'%0A'}"
|
|
output="${output//$'\r'/'%0D'}"
|
|
echo "::set-output name=mongo::$output"
|
|
|
|
- name: Test that we do have an index called ttl
|
|
uses: nick-invision/assert-action@v1
|
|
with:
|
|
expected: ttl
|
|
actual: ${{ steps.mongo8.outputs.mongo }}
|
|
comparison: contains
|
|
|
|
- name: Set timeout back to zero
|
|
env:
|
|
ANSIBLE_CACHE_PLUGIN_TIMEOUT: 0
|
|
run: ansible localhost -m setup
|
|
|
|
- name: Query mongo to see what we have in the cache
|
|
id: mongo9
|
|
run: |
|
|
output=$(mongo cache --authenticationDatabase admin -u mongoadmin -p secret --eval "db.cache.find()")
|
|
echo "$output"
|
|
output="${output//'%'/'%25'}"
|
|
output="${output//$'\n'/'%0A'}"
|
|
output="${output//$'\r'/'%0D'}"
|
|
echo "::set-output name=mongo::$output"
|
|
|
|
- name: Test that we have something that looks like a cache record
|
|
uses: nick-invision/assert-action@v1
|
|
with:
|
|
expected: ansible_processor_count
|
|
actual: ${{ steps.mongo9.outputs.mongo }}
|
|
comparison: contains
|
|
|
|
- name: Collection should not have a ttl index
|
|
id: mongo10
|
|
run: |
|
|
output=$(mongo cache --authenticationDatabase admin -u mongoadmin -p secret --eval "db.cache.getIndexes()")
|
|
echo "$output"
|
|
output="${output//'%'/'%25'}"
|
|
output="${output//$'\n'/'%0A'}"
|
|
output="${output//$'\r'/'%0D'}"
|
|
echo "::set-output name=mongo::$output"
|
|
|
|
- name: Test that we don't have an index called ttl
|
|
uses: nick-invision/assert-action@v1
|
|
with:
|
|
expected: ttl
|
|
actual: ${{ steps.mongo10.outputs.mongo }}
|
|
comparison: notContains
|
|
|
|
- name: Test that we have good output from getindexes
|
|
uses: nick-invision/assert-action@v1
|
|
with:
|
|
expected: "_id_"
|
|
actual: ${{ steps.mongo10.outputs.mongo }}
|
|
comparison: contains
|