* 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>
* fix pod running status for older podman versions
Older podman versions, such as podman 1.6.4 on CentOS 7, do not have the
pod status in the 'podman pod inspect' output. Added an attribute and a
method to PodmanPod to fetch the 'podman pod ps' output. Added an
additional status check to the exising running property that uses the
'ps' info.
Fixes#499
Signed-off-by: antonc42 <antonc42@users.noreply.github.com>
* `podman_image`: correct `path` parameter description
The `path` parameter is the last parameter when running `podman build
...`. As specified in the manpage, it is defined as the build context,
and not necessarily should it contain the Containerfile.
Signed-off-by: Yuriy Gabuev <yuriy.gabuev@holoplot.com>
* `podman_image`: add `file` parameter for Containerfile location
Add the `file` parameter to `podman_image` module which mirrors the
`--file` command line argument for `podman build ...`. This parameter
specifies the location of the Containerfile to use in case it should be
different from the one contained in the build context directory.
Signed-off-by: Yuriy Gabuev <yuriy.gabuev@holoplot.com>
* `podman_image`: add integration tests for `file` parameter
Add tests to ensure that:
- building from a directory without a Containerfile (or Dockerfile)
fails
- specifying the location of Containerfile with `file` parameter works
Signed-off-by: Yuriy Gabuev <yuriy.gabuev@holoplot.com>
Signed-off-by: Yuriy Gabuev <yuriy.gabuev@holoplot.com>
* Check image with os path if rootfs is used
Signed-off-by: Nikita Tokarchuk <nikita@tokarch.uk>
* Take into account rootfs usage while evaluating a diff
Signed-off-by: Nikita Tokarchuk <nikita@tokarch.uk>
* Always compare rootfs image diffparam as strict
Signed-off-by: Nikita Tokarchuk <nikita@tokarch.uk>
* Reverse image labels getter to ignore the value if None
Signed-off-by: Nikita Tokarchuk <nikita@tokarch.uk>
* Add tests to check podman rootfs containers
Signed-off-by: Nikita Tokarchuk <nikita@tokarch.uk>
Signed-off-by: Nikita Tokarchuk <nikita@tokarch.uk>
* Fix restarting containers if --rm is enabled
* Automatically enable rm if generate_systemd.new is set
* Don't assume that the 'new' key in generate_systemd exists
Signed-off-by: Adrian Freund <adrian@freund.io>
Probably we hit a bug in CI:
https://github.com/containers/buildah/issues/3887
Unset envs to prevent error "sd-bus call: Transport endpoint is not connected"
Signed-off-by: Sagi Shnaidman <sshnaidm@redhat.com>
podman 4.1.x has changed the ipc namespace mode default to
shareable[1] that results in containers being restarted.
[1] 3987c529f4
Resolves: rhbz#2101495
Signed-off-by: Rabi Mishra <ramishra@redhat.com>
For completeness sake (and because I looked for it and did not find
it), this adds a docstring line for the "use_container_id" parameter.
Signed-off-by: Cleber Rosa <crosa@redhat.com>
Because of complexity in Podman logic and calculations of b/m/g
etc let's disable this idempotency for now.
Fix#418
Signed-off-by: Sagi Shnaidman <sshnaidm@redhat.com>
* Change network attribute from str to list in pods
Signed-off-by: André Cirne <dumahk21@gmail.com>
* Fix tests
Signed-off-by: Sagi Shnaidman <sshnaidm@redhat.com>
Co-authored-by: André Cirne <dumahk21@gmail.com>