mirror of
https://github.com/ansible-collections/kubernetes.core.git
synced 2026-05-07 13:32:37 +00:00
Enable black formatting test (#259)
Enable black formatting test SUMMARY Signed-off-by: Abhijeet Kasurde akasurde@redhat.com ISSUE TYPE Bugfix Pull Request COMPONENT NAME plugins/action/k8s_info.py plugins/connection/kubectl.py plugins/doc_fragments/helm_common_options.py plugins/doc_fragments/k8s_auth_options.py plugins/doc_fragments/k8s_delete_options.py plugins/doc_fragments/k8s_name_options.py plugins/doc_fragments/k8s_resource_options.py plugins/doc_fragments/k8s_scale_options.py plugins/doc_fragments/k8s_state_options.py plugins/doc_fragments/k8s_wait_options.py plugins/filter/k8s.py plugins/inventory/k8s.py plugins/lookup/k8s.py plugins/lookup/kustomize.py plugins/module_utils/ansiblemodule.py plugins/module_utils/apply.py plugins/module_utils/args_common.py plugins/module_utils/client/discovery.py plugins/module_utils/client/resource.py plugins/module_utils/common.py plugins/module_utils/exceptions.py plugins/module_utils/hashes.py plugins/module_utils/helm.py plugins/module_utils/k8sdynamicclient.py plugins/module_utils/selector.py plugins/modules/helm.py plugins/modules/helm_info.py plugins/modules/helm_plugin.py plugins/modules/helm_plugin_info.py plugins/modules/helm_repository.py plugins/modules/helm_template.py plugins/modules/k8s.py plugins/modules/k8s_cluster_info.py plugins/modules/k8s_cp.py plugins/modules/k8s_drain.py plugins/modules/k8s_exec.py plugins/modules/k8s_info.py plugins/modules/k8s_json_patch.py plugins/modules/k8s_log.py plugins/modules/k8s_rollback.py plugins/modules/k8s_scale.py plugins/modules/k8s_service.py tests/integration/targets/kubernetes/library/test_tempfile.py tests/unit/module_utils/test_apply.py tests/unit/module_utils/test_common.py tests/unit/module_utils/test_discoverer.py tests/unit/module_utils/test_hashes.py tests/unit/module_utils/test_marshal.py tests/unit/module_utils/test_selector.py tox.ini Reviewed-by: None <None> Reviewed-by: Mike Graves <mgraves@redhat.com> Reviewed-by: None <None>
This commit is contained in:
@@ -5,10 +5,11 @@
|
||||
# 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
|
||||
|
||||
|
||||
DOCUMENTATION = r'''
|
||||
DOCUMENTATION = r"""
|
||||
module: k8s_rollback
|
||||
short_description: Rollback Kubernetes (K8S) Deployments and DaemonSets
|
||||
version_added: "1.0.0"
|
||||
@@ -34,18 +35,18 @@ requirements:
|
||||
- "python >= 3.6"
|
||||
- "kubernetes >= 12.0.0"
|
||||
- "PyYAML >= 3.11"
|
||||
'''
|
||||
"""
|
||||
|
||||
EXAMPLES = r'''
|
||||
EXAMPLES = r"""
|
||||
- name: Rollback a failed deployment
|
||||
kubernetes.core.k8s_rollback:
|
||||
api_version: apps/v1
|
||||
kind: Deployment
|
||||
name: web
|
||||
namespace: testing
|
||||
'''
|
||||
"""
|
||||
|
||||
RETURN = r'''
|
||||
RETURN = r"""
|
||||
rollback_info:
|
||||
description:
|
||||
- The object that was rolled back.
|
||||
@@ -74,25 +75,29 @@ rollback_info:
|
||||
description: Current status details for the object.
|
||||
returned: success
|
||||
type: dict
|
||||
'''
|
||||
"""
|
||||
|
||||
import copy
|
||||
|
||||
from ansible_collections.kubernetes.core.plugins.module_utils.ansiblemodule import AnsibleModule
|
||||
from ansible_collections.kubernetes.core.plugins.module_utils.ansiblemodule import (
|
||||
AnsibleModule,
|
||||
)
|
||||
from ansible_collections.kubernetes.core.plugins.module_utils.args_common import (
|
||||
AUTH_ARG_SPEC, NAME_ARG_SPEC)
|
||||
AUTH_ARG_SPEC,
|
||||
NAME_ARG_SPEC,
|
||||
)
|
||||
|
||||
|
||||
def get_managed_resource(module):
|
||||
managed_resource = {}
|
||||
|
||||
kind = module.params['kind']
|
||||
kind = module.params["kind"]
|
||||
if kind == "DaemonSet":
|
||||
managed_resource['kind'] = "ControllerRevision"
|
||||
managed_resource['api_version'] = "apps/v1"
|
||||
managed_resource["kind"] = "ControllerRevision"
|
||||
managed_resource["api_version"] = "apps/v1"
|
||||
elif kind == "Deployment":
|
||||
managed_resource['kind'] = "ReplicaSet"
|
||||
managed_resource['api_version'] = "apps/v1"
|
||||
managed_resource["kind"] = "ReplicaSet"
|
||||
managed_resource["api_version"] = "apps/v1"
|
||||
else:
|
||||
module.fail(msg="Cannot perform rollback on resource of kind {0}".format(kind))
|
||||
return managed_resource
|
||||
@@ -102,80 +107,89 @@ def execute_module(module, k8s_ansible_mixin):
|
||||
results = []
|
||||
|
||||
resources = k8s_ansible_mixin.kubernetes_facts(
|
||||
module.params['kind'],
|
||||
module.params['api_version'],
|
||||
module.params['name'],
|
||||
module.params['namespace'],
|
||||
module.params['label_selectors'],
|
||||
module.params['field_selectors'])
|
||||
module.params["kind"],
|
||||
module.params["api_version"],
|
||||
module.params["name"],
|
||||
module.params["namespace"],
|
||||
module.params["label_selectors"],
|
||||
module.params["field_selectors"],
|
||||
)
|
||||
|
||||
for resource in resources['resources']:
|
||||
for resource in resources["resources"]:
|
||||
result = perform_action(module, k8s_ansible_mixin, resource)
|
||||
results.append(result)
|
||||
|
||||
module.exit_json(**{
|
||||
'changed': True,
|
||||
'rollback_info': results
|
||||
})
|
||||
module.exit_json(**{"changed": True, "rollback_info": results})
|
||||
|
||||
|
||||
def perform_action(module, k8s_ansible_mixin, resource):
|
||||
if module.params['kind'] == "DaemonSet":
|
||||
current_revision = resource['metadata']['generation']
|
||||
elif module.params['kind'] == "Deployment":
|
||||
current_revision = resource['metadata']['annotations']['deployment.kubernetes.io/revision']
|
||||
if module.params["kind"] == "DaemonSet":
|
||||
current_revision = resource["metadata"]["generation"]
|
||||
elif module.params["kind"] == "Deployment":
|
||||
current_revision = resource["metadata"]["annotations"][
|
||||
"deployment.kubernetes.io/revision"
|
||||
]
|
||||
|
||||
managed_resource = get_managed_resource(module)
|
||||
managed_resources = k8s_ansible_mixin.kubernetes_facts(
|
||||
managed_resource['kind'],
|
||||
managed_resource['api_version'],
|
||||
'',
|
||||
module.params['namespace'],
|
||||
resource['spec']
|
||||
['selector']
|
||||
['matchLabels'],
|
||||
'')
|
||||
managed_resource["kind"],
|
||||
managed_resource["api_version"],
|
||||
"",
|
||||
module.params["namespace"],
|
||||
resource["spec"]["selector"]["matchLabels"],
|
||||
"",
|
||||
)
|
||||
|
||||
prev_managed_resource = get_previous_revision(managed_resources['resources'],
|
||||
current_revision)
|
||||
prev_managed_resource = get_previous_revision(
|
||||
managed_resources["resources"], current_revision
|
||||
)
|
||||
|
||||
if module.params['kind'] == "Deployment":
|
||||
del prev_managed_resource['spec']['template']['metadata']['labels']['pod-template-hash']
|
||||
if module.params["kind"] == "Deployment":
|
||||
del prev_managed_resource["spec"]["template"]["metadata"]["labels"][
|
||||
"pod-template-hash"
|
||||
]
|
||||
|
||||
resource_patch = [{
|
||||
"op": "replace",
|
||||
"path": "/spec/template",
|
||||
"value": prev_managed_resource['spec']['template']
|
||||
}, {
|
||||
"op": "replace",
|
||||
"path": "/metadata/annotations",
|
||||
"value": {
|
||||
"deployment.kubernetes.io/revision": prev_managed_resource['metadata']['annotations']['deployment.kubernetes.io/revision']
|
||||
}
|
||||
}]
|
||||
resource_patch = [
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/spec/template",
|
||||
"value": prev_managed_resource["spec"]["template"],
|
||||
},
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/metadata/annotations",
|
||||
"value": {
|
||||
"deployment.kubernetes.io/revision": prev_managed_resource[
|
||||
"metadata"
|
||||
]["annotations"]["deployment.kubernetes.io/revision"]
|
||||
},
|
||||
},
|
||||
]
|
||||
|
||||
api_target = 'deployments'
|
||||
content_type = 'application/json-patch+json'
|
||||
elif module.params['kind'] == "DaemonSet":
|
||||
api_target = "deployments"
|
||||
content_type = "application/json-patch+json"
|
||||
elif module.params["kind"] == "DaemonSet":
|
||||
resource_patch = prev_managed_resource["data"]
|
||||
|
||||
api_target = 'daemonsets'
|
||||
content_type = 'application/strategic-merge-patch+json'
|
||||
api_target = "daemonsets"
|
||||
content_type = "application/strategic-merge-patch+json"
|
||||
|
||||
rollback = k8s_ansible_mixin.client.request(
|
||||
"PATCH",
|
||||
"/apis/{0}/namespaces/{1}/{2}/{3}"
|
||||
.format(module.params['api_version'],
|
||||
module.params['namespace'],
|
||||
api_target,
|
||||
module.params['name']),
|
||||
"/apis/{0}/namespaces/{1}/{2}/{3}".format(
|
||||
module.params["api_version"],
|
||||
module.params["namespace"],
|
||||
api_target,
|
||||
module.params["name"],
|
||||
),
|
||||
body=resource_patch,
|
||||
content_type=content_type)
|
||||
content_type=content_type,
|
||||
)
|
||||
|
||||
result = {'changed': True}
|
||||
result['method'] = 'patch'
|
||||
result['body'] = resource_patch
|
||||
result['resources'] = rollback.to_dict()
|
||||
result = {"changed": True}
|
||||
result["method"] = "patch"
|
||||
result["body"] = resource_patch
|
||||
result["resources"] = rollback.to_dict()
|
||||
return result
|
||||
|
||||
|
||||
@@ -184,8 +198,8 @@ def argspec():
|
||||
args.update(NAME_ARG_SPEC)
|
||||
args.update(
|
||||
dict(
|
||||
label_selectors=dict(type='list', elements='str', default=[]),
|
||||
field_selectors=dict(type='list', elements='str', default=[]),
|
||||
label_selectors=dict(type="list", elements="str", default=[]),
|
||||
field_selectors=dict(type="list", elements="str", default=[]),
|
||||
)
|
||||
)
|
||||
return args
|
||||
@@ -193,27 +207,40 @@ def argspec():
|
||||
|
||||
def get_previous_revision(all_resources, current_revision):
|
||||
for resource in all_resources:
|
||||
if resource['kind'] == 'ReplicaSet':
|
||||
if int(resource['metadata']
|
||||
['annotations']
|
||||
['deployment.kubernetes.io/revision']) == int(current_revision) - 1:
|
||||
if resource["kind"] == "ReplicaSet":
|
||||
if (
|
||||
int(
|
||||
resource["metadata"]["annotations"][
|
||||
"deployment.kubernetes.io/revision"
|
||||
]
|
||||
)
|
||||
== int(current_revision) - 1
|
||||
):
|
||||
return resource
|
||||
elif resource['kind'] == 'ControllerRevision':
|
||||
if int(resource['metadata']
|
||||
['annotations']
|
||||
['deprecated.daemonset.template.generation']) == int(current_revision) - 1:
|
||||
elif resource["kind"] == "ControllerRevision":
|
||||
if (
|
||||
int(
|
||||
resource["metadata"]["annotations"][
|
||||
"deprecated.daemonset.template.generation"
|
||||
]
|
||||
)
|
||||
== int(current_revision) - 1
|
||||
):
|
||||
return resource
|
||||
return None
|
||||
|
||||
|
||||
def main():
|
||||
module = AnsibleModule(argument_spec=argspec(), supports_check_mode=True)
|
||||
from ansible_collections.kubernetes.core.plugins.module_utils.common import (K8sAnsibleMixin, get_api_client)
|
||||
from ansible_collections.kubernetes.core.plugins.module_utils.common import (
|
||||
K8sAnsibleMixin,
|
||||
get_api_client,
|
||||
)
|
||||
|
||||
k8s_ansible_mixin = K8sAnsibleMixin(module)
|
||||
k8s_ansible_mixin.client = get_api_client(module=module)
|
||||
execute_module(module, k8s_ansible_mixin)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
||||
Reference in New Issue
Block a user