summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cloudinit/cmd/main.py17
-rw-r--r--cloudinit/version.py5
-rw-r--r--doc/rtd/topics/capabilities.rst23
3 files changed, 41 insertions, 4 deletions
diff --git a/cloudinit/cmd/main.py b/cloudinit/cmd/main.py
index 6ff4e1c0..fd221323 100644
--- a/cloudinit/cmd/main.py
+++ b/cloudinit/cmd/main.py
@@ -680,6 +680,10 @@ def status_wrapper(name, args, data_d=None, link_d=None):
return len(v1[mode]['errors'])
+def main_features(name, args):
+ sys.stdout.write('\n'.join(sorted(version.FEATURES)) + '\n')
+
+
def main(sysv_args=None):
if sysv_args is not None:
parser = argparse.ArgumentParser(prog=sysv_args[0])
@@ -770,6 +774,10 @@ def main(sysv_args=None):
' upon'))
parser_dhclient.set_defaults(action=('dhclient_hook', dhclient_hook))
+ parser_features = subparsers.add_parser('features',
+ help=('list defined features'))
+ parser_features.set_defaults(action=('features', main_features))
+
args = parser.parse_args(args=sysv_args)
try:
@@ -788,6 +796,7 @@ def main(sysv_args=None):
if name in ("modules", "init"):
functor = status_wrapper
+ rname = None
report_on = True
if name == "init":
if args.local:
@@ -802,10 +811,10 @@ def main(sysv_args=None):
rname, rdesc = ("single/%s" % args.name,
"running single module %s" % args.name)
report_on = args.report
-
- elif name == 'dhclient_hook':
- rname, rdesc = ("dhclient-hook",
- "running dhclient-hook module")
+ else:
+ rname = name
+ rdesc = "running 'cloud-init %s'" % name
+ report_on = False
args.reporter = events.ReportEventStack(
rname, rdesc, reporting_enabled=report_on)
diff --git a/cloudinit/version.py b/cloudinit/version.py
index 92bace1a..e61597d2 100644
--- a/cloudinit/version.py
+++ b/cloudinit/version.py
@@ -6,6 +6,11 @@
__VERSION__ = "0.7.9"
+FEATURES = [
+ # supports network config version 1
+ 'NETWORK_CONFIG_V1',
+]
+
def version_string():
return __VERSION__
diff --git a/doc/rtd/topics/capabilities.rst b/doc/rtd/topics/capabilities.rst
index be0802c5..4a411083 100644
--- a/doc/rtd/topics/capabilities.rst
+++ b/doc/rtd/topics/capabilities.rst
@@ -7,6 +7,7 @@ Capabilities
- Generating instance ssh private keys
- Adding ssh keys to a users ``.ssh/authorized_keys`` so they can log in
- Setting up ephemeral mount points
+- Configuring network devices
User configurability
====================
@@ -22,5 +23,27 @@ ec2-run-instances for example.
string or `user-data` file for usage by cloud-init on instance creation.
+Feature detection
+=================
+
+Newer versions of cloud-init may have a list of additional features that they
+support. This allows other applications to detect what features the installed
+cloud-init supports without having to parse its version number. If present,
+this list of features will be located at ``cloudinit.version.FEATURES``.
+
+When checking if cloud-init supports a feature, in order to not break the
+detection script on older versions of cloud-init without the features list, a
+script similar to the following should be used. Note that this will exit 0 if
+the feature is supported and 1 otherwise::
+
+ import sys
+ from cloudinit import version
+ sys.exit('<FEATURE_NAME>' not in getattr(version, 'FEATURES', []))
+
+Currently defined feature names include:
+
+ - ``NETWORK_CONFIG_V1`` support for v1 networking configuration, see curtin
+ documentation for examples.
+
.. _Cloud-init: https://launchpad.net/cloud-init
.. vi: textwidth=78