You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@libcloud.apache.org by GitBox <gi...@apache.org> on 2019/10/30 11:59:47 UTC
[GitHub] [libcloud] vdloo opened a new pull request #1362: openstack driver
can create node from bootable vol
vdloo opened a new pull request #1362: openstack driver can create node from bootable vol
URL: https://github.com/apache/libcloud/pull/1362
Currently it is not possible to use the create_node method without
specifying an image. This is because in the OpenStack_1_1_NodeDriver
create_node converts the server_params like:
```
server_params = self._create_args_to_params(None, **kwargs)
```
but in case when there is no image to boot from like when you are
booting from an already existing bootable volume (which could have been
created from an image earlier), then _create_args_to_params will try to
access node.extra in order to get the imageRef, and node is None:
```
if 'image' in kwargs:
server_params['imageRef'] = kwargs.get('image').id
else:
server_params['imageRef'] = node.extra.get('imageId')
```
Booting an instance from a previously existing bootable volume like this
would fail:
```
In [36]: conn.create_node(ex_availability_zone='R123', port='8487d948-0840-4205-8b31-7f705a19e7f4', name='r123apitestnode', ex_keyname
...: ='rick', size='e55a2688-ef74-44cf-b302-9a6f960c3d74', ex_blockdevicemappings=[{'boot_index': 0, 'uuid': 'be7ee330-b454-4414-8
...: e9f-c70c558dd3af', 'source_type': 'volume', 'destination_type': 'volume', 'delete_on_termination': False}])
```
with:
```
/usr/local/venv/hypernode-control/src/apache-libcloud/libcloud/compute/drivers/openstack.pyc in _create_args_to_params(self, node, **kwargs)
1495 server_params['imageRef'] = kwargs.get('image').id
1496 else:
-> 1497 server_params['imageRef'] = node.extra.get('imageId')
1498
1499 if 'size' in kwargs:
AttributeError: 'NoneType' object has no attribute 'extra'
```
This could be circumvented by specifying `image=''`:
```
In [39]: conn.create_node(ex_availability_zone='R123', port='8487d948-0840-4205-8b31-7f705a19e7f4', image='', name='r123apitestnode',
...: ex_keyname='rick', size='e55a2688-ef74-44cf-b302-9a6f960c3d74', ex_blockdevicemappings=[{'boot_index': 0, 'uuid': 'be7ee330-b
...: 454-4414-8e9f-c70c558dd3af', 'source_type': 'volume', 'destination_type': 'volume', 'delete_on_termination': False}])
```
This PR also changes the default imageRef to empty string '' instead of None to prevent the API from responding with an error like this when the .get would default to None so that `image=''` will now no longer have to be specified.
```
BaseHTTPError: 400 Bad Request Invalid input for field/attribute imageRef. Value: None. u'None' is not valid under any of the given schemas
```
For more information see https://docs.openstack.org/api-ref/compute/?expanded=create-server-detail#create-server
> imageRef (Optional) | body | string | The UUID of the image to use for your server instance. This is not required in case of boot from volume. In all other cases it is required and must be a valid UUID otherwise API will return 400.
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
With regards,
Apache Git Services