Merge ~chad.smith/ubuntu/+source/ubuntu-advantage-tools:release-27-focal into ubuntu/+source/ubuntu-advantage-tools:ubuntu/focal-proposed

Proposed by Chad Smith
Status: Merged
Approved by: Bryce Harrington
Approved revision: 68c4edb78a348f6bd179b5c23d1fae3d09ce8a32
Merge reported by: Chad Smith
Merged at revision: 17c40189b04b728c28797d3f41d9bbf66096f5f3
Proposed branch: ~chad.smith/ubuntu/+source/ubuntu-advantage-tools:release-27-focal
Merge into: ubuntu/+source/ubuntu-advantage-tools:ubuntu/focal-proposed
Diff against target: 393 lines (+202/-5) (has conflicts)
10 files modified
.gitignore (+8/-0)
Jenkinsfile (+16/-0)
apt-hook/Makefile (+30/-0)
apt-hook/json-hook-src/go.mod (+4/-0)
apt-hook/json-hook-src/json-hook.go (+42/-0)
apt-hook/json-hook-src/json-hook_test.go (+34/-0)
debian/changelog (+22/-0)
debian/control (+7/-0)
debian/rules (+1/-0)
uaclient/tests/test_util.py (+38/-5)
Conflict in .gitignore
Conflict in Jenkinsfile
Conflict in apt-hook/Makefile
Conflict in apt-hook/json-hook-src/go.mod
Conflict in apt-hook/json-hook-src/json-hook.go
Conflict in apt-hook/json-hook-src/json-hook_test.go
Conflict in debian/changelog
Conflict in debian/control
Conflict in uaclient/tests/test_util.py
Reviewer Review Type Date Requested Status
Bryce Harrington Approve
Grant Orndorff Pending
Lucas Albuquerque Medeiros de Moura Pending
Review via email: mp+401917@code.launchpad.net

Description of the change

New upstream release of 27.0 for release into xenial

Avoiding rich commit history because this is a branch new client (python instead of bash) which represented a major upgrade that is backwards incompatible.

We will be following this verification procedure for SRU of ubuntu-advantage-tools in order to release into xenial: https://wiki.ubuntu.com/UbuntuAdvantageToolsUpdates

Functional equivalent debs have been uploaded to this ppa for testing https://launchpad.net/~orndorffgrant/+archive/ubuntu/uaclient-staging-27

to test:
$ cat > 27_test_setup.yaml <<EOF
#cloud-config
write_files:
- content: |
    # Ubuntu-Advantage client config file.
    contract_url: 'https://contracts.canonical.com'
    data_dir: /var/lib/ubuntu-advantage
    log_level: debug
    log_file: /var/log/ubuntu-advantage.log
    features:
        allow_beta: true
  owner: root:root
  path: /etc/ubuntu-advantage/uaclient.conf
  permissions: '0644'
apt:
  sources:
    ua_staging_ppa:
        source: 'deb http://ppa.launchpad.net/orndorffgrant/uaclient-staging-27/ubuntu \$RELEASE main'
        keyid: 74E59E9E
packages: [ubuntu-advantage-tools]
EOF

$ lxc launch ubuntu-daily:biojnic test-27-f -c user.user-data="$(cat 27_test_setup.yaml)"
$ lxc exec test-27-f -- cloud-init status --wait --long # wait for pkg installs

$ lxc exec test-27-f -- ua version

$ lxc exec test-27-f -- ua status # show unattached

This machine is not attached to a UA subscription.
See https://ubuntu.com/advantage

# attach with token from https://ubuntu.com/advantage
$ lxc exec test-27-f -- ua attach <REDACTED>
# assert esm-infra auto enabled

# no failures on attach
lxc exect test-27-f -- grep Traceback /var/log/ubuntu-advantage.log

# assert default contract not authorized to esm-apps
$ lxc exec test-27-f -- ua enable esm-apps

will manipulate other subcommands

To post a comment you must log in.
Revision history for this message
Chad Smith (chad.smith) wrote :
Download full text (4.4 KiB)

csmith@downtown:/tmp$ lxc exec test-27-f -- cloud-init status --wait --long

status: done
time: Wed, 28 Apr 2021 00:10:02 +0000
detail:
DataSourceNoCloud [seed=/var/lib/cloud/seed/nocloud-net][dsmode=net]
csmith@downtown:/tmp$ lxc exec test-27-f -- ua version
27.0~20.04.1 +allow_beta +extra_security_params
csmith@downtown:/tmp$ lxc exec test-27-f -- ua status
SERVICE AVAILABLE DESCRIPTION
cc-eal no Common Criteria EAL2 Provisioning Packages
cis no Center for Internet Security Audit Tools
esm-apps yes UA Apps: Extended Security Maintenance (ESM)
esm-infra yes UA Infra: Extended Security Maintenance (ESM)
fips no NIST-certified FIPS modules
fips-updates no Uncertified security updates to FIPS modules
livepatch yes Canonical Livepatch service

This machine is not attached to a UA subscription.
See https://ubuntu.com/advantage
csmith@downtown:/tmp$ lxc exec test-27-f -- ua attach <REDACTED_NO_APPS>
Enabling default service esm-infra
Updating package lists
UA Infra: ESM enabled
This machine is now attached to '<email address hidden>'

SERVICE ENTITLED STATUS DESCRIPTION
cc-eal yes n/a Common Criteria EAL2 Provisioning Packages
cis yes n/a Center for Internet Security Audit Tools
esm-apps no — UA Apps: Extended Security Maintenance (ESM)
esm-infra yes enabled UA Infra: Extended Security Maintenance (ESM)
fips yes n/a NIST-certified FIPS modules
fips-updates yes n/a Uncertified security updates to FIPS modules
livepatch yes n/a Canonical Livepatch service

NOTICES
Operation in progress: ua attach

Enable services with: ua enable <service>

     Account: <email address hidden>
Subscription: <email address hidden>
csmith@downtown:/tmp$ lxc exec test-27-f -- grep Traceback /var/log/ubuntu-advantage.log
csmith@downtown:/tmp$ lxc exec test-27-f -- ua enable esm-apps
One moment, checking your subscription first
This subscription is not entitled to UA Apps: ESM
For more information see: https://ubuntu.com/advantage.
csmith@downtown:/tmp$ lxc exec test-27-f -- ua detach
Detach will disable the following service:
    esm-infra
Are you sure? (y/N) y
Updating package lists
This machine is now detached.
csmith@downtown:/tmp$
csmith@downtown:/tmp$
csmith@downtown:/tmp$
csmith@downtown:/tmp$ lxc exec test-27-f -- ua attach <REDACTED_WITH_APPS_ACCESS>
Enabling default service esm-apps
Updating package lists
UA Apps: ESM enabled
Enabling default service esm-infra
Updating package lists
UA Infra: ESM enabled
This machine is now attached to 'UA Applications - Essential (Physical)'

SERVICE ENTITLED STATUS DESCRIPTION
cc-eal yes n/a Common Criteria EAL2 Provisioning Packages
cis yes n/a Center for Internet Security Audit Tools
esm-apps yes enabled UA Apps: Extended Security Maintenance (ESM)
esm-infra yes enabled UA Infra: Extended Security Maintenance (ESM)
fips yes n/a NIST-certified FIPS modules
fips-updates yes n/a Unc...

Read more...

Revision history for this message
Bryce Harrington (bryce) wrote :

Running through the test case, at the part to grep for Traceback, I did indeed find one in the log:

2021-04-28 02:49:25,798 - util.py:(414) [DEBUG]: Reading file: /var/lib/ubuntu-advantage/private/machine-token.json
2021-04-28 02:49:25,799 - config.py:(357) [DEBUG]: File does not exist: /var/lib/ubuntu-advantage/private/machine-to\
ken.json
2021-04-28 02:49:25,799 - cli.py:(1026) [ERROR]: Auto-attach image support is not available on lxd
See: https://ubuntu.com/advantage
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/uaclient/cli.py", line 1004, in wrapper
    return func(*args, **kwargs)
  File "/usr/lib/python3/dist-packages/uaclient/cli.py", line 1062, in main
    return args.action(args, cfg)
  File "/usr/lib/python3/dist-packages/uaclient/cli.py", line 147, in new_f
    return f(*args, **kwargs)
  File "/usr/lib/python3/dist-packages/uaclient/cli.py", line 130, in new_f
    retval = f(args, cfg, **kwargs)
  File "/usr/lib/python3/dist-packages/uaclient/cli.py", line 755, in action_auto_attach
    token = _get_contract_token_from_cloud_identity(cfg)
  File "/usr/lib/python3/dist-packages/uaclient/cli.py", line 716, in _get_contract_token_from_cloud_identity
    raise e
  File "/usr/lib/python3/dist-packages/uaclient/cli.py", line 710, in _get_contract_token_from_cloud_identity
    instance = identity.cloud_instance_factory()
  File "/usr/lib/python3/dist-packages/uaclient/clouds/identity.py", line 94, in cloud_instance_factory
    raise exceptions.NonAutoAttachImageError(
uaclient.exceptions.NonAutoAttachImageError: Auto-attach image support is not available on lxd
See: https://ubuntu.com/advantage

This appeared to occur during installation.

Despite the traceback, everything seems to be working fine.

Revision history for this message
Bryce Harrington (bryce) wrote :

I got an unexpected error from the last command in the test case:

triage-focal+20.04:~/pkg/UbuntuAdvantageTools/review-mp401917/ubuntu-advantage-tools-gu$ sudo ua enable esm-apps
One moment, checking your subscription first
Cannot enable unknown service 'esm-apps'.
Try esm-infra, fips, fips-updates, livepatch.
triage-focal+20.04:~/pkg/UbuntuAdvantageTools/review-mp401917/ubuntu-advantage-tools-gu$ sudo ua status
SERVICE ENTITLED STATUS DESCRIPTION
esm-apps yes enabled UA Apps: Extended Security Maintenance (ESM)
esm-infra yes enabled UA Infra: Extended Security Maintenance (ESM)
fips yes n/a NIST-certified FIPS modules
fips-updates yes n/a Uncertified security updates to FIPS modules
livepatch yes n/a Canonical Livepatch service

Enable services with: ua enable <service>

                Account:
           Subscription: UA Applications - Essential (Physical)
            Valid until: 3999-12-31 00:00:00
Technical support level: essential

triage-focal+20.04:~/pkg/UbuntuAdvantageTools/review-mp401917/ubuntu-advantage-tools-gu$ sudo ua disable esm-apps
Updating package lists
A reboot is required to complete disable operation.
triage-focal+20.04:~/pkg/UbuntuAdvantageTools/review-mp401917/ubuntu-advantage-tools-gu$ sudo ua enable esm-apps
One moment, checking your subscription first
Cannot enable unknown service 'esm-apps'.
Try esm-infra, fips, fips-updates, livepatch.
triage-focal+20.04:~/pkg/UbuntuAdvantageTools/review-mp401917/ubuntu-advantage-tools-gu$ sudo ua status
SERVICE ENTITLED STATUS DESCRIPTION
esm-infra yes enabled UA Infra: Extended Security Maintenance (ESM)
fips yes n/a NIST-certified FIPS modules
fips-updates yes n/a Uncertified security updates to FIPS modules
livepatch yes n/a Canonical Livepatch service

Enable services with: ua enable <service>

                Account:
           Subscription: UA Applications - Essential (Physical)
            Valid until: 3999-12-31 00:00:00
Technical support level: essential

This is a bit confusing to have esm-apps shown as enabled, but when running ua enable esm-apps it says it can't be enabled, and then disabling it and attempting to re-enable it doesn't work. However I can detach and reattach the token and esm-apps comes back.

Revision history for this message
Bryce Harrington (bryce) wrote :

Tagged and pushed...

triage-focal+20.04:~/pkg/UbuntuAdvantageTools/review-mp401917/ubuntu-advantage-tools-gu$ git push pkg upload/27.0_20.04.1
Enumerating objects: 242, done.
Counting objects: 100% (242/242), done.
Delta compression using up to 12 threads
Compressing objects: 100% (131/131), done.
Writing objects: 100% (156/156), 218.56 KiB | 453.00 KiB/s, done.
Total 156 (delta 57), reused 76 (delta 22)
remote: Resolving deltas: 100% (57/57), completed with 50 local objects.
To ssh://git.launchpad.net/ubuntu/+source/ubuntu-advantage-tools
 * [new tag] upload/27.0_20.04.1 -> upload/27.0_20.04.1
triage-focal+20.04:~/pkg/UbuntuAdvantageTools/review-mp401914$ dput ubuntu ubuntu-advantage-tools_27.0~16.04.1_source.changes
Checking signature on .changes
gpg: /home/bryce/pkg/UbuntuAdvantageTools/review-mp401914/ubuntu-advantage-tools_27.0~16.04.1_source.changes: Valid signature from E603B2578FB8F0FB
Checking signature on .dsc
gpg: /home/bryce/pkg/UbuntuAdvantageTools/review-mp401914/ubuntu-advantage-tools_27.0~16.04.1.dsc: Valid signature from E603B2578FB8F0FB
Uploading to ubuntu (via ftp to upload.ubuntu.com):
  Uploading ubuntu-advantage-tools_27.0~16.04.1.dsc: done.
  Uploading ubuntu-advantage-tools_27.0~16.04.1.tar.xz: done.
  Uploading ubuntu-advantage-tools_27.0~16.04.1_source.changes: done.
Successfully uploaded packages.

review: Approve
Revision history for this message
Bryce Harrington (bryce) wrote :

Since there were additional changes needed, the sru upload was dropped from the waiting queue, and I've now uploaded a replacement with the above fixes.

triage-focal+20.04:~/pkg/UbuntuAdvantageTools/review-mp401917$ dput -f ubuntu ubuntu-advantage-tools_27.0~20.04.1_source.changes
Checking signature on .changes
gpg: /home/bryce/pkg/UbuntuAdvantageTools/review-mp401917/ubuntu-advantage-tools_27.0~20.04.1_source.changes: Valid signature from E603B2578FB8F0FB
Checking signature on .dsc
gpg: /home/bryce/pkg/UbuntuAdvantageTools/review-mp401917/ubuntu-advantage-tools_27.0~20.04.1.dsc: Valid signature from E603B2578FB8F0FB
Uploading to ubuntu (via ftp to upload.ubuntu.com):
  Uploading ubuntu-advantage-tools_27.0~20.04.1.dsc: done.
  Uploading ubuntu-advantage-tools_27.0~20.04.1.tar.xz: done.
  Uploading ubuntu-advantage-tools_27.0~20.04.1_source.buildinfo: done.
  Uploading ubuntu-advantage-tools_27.0~20.04.1_source.changes: done.
Successfully uploaded packages.
stirling:~/pkg/UbuntuAdvantageTools/review-mp401917/ubuntu-advantage-tools-gu$ git push -f pkg upload/27.0_20.04.1
Enumerating objects: 251, done.
Counting objects: 100% (251/251), done.
Delta compression using up to 12 threads
Compressing objects: 100% (149/149), done.
Writing objects: 100% (165/165), 219.30 KiB | 453.00 KiB/s, done.
Total 165 (delta 64), reused 56 (delta 13)
remote: Resolving deltas: 100% (64/64), completed with 50 local objects.
To ssh://git.launchpad.net/ubuntu/+source/ubuntu-advantage-tools
 + d91b6458...6f2d8ea8 upload/27.0_20.04.1 -> upload/27.0_20.04.1 (forced update)

review: Approve
a6bc924... by Grant Orndorff on 2021-04-30

apt-hook: refactor json hook messaging to be dry

The message construction code in the json hook
was pretty repetitive. This cleans it up a bit
and also removes some unnecessary explicit struct
names in the tests.

05742dc... by Grant Orndorff on 2021-05-03

apt-hook: ignore go hook on some architectures

Golang doesn't support powerpc and riscv on older versions.
This configures our Build-Depends and Makefile to gracefully
handle scenarios where we can't build our go hook. We will
simply not ship the go hook in these limited scenarios.

Fixes: #1603

56c18d9... by Grant Orndorff on 2021-05-04

build: order build-depends alternatives newer first

When using alternatives in the Build-Depends section of
debian/control, we should always put the newer version of
a package first. This is because sbuild doesn't resolve
alternatives by default and we want sbuild to work on the
latest version of ubuntu with default settings.

LP: #1926949

b65402c... by Grant Orndorff on 2021-05-06

tests: fix subp ls error case

23a3f35... by Chad Smith on 2021-05-07

changelog 27.0.1 & 27.0.2

f40810b... by Chad Smith on 2021-05-07

jenkinsfile: trusty sbuild --resolve-depends for CI runs

17c4018... by Chad Smith on 2021-05-07

changelog: 27.0.2~20.04.1

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/.gitignore b/.gitignore
2index 2b2da67..29b86f4 100644
3--- a/.gitignore
4+++ b/.gitignore
5@@ -22,3 +22,11 @@ ubuntu_advantage_tools.dsc
6 # test/jenkins artifacts
7 pytest_results.xml
8 reports/
9+<<<<<<< .gitignore
10+=======
11+
12+# apt-hook build artifacts
13+apt-hook/hook
14+apt-hook/ubuntu-advantage.pot
15+apt-hook/json-hook-src/json-hook
16+>>>>>>> .gitignore
17diff --git a/Jenkinsfile b/Jenkinsfile
18index 2082e19..925a9c3 100644
19--- a/Jenkinsfile
20+++ b/Jenkinsfile
21@@ -87,7 +87,11 @@ pipeline {
22 cp debian/changelog ${WORKSPACE}/debian/changelog-${SERIES_VERSION}
23 sed -i "s/${PKG_VERSION}/${NEW_PKG_VERSION}/" ${WORKSPACE}/debian/changelog-${SERIES_VERSION}
24 dpkg-source -l${WORKSPACE}/debian/changelog-${SERIES_VERSION} -b .
25+<<<<<<< Jenkinsfile
26 sbuild --nolog --verbose --dist=${BUILD_SERIES} --no-run-lintian --append-to-version=~${SERIES_VERSION} ../ubuntu-advantage-tools*${NEW_PKG_VERSION}*dsc
27+=======
28+ sbuild --resolve-alternatives --nolog --verbose --dist=${BUILD_SERIES} --no-run-lintian --append-to-version=~${SERIES_VERSION} ../ubuntu-advantage-tools*${NEW_PKG_VERSION}*dsc
29+>>>>>>> Jenkinsfile
30 cp ./ubuntu-advantage-tools*${SERIES_VERSION}*.deb ${ARTIFACT_DIR}/ubuntu-advantage-tools-${BUILD_SERIES}.deb
31 cp ./ubuntu-advantage-pro*${SERIES_VERSION}*.deb ${ARTIFACT_DIR}/ubuntu-advantage-pro-${BUILD_SERIES}.deb
32 '''
33@@ -108,7 +112,11 @@ pipeline {
34 cp debian/changelog ${WORKSPACE}/debian/changelog-${SERIES_VERSION}
35 sed -i "s/${PKG_VERSION}/${NEW_PKG_VERSION}/" ${WORKSPACE}/debian/changelog-${SERIES_VERSION}
36 dpkg-source -l${WORKSPACE}/debian/changelog-${SERIES_VERSION} -b .
37+<<<<<<< Jenkinsfile
38 sbuild --nolog --verbose --dist=${BUILD_SERIES} --no-run-lintian --append-to-version=~${SERIES_VERSION} ../ubuntu-advantage-tools*${NEW_PKG_VERSION}*dsc
39+=======
40+ sbuild --resolve-alternatives --nolog --verbose --dist=${BUILD_SERIES} --no-run-lintian --append-to-version=~${SERIES_VERSION} ../ubuntu-advantage-tools*${NEW_PKG_VERSION}*dsc
41+>>>>>>> Jenkinsfile
42 cp ./ubuntu-advantage-tools*${SERIES_VERSION}*.deb ${ARTIFACT_DIR}/ubuntu-advantage-tools-${BUILD_SERIES}.deb
43 cp ./ubuntu-advantage-pro*${SERIES_VERSION}*.deb ${ARTIFACT_DIR}/ubuntu-advantage-pro-${BUILD_SERIES}.deb
44 '''
45@@ -129,7 +137,11 @@ pipeline {
46 cp debian/changelog ${WORKSPACE}/debian/changelog-${SERIES_VERSION}
47 sed -i "s/${PKG_VERSION}/${NEW_PKG_VERSION}/" ${WORKSPACE}/debian/changelog-${SERIES_VERSION}
48 dpkg-source -l${WORKSPACE}/debian/changelog-${SERIES_VERSION} -b .
49+<<<<<<< Jenkinsfile
50 sbuild --nolog --verbose --dist=${BUILD_SERIES} --no-run-lintian --append-to-version=~${SERIES_VERSION} ../ubuntu-advantage-tools*${NEW_PKG_VERSION}*dsc
51+=======
52+ sbuild --resolve-alternatives --nolog --verbose --dist=${BUILD_SERIES} --no-run-lintian --append-to-version=~${SERIES_VERSION} ../ubuntu-advantage-tools*${NEW_PKG_VERSION}*dsc
53+>>>>>>> Jenkinsfile
54 cp ./ubuntu-advantage-tools*${SERIES_VERSION}*.deb ${ARTIFACT_DIR}/ubuntu-advantage-tools-${BUILD_SERIES}.deb
55 cp ./ubuntu-advantage-pro*${SERIES_VERSION}*.deb ${ARTIFACT_DIR}/ubuntu-advantage-pro-${BUILD_SERIES}.deb
56 '''
57@@ -150,7 +162,11 @@ pipeline {
58 cp debian/changelog ${WORKSPACE}/debian/changelog-${SERIES_VERSION}
59 sed -i "s/${PKG_VERSION}/${NEW_PKG_VERSION}/" ${WORKSPACE}/debian/changelog-${SERIES_VERSION}
60 dpkg-source -l${WORKSPACE}/debian/changelog-${SERIES_VERSION} -b .
61+<<<<<<< Jenkinsfile
62 sbuild --nolog --verbose --dist=${BUILD_SERIES} --no-run-lintian --append-to-version=~${SERIES_VERSION} ../ubuntu-advantage-tools*${NEW_PKG_VERSION}*dsc
63+=======
64+ sbuild --resolve-alternatives --nolog --verbose --dist=${BUILD_SERIES} --no-run-lintian --append-to-version=~${SERIES_VERSION} ../ubuntu-advantage-tools*${NEW_PKG_VERSION}*dsc
65+>>>>>>> Jenkinsfile
66 cp ./ubuntu-advantage-tools*${SERIES_VERSION}*.deb ${ARTIFACT_DIR}/ubuntu-advantage-tools-${BUILD_SERIES}.deb
67 cp ./ubuntu-advantage-pro*${SERIES_VERSION}*.deb ${ARTIFACT_DIR}/ubuntu-advantage-pro-${BUILD_SERIES}.deb
68 '''
69diff --git a/apt-hook/Makefile b/apt-hook/Makefile
70index 15c4856..11294b1 100644
71--- a/apt-hook/Makefile
72+++ b/apt-hook/Makefile
73@@ -1,3 +1,21 @@
74+# the go hook steps will be skipped if this is a nonempty string
75+SKIP_GO_HOOK = ""
76+
77+GO_BIN = $(shell which go)
78+# Try go-1.14 and go-1.10 if not in path
79+ifeq ($(GO_BIN),)
80+ ifneq ($(wildcard /usr/lib/go-1.14/bin/go),)
81+ GO_BIN = /usr/lib/go-1.14/bin/go
82+ else ifneq ($(wildcard /usr/lib/go-1.10/bin/go),)
83+ GO_BIN = /usr/lib/go-1.10/bin/go
84+ endif
85+endif
86+
87+# If still not found then just don't build the go hook
88+ifeq ($(GO_BIN),)
89+ SKIP_GO_HOOK = "1"
90+endif
91+
92 all: build
93
94 build: hook ubuntu-advantage.pot json-hook
95@@ -9,15 +27,27 @@ hook: hook.cc
96 $(CXX) -Wall -Wextra -pedantic -std=c++11 $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS) -g -o hook hook.cc -lapt-pkg $(LDLIBS)
97
98 json-hook:
99+<<<<<<< apt-hook/Makefile
100 cd json-hook-src && GOCACHE=/tmp/ go build json-hook.go
101+=======
102+ [ $(SKIP_GO_HOOK) ] || (cd json-hook-src && GOCACHE=/tmp/ $(GO_BIN) build json-hook.go)
103+>>>>>>> apt-hook/Makefile
104
105 install: hook json-hook
106 install -D -m 644 20apt-esm-hook.conf $(DESTDIR)/etc/apt/apt.conf.d/20apt-esm-hook.conf
107 install -D -m 755 hook $(DESTDIR)/usr/lib/ubuntu-advantage/apt-esm-hook
108+<<<<<<< apt-hook/Makefile
109 install -D -m 755 json-hook-src/json-hook $(DESTDIR)/usr/lib/ubuntu-advantage/apt-esm-json-hook
110+=======
111+ [ $(SKIP_GO_HOOK) ] || install -D -m 755 json-hook-src/json-hook $(DESTDIR)/usr/lib/ubuntu-advantage/apt-esm-json-hook
112+>>>>>>> apt-hook/Makefile
113
114 clean:
115 rm -f hook ubuntu-advantage.pot json-hook-src/json-hook
116
117 test:
118+<<<<<<< apt-hook/Makefile
119 cd json-hook-src && go test
120+=======
121+ [ $(SKIP_GO_HOOK) ] || (cd json-hook-src && GOCACHE=/tmp/ $(GO_BIN) test)
122+>>>>>>> apt-hook/Makefile
123diff --git a/apt-hook/json-hook-src/go.mod b/apt-hook/json-hook-src/go.mod
124index 66726af..2823e25 100644
125--- a/apt-hook/json-hook-src/go.mod
126+++ b/apt-hook/json-hook-src/go.mod
127@@ -1,3 +1,7 @@
128 module json-hook
129
130+<<<<<<< apt-hook/json-hook-src/go.mod
131 go 1.2
132+=======
133+go 1.7
134+>>>>>>> apt-hook/json-hook-src/go.mod
135diff --git a/apt-hook/json-hook-src/json-hook.go b/apt-hook/json-hook-src/json-hook.go
136index 0f2e3eb..fc6b704 100644
137--- a/apt-hook/json-hook-src/json-hook.go
138+++ b/apt-hook/json-hook-src/json-hook.go
139@@ -45,6 +45,21 @@ type jsonRPC struct {
140 } `json:"params"`
141 }
142
143+<<<<<<< apt-hook/json-hook-src/json-hook.go
144+=======
145+func updatesFromSource(count int, source string, first bool) string {
146+ security := ""
147+ if first {
148+ security = "security "
149+ }
150+ updates := "updates"
151+ if count == 1 {
152+ updates = "update"
153+ }
154+ return fmt.Sprintf("%d %s %s%s", count, source, security, updates)
155+}
156+
157+>>>>>>> apt-hook/json-hook-src/json-hook.go
158 func createUpdateMessage(standardSecurityCount int, esmInfraCount int, esmAppsCount int) string {
159 displayStandard := true
160 displayEsmInfra := true
161@@ -72,6 +87,7 @@ func createUpdateMessage(standardSecurityCount int, esmInfraCount int, esmAppsCo
162 }
163
164 standardUpdates := ""
165+<<<<<<< apt-hook/json-hook-src/json-hook.go
166 esmInfraUpdates := ""
167 esmAppsUpdates := ""
168 if displayStandard {
169@@ -118,6 +134,32 @@ func createUpdateMessage(standardSecurityCount int, esmInfraCount int, esmAppsCo
170 }
171
172 return standardUpdates + esmInfraUpdates + esmAppsUpdates
173+=======
174+ afterStandard := ""
175+ esmInfraUpdates := ""
176+ afterInfra := ""
177+ esmAppsUpdates := ""
178+
179+ if displayStandard {
180+ standardUpdates = updatesFromSource(standardSecurityCount, "standard", true)
181+ if displayEsmInfra && displayEsmApps {
182+ afterStandard = ", "
183+ } else if displayEsmInfra || displayEsmApps {
184+ afterStandard = " and "
185+ }
186+ }
187+ if displayEsmInfra {
188+ esmInfraUpdates = updatesFromSource(esmInfraCount, "esm-infra", esmInfraFirst)
189+ if displayEsmApps {
190+ afterInfra = " and "
191+ }
192+ }
193+ if displayEsmApps {
194+ esmAppsUpdates = updatesFromSource(esmAppsCount, "esm-apps", esmAppsFirst)
195+ }
196+
197+ return standardUpdates + afterStandard + esmInfraUpdates + afterInfra + esmAppsUpdates
198+>>>>>>> apt-hook/json-hook-src/json-hook.go
199 }
200
201 func fromOriginAndArchive(pkgVersion jsonRPCPackageVersion, origin string, archive string) bool {
202diff --git a/apt-hook/json-hook-src/json-hook_test.go b/apt-hook/json-hook-src/json-hook_test.go
203index cfc1788..135ec2c 100644
204--- a/apt-hook/json-hook-src/json-hook_test.go
205+++ b/apt-hook/json-hook-src/json-hook_test.go
206@@ -14,6 +14,7 @@ func TestCreateUpdateMessages(t *testing.T) {
207 expectedMessage string
208 }
209 testParamsList := []params{
210+<<<<<<< apt-hook/json-hook-src/json-hook_test.go
211 params{0, 0, 0, ""},
212 params{0, 0, 1, "1 esm-apps security update"},
213 params{0, 0, 2, "2 esm-apps security updates"},
214@@ -41,6 +42,35 @@ func TestCreateUpdateMessages(t *testing.T) {
215 params{2, 2, 0, "2 standard security updates and 2 esm-infra updates"},
216 params{2, 2, 1, "2 standard security updates, 2 esm-infra updates and 1 esm-apps update"},
217 params{2, 2, 2, "2 standard security updates, 2 esm-infra updates and 2 esm-apps updates"},
218+=======
219+ {0, 0, 0, ""},
220+ {0, 0, 1, "1 esm-apps security update"},
221+ {0, 0, 2, "2 esm-apps security updates"},
222+ {0, 1, 0, "1 esm-infra security update"},
223+ {0, 1, 1, "1 esm-infra security update and 1 esm-apps update"},
224+ {0, 1, 2, "1 esm-infra security update and 2 esm-apps updates"},
225+ {0, 2, 0, "2 esm-infra security updates"},
226+ {0, 2, 1, "2 esm-infra security updates and 1 esm-apps update"},
227+ {0, 2, 2, "2 esm-infra security updates and 2 esm-apps updates"},
228+ {1, 0, 0, "1 standard security update"},
229+ {1, 0, 1, "1 standard security update and 1 esm-apps update"},
230+ {1, 0, 2, "1 standard security update and 2 esm-apps updates"},
231+ {1, 1, 0, "1 standard security update and 1 esm-infra update"},
232+ {1, 1, 1, "1 standard security update, 1 esm-infra update and 1 esm-apps update"},
233+ {1, 1, 2, "1 standard security update, 1 esm-infra update and 2 esm-apps updates"},
234+ {1, 2, 0, "1 standard security update and 2 esm-infra updates"},
235+ {1, 2, 1, "1 standard security update, 2 esm-infra updates and 1 esm-apps update"},
236+ {1, 2, 2, "1 standard security update, 2 esm-infra updates and 2 esm-apps updates"},
237+ {2, 0, 0, "2 standard security updates"},
238+ {2, 0, 1, "2 standard security updates and 1 esm-apps update"},
239+ {2, 0, 2, "2 standard security updates and 2 esm-apps updates"},
240+ {2, 1, 0, "2 standard security updates and 1 esm-infra update"},
241+ {2, 1, 1, "2 standard security updates, 1 esm-infra update and 1 esm-apps update"},
242+ {2, 1, 2, "2 standard security updates, 1 esm-infra update and 2 esm-apps updates"},
243+ {2, 2, 0, "2 standard security updates and 2 esm-infra updates"},
244+ {2, 2, 1, "2 standard security updates, 2 esm-infra updates and 1 esm-apps update"},
245+ {2, 2, 2, "2 standard security updates, 2 esm-infra updates and 2 esm-apps updates"},
246+>>>>>>> apt-hook/json-hook-src/json-hook_test.go
247 }
248
249 for i, testParams := range testParamsList {
250@@ -62,7 +92,11 @@ func TestCountSecurityUpdates(t *testing.T) {
251 expectedEsmAppsCount int
252 }
253 testParamsList := []params{
254+<<<<<<< apt-hook/json-hook-src/json-hook_test.go
255 params{mockJson, 1, 2, 3},
256+=======
257+ {mockJson, 1, 2, 3},
258+>>>>>>> apt-hook/json-hook-src/json-hook_test.go
259 }
260
261 for i, testParams := range testParamsList {
262diff --git a/debian/changelog b/debian/changelog
263index 3ae8a1c..4219a8d 100644
264--- a/debian/changelog
265+++ b/debian/changelog
266@@ -1,3 +1,25 @@
267+<<<<<<< debian/changelog
268+=======
269+ubuntu-advantage-tools (27.0.2~20.04.1) focal; urgency=medium
270+
271+ * d/control:
272+ - order build-depends alternatives newer first (LP: #1926949)
273+ - apt-hook: do not attempt to package go APT JSON hook on some
274+ architectures (GH: #1603) (LP: #1927795)
275+ * Bug-fix release 27.0.2: build failures on riscv64 and powerpc
276+ - apt-hook: refactor json hook messaging to be dry
277+ - tests: fix subp ls error case for powerpc builds
278+ - jenkinsfile: add --resolve-alternatives for trusty builds
279+
280+ -- Chad Smith <chad.smith@canonical.com> Fri, 07 May 2021 11:58:03 -0600
281+
282+ubuntu-advantage-tools (27.0.1) impish; urgency=medium
283+
284+ * Add .gitignore and cleanup ignored directory .pytest_cache
285+
286+ -- Chad Smith <chad.smith@canonical.com> Fri, 07 May 2021 11:55:07 -0600
287+
288+>>>>>>> debian/changelog
289 ubuntu-advantage-tools (27.0~20.04.1) focal; urgency=medium
290
291 * New upstream release 27.0: (LP: #1926361)
292diff --git a/debian/control b/debian/control
293index cd28a1f..660a80d 100644
294--- a/debian/control
295+++ b/debian/control
296@@ -6,10 +6,17 @@ Build-Depends: bash-completion,
297 debhelper (>=9),
298 debianutils,
299 dh-python,
300+<<<<<<< debian/control
301 dh-systemd | debhelper (>= 13.3),
302 gettext,
303 git,
304 golang,
305+=======
306+ debhelper (>= 13.3) | dh-systemd,
307+ gettext,
308+ git,
309+ golang-go (>= 2:1.14~) [!powerpc] | golang-1.14-go [!powerpc] | golang-1.10-go [!powerpc !riscv64],
310+>>>>>>> debian/control
311 libapt-pkg-dev,
312 po-debconf,
313 python3 (>= 3.4),
314diff --git a/debian/rules b/debian/rules
315index 9bea522..57898f9 100755
316--- a/debian/rules
317+++ b/debian/rules
318@@ -27,6 +27,7 @@ override_dh_auto_build:
319
320 override_dh_auto_test:
321 ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS)))
322+ make -C apt-hook test
323 python3 -m pytest
324 ifdef FLAKE8
325 # required for Trusty: flake8 does not install a __main__ for -m
326diff --git a/uaclient/tests/test_util.py b/uaclient/tests/test_util.py
327index 019faf2..29a5bd2 100644
328--- a/uaclient/tests/test_util.py
329+++ b/uaclient/tests/test_util.py
330@@ -291,11 +291,12 @@ class TestSubp:
331 with pytest.raises(util.ProcessExecutionError) as excinfo:
332 util.subp(["ls", "--bogus"])
333
334- expected_error = (
335- "Failed running command 'ls --bogus' [exit(2)]."
336- " Message: ls: unrecognized option"
337- )
338- assert expected_error in str(excinfo.value)
339+ expected_errors = [
340+ "Failed running command 'ls --bogus' [exit(2)].",
341+ "ls: unrecognized option '--bogus'",
342+ ]
343+ for msg in expected_errors:
344+ assert msg in str(excinfo.value)
345 assert 0 == m_sleep.call_count # no retries
346
347 @mock.patch("uaclient.util.time.sleep")
348@@ -795,6 +796,37 @@ class TestIsConfigValueTrue:
349 config=cfg.cfg, path_to_value="features.allow_beta"
350 )
351 assert return_val == actual_val
352+<<<<<<< uaclient/tests/test_util.py
353+
354+ @pytest.mark.parametrize(
355+ "config_dict, key_val",
356+ [
357+ ({"allow_beta": "tru"}, "tru"),
358+ ({"allow_beta": "Tre"}, "Tre"),
359+ ({"allow_beta": "flse"}, "flse"),
360+ ({"allow_beta": "Fale"}, "Fale"),
361+ ],
362+ )
363+ def test_exception_is_config_value_true(
364+ self, config_dict, key_val, FakeConfig
365+ ):
366+ path_to_value = "features.allow_beta"
367+ cfg = FakeConfig()
368+ cfg.override_features(config_dict)
369+ with pytest.raises(exceptions.UserFacingError) as excinfo:
370+ util.is_config_value_true(
371+ config=cfg.cfg, path_to_value=path_to_value
372+ )
373+
374+ expected_msg = status.ERROR_INVALID_CONFIG_VALUE.format(
375+ path_to_value=path_to_value,
376+ expected_value="boolean string: true or false",
377+ value=key_val,
378+ )
379+ assert expected_msg == str(excinfo.value)
380+
381+
382+=======
383
384 @pytest.mark.parametrize(
385 "config_dict, key_val",
386@@ -824,6 +856,7 @@ class TestIsConfigValueTrue:
387 assert expected_msg == str(excinfo.value)
388
389
390+>>>>>>> uaclient/tests/test_util.py
391 class TestRedactSensitiveLogs:
392 @pytest.mark.parametrize(
393 "raw_log,expected",

Subscribers

People subscribed via source and target branches

to status/vote changes: