Server IP : 85.214.239.14 / Your IP : 18.118.19.247 Web Server : Apache/2.4.62 (Debian) System : Linux h2886529.stratoserver.net 4.9.0 #1 SMP Tue Jan 9 19:45:01 MSK 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.18 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, MySQL : OFF | cURL : OFF | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : OFF Directory : /lib/python3/dist-packages/ansible_collections/kubernetes/core/plugins/lookup/ |
Upload File : |
# # Copyright 2021 Red Hat | Ansible # # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) DOCUMENTATION = """ name: kustomize short_description: Build a set of kubernetes resources using a 'kustomization.yaml' file. version_added: "2.2.0" author: - Aubin Bikouo (@abikouo) notes: - If both kustomize and kubectl are part of the PATH, kustomize will be used by the plugin. description: - Uses the kustomize or the kubectl tool. - Return the result of C(kustomize build) or C(kubectl kustomize). options: dir: description: - The directory path containing 'kustomization.yaml', or a git repository URL with a path suffix specifying same with respect to the repository root. - If omitted, '.' is assumed. default: "." binary_path: description: - The path of a kustomize or kubectl binary to use. opt_dirs: description: - An optional list of directories to search for the executable in addition to PATH. requirements: - "python >= 3.6" """ EXAMPLES = """ - name: Run lookup using kustomize set_fact: resources: "{{ lookup('kubernetes.core.kustomize', binary_path='/path/to/kustomize') }}" - name: Run lookup using kubectl kustomize set_fact: resources: "{{ lookup('kubernetes.core.kustomize', binary_path='/path/to/kubectl') }}" - name: Create kubernetes resources for lookup output k8s: definition: "{{ lookup('kubernetes.core.kustomize', dir='/path/to/kustomization') }}" """ RETURN = """ _list: description: - YAML string for the object definitions returned from the tool execution. type: str sample: kind: ConfigMap apiVersion: v1 metadata: name: my-config-map namespace: default data: key1: val1 """ from ansible.errors import AnsibleLookupError from ansible.plugins.lookup import LookupBase from ansible.module_utils.common.process import get_bin_path import subprocess def get_binary_from_path(name, opt_dirs=None): opt_arg = {} try: if opt_dirs is not None: if not isinstance(opt_dirs, list): opt_dirs = [opt_dirs] opt_arg["opt_dirs"] = opt_dirs bin_path = get_bin_path(name, **opt_arg) return bin_path except ValueError: return None def run_command(command): cmd = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE) return cmd.communicate() class LookupModule(LookupBase): def run( self, terms, variables=None, dir=".", binary_path=None, opt_dirs=None, **kwargs ): executable_path = binary_path if executable_path is None: executable_path = get_binary_from_path(name="kustomize", opt_dirs=opt_dirs) if executable_path is None: executable_path = get_binary_from_path( name="kubectl", opt_dirs=opt_dirs ) # validate that at least one tool was found if executable_path is None: raise AnsibleLookupError( "Failed to find required executable 'kubectl' and 'kustomize' in paths" ) # check input directory kustomization_dir = dir command = [executable_path] if executable_path.endswith("kustomize"): command += ["build", kustomization_dir] elif executable_path.endswith("kubectl"): command += ["kustomize", kustomization_dir] else: raise AnsibleLookupError( "unexpected tool provided as parameter {0}, expected one of kustomize, kubectl.".format( executable_path ) ) (out, err) = run_command(command) if err: raise AnsibleLookupError( "kustomize command failed with: {0}".format(err.decode("utf-8")) ) return [out.decode("utf-8")]