Skip to content

Commit

Permalink
Add option to run with podman-py API
Browse files Browse the repository at this point in the history
Add Podman API support for podman_container and podman_container_info
modules using podman-py module.

Signed-off-by: Sagi Shnaidman <[email protected]>
  • Loading branch information
sshnaidm committed Aug 7, 2023
1 parent aeec6b9 commit 933e363
Show file tree
Hide file tree
Showing 25 changed files with 1,259 additions and 124 deletions.
118 changes: 118 additions & 0 deletions .github/workflows/podman_container_api.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
name: Podman API container

on:
push:
paths:
- '.github/workflows/podman_container_api.yml'
- 'ci/*.yml'
- 'ci/run_containers_tests.sh'
- 'ci/playbooks/containers/podman_container_api.yml'
#- 'plugins/modules/podman_container.py'
- 'plugins/module_utils/podman/podman_container_lib.py'
- 'plugins/module_utils/podman/podman_api.py'
- 'plugins/module_utils/podman/common.py'
- 'tests/integration/targets/podman_container_api/**'
branches:
- master
pull_request:
paths:
- '.github/workflows/podman_container_api.yml'
- 'ci/*.yml'
- 'ci/run_containers_tests.sh'
- 'ci/playbooks/containers/podman_container_api.yml'
#- 'plugins/modules/podman_container.py'
- 'plugins/module_utils/podman/podman_container_lib.py'
- 'plugins/module_utils/podman/podman_api.py'
- 'plugins/module_utils/podman/common.py'
- 'tests/integration/targets/podman_container_api/**'
schedule:
- cron: 4 0 * * * # Run daily at 0:03 UTC

jobs:

test_podman_container_api:
name: Podman API container ${{ matrix.ansible-version }}-${{ matrix.os || 'ubuntu-22.04' }}
runs-on: ${{ matrix.os || 'ubuntu-22.04' }}
defaults:
run:
shell: bash
strategy:
fail-fast: false
matrix:
ansible-version:
- ansible<2.10
- git+https://github.com/ansible/[email protected]
- git+https://github.com/ansible/ansible.git@devel
os:
- ubuntu-22.04
python-version:
- 3.9

steps:

- name: Check out repository
uses: actions/checkout@v3

- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}

- name: Upgrade pip and display Python and PIP versions
run: |
sudo apt-get update
sudo apt-get install -y python*-wheel python*-yaml
python -m pip install --upgrade pip
python -V
pip --version
- name: Set up pip cache
uses: actions/cache@v3
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ github.ref }}-units-VMs
restore-keys: |
${{ runner.os }}-pip-
${{ runner.os }}-
- name: Install Ansible ${{ matrix.ansible-version }}
run: python3 -m pip install --user --force-reinstall --upgrade '${{ matrix.ansible-version }}'

- name: Build and install the collection tarball
run: |
export PATH=~/.local/bin:$PATH
echo "Run ansible version"
command -v ansible
ansible --version
rm -rf /tmp/just_new_collection
~/.local/bin/ansible-galaxy collection build --output-path /tmp/just_new_collection --force
~/.local/bin/ansible-galaxy collection install -vvv --force /tmp/just_new_collection/*.tar.gz
- name: Run collection tests for podman container API
run: |
export PATH=~/.local/bin:$PATH
if [[ '${{ matrix.ansible-version }}' == 'git+https://github.com/ansible/ansible.git@devel' ]]; then
export ANSIBLE_CONFIG=$(pwd)/ci/ansible-dev.cfg
elif [[ '${{ matrix.ansible-version }}' == 'ansible<2.10' ]]; then
export ANSIBLE_CONFIG=$(pwd)/ci/ansible-2.9.cfg
fi
python3 -m pip install --user -r requirements.txt
podman system service --time=0 unix:///tmp/podman.sock &
sudo podman system service --time=0 unix:///tmp/root-podman.sock &
echo $ANSIBLE_CONFIG
command -v ansible-playbook
pip --version
python --version
ansible-playbook --version
ansible-playbook -vv ci/playbooks/pre.yml \
-e host=localhost \
-i localhost, \
-e ansible_connection=local \
-e setup_python=false
TEST2RUN=podman_container_api ./ci/run_containers_tests.sh
shell: bash
1 change: 1 addition & 0 deletions bindep.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
podman
12 changes: 12 additions & 0 deletions ci/playbooks/containers/podman_container_api.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
---
- hosts: all
gather_facts: true
module_defaults:
containers.podman.podman_container:
podman_socket: unix:///tmp/podman.sock
tasks:
- include_role:
name: podman_container_api
vars:
idem_image: idempotency_test
ansible_python_interpreter: "{{ _ansible_python_interpreter }}"
19 changes: 19 additions & 0 deletions plugins/module_utils/podman/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,13 @@
raise_from(ImportError('To use this plugin or module with ansible-core'
' < 2.11, you need to use Python < 3.12 with '
'distutils.version present'), exc)
try:
import requests # pylint: disable=unused-import
from .podman_api import PodmanAPIClient
HAS_REQUESTS = True
except ImportError:
PodmanAPIClient = object
HAS_REQUESTS = False


def run_podman_command(module, executable='podman', args=None, expected_rc=0, ignore_errors=False):
Expand Down Expand Up @@ -295,3 +302,15 @@ def normalize_signal(signal_name_or_number):
if signal_name not in _signal_map:
raise RuntimeError("Unknown signal '{0}'".format(signal_name_or_number))
return str(_signal_map[signal_name])


class PodmanAPI:
def __init__(self, module, module_params):
if module_params.get('podman_socket') and not HAS_REQUESTS:
module.fail_json(
msg="Requests module is not installed while socket was provided!")
self.client = PodmanAPIClient(module_params.get('podman_socket'))
try:
self.client.version()
except Exception as api_error:
module.fail_json(msg="Podman API error: %s" % str(api_error))
Loading

0 comments on commit 933e363

Please sign in to comment.