The following pull request was submitted through Github.
It can be accessed and reviewed at: https://github.com/lxc/pylxd/pull/390

This e-mail was sent by the LXC bot, direct replies will not reach the author
unless they happen to be subscribed to this list.

=== Description (from pull-request) ===
the image import from simplestrings has an alias parameter, which is actually the fingerprint. So this is an attempt to keep backwards compatibility and allow to actually set an alias.
From 0ca5da604397ce34b618ed23cbca22468133b639 Mon Sep 17 00:00:00 2001
From: Felix Engelmann <fe-git...@nlogn.org>
Date: Thu, 17 Oct 2019 13:49:40 +0200
Subject: [PATCH 1/4] added image creation from public lxd server

Signed-off-by: Felix Engelmann <fe-git...@nlogn.org>
---
 pylxd/models/image.py            | 21 +++++++++++++++++++++
 pylxd/tests/models/test_image.py | 11 +++++++++++
 2 files changed, 32 insertions(+)

diff --git a/pylxd/models/image.py b/pylxd/models/image.py
index c335d34b..e2294be5 100644
--- a/pylxd/models/image.py
+++ b/pylxd/models/image.py
@@ -156,6 +156,27 @@ def create_from_simplestreams(cls, client, server, alias,
 
         return client.images.get(op.metadata['fingerprint'])
 
+    @classmethod
+    def create_from_image(cls, client, server, fingerprint=None, alias=None,
+                          public=False, auto_update=False):
+        """Copy an image from remote lxd."""
+        config = {
+            'public': public,
+            'auto_update': auto_update,
+            'source': {
+                'type': 'image',
+                'mode': 'pull',
+                'server': server,
+                'protocol': 'lxd',
+                'fingerprint': fingerprint,
+                'alias': alias
+            }
+        }
+
+        op = _image_create_from_config(client, config, wait=True)
+
+        return client.images.get(op.metadata['fingerprint'])
+
     @classmethod
     def create_from_url(cls, client, url,
                         public=False, auto_update=False):
diff --git a/pylxd/tests/models/test_image.py b/pylxd/tests/models/test_image.py
index 60d59e83..d8861047 100644
--- a/pylxd/tests/models/test_image.py
+++ b/pylxd/tests/models/test_image.py
@@ -368,6 +368,17 @@ def test_create_from_simplestreams(self):
             image.fingerprint
         )
 
+    def test_create_from_image(self):
+        """Try to create an image from image at public lxd."""
+        image = self.client.images.create_from_image(
+            'https://images.nlogn.org:8443',
+            alias='debian/8'
+        )
+        self.assertEqual(
+            'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855',
+            image.fingerprint
+        )
+
     def test_create_from_url(self):
         """Try to create an image from an URL."""
         image = self.client.images.create_from_url(

From 69cf48464c96004cb1880bd17f9573612844a3b0 Mon Sep 17 00:00:00 2001
From: Felix Engelmann <fe-git...@nlogn.org>
Date: Fri, 18 Oct 2019 10:42:36 +0200
Subject: [PATCH 2/4] additional parameters and aliases

Signed-off-by: Felix Engelmann <fe-git...@nlogn.org>
---
 pylxd/models/image.py | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/pylxd/models/image.py b/pylxd/models/image.py
index e2294be5..7f4727f9 100644
--- a/pylxd/models/image.py
+++ b/pylxd/models/image.py
@@ -158,7 +158,8 @@ def create_from_simplestreams(cls, client, server, alias,
 
     @classmethod
     def create_from_image(cls, client, server, fingerprint=None, alias=None,
-                          public=False, auto_update=False):
+                          public=False, auto_update=False, secret=None,
+                          certificate=None):
         """Copy an image from remote lxd."""
         config = {
             'public': public,
@@ -169,9 +170,13 @@ def create_from_image(cls, client, server, 
fingerprint=None, alias=None,
                 'server': server,
                 'protocol': 'lxd',
                 'fingerprint': fingerprint,
-                'alias': alias
+                'alias': alias,
+                'secret': secret,
+                'certificate': certificate
             }
         }
+        if alias is not None:
+            config["aliases"] = [{'name': alias}]
 
         op = _image_create_from_config(client, config, wait=True)
 

From bb6eacb9e80cb13e5209980ee55e76079c1939e3 Mon Sep 17 00:00:00 2001
From: Felix Engelmann <fe-git...@nlogn.org>
Date: Sat, 19 Oct 2019 19:42:44 +0200
Subject: [PATCH 3/4] added documentation for create_from_image

Signed-off-by: Felix Engelmann <fe-git...@nlogn.org>
---
 doc/source/images.rst | 22 ++++++++++++++++++++++
 pylxd/models/image.py | 24 +++++++++++++++++++++++-
 2 files changed, 45 insertions(+), 1 deletion(-)

diff --git a/doc/source/images.rst b/doc/source/images.rst
index 0011d654..46cbea5b 100644
--- a/doc/source/images.rst
+++ b/doc/source/images.rst
@@ -24,6 +24,10 @@ image:
     set `public` to `True`.
   - `create_from_simplestreams(server, alias, public=False, auto_update=False, 
wait=False)` -
     Create an image from simplestreams.
+  - `create_from_imagecreate_from_image(cls, client, server, fingerprint=None, 
alias=None,
+                                        public=False, auto_update=False, 
secret=None,
+                                        certificate=None):` -
+    Create an image from a public lxd instance.
   - `create_from_url(url, public=False, auto_update=False, wait=False)` -
     Create an image from a url.
 
@@ -97,3 +101,21 @@ you may also want to `wait=True`.
     >>> image = client.images.create(image_data, public=True, wait=True)
     >>> image.fingerprint
     'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'
+
+You can also download existing images from a remote lxd instance by either 
their alias or fingerprint.
+
+.. code-block:: python
+
+    >>> image = 
client.images.create_from_image("https://images.nlogn.org:8443";,
+                                                alias='fedora/30', 
public=False, auto_update=True)
+    >>> image.fingerprint
+    'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'
+
+Or fetch an image from a simplestream server with:
+
+.. code-block:: python
+
+    >>> image = 
client.images.create_from_simplestreams('https://cloud-images.ubuntu.com/releases',
+                                                        'trusty/amd64', 
public=False, auto_update=True)
+    >>> image.fingerprint
+    'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'
diff --git a/pylxd/models/image.py b/pylxd/models/image.py
index 7f4727f9..98873d0b 100644
--- a/pylxd/models/image.py
+++ b/pylxd/models/image.py
@@ -160,7 +160,29 @@ def create_from_simplestreams(cls, client, server, alias,
     def create_from_image(cls, client, server, fingerprint=None, alias=None,
                           public=False, auto_update=False, secret=None,
                           certificate=None):
-        """Copy an image from remote lxd."""
+        """Copy an image from remote lxd.
+        :param client:  the pylxd client
+        :type client: pylxd.Client
+        :param server: URL of the remote LXD-API
+        :type server: str
+        :param fingerprint: The fingerprint of the image to fetch
+            (mandatory if no alias is provided)
+        :type fingerprint: str
+        :param alias: The alias of the image to fetch
+            (mandatory if no fingerprint is provided)
+        :type alias: str
+        :param public: Make the new image public
+        :type public: bool
+        :param auto_update: Set the image to auto-update
+        :type auto_update: bool
+        :param secret: Secret to authenticate to remote lxd instance
+        :type secret: str
+        :param certificate: Optional PEM certificate.
+            If not mentioned, system CA is used.
+        :type certificate: str
+        :returns: newly created image
+        :rtype: pylxd.Image
+        """
         config = {
             'public': public,
             'auto_update': auto_update,

From b54d1997cd0b3f44965eeed355ce4a51c9f2583a Mon Sep 17 00:00:00 2001
From: Felix Engelmann <fe-git...@nlogn.org>
Date: Thu, 5 Mar 2020 21:24:07 +0100
Subject: [PATCH 4/4] fixed create image from simplestreams alias and
 fingerprint mixup

Signed-off-by: Felix Engelmann <fe-git...@nlogn.org>
---
 pylxd/models/image.py | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/pylxd/models/image.py b/pylxd/models/image.py
index 98873d0b..14390ca2 100644
--- a/pylxd/models/image.py
+++ b/pylxd/models/image.py
@@ -137,7 +137,7 @@ def create(
 
     @classmethod
     def create_from_simplestreams(cls, client, server, alias,
-                                  public=False, auto_update=False):
+                                  public=False, auto_update=False, 
new_alias=None):
         """Copy an image from simplestreams."""
         config = {
             'public': public,
@@ -147,10 +147,14 @@ def create_from_simplestreams(cls, client, server, alias,
                 'type': 'image',
                 'mode': 'pull',
                 'server': server,
-                'protocol': 'simplestreams',
-                'fingerprint': alias
+                'protocol': 'simplestreams'
             }
         }
+        if alias is not None:
+            config['source']['fingerprint'] = alias
+        if new_alias is not None:
+            config['source']['alias'] = new_alias
+            config["aliases"] = [{'name': new_alias}]
 
         op = _image_create_from_config(client, config, wait=True)
 
_______________________________________________
lxc-devel mailing list
lxc-devel@lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to