summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChad Smith <chad.smith@canonical.com>2019-12-20 13:34:30 -0700
committerDaniel Watkins <oddbloke@ubuntu.com>2019-12-20 15:34:30 -0500
commitc7dca877c1fa3dc8b63486bb88022ee23a31bebe (patch)
tree464c589ed37001c9630acc7e4739346a4b66204a
parent3bc8790711aaf689ae957748a131be782167db97 (diff)
downloadcloud-init-git-c7dca877c1fa3dc8b63486bb88022ee23a31bebe.tar.gz
modules: drop cc_snap_config config module (#134)
cloud-init has moved to cc_snap module and a top-level config key 'snap'. cc_snap_config was deprecated in cloud-init version 18.2 Co-authored-by: Daniel Watkins <daniel@daniel-watkins.co.uk>
-rw-r--r--cloudinit/config/cc_snap_config.py184
-rw-r--r--config/cloud.cfg.tmpl1
-rw-r--r--doc/rtd/topics/modules.rst1
-rw-r--r--tests/cloud_tests/testcases/modules/TODO.md4
4 files changed, 2 insertions, 188 deletions
diff --git a/cloudinit/config/cc_snap_config.py b/cloudinit/config/cc_snap_config.py
deleted file mode 100644
index afe297ee..00000000
--- a/cloudinit/config/cc_snap_config.py
+++ /dev/null
@@ -1,184 +0,0 @@
-# Copyright (C) 2016 Canonical Ltd.
-#
-# Author: Ryan Harper <ryan.harper@canonical.com>
-#
-# This file is part of cloud-init. See LICENSE file for license information.
-
-# RELEASE_BLOCKER: Remove this deprecated module in 18.3
-"""
-Snap Config
------------
-**Summary:** snap_config modules allows configuration of snapd.
-
-**Deprecated**: Use :ref:`snap` module instead. This module will not exist
-in cloud-init 18.3.
-
-This module uses the same ``snappy`` namespace for configuration but
-acts only only a subset of the configuration.
-
-If ``assertions`` is set and the user has included a list of assertions
-then cloud-init will collect the assertions into a single assertion file
-and invoke ``snap ack <path to file with assertions>`` which will attempt
-to load the provided assertions into the snapd assertion database.
-
-If ``email`` is set, this value is used to create an authorized user for
-contacting and installing snaps from the Ubuntu Store. This is done by
-calling ``snap create-user`` command.
-
-If ``known`` is set to True, then it is expected the user also included
-an assertion of type ``system-user``. When ``snap create-user`` is called
-cloud-init will append '--known' flag which instructs snapd to look for
-a system-user assertion with the details. If ``known`` is not set, then
-``snap create-user`` will contact the Ubuntu SSO for validating and importing
-a system-user for the instance.
-
-.. note::
- If the system is already managed, then cloud-init will not attempt to
- create a system-user.
-
-**Internal name:** ``cc_snap_config``
-
-**Module frequency:** per instance
-
-**Supported distros:** any with 'snapd' available
-
-**Config keys**::
-
- #cloud-config
- snappy:
- assertions:
- - |
- <assertion 1>
- - |
- <assertion 2>
- email: user@user.org
- known: true
-
-"""
-
-from cloudinit import log as logging
-from cloudinit.settings import PER_INSTANCE
-from cloudinit import util
-
-LOG = logging.getLogger(__name__)
-
-frequency = PER_INSTANCE
-SNAPPY_CMD = "snap"
-ASSERTIONS_FILE = "/var/lib/cloud/instance/snapd.assertions"
-
-
-"""
-snappy:
- assertions:
- - |
- <snap assertion 1>
- - |
- <snap assertion 2>
- email: foo@foo.io
- known: true
-"""
-
-
-def add_assertions(assertions=None):
- """Import list of assertions.
-
- Import assertions by concatenating each assertion into a
- string separated by a '\n'. Write this string to a instance file and
- then invoke `snap ack /path/to/file` and check for errors.
- If snap exits 0, then all assertions are imported.
- """
- if not assertions:
- assertions = []
-
- if not isinstance(assertions, list):
- raise ValueError(
- 'assertion parameter was not a list: {assertions}'.format(
- assertions=assertions))
-
- snap_cmd = [SNAPPY_CMD, 'ack']
- combined = "\n".join(assertions)
- if len(combined) == 0:
- raise ValueError("Assertion list is empty")
-
- for asrt in assertions:
- LOG.debug('Acking: %s', asrt.split('\n')[0:2])
-
- util.write_file(ASSERTIONS_FILE, combined.encode('utf-8'))
- util.subp(snap_cmd + [ASSERTIONS_FILE], capture=True)
-
-
-def add_snap_user(cfg=None):
- """Add a snap system-user if provided with email under snappy config.
-
- - Check that system is not already managed.
- - Check that if using a system-user assertion, that it's
- imported into snapd.
-
- Returns a dictionary to be passed to Distro.create_user
- """
-
- if not cfg:
- cfg = {}
-
- if not isinstance(cfg, dict):
- raise ValueError(
- 'configuration parameter was not a dict: {cfg}'.format(cfg=cfg))
-
- snapuser = cfg.get('email', None)
- if not snapuser:
- return
-
- usercfg = {
- 'snapuser': snapuser,
- 'known': cfg.get('known', False),
- }
-
- # query if we're already registered
- out, _ = util.subp([SNAPPY_CMD, 'managed'], capture=True)
- if out.strip() == "true":
- LOG.warning('This device is already managed. '
- 'Skipping system-user creation')
- return
-
- if usercfg.get('known'):
- # Check that we imported a system-user assertion
- out, _ = util.subp([SNAPPY_CMD, 'known', 'system-user'],
- capture=True)
- if len(out) == 0:
- LOG.error('Missing "system-user" assertion. '
- 'Check "snappy" user-data assertions.')
- return
-
- return usercfg
-
-
-def handle(name, cfg, cloud, log, args):
- cfgin = cfg.get('snappy')
- if not cfgin:
- LOG.debug('No snappy config provided, skipping')
- return
-
- log.warning(
- 'DEPRECATION: snap_config module will be dropped in 18.3 release.'
- ' Use snap module instead')
- if not(util.system_is_snappy()):
- LOG.debug("%s: system not snappy", name)
- return
-
- assertions = cfgin.get('assertions', [])
- if len(assertions) > 0:
- LOG.debug('Importing user-provided snap assertions')
- add_assertions(assertions)
-
- # Create a snap user if requested.
- # Snap systems contact the store with a user's email
- # and extract information needed to create a local user.
- # A user may provide a 'system-user' assertion which includes
- # the required information. Using such an assertion to create
- # a local user requires specifying 'known: true' in the supplied
- # user-data.
- usercfg = add_snap_user(cfg=cfgin)
- if usercfg:
- cloud.distro.create_user(usercfg.get('snapuser'), **usercfg)
-
-# vi: ts=4 expandtab
diff --git a/config/cloud.cfg.tmpl b/config/cloud.cfg.tmpl
index 7aab265e..18ab0ac5 100644
--- a/config/cloud.cfg.tmpl
+++ b/config/cloud.cfg.tmpl
@@ -71,7 +71,6 @@ cloud_config_modules:
# this can be used by upstart jobs for 'start on cloud-config'.
- emit_upstart
- snap
- - snap_config # DEPRECATED- Drop in version 18.2
{% endif %}
- ssh-import-id
- locale
diff --git a/doc/rtd/topics/modules.rst b/doc/rtd/topics/modules.rst
index 1aa2f88d..4117da60 100644
--- a/doc/rtd/topics/modules.rst
+++ b/doc/rtd/topics/modules.rst
@@ -46,7 +46,6 @@ Modules
.. automodule:: cloudinit.config.cc_set_hostname
.. automodule:: cloudinit.config.cc_set_passwords
.. automodule:: cloudinit.config.cc_snap
-.. automodule:: cloudinit.config.cc_snap_config
.. automodule:: cloudinit.config.cc_spacewalk
.. automodule:: cloudinit.config.cc_ssh
.. automodule:: cloudinit.config.cc_ssh_authkey_fingerprints
diff --git a/tests/cloud_tests/testcases/modules/TODO.md b/tests/cloud_tests/testcases/modules/TODO.md
index ee7e9213..9513cb2d 100644
--- a/tests/cloud_tests/testcases/modules/TODO.md
+++ b/tests/cloud_tests/testcases/modules/TODO.md
@@ -78,8 +78,8 @@ Not applicable to write a test for this as it specifies when something should be
## scripts vendor
Not applicable to write a test for this as it specifies when something should be run.
-## snap-config
-2016-11-17: Need to investigate
+## snap
+2019-12-19: Need to investigate
## spacewalk