mirror of
https://github.com/openshift/community.okd.git
synced 2026-04-11 11:21:06 +00:00
* Update tests for newer version of openshift (#254)
* Update tests for newer version of openshift
More recent versions of ocp no longer automatically create tokens for
service accounts. This updates the tests to manually create the tokens.
* Update nginx template version
The old image was EOL and the deployment was failing to deploy.
* Fix nginx version for all tasks
* Add missing var
* Remove openshift inventory plugin (#252)
* Remove openshift inventory plugin
This removes the openshift inventory plugin which has been deprecated
since version 3.0.0. The tests have been updated to retain coverage of
the connection plugin, which is still supported.
* Update version in Makefile
* CI fixes
* Update version info in build scripts
* Set ansible remote directory
The security policy on the pod is preventing ansible from writing to /.
Set it to /tmp which should be writable.
* Bump the ansible-lint version to 25.1.2 (#255)
* Bump the ansible-lint version to 25.1.2
* Update changelogs/fragments/ansible-lint-update.yml
Co-authored-by: Bikouo Aubin <79859644+abikouo@users.noreply.github.com>
---------
Co-authored-by: Bikouo Aubin <79859644+abikouo@users.noreply.github.com>
* Add ansible-lint to tox linters (#258)
* Add ansible-lint to tox linters
* Bump black
* Black formatting
* fix linting
* prepare release 4.0.2 (#262) (#263)
(cherry picked from commit 55ccaf3394)
* Update k8s dependency upper bounds (#257)
---------
Co-authored-by: Mike Graves <mgraves@redhat.com>
Co-authored-by: GomathiselviS <gomathiselvi@gmail.com>
Co-authored-by: Bikouo Aubin <79859644+abikouo@users.noreply.github.com>
Co-authored-by: Bianca Henderson <beeankha@gmail.com>
374 lines
13 KiB
Python
374 lines
13 KiB
Python
#!/usr/bin/python
|
|
|
|
# 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_adm_migrate_template_instances
|
|
short_description: Update TemplateInstances to point to the latest group-version-kinds
|
|
version_added: "2.2.0"
|
|
author: Alina Buzachis (@alinabuzachis)
|
|
description:
|
|
- Update TemplateInstances to point to the latest group-version-kinds.
|
|
- Analogous to C(oc adm migrate template-instances).
|
|
extends_documentation_fragment:
|
|
- kubernetes.core.k8s_auth_options
|
|
- kubernetes.core.k8s_wait_options
|
|
options:
|
|
namespace:
|
|
description:
|
|
- The namespace that the template can be found in.
|
|
- If no namespace if specified, migrate objects in all namespaces.
|
|
type: str
|
|
requirements:
|
|
- python >= 3.6
|
|
- kubernetes >= 12.0.0
|
|
"""
|
|
|
|
EXAMPLES = r"""
|
|
- name: Migrate TemplateInstances in namespace=test
|
|
community.okd.openshift_adm_migrate_template_instances:
|
|
namespace: test
|
|
register: _result
|
|
|
|
- name: Migrate TemplateInstances in all namespaces
|
|
community.okd.openshift_adm_migrate_template_instances:
|
|
register: _result
|
|
"""
|
|
|
|
RETURN = r"""
|
|
result:
|
|
description:
|
|
- List with all TemplateInstances that have been migrated.
|
|
type: list
|
|
returned: success
|
|
elements: dict
|
|
sample: [
|
|
{
|
|
"apiVersion": "template.openshift.io/v1",
|
|
"kind": "TemplateInstance",
|
|
"metadata": {
|
|
"creationTimestamp": "2021-11-10T11:12:09Z",
|
|
"finalizers": [
|
|
"template.openshift.io/finalizer"
|
|
],
|
|
"managedFields": [
|
|
{
|
|
"apiVersion": "template.openshift.io/v1",
|
|
"fieldsType": "FieldsV1",
|
|
"fieldsV1": {
|
|
"f:spec": {
|
|
"f:template": {
|
|
"f:metadata": {
|
|
"f:name": {}
|
|
},
|
|
"f:objects": {},
|
|
"f:parameters": {}
|
|
}
|
|
}
|
|
},
|
|
"manager": "kubectl-create",
|
|
"operation": "Update",
|
|
"time": "2021-11-10T11:12:09Z"
|
|
},
|
|
{
|
|
"apiVersion": "template.openshift.io/v1",
|
|
"fieldsType": "FieldsV1",
|
|
"fieldsV1": {
|
|
"f:metadata": {
|
|
"f:finalizers": {
|
|
".": {},
|
|
"v:\"template.openshift.io/finalizer\"": {}
|
|
}
|
|
},
|
|
"f:status": {
|
|
"f:conditions": {}
|
|
}
|
|
},
|
|
"manager": "openshift-controller-manager",
|
|
"operation": "Update",
|
|
"time": "2021-11-10T11:12:09Z"
|
|
},
|
|
{
|
|
"apiVersion": "template.openshift.io/v1",
|
|
"fieldsType": "FieldsV1",
|
|
"fieldsV1": {
|
|
"f:status": {
|
|
"f:objects": {}
|
|
}
|
|
},
|
|
"manager": "OpenAPI-Generator",
|
|
"operation": "Update",
|
|
"time": "2021-11-10T11:12:33Z"
|
|
}
|
|
],
|
|
"name": "demo",
|
|
"namespace": "test",
|
|
"resourceVersion": "545370",
|
|
"uid": "09b795d7-7f07-4d94-bf0f-2150ee66f88d"
|
|
},
|
|
"spec": {
|
|
"requester": {
|
|
"groups": [
|
|
"system:masters",
|
|
"system:authenticated"
|
|
],
|
|
"username": "system:admin"
|
|
},
|
|
"template": {
|
|
"metadata": {
|
|
"creationTimestamp": null,
|
|
"name": "template"
|
|
},
|
|
"objects": [
|
|
{
|
|
"apiVersion": "v1",
|
|
"kind": "Secret",
|
|
"metadata": {
|
|
"labels": {
|
|
"foo": "bar"
|
|
},
|
|
"name": "secret"
|
|
}
|
|
},
|
|
{
|
|
"apiVersion": "apps/v1",
|
|
"kind": "Deployment",
|
|
"metadata": {
|
|
"name": "deployment"
|
|
},
|
|
"spec": {
|
|
"replicas": 0,
|
|
"selector": {
|
|
"matchLabels": {
|
|
"key": "value"
|
|
}
|
|
},
|
|
"template": {
|
|
"metadata": {
|
|
"labels": {
|
|
"key": "value"
|
|
}
|
|
},
|
|
"spec": {
|
|
"containers": [
|
|
{
|
|
"image": "k8s.gcr.io/e2e-test-images/agnhost:2.32",
|
|
"name": "hello-openshift"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"apiVersion": "v1",
|
|
"kind": "Route",
|
|
"metadata": {
|
|
"name": "route"
|
|
},
|
|
"spec": {
|
|
"to": {
|
|
"name": "foo"
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "NAME",
|
|
"value": "${NAME}"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"status": {
|
|
"conditions": [
|
|
{
|
|
"lastTransitionTime": "2021-11-10T11:12:09Z",
|
|
"message": "",
|
|
"reason": "Created",
|
|
"status": "True",
|
|
"type": "Ready"
|
|
}
|
|
],
|
|
"objects": [
|
|
{
|
|
"ref": {
|
|
"apiVersion": "v1",
|
|
"kind": "Secret",
|
|
"name": "secret",
|
|
"namespace": "test",
|
|
"uid": "33fad364-6d47-4f9c-9e51-92cba5602a57"
|
|
}
|
|
},
|
|
{
|
|
"ref": {
|
|
"apiVersion": "apps/v1",
|
|
"kind": "Deployment",
|
|
"name": "deployment",
|
|
"namespace": "test",
|
|
"uid": "3b527f88-42a1-4811-9e2f-baad4e4d8807"
|
|
}
|
|
},
|
|
{
|
|
"ref": {
|
|
"apiVersion": "route.openshift.io/v1.Route",
|
|
"kind": "Route",
|
|
"name": "route",
|
|
"namespace": "test",
|
|
"uid": "5b5411de-8769-4e27-ba52-6781630e4008"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
...
|
|
]
|
|
"""
|
|
# ENDREMOVE (downstream)
|
|
|
|
from ansible.module_utils._text import to_native
|
|
|
|
from ansible_collections.community.okd.plugins.module_utils.openshift_common import (
|
|
AnsibleOpenshiftModule,
|
|
)
|
|
|
|
try:
|
|
from kubernetes.dynamic.exceptions import DynamicApiError
|
|
except ImportError:
|
|
pass
|
|
|
|
from ansible_collections.kubernetes.core.plugins.module_utils.args_common import (
|
|
AUTH_ARG_SPEC,
|
|
WAIT_ARG_SPEC,
|
|
)
|
|
|
|
transforms = {
|
|
"Build": "build.openshift.io/v1",
|
|
"BuildConfig": "build.openshift.io/v1",
|
|
"DeploymentConfig": "apps.openshift.io/v1",
|
|
"Route": "route.openshift.io/v1",
|
|
}
|
|
|
|
|
|
class OpenShiftMigrateTemplateInstances(AnsibleOpenshiftModule):
|
|
def __init__(self, **kwargs):
|
|
super(OpenShiftMigrateTemplateInstances, self).__init__(**kwargs)
|
|
|
|
def patch_template_instance(self, resource, templateinstance):
|
|
result = None
|
|
|
|
try:
|
|
result = resource.status.patch(templateinstance)
|
|
except Exception as exc:
|
|
self.fail_json(
|
|
msg="Failed to migrate TemplateInstance {0} due to: {1}".format(
|
|
templateinstance["metadata"]["name"], to_native(exc)
|
|
)
|
|
)
|
|
|
|
return result.to_dict()
|
|
|
|
@staticmethod
|
|
def perform_migrations(templateinstances):
|
|
ti_list = []
|
|
ti_to_be_migrated = []
|
|
|
|
ti_list = (
|
|
templateinstances.get("kind") == "TemplateInstanceList"
|
|
and templateinstances.get("items")
|
|
or [templateinstances]
|
|
)
|
|
|
|
for ti_elem in ti_list:
|
|
objects = ti_elem["status"].get("objects")
|
|
if objects:
|
|
for i, obj in enumerate(objects):
|
|
object_type = obj["ref"]["kind"]
|
|
if (
|
|
object_type in transforms.keys()
|
|
and obj["ref"].get("apiVersion") != transforms[object_type]
|
|
):
|
|
ti_elem["status"]["objects"][i]["ref"]["apiVersion"] = (
|
|
transforms[object_type]
|
|
)
|
|
ti_to_be_migrated.append(ti_elem)
|
|
|
|
return ti_to_be_migrated
|
|
|
|
def execute_module(self):
|
|
templateinstances = None
|
|
namespace = self.params.get("namespace")
|
|
results = {"changed": False, "result": []}
|
|
|
|
resource = self.find_resource(
|
|
"templateinstances", "template.openshift.io/v1", fail=True
|
|
)
|
|
|
|
if namespace:
|
|
# Get TemplateInstances from a provided namespace
|
|
try:
|
|
templateinstances = resource.get(namespace=namespace).to_dict()
|
|
except DynamicApiError as exc:
|
|
self.fail_json(
|
|
msg="Failed to retrieve TemplateInstances in namespace '{0}': {1}".format(
|
|
namespace, exc.body
|
|
),
|
|
error=exc.status,
|
|
status=exc.status,
|
|
reason=exc.reason,
|
|
)
|
|
except Exception as exc:
|
|
self.fail_json(
|
|
msg="Failed to retrieve TemplateInstances in namespace '{0}': {1}".format(
|
|
namespace, to_native(exc)
|
|
),
|
|
error="",
|
|
status="",
|
|
reason="",
|
|
)
|
|
else:
|
|
# Get TemplateInstances from all namespaces
|
|
templateinstances = resource.get().to_dict()
|
|
|
|
ti_to_be_migrated = self.perform_migrations(templateinstances)
|
|
|
|
if ti_to_be_migrated:
|
|
if self.check_mode:
|
|
self.exit_json(**{"changed": True, "result": ti_to_be_migrated})
|
|
else:
|
|
for ti_elem in ti_to_be_migrated:
|
|
results["result"].append(
|
|
self.patch_template_instance(resource, ti_elem)
|
|
)
|
|
results["changed"] = True
|
|
|
|
self.exit_json(**results)
|
|
|
|
|
|
def argspec():
|
|
argument_spec = {}
|
|
argument_spec.update(AUTH_ARG_SPEC)
|
|
argument_spec.update(WAIT_ARG_SPEC)
|
|
argument_spec["namespace"] = dict(type="str")
|
|
|
|
return argument_spec
|
|
|
|
|
|
def main():
|
|
argument_spec = argspec()
|
|
module = OpenShiftMigrateTemplateInstances(
|
|
argument_spec=argument_spec, supports_check_mode=True
|
|
)
|
|
module.run_module()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|