Files
community.okd/plugins/modules/openshift_build.py
Bikouo Aubin a63e5b7b36 Update CI - Continue work from #195 (#202)
* Upgrade Ansible and OKD versions for CI

* Use ubi9 and fix sanity

* Use correct pip install

* Try using quotes

* Ensure python3.9

* Upgrade ansible and molecule versions

* Remove DeploymentConfig

DeploymentConfigs are deprecated and seem to now be causing idempotence
problems. Replacing them with Deployments fixes it.

* Attempt to fix ldap integration tests

Signed-off-by: Alina Buzachis <abuzachis@redhat.com>

* Move sanity and unit tests to GH actions

Signed-off-by: Alina Buzachis <abuzachis@redhat.com>

* Firt round of sanity fixes

Signed-off-by: Alina Buzachis <abuzachis@redhat.com>

* Add kubernetes.core collection as sanity requirement

Signed-off-by: Alina Buzachis <abuzachis@redhat.com>

* Add ignore-2.16.txt

Signed-off-by: Alina Buzachis <abuzachis@redhat.com>

* Attempt to fix units

Signed-off-by: Alina Buzachis <abuzachis@redhat.com>

* Add ignore-2.17

Signed-off-by: Alina Buzachis <abuzachis@redhat.com>

* Attempt to fix unit tests

Signed-off-by: Alina Buzachis <abuzachis@redhat.com>

* Add pytest-ansible to test-requirements.txt

Signed-off-by: Alina Buzachis <abuzachis@redhat.com>

* Add changelog fragment

Signed-off-by: Alina Buzachis <abuzachis@redhat.com>

* Add workflow for ansible-lint

Signed-off-by: Alina Buzachis <abuzachis@redhat.com>

* Apply black

Signed-off-by: Alina Buzachis <abuzachis@redhat.com>

* Fix linters

Signed-off-by: Alina Buzachis <abuzachis@redhat.com>

* Add # fmt: skip

Signed-off-by: Alina Buzachis <abuzachis@redhat.com>

* Yet another round of linting

Signed-off-by: Alina Buzachis <abuzachis@redhat.com>

* Yet another round of linting

Signed-off-by: Alina Buzachis <abuzachis@redhat.com>

* Remove setup.cfg

Signed-off-by: Alina Buzachis <abuzachis@redhat.com>

* Revert #fmt

Signed-off-by: Alina Buzachis <abuzachis@redhat.com>

* Use ansible-core 2.14

Signed-off-by: Alina Buzachis <abuzachis@redhat.com>

* Cleanup ansible-lint ignores

Signed-off-by: Alina Buzachis <abuzachis@redhat.com>

* Try using service instead of pod IP

* Fix typo

* Actually use the correct port

* See if NetworkPolicy is preventing connection

* using Pod internal IP

* fix adm prune auth roles syntax

* adding some retry steps

* fix: openshift_builds target

* add flag --force-with-deps when building downstream collection

* Remove yamllint from tox linters, bump minimum python supported version to 3.9, Remove support for ansible-core < 2.14

---------

Signed-off-by: Alina Buzachis <abuzachis@redhat.com>
Co-authored-by: Mike Graves <mgraves@redhat.com>
Co-authored-by: Alina Buzachis <abuzachis@redhat.com>
2023-11-15 17:00:38 +00:00

273 lines
7.4 KiB
Python

#!/usr/bin/python
# -*- coding: utf-8 -*-
# Copyright (c) 2021, Red Hat
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
from __future__ import absolute_import, division, print_function
__metaclass__ = type
# STARTREMOVE (downstream)
DOCUMENTATION = r"""
module: openshift_build
short_description: Start a new build or Cancel running, pending, or new builds.
version_added: "2.3.0"
author:
- Aubin Bikouo (@abikouo)
description:
- This module starts a new build from the provided build config or build name.
- This module also cancel a new, pending or running build by requesting a graceful shutdown of the build.
There may be a delay between requesting the build and the time the build is terminated.
- This can also restart a new build when the current is cancelled.
- Analogous to C(oc cancel-build) and C(oc start-build).
extends_documentation_fragment:
- kubernetes.core.k8s_auth_options
options:
state:
description:
- Determines if a Build should be started ,cancelled or restarted.
- When set to C(restarted) a new build will be created after the current build is cancelled.
choices:
- started
- cancelled
- restarted
default: started
type: str
build_name:
description:
- Specify the name of a build which should be re-run.
- Mutually exclusive with parameter I(build_config_name).
type: str
build_config_name:
description:
- Specify the name of a build config from which a new build will be run.
- Mutually exclusive with parameter I(build_name).
type: str
namespace:
description:
- Specify the namespace for the build or the build config.
type: str
required: True
build_args:
description:
- Specify a list of key-value pair to pass to Docker during the build.
type: list
elements: dict
suboptions:
name:
description:
- docker build argument name.
type: str
required: true
value:
description:
- docker build argument value.
type: str
required: true
commit:
description:
- Specify the source code commit identifier the build should use;
requires a build based on a Git repository.
type: str
env_vars:
description:
- Specify a list of key-value pair for an environment variable to set for the build container.
type: list
elements: dict
suboptions:
name:
description:
- Environment variable name.
type: str
required: true
value:
description:
- Environment variable value.
type: str
required: true
incremental:
description:
- Overrides the incremental setting in a source-strategy build, ignored if not specified.
type: bool
no_cache:
description:
- Overrides the noCache setting in a docker-strategy build, ignored if not specified.
type: bool
wait:
description:
- When C(state=started), specify whether to wait for a build to complete
and exit with a non-zero return code if the build fails.
- When I(state=cancelled), specify whether to wait for a build phase to be Cancelled.
default: False
type: bool
wait_sleep:
description:
- Number of seconds to sleep between checks.
- Ignored if C(wait=false).
default: 5
type: int
wait_timeout:
description:
- How long in seconds to wait for a build to complete.
- Ignored if C(wait=false).
default: 120
type: int
build_phases:
description:
- List of state for build to cancel.
- Ignored when C(state=started).
type: list
elements: str
choices:
- New
- Pending
- Running
default: []
requirements:
- python >= 3.6
- kubernetes >= 12.0.0
"""
EXAMPLES = r"""
# Starts build from build config default/hello-world
- name: Starts build from build config
community.okd.openshift_build:
namespace: default
build_config_name: hello-world
# Starts build from a previous build "default/hello-world-1"
- name: Starts build from a previous build
community.okd.openshift_build:
namespace: default
build_name: hello-world-1
# Cancel the build with the given name
- name: Cancel build from default namespace
community.okd.openshift_build:
namespace: "default"
build_name: ruby-build-1
state: cancelled
# Cancel the named build and create a new one with the same parameters
- name: Cancel build from default namespace and create a new one
community.okd.openshift_build:
namespace: "default"
build_name: ruby-build-1
state: restarted
# Cancel all builds created from 'ruby-build' build configuration that are in 'new' state
- name: Cancel build from default namespace and create a new one
community.okd.openshift_build:
namespace: "default"
build_config_name: ruby-build
build_phases:
- New
state: cancelled
"""
RETURN = r"""
builds:
description:
- The builds that were started/cancelled.
returned: success
type: complex
contains:
api_version:
description: The versioned schema of this representation of an object.
returned: success
type: str
kind:
description: Represents the REST resource this object represents.
returned: success
type: str
metadata:
description: Standard object metadata. Includes name, namespace, annotations, labels, etc.
returned: success
type: dict
spec:
description: Specific attributes of the build.
returned: success
type: dict
status:
description: Current status details for the object.
returned: success
type: dict
"""
# ENDREMOVE (downstream)
import copy
from ansible_collections.kubernetes.core.plugins.module_utils.args_common import (
AUTH_ARG_SPEC,
)
def argument_spec():
args = copy.deepcopy(AUTH_ARG_SPEC)
args_options = dict(
name=dict(type="str", required=True), value=dict(type="str", required=True)
)
args.update(
dict(
state=dict(
type="str",
choices=["started", "cancelled", "restarted"],
default="started",
),
build_args=dict(type="list", elements="dict", options=args_options),
commit=dict(type="str"),
env_vars=dict(type="list", elements="dict", options=args_options),
build_name=dict(type="str"),
build_config_name=dict(type="str"),
namespace=dict(type="str", required=True),
incremental=dict(type="bool"),
no_cache=dict(type="bool"),
wait=dict(type="bool", default=False),
wait_sleep=dict(type="int", default=5),
wait_timeout=dict(type="int", default=120),
build_phases=dict(
type="list",
elements="str",
default=[],
choices=["New", "Pending", "Running"],
),
)
)
return args
def main():
mutually_exclusive = [
("build_name", "build_config_name"),
]
from ansible_collections.community.okd.plugins.module_utils.openshift_builds import (
OpenShiftBuilds,
)
module = OpenShiftBuilds(
argument_spec=argument_spec(),
mutually_exclusive=mutually_exclusive,
required_one_of=[
[
"build_name",
"build_config_name",
]
],
)
module.run_module()
if __name__ == "__main__":
main()