Skip to content

Commit

Permalink
lookup: return list even if single item found (#117)
Browse files Browse the repository at this point in the history
Always return list from k8s lookup plugin

Fixes: #9

Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
  • Loading branch information
Akasurde authored Jun 4, 2021
1 parent dd53fde commit cf0b71f
Show file tree
Hide file tree
Showing 4 changed files with 67 additions and 15 deletions.
3 changes: 3 additions & 0 deletions changelogs/fragments/9_lookup_k8s.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
---
bugfixes:
- k8s - lookup should return list even if single item is found (https://github.com/ansible-collections/kubernetes.core/issues/9).
8 changes: 8 additions & 0 deletions molecule/default/converge.yml
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,14 @@
tags:
- always

- name: Include lookup_k8s.yml
include_tasks:
file: tasks/lookup_k8s.yml
apply:
tags: [ lookup, k8s ]
tags:
- always

roles:
- role: helm
tags:
Expand Down
54 changes: 54 additions & 0 deletions molecule/default/tasks/lookup_k8s.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
---
- block:
# https://github.com/ansible-collections/kubernetes.core/issues/9
- name: Create a namespace with label
kubernetes.core.k8s:
definition:
apiVersion: v1
kind: Namespace
metadata:
name: "app-development-one"
labels:
namespace_label: "app_development"

- set_fact:
namespace_info: "{{ lookup('kubernetes.core.k8s', kind='Namespace', label_selector='namespace_label=app_development') }}"

- name: Check if the returned value is list with a single element
assert:
that:
- namespace_info is iterable
- not namespace_info is string
- not namespace_info is mapping
- namespace_info | length == 1

- name: Create another namespace with label
kubernetes.core.k8s:
definition:
apiVersion: v1
kind: Namespace
metadata:
name: "app-development-two"
labels:
namespace_label: "app_development"

- set_fact:
namespace_info: "{{ lookup('kubernetes.core.k8s', kind='Namespace', label_selector='namespace_label=app_development') }}"

- name: Check if the returned value is list with 2 elements
assert:
that:
- namespace_info is iterable
- not namespace_info is string
- not namespace_info is mapping
- namespace_info | length == 2

always:
- name: Ensure that namespace is removed
k8s:
kind: Namespace
name: "{{ item }}"
state: absent
with_items:
- app-development-one
- app-development-two
17 changes: 2 additions & 15 deletions plugins/lookup/k8s.py
Original file line number Diff line number Diff line change
@@ -1,20 +1,7 @@
#
# Copyright 2018 Red Hat | Ansible
#
# This file is part of Ansible
#
# Ansible is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Ansible is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
# 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)

Expand Down Expand Up @@ -277,7 +264,7 @@ def run(self, terms, variables=None, **kwargs):
if self.name:
return [k8s_obj.to_dict()]

return k8s_obj.to_dict().get('items')
return [k8s_obj.to_dict().get('items')]


class LookupModule(LookupBase):
Expand Down

0 comments on commit cf0b71f

Please sign in to comment.