** Description changed:

+ [Impact] 
+ This bug causes enabling services during a `ua fix` operation to fail.
+ That means that any user that is attached to a UA contract, but needs a 
particular service to fix a USN or CVE could run into this bug if they try to 
use `ua fix`  to fix that USN/CVE.
+ 
+ In practice, this probably mostly affects xenial users who are attached
+ to a UA contract, but don't have `esm-infra` enabled. For them, many `ua
+ fix` attempts will  fail because they attempt to enable `esm-infra`.
+ 
+ The bug occurred because we are re-using a function to `enable` that has
+ a required argument that isn't checked by mypy. When this new required
+ argument got added to the function, we failed to update this callsite.
+ That happened because the args are currently passed via an argparse
+ Namespace object and so the discrepancy wasn't captured by mypy.
+ 
+ The fix is to pass the required argument.
+ 
+ [Test Plan]
+ To Reproduce:
+ ```
+ lxc launch ubuntu-daily:xenial x-1969809
+ lxc exec x-1969809 -- apt update
+ lxc exec x-1969809 -- apt upgrade
+ lxc exec x-1969809 -- apt install apache2
+ lxc exec x-1969809 -- ua attach --no-auto-enable $YOUR_TOKEN
+ lxc exec x-1969809 -- ua fix usn-4994-2
+ # respond with "e" to the prompt
+ ```
+ You should see "Unexpected error(s) occurred."
+ 
+ 
+ To see that release 27.9 of ubuntu-advantage-tools fixes the problem, you can 
use the build in `ppa:ua-client/staging` for now (or once it is in -proposed, 
just enable proposed).
+ 
+ ```
+ lxc launch ubuntu-daily:xenial x-1969809
+ lxc exec x-1969809 -- add-apt-repository ppa:ua-client/staging
+ lxc exec x-1969809 -- apt update
+ lxc exec x-1969809 -- apt upgrade
+ lxc exec x-1969809 -- apt install apache2
+ lxc exec x-1969809 -- ua attach --no-auto-enable $YOUR_TOKEN
+ lxc exec x-1969809 -- ua fix usn-4994-2
+ # respond with "e" to the prompt
+ ```
+ You should see "USN-4994-2 is resolved."
+ 
+ 
+ [Where problems could occur]
+ Because the fix just adds the required argument, similar problems could occur 
in the future if we add a new required argument (or rename an argument, etc) 
and again forget to update this callsite.
+ 
+ If our fix of passing the required arg is wrong somehow (e.g.
+ mispelled), then this same bug will continue to occur.
+ 
+ If our fix is egregiously wrong (e.g. invalid python), then all `ua fix`
+ attempts could fail, not just those that require a service enabled in
+ the middle.
+ 
+ [Other Info]
+ 
+ In the future, we should move away from re-using the cli action functions 
with Namespace args for this functionality. Instead we should use functions 
with mypy-type-checked arguments. We will likely do this soon as a refactor of 
`ua fix` is on our roadmap for this cycle.
+  
+ [Original Description]
+ 
  I'm using the ua tool (version 27.7~16.04.1).  I'm unable to enable the
  esm-infra service because a couple of the packages that I have installed
  have been completely removed from the launchpad server.  Specifically:
  
  deb http://ppa.launchpad.net/jonathonf/ffmpeg-3/ubuntu xenial main
  deb http://ppa.launchpad.net/jonathonf/python-3.6/ubuntu xenial main
  
  When I remove these package definitions from /etc/apt/sources.list.d/
  the command succeeds.
  
  I've attached a log file that includes this stack trace.
  
  Traceback (most recent call last):
-   File "/usr/lib/python3/dist-packages/uaclient/cli.py", line 1629, in wrapper
-     return func(*args, **kwargs)
-   File "/usr/lib/python3/dist-packages/uaclient/cli.py", line 1725, in main
-     return args.action(args, cfg=cfg)
-   File "/usr/lib/python3/dist-packages/uaclient/cli.py", line 480, in 
action_fix
-     fix_status = security.fix_security_issue_id(cfg, args.security_issue)
-   File "/usr/lib/python3/dist-packages/uaclient/security.py", line 607, in 
fix_security_issue_id
-     usn_released_pkgs=usn_released_pkgs,
-   File "/usr/lib/python3/dist-packages/uaclient/security.py", line 982, in 
prompt_for_affected_packages
-     num_pkgs=count,
-   File "/usr/lib/python3/dist-packages/uaclient/security.py", line 872, in 
_handle_released_package_fixes
-     cfg, binary_pkgs, pocket
-   File "/usr/lib/python3/dist-packages/uaclient/security.py", line 1223, in 
upgrade_packages_and_attach
-     if not _check_subscription_for_required_service(pocket, cfg):
-   File "/usr/lib/python3/dist-packages/uaclient/security.py", line 1139, in 
_check_subscription_for_required_service
-     if _prompt_for_enable(cfg, ent.name):
-   File "/usr/lib/python3/dist-packages/uaclient/security.py", line 1118, in 
_prompt_for_enable
-     cfg,
-   File "/usr/lib/python3/dist-packages/uaclient/cli.py", line 200, in new_f
-     if cmd_args.format == "json" and not cmd_args.assume_yes:
+   File "/usr/lib/python3/dist-packages/uaclient/cli.py", line 1629, in wrapper
+     return func(*args, **kwargs)
+   File "/usr/lib/python3/dist-packages/uaclient/cli.py", line 1725, in main
+     return args.action(args, cfg=cfg)
+   File "/usr/lib/python3/dist-packages/uaclient/cli.py", line 480, in 
action_fix
+     fix_status = security.fix_security_issue_id(cfg, args.security_issue)
+   File "/usr/lib/python3/dist-packages/uaclient/security.py", line 607, in 
fix_security_issue_id
+     usn_released_pkgs=usn_released_pkgs,
+   File "/usr/lib/python3/dist-packages/uaclient/security.py", line 982, in 
prompt_for_affected_packages
+     num_pkgs=count,
+   File "/usr/lib/python3/dist-packages/uaclient/security.py", line 872, in 
_handle_released_package_fixes
+     cfg, binary_pkgs, pocket
+   File "/usr/lib/python3/dist-packages/uaclient/security.py", line 1223, in 
upgrade_packages_and_attach
+     if not _check_subscription_for_required_service(pocket, cfg):
+   File "/usr/lib/python3/dist-packages/uaclient/security.py", line 1139, in 
_check_subscription_for_required_service
+     if _prompt_for_enable(cfg, ent.name):
+   File "/usr/lib/python3/dist-packages/uaclient/security.py", line 1118, in 
_prompt_for_enable
+     cfg,
+   File "/usr/lib/python3/dist-packages/uaclient/cli.py", line 200, in new_f
+     if cmd_args.format == "json" and not cmd_args.assume_yes:
  AttributeError: 'Namespace' object has no attribute 'format'

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1969809

Title:
  ua fails if any package removed from server

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/ubuntu-advantage-tools/+bug/1969809/+subscriptions


-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to