diff options
author | Chad Smith <chad.smith@canonical.com> | 2019-06-04 15:03:22 -0600 |
---|---|---|
committer | Chad Smith <chad.smith@canonical.com> | 2019-06-04 15:03:22 -0600 |
commit | 89c04128cee54a2c548c36244ebfc9d7f3dec724 (patch) | |
tree | cce1a802b5e2ea4014c0c131927e257011af3ce4 | |
parent | 217fa6d3e52e698c9875e375791e6e49226712ee (diff) | |
download | cloud-init-git-89c04128cee54a2c548c36244ebfc9d7f3dec724.tar.gz |
refresh patches against origin/master commit deaeb714
refresh patches against origin/master commit deaeb714:
debian/patches/ubuntu-advantage-revert-tip.patch
-rw-r--r-- | debian/patches/ubuntu-advantage-revert-tip.patch | 260 |
1 files changed, 5 insertions, 255 deletions
diff --git a/debian/patches/ubuntu-advantage-revert-tip.patch b/debian/patches/ubuntu-advantage-revert-tip.patch index d98423d1..2934f9ea 100644 --- a/debian/patches/ubuntu-advantage-revert-tip.patch +++ b/debian/patches/ubuntu-advantage-revert-tip.patch @@ -7,257 +7,9 @@ Origin: backport Bug: https://bugs.launchpad.net/cloud-init/+bug/1828641 Forwarded: not-needed Last-Update: 2019-05-10 -Index: cloud-init/cloudinit/config/cc_ubuntu_advantage.py -=================================================================== ---- cloud-init.orig/cloudinit/config/cc_ubuntu_advantage.py -+++ cloud-init/cloudinit/config/cc_ubuntu_advantage.py -@@ -1,143 +1,150 @@ -+# Copyright (C) 2018 Canonical Ltd. -+# - # This file is part of cloud-init. See LICENSE file for license information. - --"""ubuntu_advantage: Configure Ubuntu Advantage support services""" -+"""Ubuntu advantage: manage ubuntu-advantage offerings from Canonical.""" - -+import sys - from textwrap import dedent - --import six -- -+from cloudinit import log as logging - from cloudinit.config.schema import ( - get_schema_doc, validate_cloudconfig_schema) --from cloudinit import log as logging - from cloudinit.settings import PER_INSTANCE -+from cloudinit.subp import prepend_base_command - from cloudinit import util - - --UA_URL = 'https://ubuntu.com/advantage' -- - distros = ['ubuntu'] -+frequency = PER_INSTANCE -+ -+LOG = logging.getLogger(__name__) - - schema = { - 'id': 'cc_ubuntu_advantage', - 'name': 'Ubuntu Advantage', -- 'title': 'Configure Ubuntu Advantage support services', -+ 'title': 'Install, configure and manage ubuntu-advantage offerings', - 'description': dedent("""\ -- Attach machine to an existing Ubuntu Advantage support contract and -- enable or disable support services such as Livepatch, ESM, -- FIPS and FIPS Updates. When attaching a machine to Ubuntu Advantage, -- one can also specify services to enable. When the 'enable' -- list is present, any named service will be enabled and all absent -- services will remain disabled. -- -- Note that when enabling FIPS or FIPS updates you will need to schedule -- a reboot to ensure the machine is running the FIPS-compliant kernel. -- See :ref:`Power State Change` for information on how to configure -- cloud-init to perform this reboot. -+ This module provides configuration options to setup ubuntu-advantage -+ subscriptions. -+ -+ .. note:: -+ Both ``commands`` value can be either a dictionary or a list. If -+ the configuration provided is a dictionary, the keys are only used -+ to order the execution of the commands and the dictionary is -+ merged with any vendor-data ubuntu-advantage configuration -+ provided. If a ``commands`` is provided as a list, any vendor-data -+ ubuntu-advantage ``commands`` are ignored. -+ -+ Ubuntu-advantage ``commands`` is a dictionary or list of -+ ubuntu-advantage commands to run on the deployed machine. -+ These commands can be used to enable or disable subscriptions to -+ various ubuntu-advantage products. See 'man ubuntu-advantage' for more -+ information on supported subcommands. -+ -+ .. note:: -+ Each command item can be a string or list. If the item is a list, -+ 'ubuntu-advantage' can be omitted and it will automatically be -+ inserted as part of the command. - """), - 'distros': distros, - 'examples': [dedent("""\ -- # Attach the machine to a Ubuntu Advantage support contract with a -- # UA contract token obtained from %s. -- ubuntu_advantage: -- token: <ua_contract_token> -- """ % UA_URL), dedent("""\ -- # Attach the machine to an Ubuntu Advantage support contract enabling -- # only fips and esm services. Services will only be enabled if -- # the environment supports said service. Otherwise warnings will -- # be logged for incompatible services specified. -+ # Enable Extended Security Maintenance using your service auth token -+ ubuntu-advantage: -+ commands: -+ 00: ubuntu-advantage enable-esm <token> -+ """), dedent("""\ -+ # Enable livepatch by providing your livepatch token - ubuntu-advantage: -- token: <ua_contract_token> -- enable: -- - fips -- - esm -+ commands: -+ 00: ubuntu-advantage enable-livepatch <livepatch-token> -+ - """), dedent("""\ -- # Attach the machine to an Ubuntu Advantage support contract and enable -- # the FIPS service. Perform a reboot once cloud-init has -- # completed. -- power_state: -- mode: reboot -+ # Convenience: the ubuntu-advantage command can be omitted when -+ # specifying commands as a list and 'ubuntu-advantage' will -+ # automatically be prepended. -+ # The following commands are equivalent - ubuntu-advantage: -- token: <ua_contract_token> -- enable: -- - fips -- """)], -+ commands: -+ 00: ['enable-livepatch', 'my-token'] -+ 01: ['ubuntu-advantage', 'enable-livepatch', 'my-token'] -+ 02: ubuntu-advantage enable-livepatch my-token -+ 03: 'ubuntu-advantage enable-livepatch my-token' -+ """)], - 'frequency': PER_INSTANCE, - 'type': 'object', - 'properties': { -- 'ubuntu_advantage': { -+ 'ubuntu-advantage': { - 'type': 'object', - 'properties': { -- 'enable': { -- 'type': 'array', -- 'items': {'type': 'string'}, -- }, -- 'token': { -- 'type': 'string', -- 'description': ( -- 'A contract token obtained from %s.' % UA_URL) -+ 'commands': { -+ 'type': ['object', 'array'], # Array of strings or dict -+ 'items': { -+ 'oneOf': [ -+ {'type': 'array', 'items': {'type': 'string'}}, -+ {'type': 'string'}] -+ }, -+ 'additionalItems': False, # Reject non-string & non-list -+ 'minItems': 1, -+ 'minProperties': 1, - } - }, -- 'required': ['token'], -- 'additionalProperties': False -+ 'additionalProperties': False, # Reject keys not in schema -+ 'required': ['commands'] - } - } - } - -+# TODO schema for 'assertions' and 'commands' are too permissive at the moment. -+# Once python-jsonschema supports schema draft 6 add support for arbitrary -+# object keys with 'patternProperties' constraint to validate string values. -+ - __doc__ = get_schema_doc(schema) # Supplement python help() - --LOG = logging.getLogger(__name__) -+UA_CMD = "ubuntu-advantage" - - --def configure_ua(token=None, enable=None): -- """Call ua commandline client to attach or enable services.""" -- error = None -- if not token: -- error = ('ubuntu_advantage: token must be provided') -- LOG.error(error) -- raise RuntimeError(error) -- -- if enable is None: -- enable = [] -- elif isinstance(enable, six.string_types): -- LOG.warning('ubuntu_advantage: enable should be a list, not' -- ' a string; treating as a single enable') -- enable = [enable] -- elif not isinstance(enable, list): -- LOG.warning('ubuntu_advantage: enable should be a list, not' -- ' a %s; skipping enabling services', -- type(enable).__name__) -- enable = [] -+def run_commands(commands): -+ """Run the commands provided in ubuntu-advantage:commands config. - -- attach_cmd = ['ua', 'attach', token] -- LOG.debug('Attaching to Ubuntu Advantage. %s', ' '.join(attach_cmd)) -- try: -- util.subp(attach_cmd) -- except util.ProcessExecutionError as e: -- msg = 'Failure attaching Ubuntu Advantage:\n{error}'.format( -- error=str(e)) -- util.logexc(LOG, msg) -- raise RuntimeError(msg) -- enable_errors = [] -- for service in enable: -+ Commands are run individually. Any errors are collected and reported -+ after attempting all commands. -+ -+ @param commands: A list or dict containing commands to run. Keys of a -+ dict will be used to order the commands provided as dict values. -+ """ -+ if not commands: -+ return -+ LOG.debug('Running user-provided ubuntu-advantage commands') -+ if isinstance(commands, dict): -+ # Sort commands based on dictionary key -+ commands = [v for _, v in sorted(commands.items())] -+ elif not isinstance(commands, list): -+ raise TypeError( -+ 'commands parameter was not a list or dict: {commands}'.format( -+ commands=commands)) -+ -+ fixed_ua_commands = prepend_base_command('ubuntu-advantage', commands) -+ -+ cmd_failures = [] -+ for command in fixed_ua_commands: -+ shell = isinstance(command, str) - try: -- cmd = ['ua', 'enable', service] -- util.subp(cmd, capture=True) -+ util.subp(command, shell=shell, status_cb=sys.stderr.write) - except util.ProcessExecutionError as e: -- enable_errors.append((service, e)) -- if enable_errors: -- for service, error in enable_errors: -- msg = 'Failure enabling "{service}":\n{error}'.format( -- service=service, error=str(error)) -- util.logexc(LOG, msg) -- raise RuntimeError( -- 'Failure enabling Ubuntu Advantage service(s): {}'.format( -- ', '.join('"{}"'.format(service) -- for service, _ in enable_errors))) -+ cmd_failures.append(str(e)) -+ if cmd_failures: -+ msg = ( -+ 'Failures running ubuntu-advantage commands:\n' -+ '{cmd_failures}'.format( -+ cmd_failures=cmd_failures)) -+ util.logexc(LOG, msg) -+ raise RuntimeError(msg) - - - def maybe_install_ua_tools(cloud): - """Install ubuntu-advantage-tools if not present.""" -- if util.which('ua'): -+ if util.which('ubuntu-advantage'): - return - try: - cloud.distro.update_package_sources() -@@ -152,28 +159,14 @@ def maybe_install_ua_tools(cloud): +--- a/cloudinit/config/cc_ubuntu_advantage.py ++++ b/cloudinit/config/cc_ubuntu_advantage.py +@@ -152,28 +152,14 @@ def maybe_install_ua_tools(cloud): def handle(name, cfg, cloud, log, args): @@ -292,10 +44,8 @@ Index: cloud-init/cloudinit/config/cc_ubuntu_advantage.py + run_commands(cfgin.get('commands', [])) # vi: ts=4 expandtab -Index: cloud-init/cloudinit/config/tests/test_ubuntu_advantage.py -=================================================================== ---- cloud-init.orig/cloudinit/config/tests/test_ubuntu_advantage.py -+++ cloud-init/cloudinit/config/tests/test_ubuntu_advantage.py +--- a/cloudinit/config/tests/test_ubuntu_advantage.py ++++ b/cloudinit/config/tests/test_ubuntu_advantage.py @@ -1,7 +1,10 @@ # This file is part of cloud-init. See LICENSE file for license information. |