diff options
author | Colin Walters <walters@verbum.org> | 2017-02-18 10:21:56 -0500 |
---|---|---|
committer | Jason DeTiberus <jdetiber@redhat.com> | 2017-02-21 23:29:09 -0500 |
commit | 4b8328fe94015b25209d9b3e6c94b2a3cd0cff40 (patch) | |
tree | a4fc69ed0e838aa18c3203c50ca740aeac9a36d4 /roles/lib_openshift/src | |
parent | b718955622da88c875aa5814fd87bcb3f53599f6 (diff) | |
download | openshift-4b8328fe94015b25209d9b3e6c94b2a3cd0cff40.tar.gz openshift-4b8328fe94015b25209d9b3e6c94b2a3cd0cff40.tar.bz2 openshift-4b8328fe94015b25209d9b3e6c94b2a3cd0cff40.tar.xz openshift-4b8328fe94015b25209d9b3e6c94b2a3cd0cff40.zip |
roles/lib_openshift: Handle /usr/local/bin/oc with sudo
The real changes here are in `src/lib/{base,import}.py` remember, the rest is
committed to git rather than built for some reason.
This is tested on CentOS AH (python2), I haven't yet tested the Python 3 path
here. I tried the suggestion in the PR for using Ansible's `module` but AFAICS
that would require passing down the `module` variable pretty far down into this
code. This implementation seems OK too.
Closes: https://github.com/openshift/openshift-ansible/issues/3410
Diffstat (limited to 'roles/lib_openshift/src')
-rw-r--r-- | roles/lib_openshift/src/lib/base.py | 19 | ||||
-rw-r--r-- | roles/lib_openshift/src/lib/import.py | 1 |
2 files changed, 16 insertions, 4 deletions
diff --git a/roles/lib_openshift/src/lib/base.py b/roles/lib_openshift/src/lib/base.py index 9cad5e667..0018a6710 100644 --- a/roles/lib_openshift/src/lib/base.py +++ b/roles/lib_openshift/src/lib/base.py @@ -224,10 +224,18 @@ class OpenShiftCLI(object): def openshift_cmd(self, cmd, oadm=False, output=False, output_type='json', input_data=None): '''Base command for oc ''' cmds = [] - if oadm: - cmds = ['oadm'] + basecmd = 'oadm' if oadm else 'oc' + # https://github.com/openshift/openshift-ansible/issues/3410 + # oc can be in /usr/local/bin in some cases, but that may not + # be in $PATH due to ansible/sudo + if sys.version_info[0] == 3: + basepath = shutil.which(basecmd) # pylint: disable=no-member else: - cmds = ['oc'] + import distutils.spawn + basepath = distutils.spawn.find_executable(basecmd) # pylint: disable=no-name-in-module + if basepath is None and os.path.isfile('/usr/local/bin/' + basecmd): + basecmd = '/usr/local/bin/' + basecmd + cmds.append(basecmd) if self.all_namespaces: cmds.extend(['--all-namespaces']) @@ -243,7 +251,10 @@ class OpenShiftCLI(object): if self.verbose: print(' '.join(cmds)) - returncode, stdout, stderr = self._run(cmds, input_data) + try: + returncode, stdout, stderr = self._run(cmds, input_data) + except OSError as ex: + returncode, stdout, stderr = 1, '', 'Failed to execute {}: {}'.format(subprocess.list2cmdline(cmds), ex) rval = {"returncode": returncode, "results": results, diff --git a/roles/lib_openshift/src/lib/import.py b/roles/lib_openshift/src/lib/import.py index a79297898..5b2479b87 100644 --- a/roles/lib_openshift/src/lib/import.py +++ b/roles/lib_openshift/src/lib/import.py @@ -10,6 +10,7 @@ import atexit import copy import json import os +import sys import re import shutil import subprocess |