Revert "Remove vendored libjuju"

This reverts commit 9d18c22a0dc9e295adda50601fc5e2f45d2c9b8a.

Change-Id: I7dbf291ccd750c5f836ff80c642be492434ab3ac
Signed-off-by: Adam Israel <adam.israel@canonical.com>
diff --git a/modules/libjuju/juju/errors.py b/modules/libjuju/juju/errors.py
new file mode 100644
index 0000000..da11cdb
--- /dev/null
+++ b/modules/libjuju/juju/errors.py
@@ -0,0 +1,49 @@
+class JujuError(Exception):
+    def __init__(self, *args, **kwargs):
+        self.message = ''
+        self.errors = []
+        if args:
+            self.message = str(args[0])
+            if isinstance(args[0], (list, tuple)):
+                self.errors = args[0]
+            elif len(args) > 1:
+                self.errors = list(args)
+            else:
+                self.errors = [self.message]
+        super().__init__(*args, **kwargs)
+
+
+class JujuAPIError(JujuError):
+    def __init__(self, result):
+        self.result = result
+        self.message = result['error']
+        self.error_code = result.get('error-code')
+        self.response = result['response']
+        self.request_id = result['request-id']
+        super().__init__(self.message)
+
+
+class JujuConnectionError(ConnectionError, JujuError):
+    pass
+
+
+class JujuAuthError(JujuConnectionError):
+    pass
+
+
+class JujuRedirectException(Exception):
+    """Exception indicating that a redirection was requested"""
+    def __init__(self, redirect_info):
+        self.redirect_info = redirect_info
+
+    @property
+    def ca_cert(self):
+        return self.redirect_info['ca-cert']
+
+    @property
+    def endpoints(self):
+        return [
+            ('{value}:{port}'.format(**s), self.ca_cert)
+            for servers in self.redirect_info['servers']
+            for s in servers if s['scope'] == 'public'
+        ]