1
0
Fork 0
mirror of https://github.com/containers/ansible-podman-collections.git synced 2026-04-15 22:01:24 +00:00
No description
Find a file
CyberFox001 6cf118e7a9
Podman generate systemd (#498)
* Start a new Ansible module: podman_generate_systemd

This module, when finished, will let user generate a systemd .service
unit file from a pod or a container.

If a pod is specified, then the .service file is made for the pod and
its containers.

This commit is only the beginning, with two empty functions and the
base for a Python script.

* podman_generate_systemd : Remove not needed import from __future__

* podman_generate_systemd : Import AnsibleModule and json

* podman_generate_systemd : Build podman comand from user parameters

* podman_generate_systemd : Run the podman command and manage error

* podman_generate_systemd : Manage writing of systemd files, if needed

* podman_generate_systemd : In generate_systemd(), return needed infos

In case of success in generate_systemd() function, return:
- A boolean, indicate if the state of the target systemd is modified
- A copy of the systemd unit content

* podman_generate_systemd : Write run_module() function

This function:
- Build the list of parameters user can use
- Build a default result dictionary
- Build the Ansible Module
- Generate the systemd units (with generate_systemd())
- Return the result, with module.exit_json

* podman_generate_systemd : In main(), call run_module()

* podman_generate_systemd: Return podman command, and remove debug param

The run podman command is now returned by the module, and the "debug"
option is removed.

* podman_generate_systemd: Use more direct #! to python interpreter

The run podman command is now returned by the module, and the "debug"
option is removed.

* podman_generate_systemd: Write DOCUMENTATION variable

* podman_generate_systemd: Write EXAMPLES variable

* podman_generate_systemd: Write RETURN variable

* podman_generate_systemd: Fix typo

* podman_generate_systemd: 'restart_policy, remove default

* podman_generate_systemd: Fix missing "command" return when error

When error in command execution, generate_systemd() was not returning
the command. Now it's done.

* podman_generate_systemd: Remove unnecessary return in case of fail

In generate_systemd(), in case of fail in executing the podman
command, we call module.fail_json() then we return the usual data of
generate_systemd() function.

But module.fail_json() will stop the execution of the module, so it's
not necessary to return a value from generate_systemd() after calling
module.fail_json().

* podman_generate_systemd: Remove TODO

* podman_generate_systemd: Add missing double lines between functions

* podman_generate_systemd: More readability in EXAMPLES variable

* podman_generate_systemd: EXAMPLES, add minimum podman version

When a module option require a minimum Podman version, I indicate
this required version in option description.

For example: The module option `start_timeout` use the Podman option
`--start-timout`, which was introduced in Podman 4.0.0. So, I add in
the description of `start_timeout`: Only with Podman 4.0.0 and above

Options with this information:
- start_timeout
- restart_sec
- wants
- after
- requires

* podman_generate_systemd: EXAMPLES, fix type

* podman_generate_systemd: Simpler code for wants, after and requires

`after`, `wants` and `requires` are of type list. So, no need to
test their type and manage the case where they are of type string.

* podman_generate_systemd, generate_systemd(): Improve returned command

Improve how the used Podman command, returned by generate_systemd(),
is built. Instead of print a list in a formatted string, I join the
list elements with a space char as separator.

* podman_generate_systemd: Add support for the `env` option

Add, to the podman_generate_systemd module, the support for the `env`
option. This commit include the code, the option definition for the
module, the modification of the DOCUMENTATION variable and the add of
an usage example of this new option in the EXAMPLE variable.

* podman_generate_systemd: Write the integration test

* generate_systemd: Fix of the integration test and the --env command option

On the module, I now use the command option `-e=` for the definition
of environment variables. Because the option `--env` give an error
from Podman.

Also, fix errors in the integration test for this module.

* podman_generate_systemd: Add __future__ and __metaclass__ in the module

* podman_generate_systemd: Add author github ID

* podman_generate_systemd: Use argspec type path instead of str for dest option

In the module argspec, I now use the type `path` instead of `str` for
the option `dest`. `os.path.expanduser()` is no more necessary.

* podman_generate_systemd: remove all trailing whitespaces

* podman_generate_systemd: Remove type hint for compatibility with older Python

* podman_generate_systemd: Fix Documentation

Add a default for option `new` and fix typo in `use_names` option name.

* podman_generate_systemd: restart_policy option, new choices

The choice `no` is replaced by `no-restart`

* podman_generate_systemd: dest option in documentation, set type as path

Instead of str

* DNM add CI bits for new module tests

Made by sshnaidm.

* podman_generate_systemd: Better use of fail_json()

First: When calling the method fail_json(), name the `msg` argument to
avoid confusion.

Second: In case of calling fail_json(), I now return the same
arguments than the ones returned by a success: `changed`,
`systemd_units` and `podman_command`.

For future refactoring: Instead of calling fail_json() inside
generate_systemd(), raise custom exceptions and manage calling
fail_json() or exit_json() outside of generate_systemd().

* podman_generate_systemd: Add utf-8

* podman_generate_systemd: Remove `required: false` for DOCUMENTATION var

* podman_generate_systemd: DOCUMENTATION var, use bool instead of yes/no

* podman_generate_systemd: Remove non-necessary check of restart_policy option

The possible choices for this options are set in `ansible_spec` and
will be checked by AnsibleModule code. So, no need to check manually:
`ansible_spec` won't be anything other that the possible choices.

* podman_generate_systemd: On module params, use direct access to dict

Use `module.params['']` instead of `module.params.get('')`.

Because all module's options are defined with the `argument_spec`, the
options used here exist in the params. And if the user don't set
them, the value of the option is `None`.

* podman_generate_systemd: use shlex join for command_str

* podman_generate_systemd: use same quotes for messages

* podman_generate_systemd: Replace f-strings with .format(), for Python 2

* podman_generate_systemd: Revert usage of shlex

It add weird quotes around command options like `-e='ENV_VAR=value'`.

* podman_generate_systemd: Podman command build, more Python 2 compatible

Don't use any more the asterisk to add command options to the command.

* podman_generate_systemd: Better check-mode management

Now, when check mode is enabled, the module report "changed" is
something would be changed, but w/o actually doing anything.

* podman_generate_systemd: remove all trailing whitespaces

Co-authored-by: Sébastien Gendre <seb@k-7.ch>
2022-10-31 20:51:29 +02:00
.github Podman generate systemd (#498) 2022-10-31 20:51:29 +02:00
changelogs Release 1.9.4 version (#446) 2022-07-04 16:03:14 +03:00
ci Podman generate systemd (#498) 2022-10-31 20:51:29 +02:00
contrib Fix modules for newest pylint in ansible-test (#286) 2021-08-15 19:40:07 +03:00
docs Release 1.9.3 version (#408) 2022-03-29 14:46:45 +03:00
meta Add meta/runtime.yml which is required for Galaxy now (#281) 2021-08-02 16:25:23 +03:00
plugins Podman generate systemd (#498) 2022-10-31 20:51:29 +02:00
tests Podman generate systemd (#498) 2022-10-31 20:51:29 +02:00
.gitignore Add RPM building scripts (#255) 2021-05-13 14:09:16 +03:00
ansible-collection-containers-podman.spec Add option for ansible-core in RPM spec file (#325) 2021-10-13 15:45:02 +03:00
CHANGELOG.rst Release 1.9.4 version (#446) 2022-07-04 16:03:14 +03:00
CODE-OF-CONDUCT.md Add Code of Conduct 2020-02-08 15:31:21 -05:00
COPYING Relicense under GPLv3 and clean up modules (#57) 2020-06-08 17:07:16 +03:00
galaxy.yml Bump galaxy.yml for devel version 2022-09-21 02:40:05 +03:00
galaxy.yml.in Add build script (#58) 2020-06-08 22:33:26 +03:00
Makefile Add RPM building scripts (#255) 2021-05-13 14:09:16 +03:00
README.md Update README.md (#208) 2021-02-22 16:01:09 +02:00
SECURITY.md Add Security Policy (#32) 2020-05-11 15:36:59 +03:00
setup.cfg Add setup files for Pip installation (#100) 2020-08-06 15:39:32 +03:00
setup.py Add setup files for Pip installation (#100) 2020-08-06 15:39:32 +03:00

GitHub Actions CI/CD build status — Collection test suite

Ansible Collection: containers.podman

This repo hosts the containers.podman Ansible Collection.

The collection includes the Podman container plugins to help the build and management of Podman containers.

Documentation

For collection versions that are parts of Ansible releases, the documentation can be found on Ansible docs site: https://docs.ansible.com/ansible/latest/collections/containers/podman

The latest documentation for current collection version in the repository is hosted on github.io docs site: https://containers.github.io/ansible-podman-collections.

Installation and Usage

Installing the Collection from Ansible Galaxy

Before using the Podman collection, you need to install the collection with the ansible-galaxy CLI:

ansible-galaxy collection install containers.podman

You can also include it in a requirements.yml file and install it via ansible-galaxy collection install -r requirements.yml using the format:

collections:
- name: containers.podman

or clone by your own:

mkdir -p ~/.ansible/collections/ansible_collections/containers
git clone https://github.com/containers/ansible-podman-collections.git ~/.ansible/collections/ansible_collections/containers/podman

Playbooks

To use a module from Podman collection, please reference the full namespace, collection name, and modules name that you want to use:

---
- name: Using Podman collection
  hosts: localhost
  tasks:
    - name: Run redis container
      containers.podman.podman_container:
        name: myredis
        image: redis
        command: redis-server --appendonly yes
        state: present
        recreate: yes
        expose:
          - 6379
        volumes_from:
          - mydata

Or you can add full namespace and collection name in the collections element:

---
- name: Using Podman collection
  hosts: localhost
  collections:
    - containers.podman
  tasks:
    - name: Build and push an image using existing credentials
      podman_image:
        name: nginx
        path: /path/to/build/dir
        push: yes
        push_args:
          dest: quay.io/acme

Contributing

We are accepting Github pull requests and issues. There are many ways in which you can participate in the project, for example:

  • Submit bugs and feature requests, and help us verify them
  • Submit and review source code changes in Github pull requests
  • Add new modules for Podman containers and images

Testing and Development

If you want to develop new content for this collection or improve what is already here, the easiest way to work on the collection is to clone it into one of the configured COLLECTIONS_PATHS, and work on it there.

Testing with ansible-test

We use ansible-test for sanity.

More Information

TBD

Communication

Please submit Github issues for communication any issues. You can ask Podman related questions on #podman channel of Ansible Podman questions on #ansible-podman channel on Freenode IRC.

License

GPL-3.0-or-later