diff --git a/lib/ansible/module_utils/k8s/raw.py b/lib/ansible/module_utils/k8s/raw.py index 0d62c190c0f..2ce90d649f4 100644 --- a/lib/ansible/module_utils/k8s/raw.py +++ b/lib/ansible/module_utils/k8s/raw.py @@ -43,10 +43,10 @@ class KubernetesRawModule(KubernetesAnsibleModule): supports_check_mode=True, **kwargs) - kind = self.params.pop('kind') - api_version = self.params.pop('api_version') - name = self.params.pop('name') - namespace = self.params.pop('namespace') + self.kind = self.params.pop('kind') + self.api_version = self.params.pop('api_version') + self.name = self.params.pop('name') + self.namespace = self.params.pop('namespace') resource_definition = self.params.pop('resource_definition') if resource_definition: self.resource_definitions = [resource_definition] @@ -56,11 +56,11 @@ class KubernetesRawModule(KubernetesAnsibleModule): if not resource_definition and not src: self.resource_definitions = [{ - 'kind': kind, - 'apiVersion': api_version, + 'kind': self.kind, + 'apiVersion': self.api_version, 'metadata': { - 'name': name, - 'namespace': namespace + 'name': self.name, + 'namespace': self.namespace } }] @@ -69,14 +69,13 @@ class KubernetesRawModule(KubernetesAnsibleModule): results = [] self.client = self.get_api_client() for definition in self.resource_definitions: - kind = definition.get('kind') + kind = definition.get('kind', self.kind) search_kind = kind if kind.lower().endswith('list'): search_kind = kind[:-4] - api_version = definition.get('apiVersion') + api_version = definition.get('apiVersion', self.api_version) resource = self.find_resource(search_kind, api_version, fail=True) - definition['kind'] = resource.kind - definition['apiVersion'] = resource.group_version + definition = self.set_defaults(resource, definition) result = self.perform_action(resource, definition) changed = changed or result['changed'] results.append(result) @@ -91,10 +90,21 @@ class KubernetesRawModule(KubernetesAnsibleModule): } }) + def set_defaults(self, resource, definition): + definition['kind'] = resource.kind + definition['apiVersion'] = resource.group_version + if not definition.get('metadata'): + definition['metadata'] = {} + if self.name and not definition['metadata'].get('name'): + definition['metadata']['name'] = self.name + if resource.namespaced and self.namespace and not definition['metadata'].get('namespace'): + definition['metadata']['namespace'] = self.namespace + return definition + def perform_action(self, resource, definition): result = {'changed': False, 'result': {}} - state = self.params.pop('state', None) - force = self.params.pop('force', False) + state = self.params.get('state', None) + force = self.params.get('force', False) name = definition.get('metadata', {}).get('name') namespace = definition.get('metadata', {}).get('namespace') existing = None