summaryrefslogtreecommitdiffstats
path: root/roles/lib_openshift/library
diff options
context:
space:
mode:
authorColin Walters <walters@verbum.org>2017-02-18 10:21:56 -0500
committerJason DeTiberus <jdetiber@redhat.com>2017-02-21 23:29:09 -0500
commit4b8328fe94015b25209d9b3e6c94b2a3cd0cff40 (patch)
treea4fc69ed0e838aa18c3203c50ca740aeac9a36d4 /roles/lib_openshift/library
parentb718955622da88c875aa5814fd87bcb3f53599f6 (diff)
downloadopenshift-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/library')
-rw-r--r--roles/lib_openshift/library/oadm_manage_node.py20
-rw-r--r--roles/lib_openshift/library/oc_edit.py20
-rw-r--r--roles/lib_openshift/library/oc_env.py20
-rw-r--r--roles/lib_openshift/library/oc_label.py20
-rw-r--r--roles/lib_openshift/library/oc_obj.py20
-rw-r--r--roles/lib_openshift/library/oc_process.py20
-rw-r--r--roles/lib_openshift/library/oc_route.py20
-rw-r--r--roles/lib_openshift/library/oc_scale.py20
-rw-r--r--roles/lib_openshift/library/oc_secret.py20
-rw-r--r--roles/lib_openshift/library/oc_service.py20
-rw-r--r--roles/lib_openshift/library/oc_serviceaccount.py20
-rw-r--r--roles/lib_openshift/library/oc_serviceaccount_secret.py20
-rw-r--r--roles/lib_openshift/library/oc_version.py20
13 files changed, 208 insertions, 52 deletions
diff --git a/roles/lib_openshift/library/oadm_manage_node.py b/roles/lib_openshift/library/oadm_manage_node.py
index 0ac233c72..840882bbc 100644
--- a/roles/lib_openshift/library/oadm_manage_node.py
+++ b/roles/lib_openshift/library/oadm_manage_node.py
@@ -36,6 +36,7 @@ import atexit
import copy
import json
import os
+import sys
import re
import shutil
import subprocess
@@ -963,10 +964,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'])
@@ -982,7 +991,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/library/oc_edit.py b/roles/lib_openshift/library/oc_edit.py
index 1b1faf496..9d174ba31 100644
--- a/roles/lib_openshift/library/oc_edit.py
+++ b/roles/lib_openshift/library/oc_edit.py
@@ -36,6 +36,7 @@ import atexit
import copy
import json
import os
+import sys
import re
import shutil
import subprocess
@@ -991,10 +992,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'])
@@ -1010,7 +1019,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/library/oc_env.py b/roles/lib_openshift/library/oc_env.py
index 1426565b4..d32773c38 100644
--- a/roles/lib_openshift/library/oc_env.py
+++ b/roles/lib_openshift/library/oc_env.py
@@ -36,6 +36,7 @@ import atexit
import copy
import json
import os
+import sys
import re
import shutil
import subprocess
@@ -958,10 +959,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'])
@@ -977,7 +986,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/library/oc_label.py b/roles/lib_openshift/library/oc_label.py
index 0db8585a4..0f98728f8 100644
--- a/roles/lib_openshift/library/oc_label.py
+++ b/roles/lib_openshift/library/oc_label.py
@@ -36,6 +36,7 @@ import atexit
import copy
import json
import os
+import sys
import re
import shutil
import subprocess
@@ -967,10 +968,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'])
@@ -986,7 +995,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/library/oc_obj.py b/roles/lib_openshift/library/oc_obj.py
index 6d0b391b9..39da0ed5c 100644
--- a/roles/lib_openshift/library/oc_obj.py
+++ b/roles/lib_openshift/library/oc_obj.py
@@ -36,6 +36,7 @@ import atexit
import copy
import json
import os
+import sys
import re
import shutil
import subprocess
@@ -970,10 +971,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'])
@@ -989,7 +998,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/library/oc_process.py b/roles/lib_openshift/library/oc_process.py
index a1ee79f6e..d3b2de4dc 100644
--- a/roles/lib_openshift/library/oc_process.py
+++ b/roles/lib_openshift/library/oc_process.py
@@ -36,6 +36,7 @@ import atexit
import copy
import json
import os
+import sys
import re
import shutil
import subprocess
@@ -959,10 +960,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'])
@@ -978,7 +987,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/library/oc_route.py b/roles/lib_openshift/library/oc_route.py
index 4b5c4460c..d8d5e1891 100644
--- a/roles/lib_openshift/library/oc_route.py
+++ b/roles/lib_openshift/library/oc_route.py
@@ -36,6 +36,7 @@ import atexit
import copy
import json
import os
+import sys
import re
import shutil
import subprocess
@@ -1001,10 +1002,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'])
@@ -1020,7 +1029,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/library/oc_scale.py b/roles/lib_openshift/library/oc_scale.py
index c73e96e10..e2a004f54 100644
--- a/roles/lib_openshift/library/oc_scale.py
+++ b/roles/lib_openshift/library/oc_scale.py
@@ -36,6 +36,7 @@ import atexit
import copy
import json
import os
+import sys
import re
import shutil
import subprocess
@@ -945,10 +946,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'])
@@ -964,7 +973,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/library/oc_secret.py b/roles/lib_openshift/library/oc_secret.py
index 6ab5e81b2..23d61a4fb 100644
--- a/roles/lib_openshift/library/oc_secret.py
+++ b/roles/lib_openshift/library/oc_secret.py
@@ -36,6 +36,7 @@ import atexit
import copy
import json
import os
+import sys
import re
import shutil
import subprocess
@@ -991,10 +992,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'])
@@ -1010,7 +1019,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/library/oc_service.py b/roles/lib_openshift/library/oc_service.py
index 319ec4bd7..6e7b1b52e 100644
--- a/roles/lib_openshift/library/oc_service.py
+++ b/roles/lib_openshift/library/oc_service.py
@@ -36,6 +36,7 @@ import atexit
import copy
import json
import os
+import sys
import re
import shutil
import subprocess
@@ -997,10 +998,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'])
@@ -1016,7 +1025,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/library/oc_serviceaccount.py b/roles/lib_openshift/library/oc_serviceaccount.py
index 7104355f0..59dee8efb 100644
--- a/roles/lib_openshift/library/oc_serviceaccount.py
+++ b/roles/lib_openshift/library/oc_serviceaccount.py
@@ -36,6 +36,7 @@ import atexit
import copy
import json
import os
+import sys
import re
import shutil
import subprocess
@@ -943,10 +944,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'])
@@ -962,7 +971,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/library/oc_serviceaccount_secret.py b/roles/lib_openshift/library/oc_serviceaccount_secret.py
index 3a9380661..906134797 100644
--- a/roles/lib_openshift/library/oc_serviceaccount_secret.py
+++ b/roles/lib_openshift/library/oc_serviceaccount_secret.py
@@ -36,6 +36,7 @@ import atexit
import copy
import json
import os
+import sys
import re
import shutil
import subprocess
@@ -943,10 +944,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'])
@@ -962,7 +971,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/library/oc_version.py b/roles/lib_openshift/library/oc_version.py
index 9b660e1d3..eeb28e7fc 100644
--- a/roles/lib_openshift/library/oc_version.py
+++ b/roles/lib_openshift/library/oc_version.py
@@ -36,6 +36,7 @@ import atexit
import copy
import json
import os
+import sys
import re
import shutil
import subprocess
@@ -915,10 +916,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'])
@@ -934,7 +943,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,