summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bash_completion/cloud-init7
-rwxr-xr-xcloudinit/cmd/devel/net_convert.py (renamed from tools/net-convert.py)35
-rw-r--r--cloudinit/cmd/devel/parser.py20
-rw-r--r--tests/unittests/test_cli.py3
4 files changed, 42 insertions, 23 deletions
diff --git a/bash_completion/cloud-init b/bash_completion/cloud-init
index 581432c8..f38164b0 100644
--- a/bash_completion/cloud-init
+++ b/bash_completion/cloud-init
@@ -28,7 +28,7 @@ _cloudinit_complete()
COMPREPLY=($(compgen -W "--help --tarfile --include-userdata" -- $cur_word))
;;
devel)
- COMPREPLY=($(compgen -W "--help schema" -- $cur_word))
+ COMPREPLY=($(compgen -W "--help schema net-convert" -- $cur_word))
;;
dhclient-hook|features)
COMPREPLY=($(compgen -W "--help" -- $cur_word))
@@ -59,6 +59,9 @@ _cloudinit_complete()
--frequency)
COMPREPLY=($(compgen -W "--help instance always once" -- $cur_word))
;;
+ net-convert)
+ COMPREPLY=($(compgen -W "--help --network-data --kind --directory --output-kind" -- $cur_word))
+ ;;
schema)
COMPREPLY=($(compgen -W "--help --config-file --doc --annotate" -- $cur_word))
;;
@@ -74,4 +77,4 @@ _cloudinit_complete()
}
complete -F _cloudinit_complete cloud-init
-# vi: syntax=bash expandtab
+# vi: syntax=sh expandtab
diff --git a/tools/net-convert.py b/cloudinit/cmd/devel/net_convert.py
index d1a4a646..1ec08a3c 100755
--- a/tools/net-convert.py
+++ b/cloudinit/cmd/devel/net_convert.py
@@ -1,6 +1,6 @@
-#!/usr/bin/python3
# This file is part of cloud-init. See LICENSE file for license information.
+"""Debug network config format conversions."""
import argparse
import json
import os
@@ -9,18 +9,25 @@ import yaml
from cloudinit.sources.helpers import openstack
-from cloudinit.net import eni
+from cloudinit.net import eni, netplan, network_state, sysconfig
from cloudinit import log
-from cloudinit.net import netplan
-from cloudinit.net import network_state
-from cloudinit.net import sysconfig
+NAME = 'net-convert'
-def main():
- parser = argparse.ArgumentParser()
- parser.add_argument("--network-data", "-p", type=open,
+
+def get_parser(parser=None):
+ """Build or extend and arg parser for net-convert utility.
+
+ @param parser: Optional existing ArgumentParser instance representing the
+ subcommand which will be extended to support the args of this utility.
+
+ @returns: ArgumentParser with proper argument configuration.
+ """
+ if not parser:
+ parser = argparse.ArgumentParser(prog=NAME, description=__doc__)
+ parser.add_argument("-p", "--network-data", type=open,
metavar="PATH", required=True)
- parser.add_argument("--kind", "-k",
+ parser.add_argument("-k", "--kind",
choices=['eni', 'network_data.json', 'yaml'],
required=True)
parser.add_argument("-d", "--directory",
@@ -33,11 +40,13 @@ def main():
help="interface name to mac mapping")
parser.add_argument("--debug", action='store_true',
help='enable debug logging to stderr.')
- parser.add_argument("--output-kind", "-ok",
+ parser.add_argument("-O", "--output-kind",
choices=['eni', 'netplan', 'sysconfig'],
required=True)
- args = parser.parse_args()
+ return parser
+
+def handle_args(name, args):
if not args.directory.endswith("/"):
args.directory += "/"
@@ -99,6 +108,8 @@ def main():
if __name__ == '__main__':
- main()
+ args = get_parser().parse_args()
+ handle_args(NAME, args)
+
# vi: ts=4 expandtab
diff --git a/cloudinit/cmd/devel/parser.py b/cloudinit/cmd/devel/parser.py
index acacc4ed..40a4b019 100644
--- a/cloudinit/cmd/devel/parser.py
+++ b/cloudinit/cmd/devel/parser.py
@@ -5,8 +5,9 @@
"""Define 'devel' subcommand argument parsers to include in cloud-init cmd."""
import argparse
-from cloudinit.config.schema import (
- get_parser as schema_parser, handle_schema_args)
+from cloudinit.config import schema
+
+from . import net_convert
def get_parser(parser=None):
@@ -17,10 +18,15 @@ def get_parser(parser=None):
subparsers = parser.add_subparsers(title='Subcommands', dest='subcommand')
subparsers.required = True
- parser_schema = subparsers.add_parser(
- 'schema', help='Validate cloud-config files or document schema')
- # Construct schema subcommand parser
- schema_parser(parser_schema)
- parser_schema.set_defaults(action=('schema', handle_schema_args))
+ subcmds = [
+ ('schema', 'Validate cloud-config files for document schema',
+ schema.get_parser, schema.handle_schema_args),
+ (net_convert.NAME, net_convert.__doc__,
+ net_convert.get_parser, net_convert.handle_args)
+ ]
+ for (subcmd, helpmsg, get_parser, handler) in subcmds:
+ parser = subparsers.add_parser(subcmd, help=helpmsg)
+ get_parser(parser)
+ parser.set_defaults(action=(subcmd, handler))
return parser
diff --git a/tests/unittests/test_cli.py b/tests/unittests/test_cli.py
index 0c0f427a..199d69b0 100644
--- a/tests/unittests/test_cli.py
+++ b/tests/unittests/test_cli.py
@@ -208,8 +208,7 @@ class TestCLI(test_helpers.FilesystemMockingTestCase):
for subcommand in expected_subcommands:
self.assertIn(subcommand, error)
- @mock.patch('cloudinit.config.schema.handle_schema_args')
- def test_wb_devel_schema_subcommand_parser(self, m_schema):
+ def test_wb_devel_schema_subcommand_parser(self):
"""The subcommand cloud-init schema calls the correct subparser."""
exit_code = self._call_main(['cloud-init', 'devel', 'schema'])
self.assertEqual(1, exit_code)