Add --detailed-exit-codes

This patch adds a new --detailed-exit-codes option which can
be used to optionally enable the os-net-config CLI to return
exit code 2 if there have been modifications. Detailed
exit codes are useful if you need to trigger subsequent
external actions based whether os-net-config made changes or not.

Change-Id: I8f22fa15335d1276f4e444a6454a24ff486e1495
This commit is contained in:
Dan Prince 2015-08-14 17:20:47 -04:00
parent 103b87aa82
commit 7aed850aaf
2 changed files with 36 additions and 0 deletions

View File

@ -48,6 +48,13 @@ def parse_opts(argv):
parser.add_argument('-r', '--root-dir', metavar='ROOT_DIR',
help="""The root directory of the filesystem.""",
default='')
parser.add_argument('--detailed-exit-codes',
action='store_true',
help="""Enable detailed exit codes. """
"""If enabled an exit code of '2' means """
"""that files were modified."""
"""Disabled by default.""",
default=False)
parser.add_argument(
'-d', '--debug',
dest="debug",
@ -183,6 +190,10 @@ def main(argv=sys.argv):
print("File: %s\n" % location)
print(data)
print("----")
if opts.detailed_exit_codes and len(files_changed) > 0:
return 2
return 0

View File

@ -17,7 +17,9 @@
import os.path
import sys
import os_net_config
from os_net_config import cli
from os_net_config import impl_ifcfg
from os_net_config.tests import base
import six
@ -121,3 +123,26 @@ class TestCli(base.TestCase):
'-c %s' % (provider, bond_yaml))
self.assertEqual('', stderr)
self.assertIn('File: /rootfs/', stdout_yaml)
def test_interface_noop_detailed_exit_codes(self):
interface_yaml = os.path.join(SAMPLE_BASE, 'interface.yaml')
stdout_yaml, stderr = self.run_cli('ARG0 --provider=ifcfg --noop '
'-c %s --detailed-exit-codes'
% interface_yaml, exitcodes=(2,))
def test_interface_noop_detailed_exit_codes_no_changes(self):
interface_yaml = os.path.join(SAMPLE_BASE, 'interface.yaml')
class TestImpl(os_net_config.NetConfig):
def add_interface(self, interface):
pass
def apply(self, cleanup=False, activate=True):
# this fake implementation returns no changes
return {}
self.stubs.Set(impl_ifcfg, 'IfcfgNetConfig', TestImpl)
stdout_yaml, stderr = self.run_cli('ARG0 --provider=ifcfg --noop '
'-c %s --detailed-exit-codes'
% interface_yaml, exitcodes=(0,))