summaryrefslogtreecommitdiff
path: root/lib/ansible/plugins/lookup/k8s.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/ansible/plugins/lookup/k8s.py')
-rw-r--r--lib/ansible/plugins/lookup/k8s.py299
1 files changed, 0 insertions, 299 deletions
diff --git a/lib/ansible/plugins/lookup/k8s.py b/lib/ansible/plugins/lookup/k8s.py
deleted file mode 100644
index aa2affcfb7..0000000000
--- a/lib/ansible/plugins/lookup/k8s.py
+++ /dev/null
@@ -1,299 +0,0 @@
-#
-# 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/>.
-
-from __future__ import (absolute_import, division, print_function)
-
-__metaclass__ = type
-
-DOCUMENTATION = """
- lookup: k8s
-
- version_added: "2.5"
-
- short_description: Query the K8s API
-
- description:
- - Uses the OpenShift Python client to fetch a specific object by name, all matching objects within a
- namespace, or all matching objects for all namespaces, as well as information about the cluster.
- - Provides access the full range of K8s APIs.
- - Enables authentication via config file, certificates, password or token.
-
- options:
- cluster_info:
- description:
- - Use to specify the type of cluster information you are attempting to retrieve. Will take priority
- over all the other options.
- api_version:
- description:
- - Use to specify the API version. If I(resource definition) is provided, the I(apiVersion) from the
- I(resource_definition) will override this option.
- default: v1
- kind:
- description:
- - Use to specify an object model. If I(resource definition) is provided, the I(kind) from a
- I(resource_definition) will override this option.
- required: true
- resource_name:
- description:
- - Fetch a specific object by name. If I(resource definition) is provided, the I(metadata.name) value
- from the I(resource_definition) will override this option.
- namespace:
- description:
- - Limit the objects returned to a specific namespace. If I(resource definition) is provided, the
- I(metadata.namespace) value from the I(resource_definition) will override this option.
- label_selector:
- description:
- - Additional labels to include in the query. Ignored when I(resource_name) is provided.
- field_selector:
- description:
- - Specific fields on which to query. Ignored when I(resource_name) is provided.
- resource_definition:
- description:
- - "Provide a YAML configuration for an object. NOTE: I(kind), I(api_version), I(resource_name),
- and I(namespace) will be overwritten by corresponding values found in the provided I(resource_definition)."
- src:
- description:
- - "Provide a path to a file containing a valid YAML definition of an object dated. Mutually
- exclusive with I(resource_definition). NOTE: I(kind), I(api_version), I(resource_name), and I(namespace)
- will be overwritten by corresponding values found in the configuration read in from the I(src) file."
- - Reads from the local file system. To read from the Ansible controller's file system, use the file lookup
- plugin or template lookup plugin, combined with the from_yaml filter, and pass the result to
- I(resource_definition). See Examples below.
- host:
- description:
- - Provide a URL for accessing the API. Can also be specified via K8S_AUTH_HOST environment variable.
- api_key:
- description:
- - Token used to authenticate with the API. Can also be specified via K8S_AUTH_API_KEY environment variable.
- kubeconfig:
- description:
- - Path to an existing Kubernetes config file. If not provided, and no other connection
- options are provided, the openshift client will attempt to load the default
- configuration file from I(~/.kube/config.json). Can also be specified via K8S_AUTH_KUBECONFIG environment
- variable.
- context:
- description:
- - The name of a context found in the config file. Can also be specified via K8S_AUTH_CONTEXT environment
- variable.
- username:
- description:
- - Provide a username for authenticating with the API. Can also be specified via K8S_AUTH_USERNAME environment
- variable.
- password:
- description:
- - Provide a password for authenticating with the API. Can also be specified via K8S_AUTH_PASSWORD environment
- variable.
- client_cert:
- description:
- - Path to a certificate used to authenticate with the API. Can also be specified via K8S_AUTH_CERT_FILE
- environment
- variable.
- aliases: [ cert_file ]
- client_key:
- description:
- - Path to a key file used to authenticate with the API. Can also be specified via K8S_AUTH_KEY_FILE environment
- variable.
- aliases: [ key_file ]
- ca_cert:
- description:
- - Path to a CA certificate used to authenticate with the API. Can also be specified via K8S_AUTH_SSL_CA_CERT
- environment variable.
- aliases: [ ssl_ca_cert ]
- validate_certs:
- description:
- - Whether or not to verify the API server's SSL certificates. Can also be specified via K8S_AUTH_VERIFY_SSL
- environment variable.
- type: bool
- aliases: [ verify_ssl ]
-
- requirements:
- - "python >= 2.7"
- - "openshift >= 0.6"
- - "PyYAML >= 3.11"
-
- notes:
- - "The OpenShift Python client wraps the K8s Python client, providing full access to
- all of the APIS and models available on both platforms. For API version details and
- additional information visit https://github.com/openshift/openshift-restclient-python"
-"""
-
-EXAMPLES = """
-- name: Fetch a list of namespaces
- set_fact:
- projects: "{{ lookup('k8s', api_version='v1', kind='Namespace') }}"
-
-- name: Fetch all deployments
- set_fact:
- deployments: "{{ lookup('k8s', kind='Deployment') }}"
-
-- name: Fetch all deployments in a namespace
- set_fact:
- deployments: "{{ lookup('k8s', kind='Deployment', namespace='testing') }}"
-
-- name: Fetch a specific deployment by name
- set_fact:
- deployments: "{{ lookup('k8s', kind='Deployment', namespace='testing', resource_name='elastic') }}"
-
-- name: Fetch with label selector
- set_fact:
- service: "{{ lookup('k8s', kind='Service', label_selector='app=galaxy') }}"
-
-# Use parameters from a YAML config
-
-- name: Load config from the Ansible controller filesystem
- set_fact:
- config: "{{ lookup('file', 'service.yml') | from_yaml }}"
-
-- name: Using the config (loaded from a file in prior task), fetch the latest version of the object
- set_fact:
- service: "{{ lookup('k8s', resource_definition=config) }}"
-
-- name: Use a config from the local filesystem
- set_fact:
- service: "{{ lookup('k8s', src='service.yml') }}"
-"""
-
-RETURN = """
- _list:
- description:
- - One ore more object definitions returned from the API.
- 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: complex
- spec:
- description: Specific attributes of the object. Will vary based on the I(api_version) and I(kind).
- returned: success
- type: complex
- status:
- description: Current status details for the object.
- returned: success
- type: complex
-"""
-
-from ansible.plugins.lookup import LookupBase
-
-from ansible.module_utils.k8s.common import K8sAnsibleMixin
-
-from ansible.errors import AnsibleError
-
-
-try:
- from openshift.dynamic import DynamicClient
- from openshift.dynamic.exceptions import NotFoundError
- HAS_K8S_MODULE_HELPER = True
- k8s_import_exception = None
-except ImportError as e:
- HAS_K8S_MODULE_HELPER = False
- k8s_import_exception = e
-
-try:
- import yaml
- HAS_YAML = True
-except ImportError:
- HAS_YAML = False
-
-
-class KubernetesLookup(K8sAnsibleMixin):
-
- def __init__(self):
-
- if not HAS_K8S_MODULE_HELPER:
- raise Exception(
- "Requires the OpenShift Python client. Try `pip install openshift`. Detail: {0}".format(k8s_import_exception)
- )
-
- if not HAS_YAML:
- raise Exception(
- "Requires PyYAML. Try `pip install PyYAML`"
- )
-
- self.kind = None
- self.name = None
- self.namespace = None
- self.api_version = None
- self.label_selector = None
- self.field_selector = None
- self.include_uninitialized = None
- self.resource_definition = None
- self.helper = None
- self.connection = {}
-
- def fail(self, msg=None):
- raise AnsibleError(msg)
-
- def run(self, terms, variables=None, **kwargs):
- self.params = kwargs
- self.client = self.get_api_client()
-
- cluster_info = kwargs.get('cluster_info')
- if cluster_info == 'version':
- return [self.client.version]
- if cluster_info == 'api_groups':
- return [self.client.resources.api_groups]
-
- self.kind = kwargs.get('kind')
- self.name = kwargs.get('resource_name')
- self.namespace = kwargs.get('namespace')
- self.api_version = kwargs.get('api_version', 'v1')
- self.label_selector = kwargs.get('label_selector')
- self.field_selector = kwargs.get('field_selector')
- self.include_uninitialized = kwargs.get('include_uninitialized', False)
-
- resource_definition = kwargs.get('resource_definition')
- src = kwargs.get('src')
- if src:
- resource_definition = self.load_resource_definitions(src)[0]
- if resource_definition:
- self.kind = resource_definition.get('kind', self.kind)
- self.api_version = resource_definition.get('apiVersion', self.api_version)
- self.name = resource_definition.get('metadata', {}).get('name', self.name)
- self.namespace = resource_definition.get('metadata', {}).get('namespace', self.namespace)
-
- if not self.kind:
- raise AnsibleError(
- "Error: no Kind specified. Use the 'kind' parameter, or provide an object YAML configuration "
- "using the 'resource_definition' parameter."
- )
-
- resource = self.find_resource(self.kind, self.api_version, fail=True)
- try:
- k8s_obj = resource.get(name=self.name, namespace=self.namespace, label_selector=self.label_selector, field_selector=self.field_selector)
- except NotFoundError:
- return []
-
- if self.name:
- return [k8s_obj.to_dict()]
-
- return k8s_obj.to_dict().get('items')
-
-
-class LookupModule(LookupBase):
-
- def run(self, terms, variables=None, **kwargs):
- return KubernetesLookup().run(terms, variables=variables, **kwargs)