Merge lp:~larryprice/libertine/no-such-backend into lp:libertine

Proposed by Larry Price
Status: Merged
Approved by: Stephen M. Webb
Approved revision: 412
Merged at revision: 442
Proposed branch: lp:~larryprice/libertine/no-such-backend
Merge into: lp:libertine
Diff against target: 166 lines (+38/-14)
2 files modified
tools/libertine-container-manager (+26/-12)
tools/libertine-launch (+12/-2)
To merge this branch: bzr merge lp:~larryprice/libertine/no-such-backend
Reviewer Review Type Date Requested Status
Stephen M. Webb (community) Approve
Libertine CI Bot continuous-integration Approve
Review via email: mp+319724@code.launchpad.net

Commit message

Gracefully handle creating a LibertineContainer object when the container backend is unavailable.

Description of the change

Gracefully handle creating a LibertineContainer object when the container backend is unavailable.

To post a comment you must log in.
410. By Larry Price

also in libertine-launch

Revision history for this message
Libertine CI Bot (libertine-ci-bot) wrote :

PASSED: Continuous integration, rev:409
https://jenkins.canonical.com/libertine/job/lp-libertine-ci/466/
Executed test runs:
    SUCCESS: https://jenkins.canonical.com/libertine/job/build/855
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=xenial+overlay,testname=default/705
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=zesty,testname=default/705
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=xenial+overlay,testname=default/705
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=zesty,testname=default/705
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-0-fetch/865
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/857
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/857/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=zesty/857
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=zesty/857/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/857
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/857/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=zesty/857
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=zesty/857/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://jenkins.canonical.com/libertine/job/lp-libertine-ci/466/rebuild

review: Approve (continuous-integration)
Revision history for this message
Libertine CI Bot (libertine-ci-bot) wrote :

PASSED: Continuous integration, rev:410
https://jenkins.canonical.com/libertine/job/lp-libertine-ci/467/
Executed test runs:
    SUCCESS: https://jenkins.canonical.com/libertine/job/build/856
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=xenial+overlay,testname=default/706
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=zesty,testname=default/706
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=xenial+overlay,testname=default/706
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=zesty,testname=default/706
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-0-fetch/866
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/858
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/858/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=zesty/858
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=zesty/858/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/858
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/858/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=zesty/858
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=zesty/858/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://jenkins.canonical.com/libertine/job/lp-libertine-ci/467/rebuild

review: Approve (continuous-integration)
Revision history for this message
Stephen M. Webb (bregma) wrote :

Need to add i18n for the user-facing messages. See python/libertine/launcher/config.py for an example.

review: Needs Fixing
411. By Larry Price

add gettext support for new strings

Revision history for this message
Libertine CI Bot (libertine-ci-bot) wrote :

PASSED: Continuous integration, rev:411
https://jenkins.canonical.com/libertine/job/lp-libertine-ci/469/
Executed test runs:
    SUCCESS: https://jenkins.canonical.com/libertine/job/build/859
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=xenial+overlay,testname=default/709
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=zesty,testname=default/709
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=xenial+overlay,testname=default/709
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=zesty,testname=default/709
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-0-fetch/869
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/861
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/861/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=zesty/861
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=zesty/861/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/861
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/861/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=zesty/861
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=zesty/861/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://jenkins.canonical.com/libertine/job/lp-libertine-ci/469/rebuild

review: Approve (continuous-integration)
Revision history for this message
Stephen M. Webb (bregma) wrote :

Need to use positional {0} or named {container_id} substitution in the .format() strings.

review: Needs Fixing
412. By Larry Price

give names to format args

Revision history for this message
Libertine CI Bot (libertine-ci-bot) wrote :

PASSED: Continuous integration, rev:412
https://jenkins.canonical.com/libertine/job/lp-libertine-ci/472/
Executed test runs:
    SUCCESS: https://jenkins.canonical.com/libertine/job/build/863
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=xenial+overlay,testname=default/713
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=zesty,testname=default/713
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=xenial+overlay,testname=default/713
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=zesty,testname=default/713
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-0-fetch/873
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/865
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/865/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=zesty/865
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=zesty/865/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/865
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/865/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=zesty/865
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=zesty/865/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://jenkins.canonical.com/libertine/job/lp-libertine-ci/472/rebuild

review: Approve (continuous-integration)
Revision history for this message
Stephen M. Webb (bregma) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'tools/libertine-container-manager'
--- tools/libertine-container-manager 2017-03-03 18:34:34 +0000
+++ tools/libertine-container-manager 2017-03-14 15:31:47 +0000
@@ -24,6 +24,10 @@
24import sys24import sys
25import re25import re
2626
27import gettext
28gettext.textdomain('libertine')
29_ = gettext.gettext
30
27from libertine import ContainerRunning, LibertineContainer31from libertine import ContainerRunning, LibertineContainer
28from libertine.ContainersConfig import ContainersConfig32from libertine.ContainersConfig import ContainersConfig
29from libertine.HostInfo import HostInfo33from libertine.HostInfo import HostInfo
@@ -35,6 +39,16 @@
35 self.containers_config = ContainersConfig()39 self.containers_config = ContainersConfig()
36 self.host_info = HostInfo()40 self.host_info = HostInfo()
3741
42
43 def _container(self, container_id):
44 try:
45 return LibertineContainer(container_id, self.containers_config)
46 except ImportError as e:
47 container_type = self.containers_config.get_container_type(container_id)
48 libertine.utils.get_logger().error(_("Backend for container '{id}' not installed. Install "
49 "'python3-libertine-{type}' and try again.").format(id=container_id, type=container_type))
50 sys.exit(1)
51
38 def _get_updated_locale(self, container_id):52 def _get_updated_locale(self, container_id):
39 host_locale = self.host_info.get_host_locale()53 host_locale = self.host_info.get_host_locale()
4054
@@ -99,7 +113,7 @@
99113
100 try:114 try:
101 self.containers_config.update_container_locale(args.id, self.host_info.get_host_locale())115 self.containers_config.update_container_locale(args.id, self.host_info.get_host_locale())
102 container = LibertineContainer(args.id)116 container = LibertineContainer(args.id, self.containers_config)
103 self.containers_config.update_container_install_status(args.id, "installing")117 self.containers_config.update_container_install_status(args.id, "installing")
104 if not container.create_libertine_container(password, args.multiarch):118 if not container.create_libertine_container(password, args.multiarch):
105 libertine.utils.get_logger().error("Failed to create container")119 libertine.utils.get_logger().error("Failed to create container")
@@ -130,7 +144,7 @@
130144
131 def destroy(self, args):145 def destroy(self, args):
132 container_id = self.containers_config.check_container_id(args.id)146 container_id = self.containers_config.check_container_id(args.id)
133 container = LibertineContainer(container_id, self.containers_config)147 container = self._container(container_id)
134148
135 self.destroy_container(container, args.force)149 self.destroy_container(container, args.force)
136150
@@ -138,7 +152,7 @@
138152
139 def install_package(self, args):153 def install_package(self, args):
140 container_id = self.containers_config.check_container_id(args.id)154 container_id = self.containers_config.check_container_id(args.id)
141 container = LibertineContainer(container_id, self.containers_config)155 container = self._container(container_id)
142 failure = False156 failure = False
143157
144 with ContainerRunning(container.container):158 with ContainerRunning(container.container):
@@ -193,7 +207,7 @@
193207
194 def remove_package(self, args):208 def remove_package(self, args):
195 container_id = self.containers_config.check_container_id(args.id)209 container_id = self.containers_config.check_container_id(args.id)
196 container = LibertineContainer(container_id)210 container = self._container(container_id)
197 failure = False211 failure = False
198212
199 with ContainerRunning(container.container):213 with ContainerRunning(container.container):
@@ -216,8 +230,8 @@
216230
217 def search_cache(self, args):231 def search_cache(self, args):
218 container_id = self.containers_config.check_container_id(args.id)232 container_id = self.containers_config.check_container_id(args.id)
233 container = self._container(container_id)
219234
220 container = LibertineContainer(container_id)
221 if container.search_package_cache(args.search_string) is not 0:235 if container.search_package_cache(args.search_string) is not 0:
222 libertine.utils.get_logger().error("Search for '{}' in container '{}' exited with non-zero status"236 libertine.utils.get_logger().error("Search for '{}' in container '{}' exited with non-zero status"
223 .format(args.id, args.search_string))237 .format(args.id, args.search_string))
@@ -225,10 +239,10 @@
225239
226 def update(self, args):240 def update(self, args):
227 container_id = self.containers_config.check_container_id(args.id)241 container_id = self.containers_config.check_container_id(args.id)
242 container = self._container(container_id)
243
228 new_locale = self._get_updated_locale(container_id)244 new_locale = self._get_updated_locale(container_id)
229245
230 container = LibertineContainer(container_id)
231
232 if not container.update_libertine_container(new_locale):246 if not container.update_libertine_container(new_locale):
233 sys.exit(1)247 sys.exit(1)
234248
@@ -242,7 +256,7 @@
242 def list_apps(self, args):256 def list_apps(self, args):
243 container_id = self.containers_config.check_container_id(args.id)257 container_id = self.containers_config.check_container_id(args.id)
244258
245 app_ids = LibertineContainer(container_id).list_app_ids()259 app_ids = self._container(container_id).list_app_ids()
246 if args.json:260 if args.json:
247 print(json.dumps(app_ids))261 print(json.dumps(app_ids))
248 else:262 else:
@@ -252,7 +266,7 @@
252 def exec(self, args):266 def exec(self, args):
253 container_id = self.containers_config.check_container_id(args.id)267 container_id = self.containers_config.check_container_id(args.id)
254268
255 container = LibertineContainer(container_id)269 container = self._container(container_id)
256270
257 if not container.exec_command(args.command):271 if not container.exec_command(args.command):
258 sys.exit(1)272 sys.exit(1)
@@ -269,7 +283,7 @@
269283
270 def configure(self, args):284 def configure(self, args):
271 container_id = self.containers_config.check_container_id(args.id)285 container_id = self.containers_config.check_container_id(args.id)
272 container = LibertineContainer(container_id)286 container = self._container(container_id)
273287
274 if args.multiarch and self.host_info.get_host_architecture() == 'amd64':288 if args.multiarch and self.host_info.get_host_architecture() == 'amd64':
275 multiarch = 'disabled'289 multiarch = 'disabled'
@@ -377,7 +391,7 @@
377 def fix_integrity(self, args):391 def fix_integrity(self, args):
378 if 'containerList' in self.containers_config.container_list:392 if 'containerList' in self.containers_config.container_list:
379 for container in self.containers_config.container_list['containerList']:393 for container in self.containers_config.container_list['containerList']:
380 libertine_container = LibertineContainer(container['id'])394 libertine_container = self._container(container['id'])
381395
382 if 'installStatus' not in container or container['installStatus'] == 'removing':396 if 'installStatus' not in container or container['installStatus'] == 'removing':
383 self.destroy_container(libertine_container)397 self.destroy_container(libertine_container)
@@ -411,7 +425,7 @@
411 libertine.utils.get_logger().error("The restart subcommand is only valid for LXC and LXD type containers.")425 libertine.utils.get_logger().error("The restart subcommand is only valid for LXC and LXD type containers.")
412 sys.exit(1)426 sys.exit(1)
413427
414 container = LibertineContainer(container_id)428 container = self._container(container_id)
415429
416 container.restart_libertine_container()430 container.restart_libertine_container()
417431
418432
=== modified file 'tools/libertine-launch'
--- tools/libertine-launch 2017-02-23 18:18:29 +0000
+++ tools/libertine-launch 2017-03-14 15:31:47 +0000
@@ -19,6 +19,10 @@
19import os19import os
20import sys20import sys
2121
22import gettext
23gettext.textdomain('libertine')
24_ = gettext.gettext
25
22from libertine import launcher26from libertine import launcher
2327
24def main():28def main():
@@ -30,8 +34,14 @@
30 utils.get_logger().error("No container with id '%s'" % config.container_id)34 utils.get_logger().error("No container with id '%s'" % config.container_id)
31 sys.exit(1)35 sys.exit(1)
3236
33 from libertine import LibertineContainer37 try:
34 container = LibertineContainer(container_id=config.container_id)38 from libertine import LibertineContainer
39 container = LibertineContainer(container_id=config.container_id)
40 except ImportError as e:
41 container_type = self.containers_config.get_container_type(container_id)
42 libertine.utils.get_logger().error(_("Backend for container '{id}' not installed. Install "
43 "'python3-libertine-{type}' and try again.").format(id=config.container_id, type=container_type))
44 sys.exit(1)
35 else:45 else:
36 from libertine import NoContainer46 from libertine import NoContainer
3747

Subscribers

People subscribed via source and target branches