text: #!/usr/bin/python
  # -*- coding: utf-8 -*-
  
  # (c) 2018, Will Thames <@willthames>
  # 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
  
  
  ANSIBLE_METADATA = {'metadata_version': '1.1',
                      'status': ['preview'],
                      'supported_by': 'community'}
  
  DOCUMENTATION = '''
  module: k8s_info
  
  short_description: Describe Kubernetes (K8s) objects
  
  version_added: "2.7"
  
  author:
      - "Will Thames (@willthames)"
  
  description:
    - Use the OpenShift Python client to perform read operations on K8s objects.
    - Access to the full range of K8s APIs.
    - Authenticate using either a config file, certificates, password or token.
    - Supports check mode.
    - This module was called C(k8s_facts) before Ansible 2.9. The usage did not change.
  
  options:
    api_version:
      description:
      - Use to specify the API version. in conjunction with I(kind), I(name), and I(namespace) to identify a
        specific object.
      default: v1
      aliases:
      - api
      - version
    kind:
      description:
      - Use to specify an object model. Use in conjunction with I(api_version), I(name), and I(namespace) to identify a
        specific object.
      required: yes
    name:
      description:
      - Use to specify an object name.  Use in conjunction with I(api_version), I(kind) and I(namespace) to identify a
        specific object.
    namespace:
      description:
      - Use to specify an object namespace. Use in conjunction with I(api_version), I(kind), and I(name)
        to identify a specific object.
    label_selectors:
      description: List of label selectors to use to filter results
    field_selectors:
      description: List of field selectors to use to filter results
  
  extends_documentation_fragment:
    - k8s_auth_options
  
  requirements:
    - "python >= 2.7"
    - "openshift >= 0.6"
    - "PyYAML >= 3.11"
  '''
  
  EXAMPLES = '''
  - name: Get an existing Service object
    k8s_info:
      api_version: v1
      kind: Service
      name: web
      namespace: testing
    register: web_service
  
  - name: Get a list of all service objects
    k8s_info:
      api_version: v1
      kind: Service
      namespace: testing
    register: service_list
  
  - name: Get a list of all pods from any namespace
    k8s_info:
      kind: Pod
    register: pod_list
  
  - name: Search for all Pods labelled app=web
    k8s_info:
      kind: Pod
      label_selectors:
        - app = web
        - tier in (dev, test)
  
  - name: Search for all running pods
    k8s_info:
      kind: Pod
      field_selectors:
        - status.phase=Running
  '''
  
  RETURN = '''
  resources:
    description:
    - The object(s) that exists
    returned: success
    type: complex
    contains:
      api_version:
        description: The versioned schema of this representation of an object.
        returned: success
        type: str
      kind:
        description: Represents the REST resource this object represents.
        returned: success
        type: str
      metadata:
        description: Standard object metadata. Includes name, namespace, annotations, labels, etc.
        returned: success
        type: dict
      spec:
        description: Specific attributes of the object. Will vary based on the I(api_version) and I(kind).
        returned: success
        type: dict
      status:
        description: Current status details for the object.
        returned: success
        type: dict
  '''
  
  
  from ansible.module_utils.k8s.common import KubernetesAnsibleModule, AUTH_ARG_SPEC
  import copy
  
  
  class KubernetesInfoModule(KubernetesAnsibleModule):
  
      def __init__(self, *args, **kwargs):
          KubernetesAnsibleModule.__init__(self, *args,
                                           supports_check_mode=True,
                                           **kwargs)
          if self._name == 'k8s_facts':
              self.deprecate("The 'k8s_facts' module has been renamed to 'k8s_info'", version='2.13')
  
      def execute_module(self):
          self.client = self.get_api_client()
  
          self.exit_json(changed=False,
                         **self.kubernetes_facts(self.params['kind'],
                                                 self.params['api_version'],
                                                 self.params['name'],
                                                 self.params['namespace'],
                                                 self.params['label_selectors'],
                                                 self.params['field_selectors']))
  
      @property
      def argspec(self):
          args = copy.deepcopy(AUTH_ARG_SPEC)
          args.update(
              dict(
                  kind=dict(required=True),
                  api_version=dict(default='v1', aliases=['api', 'version']),
                  name=dict(),
                  namespace=dict(),
                  label_selectors=dict(type='list', default=[]),
                  field_selectors=dict(type='list', default=[]),
              )
          )
          return args
  
  
  def main():
      KubernetesInfoModule().execute_module()
  
  
  if __name__ == '__main__':
      main()
  