mirror of
https://github.com/ansible-collections/kubernetes.core.git
synced 2026-03-27 05:43:02 +00:00
Add support for configuring garbage collection (#334)
* Add support for configuring garbage collection This surfaces deleteOptions functionality in a top-level delete_options parameter. * Add changelog fragment * Remove kind and apiVersion from delete_options * Add release version to docs
This commit is contained in:
51
plugins/doc_fragments/k8s_delete_options.py
Normal file
51
plugins/doc_fragments/k8s_delete_options.py
Normal file
@@ -0,0 +1,51 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Copyright: (c) 2020, Red Hat | Ansible
|
||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||
|
||||
# Options for specifying object wait
|
||||
|
||||
from __future__ import (absolute_import, division, print_function)
|
||||
__metaclass__ = type
|
||||
|
||||
|
||||
class ModuleDocFragment(object):
|
||||
|
||||
DOCUMENTATION = r'''
|
||||
options:
|
||||
delete_options:
|
||||
type: dict
|
||||
version_added: '1.2.0'
|
||||
description:
|
||||
- Configure behavior when deleting an object.
|
||||
- Only used when I(state=absent).
|
||||
suboptions:
|
||||
propagationPolicy:
|
||||
type: str
|
||||
description:
|
||||
- Use to control how dependent objects are deleted.
|
||||
- If not specified, the default policy for the object type will be used. This may vary across object types.
|
||||
choices:
|
||||
- "Foreground"
|
||||
- "Background"
|
||||
- "Orphan"
|
||||
gracePeriodSeconds:
|
||||
type: int
|
||||
description:
|
||||
- Specify how many seconds to wait before forcefully terminating.
|
||||
- Only implemented for Pod resources.
|
||||
- If not specified, the default grace period for the object type will be used.
|
||||
preconditions:
|
||||
type: dict
|
||||
description:
|
||||
- Specify condition that must be met for delete to proceed.
|
||||
suboptions:
|
||||
resourceVersion:
|
||||
type: str
|
||||
description:
|
||||
- Specify the resource version of the target object.
|
||||
uid:
|
||||
type: str
|
||||
description:
|
||||
- Specify the UID of the target object.
|
||||
'''
|
||||
@@ -189,6 +189,27 @@ WAIT_ARG_SPEC = dict(
|
||||
)
|
||||
)
|
||||
|
||||
DELETE_OPTS_ARG_SPEC = {
|
||||
'propagationPolicy': {
|
||||
'choices': ['Foreground', 'Background', 'Orphan'],
|
||||
},
|
||||
'gracePeriodSeconds': {
|
||||
'type': 'int',
|
||||
},
|
||||
'preconditions': {
|
||||
'type': 'dict',
|
||||
'options': {
|
||||
'resourceVersion': {
|
||||
'type': 'str',
|
||||
},
|
||||
'uid': {
|
||||
'type': 'str',
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
# Map kubernetes-client parameters to ansible parameters
|
||||
AUTH_ARG_MAP = {
|
||||
'kubeconfig': 'kubeconfig',
|
||||
@@ -594,6 +615,7 @@ class K8sAnsibleMixin(object):
|
||||
return definition
|
||||
|
||||
def perform_action(self, resource, definition):
|
||||
delete_options = self.params.get('delete_options')
|
||||
result = {'changed': False, 'result': {}}
|
||||
state = self.params.get('state', None)
|
||||
force = self.params.get('force', False)
|
||||
@@ -646,6 +668,13 @@ class K8sAnsibleMixin(object):
|
||||
# Delete the object
|
||||
result['changed'] = True
|
||||
if not self.check_mode:
|
||||
if delete_options:
|
||||
body = {
|
||||
'apiVersion': 'v1',
|
||||
'kind': 'DeleteOptions',
|
||||
}
|
||||
body.update(delete_options)
|
||||
params['body'] = body
|
||||
try:
|
||||
k8s_obj = resource.delete(**params)
|
||||
result['result'] = k8s_obj.to_dict()
|
||||
|
||||
@@ -34,6 +34,7 @@ extends_documentation_fragment:
|
||||
- community.kubernetes.k8s_resource_options
|
||||
- community.kubernetes.k8s_auth_options
|
||||
- community.kubernetes.k8s_wait_options
|
||||
- community.kubernetes.k8s_delete_options
|
||||
|
||||
notes:
|
||||
- If your OpenShift Python library is not 0.9.0 or newer and you are trying to
|
||||
@@ -252,7 +253,8 @@ import copy
|
||||
|
||||
from ansible.module_utils.basic import AnsibleModule
|
||||
from ansible_collections.community.kubernetes.plugins.module_utils.common import (
|
||||
K8sAnsibleMixin, COMMON_ARG_SPEC, NAME_ARG_SPEC, RESOURCE_ARG_SPEC, AUTH_ARG_SPEC, WAIT_ARG_SPEC)
|
||||
K8sAnsibleMixin, COMMON_ARG_SPEC, NAME_ARG_SPEC, RESOURCE_ARG_SPEC, AUTH_ARG_SPEC,
|
||||
WAIT_ARG_SPEC, DELETE_OPTS_ARG_SPEC)
|
||||
|
||||
|
||||
class KubernetesModule(K8sAnsibleMixin):
|
||||
@@ -277,6 +279,7 @@ class KubernetesModule(K8sAnsibleMixin):
|
||||
argument_spec['append_hash'] = dict(type='bool', default=False)
|
||||
argument_spec['apply'] = dict(type='bool', default=False)
|
||||
argument_spec['template'] = dict(type='raw', default=None)
|
||||
argument_spec['delete_options'] = dict(type='dict', default=None, options=copy.deepcopy(DELETE_OPTS_ARG_SPEC))
|
||||
return argument_spec
|
||||
|
||||
def __init__(self, k8s_kind=None, *args, **kwargs):
|
||||
|
||||
Reference in New Issue
Block a user