)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"be947cd3fca36b88122012739f2f2ce8d94ed399","unresolved":false,"context_lines":[{"line_number":9,"context_line":"This patch adds \"GET v2/info/import\" as defined in the corresponding"},{"line_number":10,"context_line":"spec."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: If5bb4b608d02c502e2cec953317c9156865e58de"},{"line_number":13,"context_line":"Partially-blueprint: image-import-refactor"},{"line_number":14,"context_line":"Partial-Bug: #1523944"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"9a68dd71_32610406","line":12,"updated":"2016-01-22 17:03:49.000000000","message":"Could you add MitakaPriority above the change-id?","commit_id":"38bbacddab3023fb25a6019f6eb438a9b70517ef"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"d7dbfeebec07e3727459d1f7b7edfec33140e948","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch adds \"GET v2/info/import\" as defined in the corresponding"},{"line_number":10,"context_line":"spec."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"MitakaPriority"},{"line_number":13,"context_line":"Change-Id: If5bb4b608d02c502e2cec953317c9156865e58de"},{"line_number":14,"context_line":"Partially-blueprint: image-import-refactor"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"1a122d0e_6404a67d","line":11,"updated":"2016-05-05 08:06:09.000000000","message":"ApiImpact","commit_id":"985d69fdb2910e47586ddd3d2bd2a32be141d598"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"a0dadb36109a0ea1480192bdd69813222fc27f27","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch adds \"GET v2/info/import\" as defined in the corresponding"},{"line_number":10,"context_line":"spec."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"MitakaPriority"},{"line_number":13,"context_line":"Change-Id: If5bb4b608d02c502e2cec953317c9156865e58de"},{"line_number":14,"context_line":"Partially-blueprint: image-import-refactor"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"dab17558_af8687d8","line":11,"in_reply_to":"1a122d0e_6404a67d","updated":"2016-05-10 15:48:04.000000000","message":"Done","commit_id":"985d69fdb2910e47586ddd3d2bd2a32be141d598"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"4ec5783a2f2d706f531527fd8306bec89c698b54","unresolved":false,"context_lines":[{"line_number":16,"context_line":"Co-Authored-By: Nikhil Komawar \u003cnik.komawar@gmail.com\u003e"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"* TODO: improve the commit message"},{"line_number":19,"context_line":"* TODO: add release notes"},{"line_number":20,"context_line":"* TODO: add details why config is not auto refreshed here"},{"line_number":21,"context_line":"* TODO: add explanation of why the call is setup this way and tested"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"1ac06dbe_1648ef5a","line":19,"updated":"2016-08-25 05:42:16.000000000","message":"release notes to be added separately for all import patches together","commit_id":"01b634a8b5a7d6766cb669d1cd8c938747bfd1fc"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"4ec5783a2f2d706f531527fd8306bec89c698b54","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"* TODO: improve the commit message"},{"line_number":19,"context_line":"* TODO: add release notes"},{"line_number":20,"context_line":"* TODO: add details why config is not auto refreshed here"},{"line_number":21,"context_line":"* TODO: add explanation of why the call is setup this way and tested"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Change-Id: If5bb4b608d02c502e2cec953317c9156865e58de"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"1ac06dbe_36624bd9","line":20,"updated":"2016-08-25 05:42:16.000000000","message":"config to be auto refreshed at https://review.openstack.org/#/c/354809/","commit_id":"01b634a8b5a7d6766cb669d1cd8c938747bfd1fc"}],"etc/glance-api.conf":[{"author":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"change_message_id":"19584e46022de4383394a647ffd6a0162ff38495","unresolved":false,"context_lines":[{"line_number":1107,"context_line":"# Deprecated group/name - [DEFAULT]/container_formats"},{"line_number":1108,"context_line":"#container_formats \u003d ami,ari,aki,bare,ovf,ova,docker"},{"line_number":1109,"context_line":""},{"line_number":1110,"context_line":"# Supported formats for image import (list value)"},{"line_number":1111,"context_line":"#import_container_formats \u003d ami,ari,aki,bare,ovf,ova,docker"},{"line_number":1112,"context_line":""},{"line_number":1113,"context_line":"# Supported values for the \u0027disk_format\u0027 image attribute (list value)"}],"source_content_type":"text/plain","patch_set":7,"id":"1a122d0e_24610ed4","line":1110,"range":{"start_line":1110,"start_character":11,"end_line":1110,"end_character":12},"updated":"2016-04-19 17:30:51.000000000","message":"supported \u0027container\u0027 formats?","commit_id":"67ed0d34f0b49d469dfac9d86c39d6889864a4ca"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"c1e1bb34fdf8af1a38a4d1cd9da20d5325520018","unresolved":false,"context_lines":[{"line_number":1107,"context_line":"# Deprecated group/name - [DEFAULT]/container_formats"},{"line_number":1108,"context_line":"#container_formats \u003d ami,ari,aki,bare,ovf,ova,docker"},{"line_number":1109,"context_line":""},{"line_number":1110,"context_line":"# Supported formats for image import (list value)"},{"line_number":1111,"context_line":"#import_container_formats \u003d ami,ari,aki,bare,ovf,ova,docker"},{"line_number":1112,"context_line":""},{"line_number":1113,"context_line":"# Supported values for the \u0027disk_format\u0027 image attribute (list value)"}],"source_content_type":"text/plain","patch_set":7,"id":"1a122d0e_572f67a0","line":1110,"range":{"start_line":1110,"start_character":11,"end_line":1110,"end_character":12},"in_reply_to":"1a122d0e_24610ed4","updated":"2016-04-20 14:27:05.000000000","message":"Done","commit_id":"67ed0d34f0b49d469dfac9d86c39d6889864a4ca"},{"author":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"change_message_id":"19584e46022de4383394a647ffd6a0162ff38495","unresolved":false,"context_lines":[{"line_number":1108,"context_line":"#container_formats \u003d ami,ari,aki,bare,ovf,ova,docker"},{"line_number":1109,"context_line":""},{"line_number":1110,"context_line":"# Supported formats for image import (list value)"},{"line_number":1111,"context_line":"#import_container_formats \u003d ami,ari,aki,bare,ovf,ova,docker"},{"line_number":1112,"context_line":""},{"line_number":1113,"context_line":"# Supported values for the \u0027disk_format\u0027 image attribute (list value)"},{"line_number":1114,"context_line":"# Deprecated group/name - [DEFAULT]/disk_formats"}],"source_content_type":"text/plain","patch_set":7,"id":"1a122d0e_44f08afe","line":1111,"range":{"start_line":1111,"start_character":1,"end_line":1111,"end_character":25},"updated":"2016-04-19 17:30:51.000000000","message":"We\u0027re probably going to have a bunch of params with \u0027import\u0027 in their name. We could potentially have an import stanza:\n\n [image_import]\n size_cap \u003d ...\n container_formats \u003d ...\n disk_formats \u003d ...\n\nWhat do folks think?","commit_id":"67ed0d34f0b49d469dfac9d86c39d6889864a4ca"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"d7dbfeebec07e3727459d1f7b7edfec33140e948","unresolved":false,"context_lines":[{"line_number":1108,"context_line":"#disk_formats \u003d ami,ari,aki,vhd,vmdk,raw,qcow2,vdi,iso"},{"line_number":1109,"context_line":""},{"line_number":1110,"context_line":""},{"line_number":1111,"context_line":"[image_import]"},{"line_number":1112,"context_line":"# Supported container formats for image import (list value)"},{"line_number":1113,"context_line":"#container_formats \u003d ami,ari,aki,bare,ovf,ova,docker"},{"line_number":1114,"context_line":""},{"line_number":1115,"context_line":"# Supported disk formats for image import (list value)"},{"line_number":1116,"context_line":"#disk_formats \u003d ami,ari,aki,vhd,vmdk,raw,qcow2,vdi,iso"},{"line_number":1117,"context_line":""},{"line_number":1118,"context_line":"# Maximum size of image a user can import (in bytes). (integer value)"},{"line_number":1119,"context_line":"# Currently set to 0 since the feature has yet to be fully implemented."},{"line_number":1120,"context_line":"#image_size_cap \u003d 0"},{"line_number":1121,"context_line":""},{"line_number":1122,"context_line":""},{"line_number":1123,"context_line":"[keystone_authtoken]"}],"source_content_type":"text/plain","patch_set":10,"id":"1a122d0e_44bb6ac4","line":1120,"range":{"start_line":1111,"start_character":0,"end_line":1120,"end_character":19},"updated":"2016-05-05 08:06:09.000000000","message":"Do we really really want these duplicated just for the new import process?\n\nAlso based on the differences between helptexts in code and here looks like this is not generated. Please use config-generator to keep the example config files in sync.","commit_id":"985d69fdb2910e47586ddd3d2bd2a32be141d598"},{"author":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"change_message_id":"a8004f6c74745aec2b7dca122557f3ba2277ad45","unresolved":false,"context_lines":[{"line_number":1108,"context_line":"#disk_formats \u003d ami,ari,aki,vhd,vmdk,raw,qcow2,vdi,iso"},{"line_number":1109,"context_line":""},{"line_number":1110,"context_line":""},{"line_number":1111,"context_line":"[image_import]"},{"line_number":1112,"context_line":"# Supported container formats for image import (list value)"},{"line_number":1113,"context_line":"#container_formats \u003d ami,ari,aki,bare,ovf,ova,docker"},{"line_number":1114,"context_line":""},{"line_number":1115,"context_line":"# Supported disk formats for image import (list value)"},{"line_number":1116,"context_line":"#disk_formats \u003d ami,ari,aki,vhd,vmdk,raw,qcow2,vdi,iso"},{"line_number":1117,"context_line":""},{"line_number":1118,"context_line":"# Maximum size of image a user can import (in bytes). (integer value)"},{"line_number":1119,"context_line":"# Currently set to 0 since the feature has yet to be fully implemented."},{"line_number":1120,"context_line":"#image_size_cap \u003d 0"},{"line_number":1121,"context_line":""},{"line_number":1122,"context_line":""},{"line_number":1123,"context_line":"[keystone_authtoken]"}],"source_content_type":"text/plain","patch_set":10,"id":"1a122d0e_9e05cac3","line":1120,"range":{"start_line":1111,"start_character":0,"end_line":1120,"end_character":19},"in_reply_to":"1a122d0e_44bb6ac4","updated":"2016-05-05 09:05:22.000000000","message":"\u003e Do we really really want these duplicated just for the new import process?\n\nYes.\n\nFor example, Nova generated snapshots may PUT a qcow2 to /file.\n\nImage import may forbid /import of qcow2 for security reasons.\n\nSimilarly, the image_size_cap may need to be different. For example you may need too much space in /var to support processing large imported images, but nova snapshots may not be processed so space in /var is not a consideration.","commit_id":"985d69fdb2910e47586ddd3d2bd2a32be141d598"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"a0dadb36109a0ea1480192bdd69813222fc27f27","unresolved":false,"context_lines":[{"line_number":1108,"context_line":"#disk_formats \u003d ami,ari,aki,vhd,vmdk,raw,qcow2,vdi,iso"},{"line_number":1109,"context_line":""},{"line_number":1110,"context_line":""},{"line_number":1111,"context_line":"[image_import]"},{"line_number":1112,"context_line":"# Supported container formats for image import (list value)"},{"line_number":1113,"context_line":"#container_formats \u003d ami,ari,aki,bare,ovf,ova,docker"},{"line_number":1114,"context_line":""},{"line_number":1115,"context_line":"# Supported disk formats for image import (list value)"},{"line_number":1116,"context_line":"#disk_formats \u003d ami,ari,aki,vhd,vmdk,raw,qcow2,vdi,iso"},{"line_number":1117,"context_line":""},{"line_number":1118,"context_line":"# Maximum size of image a user can import (in bytes). (integer value)"},{"line_number":1119,"context_line":"# Currently set to 0 since the feature has yet to be fully implemented."},{"line_number":1120,"context_line":"#image_size_cap \u003d 0"},{"line_number":1121,"context_line":""},{"line_number":1122,"context_line":""},{"line_number":1123,"context_line":"[keystone_authtoken]"}],"source_content_type":"text/plain","patch_set":10,"id":"dab17558_8f7bc3f4","line":1120,"range":{"start_line":1111,"start_character":0,"end_line":1120,"end_character":19},"in_reply_to":"1a122d0e_44bb6ac4","updated":"2016-05-10 15:48:04.000000000","message":"Will do for the next patch.","commit_id":"985d69fdb2910e47586ddd3d2bd2a32be141d598"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"004336fc82eebd1b589a7aa1ad6ef991401dd8c1","unresolved":false,"context_lines":[{"line_number":1108,"context_line":"#disk_formats \u003d ami,ari,aki,vhd,vmdk,raw,qcow2,vdi,iso"},{"line_number":1109,"context_line":""},{"line_number":1110,"context_line":""},{"line_number":1111,"context_line":"[image_import]"},{"line_number":1112,"context_line":"# Supported container formats for image import (list value)"},{"line_number":1113,"context_line":"#container_formats \u003d ami,ari,aki,bare,ovf,ova,docker"},{"line_number":1114,"context_line":""},{"line_number":1115,"context_line":"# Supported disk formats for image import (list value)"},{"line_number":1116,"context_line":"#disk_formats \u003d ami,ari,aki,vhd,vmdk,raw,qcow2,vdi,iso"},{"line_number":1117,"context_line":""},{"line_number":1118,"context_line":"# Maximum size of image a user can import (in bytes). (integer value)"},{"line_number":1119,"context_line":"# Currently set to 0 since the feature has yet to be fully implemented."},{"line_number":1120,"context_line":"#image_size_cap \u003d 0"},{"line_number":1121,"context_line":""},{"line_number":1122,"context_line":""},{"line_number":1123,"context_line":"[keystone_authtoken]"}],"source_content_type":"text/plain","patch_set":10,"id":"1a122d0e_4da3819e","line":1120,"range":{"start_line":1111,"start_character":0,"end_line":1120,"end_character":19},"in_reply_to":"1a122d0e_9e05cac3","updated":"2016-05-05 13:13:38.000000000","message":"Erno\u0027s question brings up an interesting point.  These were originally named something like import_container_formats, but then we decided it was better to use the shorter name, but in their own group.  We want this to be a different option for all the reasons Stuart outlined above, but is using the same name (albeit in a different group) going to be confusing for operators?","commit_id":"985d69fdb2910e47586ddd3d2bd2a32be141d598"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"806efdfda4b200be4cbae888f8d850c43672b1db","unresolved":false,"context_lines":[{"line_number":1108,"context_line":"#disk_formats \u003d ami,ari,aki,vhd,vmdk,raw,qcow2,vdi,iso"},{"line_number":1109,"context_line":""},{"line_number":1110,"context_line":""},{"line_number":1111,"context_line":"[image_import]"},{"line_number":1112,"context_line":"# Supported container formats for image import (list value)"},{"line_number":1113,"context_line":"#container_formats \u003d ami,ari,aki,bare,ovf,ova,docker"},{"line_number":1114,"context_line":""},{"line_number":1115,"context_line":"# Supported disk formats for image import (list value)"},{"line_number":1116,"context_line":"#disk_formats \u003d ami,ari,aki,vhd,vmdk,raw,qcow2,vdi,iso"},{"line_number":1117,"context_line":""},{"line_number":1118,"context_line":"# Maximum size of image a user can import (in bytes). (integer value)"},{"line_number":1119,"context_line":"# Currently set to 0 since the feature has yet to be fully implemented."},{"line_number":1120,"context_line":"#image_size_cap \u003d 0"},{"line_number":1121,"context_line":""},{"line_number":1122,"context_line":""},{"line_number":1123,"context_line":"[keystone_authtoken]"}],"source_content_type":"text/plain","patch_set":10,"id":"bacf61ea_5bbe7565","line":1120,"range":{"start_line":1111,"start_character":0,"end_line":1120,"end_character":19},"in_reply_to":"bacf61ea_72e9de7e","updated":"2016-08-05 20:22:23.000000000","message":"Thanks for the explicit response and the details Brian.\n\nI was thinking the other way but please correct me if I\u0027m wrong.\n\n1. CONF.image_import.disk_formats (above)\n2. CONF.image_format.disk_formats ( https://github.com/openstack/glance/blob/b9ec22ca012e1bbeadf143c4c82415f940ceb645/glance/api/v2/images.py#L887-L890 )\n\n\nThe reason why I was thinking this should NOT be a disjoint set was the acceptable nature of the end result of the formats that are supported in the cloud. Basically, when I see the config opt above, I assume it is target_disk_format as given in http://specs.openstack.org/openstack/glance-specs/specs/mitaka/approved/image-import/image-import-refactor.html#value-discovery . \n\nIf this config is use for source_disk_formats then I think we do not have an issue.\n\nHowever, if we use it to define the target_disk_format then we result into a situation where an internal endpoint that allows Nova to upload an image using the /file endpoint allowing qcow2 (as Stuart points out in his example) and then operator decides to disallow the target_disk_format \u0027qcow2\u0027 in their publicly exposed endpoint to the user (to be able to import an image \u0027into\u0027 a qcow2 disk format) via. /import endpoint.\n\n\nIn the later case, the GET on  /v2/schemas/image will show inconsistent result. The reason is, target_disk_format never allows the user to keep the image as qcow2 into the cloud but nova has on the other hand allowed qcow2. The snapshots created using nova will have qcow2 value on the image. So, when a user validated their images using the schema (given the schema should reflect list of target_disk_formats in the /v2/schemas/image call) , they will see an image format on the snapshot that\u0027s not listed as acceptable on the image schema. This will break client side validation (say using warlock or similar tools).\n\n\n---\n\nOr may be, I interpreted this config option incorrectly as being a list of target_image_formats whereas the intent is to describe the source_disk_formats ?\n\nEither way, this needs correction: \n\n* in the first case addition of an explicit config option called source_disk_format and help text explaining what ie means to the operators. removing this value for target_disk_formats.\n* and in the second case, renaming this to source_disk_formats and adding explanation to existing config option that it is same as target_disk_formats.","commit_id":"985d69fdb2910e47586ddd3d2bd2a32be141d598"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"09babd220a54fe69dbe362ef20c413528aabe3c3","unresolved":false,"context_lines":[{"line_number":1108,"context_line":"#disk_formats \u003d ami,ari,aki,vhd,vmdk,raw,qcow2,vdi,iso"},{"line_number":1109,"context_line":""},{"line_number":1110,"context_line":""},{"line_number":1111,"context_line":"[image_import]"},{"line_number":1112,"context_line":"# Supported container formats for image import (list value)"},{"line_number":1113,"context_line":"#container_formats \u003d ami,ari,aki,bare,ovf,ova,docker"},{"line_number":1114,"context_line":""},{"line_number":1115,"context_line":"# Supported disk formats for image import (list value)"},{"line_number":1116,"context_line":"#disk_formats \u003d ami,ari,aki,vhd,vmdk,raw,qcow2,vdi,iso"},{"line_number":1117,"context_line":""},{"line_number":1118,"context_line":"# Maximum size of image a user can import (in bytes). (integer value)"},{"line_number":1119,"context_line":"# Currently set to 0 since the feature has yet to be fully implemented."},{"line_number":1120,"context_line":"#image_size_cap \u003d 0"},{"line_number":1121,"context_line":""},{"line_number":1122,"context_line":""},{"line_number":1123,"context_line":"[keystone_authtoken]"}],"source_content_type":"text/plain","patch_set":10,"id":"bacf61ea_72e9de7e","line":1120,"range":{"start_line":1111,"start_character":0,"end_line":1120,"end_character":19},"in_reply_to":"bacf61ea_e05a8682","updated":"2016-08-05 19:44:56.000000000","message":"@Nikhil - could you explain this some more? I\u0027m not sure I understand.\n\nOn the one hand, we have the GET /v2/schemas/image response that populates the allowed container and disk formats from the \"regular\" container_formats and disk_formats config values.  They basically tell a user what values an end user can use to PATCH an image\u0027s container_format or disk_format (same for an operator).  But they don\u0027t tell you what will happen if, for example, you update a VHD with disk_format \u003d\u003d \u0027vmdk\u0027 or something.\n\nThe formats here appear will appear in the \"value discovery\" response and also in the GET /v2/schemas/import response.  Thus I think they could present a disjoint set of container_format, disk_format values without interfering with the image-schema response.  So, for example, an operator might set these (the [image_import] options) to container_format\u003dbare and disk_format\u003draw, even though when the image is stored, it will be as container_format\u003dova and disk_format\u003dvhd.\n\nActually, now I understand your point, which is (assuming the situation I just described):\n\nimage-schema: only ova, vhd allowed\nimport-schema: only bare, raw allowed\n\nThus when an end-user creates an image, they can\u0027t put bare, raw for container_format, disk_format even though that\u0027s what they\u0027ve got.\n\nBut, this is good, because the image record should describe what\u0027s actually stored, not what\u0027s submitted to the import process.  The import spec says that when an end-user creates the image record, they should leave these blank, or, if they are filled in, they will be overwritten by the import process.\n\nSo I think this is OK?  In order for the discovery call to be useful, it needs to tell the end-user what formats the import process will accept.  Basically, an end-user should know what he\u0027s trying to import, and be able to predict, based on the discovery response, whether what\u0027s submitted will be accepted or not.","commit_id":"985d69fdb2910e47586ddd3d2bd2a32be141d598"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"b891b9acd150680fa4ebb09b9da4cc036a05dec7","unresolved":false,"context_lines":[{"line_number":1108,"context_line":"#disk_formats \u003d ami,ari,aki,vhd,vmdk,raw,qcow2,vdi,iso"},{"line_number":1109,"context_line":""},{"line_number":1110,"context_line":""},{"line_number":1111,"context_line":"[image_import]"},{"line_number":1112,"context_line":"# Supported container formats for image import (list value)"},{"line_number":1113,"context_line":"#container_formats \u003d ami,ari,aki,bare,ovf,ova,docker"},{"line_number":1114,"context_line":""},{"line_number":1115,"context_line":"# Supported disk formats for image import (list value)"},{"line_number":1116,"context_line":"#disk_formats \u003d ami,ari,aki,vhd,vmdk,raw,qcow2,vdi,iso"},{"line_number":1117,"context_line":""},{"line_number":1118,"context_line":"# Maximum size of image a user can import (in bytes). (integer value)"},{"line_number":1119,"context_line":"# Currently set to 0 since the feature has yet to be fully implemented."},{"line_number":1120,"context_line":"#image_size_cap \u003d 0"},{"line_number":1121,"context_line":""},{"line_number":1122,"context_line":""},{"line_number":1123,"context_line":"[keystone_authtoken]"}],"source_content_type":"text/plain","patch_set":10,"id":"bacf61ea_e05a8682","line":1120,"range":{"start_line":1111,"start_character":0,"end_line":1120,"end_character":19},"in_reply_to":"dab17558_8f7bc3f4","updated":"2016-08-04 01:43:35.000000000","message":"This looks like a bigger issue to me.\n\nThe GET schema call that returns the images schema returns the disk and container formats based on the config value. While nova based /file endpoint values won\u0027t be returned, this needs to be well documented for operators to expose to end users.\n\nThis also entails that the image formats claimed to work in a particular clouds in the images schema is not holistic and if qcow2 isn\u0027t allowed using /stage and appears in on the image using /file , the GET schema will be wrong.\n\nI think as far as Glance is concerned, we should keep this simplistic and allow only on config that describes the list of formats accepted in the cloud. If an operator decides to not support a particular using the /stage , they may choose to provide a better message at the /import call level.","commit_id":"985d69fdb2910e47586ddd3d2bd2a32be141d598"}],"glance/api/v2/info.py":[{"author":{"_account_id":17116,"name":"Niall Bunting","email":"niall.bunting@hpe.com","username":"NiallBunting"},"change_message_id":"e603a05f67fecd978378950063364551d086b9c0","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        import_methods \u003d {"},{"line_number":45,"context_line":"            \u0027description\u0027: \u0027Import methods available at this site.\u0027,"},{"line_number":46,"context_line":"            \u0027type\u0027: \u0027array\u0027,"},{"line_number":47,"context_line":"            \u0027value\u0027: [\u0027glance-direct\u0027]  # XXX: Un-hardcode this"},{"line_number":48,"context_line":"        }"},{"line_number":49,"context_line":"        import_schema_location \u003d {"},{"line_number":50,"context_line":"            \u0027description\u0027: \u0027Location of the JSON schema for the image import \u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"3afc51ec_499716ec","line":47,"range":{"start_line":47,"start_character":40,"end_line":47,"end_character":46},"updated":"2016-03-15 11:05:03.000000000","message":"The usual way to do this is: \u0027# TODO(name):\u0027","commit_id":"25658def2de934d8309e229fd5964559a9a91763"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"3cd4ac884e2b2dd0fab02b39877fd5c930ea6498","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        import_methods \u003d {"},{"line_number":45,"context_line":"            \u0027description\u0027: \u0027Import methods available at this site.\u0027,"},{"line_number":46,"context_line":"            \u0027type\u0027: \u0027array\u0027,"},{"line_number":47,"context_line":"            \u0027value\u0027: [\u0027glance-direct\u0027]  # XXX: Un-hardcode this"},{"line_number":48,"context_line":"        }"},{"line_number":49,"context_line":"        import_schema_location \u003d {"},{"line_number":50,"context_line":"            \u0027description\u0027: \u0027Location of the JSON schema for the image import \u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"1af94dfe_aee57aa9","line":47,"range":{"start_line":47,"start_character":40,"end_line":47,"end_character":46},"in_reply_to":"3afc51ec_499716ec","updated":"2016-03-15 15:23:27.000000000","message":"Done","commit_id":"25658def2de934d8309e229fd5964559a9a91763"},{"author":{"_account_id":17116,"name":"Niall Bunting","email":"niall.bunting@hpe.com","username":"NiallBunting"},"change_message_id":"e603a05f67fecd978378950063364551d086b9c0","unresolved":false,"context_lines":[{"line_number":63,"context_line":"            \u0027source_disk_format\u0027: source_disk_format,"},{"line_number":64,"context_line":"            \u0027target_container_format\u0027: source_container_format,"},{"line_number":65,"context_line":"            \u0027target_disk_format\u0027: source_disk_format,"},{"line_number":66,"context_line":"            \u0027os-type\u0027: {},  # XXX"},{"line_number":67,"context_line":"            \u0027import-schema-location\u0027: import_schema_location,"},{"line_number":68,"context_line":"            \u0027import-methods\u0027: import_methods,"},{"line_number":69,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":3,"id":"3afc51ec_2c96183f","line":66,"range":{"start_line":66,"start_character":13,"end_line":66,"end_character":20},"updated":"2016-03-15 11:05:03.000000000","message":"According to the spec, this is os_type.","commit_id":"25658def2de934d8309e229fd5964559a9a91763"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"3cd4ac884e2b2dd0fab02b39877fd5c930ea6498","unresolved":false,"context_lines":[{"line_number":63,"context_line":"            \u0027source_disk_format\u0027: source_disk_format,"},{"line_number":64,"context_line":"            \u0027target_container_format\u0027: source_container_format,"},{"line_number":65,"context_line":"            \u0027target_disk_format\u0027: source_disk_format,"},{"line_number":66,"context_line":"            \u0027os-type\u0027: {},  # XXX"},{"line_number":67,"context_line":"            \u0027import-schema-location\u0027: import_schema_location,"},{"line_number":68,"context_line":"            \u0027import-methods\u0027: import_methods,"},{"line_number":69,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":3,"id":"1af94dfe_eeedc28f","line":66,"range":{"start_line":66,"start_character":13,"end_line":66,"end_character":20},"in_reply_to":"3afc51ec_2c96183f","updated":"2016-03-15 15:23:27.000000000","message":"Done","commit_id":"25658def2de934d8309e229fd5964559a9a91763"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"1b933aee1371ba2c117ec7fedafbc3e001e716b1","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        import_methods \u003d {"},{"line_number":45,"context_line":"            \u0027description\u0027: \u0027Import methods available at this site.\u0027,"},{"line_number":46,"context_line":"            \u0027type\u0027: \u0027array\u0027,"},{"line_number":47,"context_line":"            \u0027value\u0027: [\u0027glance-direct\u0027]  # TODO(cyril): Un-hardcode this"},{"line_number":48,"context_line":"        }"},{"line_number":49,"context_line":"        import_schema_location \u003d {"},{"line_number":50,"context_line":"            \u0027description\u0027: \u0027Location of the JSON schema for the image import \u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"1af94dfe_29e7a4e5","line":47,"range":{"start_line":47,"start_character":42,"end_line":47,"end_character":46},"updated":"2016-03-15 15:29:41.000000000","message":"This should be fixed by https://review.openstack.org/#/c/267209/","commit_id":"537d203561da9d391b239618b27a8e3c7116c0f9"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"8d3e4cff474babb25f84d48a707d6982f7fa4219","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class InfoController(object):"},{"line_number":25,"context_line":"    def import_info(self, req):"},{"line_number":26,"context_line":"        max_upload_bytes \u003d {"},{"line_number":27,"context_line":"            \u0027description\u0027: \u0027You may not upload more than this number of bytes \u0027"},{"line_number":28,"context_line":"                           \u0027when importing a virtual disk.\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa0719c6_cf7eecad","line":25,"range":{"start_line":25,"start_character":8,"end_line":25,"end_character":19},"updated":"2016-03-21 11:30:12.000000000","message":"I prefer the function name be \"get\" simply.","commit_id":"70708958b7da6b1e8420c5834a8dfb49ffd3b4b9"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"b34f7df82213427ebb975c1b626c7186de47eb6f","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class InfoController(object):"},{"line_number":25,"context_line":"    def import_info(self, req):"},{"line_number":26,"context_line":"        max_upload_bytes \u003d {"},{"line_number":27,"context_line":"            \u0027description\u0027: \u0027You may not upload more than this number of bytes \u0027"},{"line_number":28,"context_line":"                           \u0027when importing a virtual disk.\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa0719c6_18ff4135","line":25,"range":{"start_line":25,"start_character":8,"end_line":25,"end_character":19},"in_reply_to":"fa0719c6_cf7eecad","updated":"2016-03-22 16:36:22.000000000","message":"Done","commit_id":"70708958b7da6b1e8420c5834a8dfb49ffd3b4b9"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"770bc1e56a772d32010bf71a562813299f9f6a41","unresolved":false,"context_lines":[{"line_number":27,"context_line":"            \u0027description\u0027: \u0027You may not upload more than this number of bytes \u0027"},{"line_number":28,"context_line":"                           \u0027when importing a virtual disk.\u0027,"},{"line_number":29,"context_line":"            \u0027type\u0027: \u0027integer\u0027,"},{"line_number":30,"context_line":"            \u0027value\u0027: CONF.image_size_cap"},{"line_number":31,"context_line":"        }"},{"line_number":32,"context_line":"        source_container_format \u003d {"},{"line_number":33,"context_line":"            \u0027description\u0027: \u0027Your image data must be in one of these container \u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"da0c15f0_e9fe336a","line":30,"updated":"2016-03-25 16:36:00.000000000","message":"I think we need a new config option for this, since image_size_cap is the max image size allowed using the \"old\" upload workflow (which we\u0027ll recommend only be exposed to admins/trusted users).  It\u0027s likely that deployers will want to set the max size of an imported image to a smaller value.","commit_id":"aeb50978579a3a6884710c619601696dc95ceeff"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"2f9ffbfcce55dd112bdc08f00b1e94de18d65661","unresolved":false,"context_lines":[{"line_number":27,"context_line":"            \u0027description\u0027: \u0027You may not upload more than this number of bytes \u0027"},{"line_number":28,"context_line":"                           \u0027when importing a virtual disk.\u0027,"},{"line_number":29,"context_line":"            \u0027type\u0027: \u0027integer\u0027,"},{"line_number":30,"context_line":"            \u0027value\u0027: CONF.image_size_cap"},{"line_number":31,"context_line":"        }"},{"line_number":32,"context_line":"        source_container_format \u003d {"},{"line_number":33,"context_line":"            \u0027description\u0027: \u0027Your image data must be in one of these container \u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a122d0e_767817c5","line":30,"in_reply_to":"1a122d0e_0e3751b1","updated":"2016-04-18 16:10:31.000000000","message":"I don\u0027t think this is one we can put off.  The default image_size_cap is 1TB, and actually some clouds have to allow greater than that (it has to be at least as big as the system disk of your largest flavor in order for the nova image-create server action (i.e., \"snapshot\") to succeed).  There\u0027s no way we want Glance trying to handle uploads that big over the public internet.","commit_id":"aeb50978579a3a6884710c619601696dc95ceeff"},{"author":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"change_message_id":"9b274a7c174ea68efdb03540a2e5932f6c0362da","unresolved":false,"context_lines":[{"line_number":27,"context_line":"            \u0027description\u0027: \u0027You may not upload more than this number of bytes \u0027"},{"line_number":28,"context_line":"                           \u0027when importing a virtual disk.\u0027,"},{"line_number":29,"context_line":"            \u0027type\u0027: \u0027integer\u0027,"},{"line_number":30,"context_line":"            \u0027value\u0027: CONF.image_size_cap"},{"line_number":31,"context_line":"        }"},{"line_number":32,"context_line":"        source_container_format \u003d {"},{"line_number":33,"context_line":"            \u0027description\u0027: \u0027Your image data must be in one of these container \u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a122d0e_a5ba7321","line":30,"in_reply_to":"1a122d0e_767817c5","updated":"2016-04-18 17:34:14.000000000","message":"\u003e There\u0027s no way we want Glance trying to handle uploads that big over the public internet.\n\nIndeed, that would probably break the internet :-)\n\nReally what I\u0027m saying is we should do what we can to land patches, and we can have another patch which introduces the \u0027decouple image_size_cap from image_import_cap\u0027 functionality. They don\u0027t need to exist in the same patch set.\n\nIn terms of tactics, it\u0027s easier to review several small patches than one large one.","commit_id":"aeb50978579a3a6884710c619601696dc95ceeff"},{"author":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"change_message_id":"87af913c97050cde660c0438fabc3cf71b8fef22","unresolved":false,"context_lines":[{"line_number":27,"context_line":"            \u0027description\u0027: \u0027You may not upload more than this number of bytes \u0027"},{"line_number":28,"context_line":"                           \u0027when importing a virtual disk.\u0027,"},{"line_number":29,"context_line":"            \u0027type\u0027: \u0027integer\u0027,"},{"line_number":30,"context_line":"            \u0027value\u0027: CONF.image_size_cap"},{"line_number":31,"context_line":"        }"},{"line_number":32,"context_line":"        source_container_format \u003d {"},{"line_number":33,"context_line":"            \u0027description\u0027: \u0027Your image data must be in one of these container \u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a122d0e_bba450b9","line":30,"in_reply_to":"1a122d0e_a5ba7321","updated":"2016-04-18 17:56:40.000000000","message":"Maybe setting to \u00270\u0027 or blank initially is a better way to track what hasn\u0027t been implemented yet?","commit_id":"aeb50978579a3a6884710c619601696dc95ceeff"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"66a98a9b554f198ec491957dbb726cd533bd3938","unresolved":false,"context_lines":[{"line_number":27,"context_line":"            \u0027description\u0027: \u0027You may not upload more than this number of bytes \u0027"},{"line_number":28,"context_line":"                           \u0027when importing a virtual disk.\u0027,"},{"line_number":29,"context_line":"            \u0027type\u0027: \u0027integer\u0027,"},{"line_number":30,"context_line":"            \u0027value\u0027: CONF.image_size_cap"},{"line_number":31,"context_line":"        }"},{"line_number":32,"context_line":"        source_container_format \u003d {"},{"line_number":33,"context_line":"            \u0027description\u0027: \u0027Your image data must be in one of these container \u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a122d0e_2280ebbf","line":30,"in_reply_to":"1a122d0e_bba450b9","updated":"2016-04-19 15:31:56.000000000","message":"Done","commit_id":"aeb50978579a3a6884710c619601696dc95ceeff"},{"author":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"change_message_id":"2bdab181bc078e3e580c923301e40ae8e7e246df","unresolved":false,"context_lines":[{"line_number":27,"context_line":"            \u0027description\u0027: \u0027You may not upload more than this number of bytes \u0027"},{"line_number":28,"context_line":"                           \u0027when importing a virtual disk.\u0027,"},{"line_number":29,"context_line":"            \u0027type\u0027: \u0027integer\u0027,"},{"line_number":30,"context_line":"            \u0027value\u0027: CONF.image_size_cap"},{"line_number":31,"context_line":"        }"},{"line_number":32,"context_line":"        source_container_format \u003d {"},{"line_number":33,"context_line":"            \u0027description\u0027: \u0027Your image data must be in one of these container \u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a122d0e_0e3751b1","line":30,"in_reply_to":"da0c15f0_e9fe336a","updated":"2016-04-15 15:48:52.000000000","message":"For simplicity, having this be the same value initially seems reasonable. I\u0027m inclined to get a basic implementation first, then add \u0027nice to have\u0027 features afterwards. To me this feels like a \u0027nice to have\u0027 rather than absolutely needed.\nThe other places below where they are suggested to be split I\u0027m also inclined to reuse what we have for the initial implementation.","commit_id":"aeb50978579a3a6884710c619601696dc95ceeff"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"770bc1e56a772d32010bf71a562813299f9f6a41","unresolved":false,"context_lines":[{"line_number":33,"context_line":"            \u0027description\u0027: \u0027Your image data must be in one of these container \u0027"},{"line_number":34,"context_line":"                           \u0027formats.\u0027,"},{"line_number":35,"context_line":"            \u0027type\u0027: \u0027array\u0027,"},{"line_number":36,"context_line":"            \u0027value\u0027: CONF.image_format.container_formats"},{"line_number":37,"context_line":"        }"},{"line_number":38,"context_line":"        source_disk_format \u003d {"},{"line_number":39,"context_line":"            \u0027description\u0027: \u0027Your image data must be in one of these disk \u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"da0c15f0_692183fb","line":36,"range":{"start_line":36,"start_character":26,"end_line":36,"end_character":56},"updated":"2016-03-25 16:36:00.000000000","message":"This also requires a new config option.  This is the list of container_formats in use in this cloud; the formats accepted for import may be different.  (Most likely a subset, but could be disjoint, I guess, so best not to rely on being a subset.)","commit_id":"aeb50978579a3a6884710c619601696dc95ceeff"},{"author":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"change_message_id":"9b274a7c174ea68efdb03540a2e5932f6c0362da","unresolved":false,"context_lines":[{"line_number":33,"context_line":"            \u0027description\u0027: \u0027Your image data must be in one of these container \u0027"},{"line_number":34,"context_line":"                           \u0027formats.\u0027,"},{"line_number":35,"context_line":"            \u0027type\u0027: \u0027array\u0027,"},{"line_number":36,"context_line":"            \u0027value\u0027: CONF.image_format.container_formats"},{"line_number":37,"context_line":"        }"},{"line_number":38,"context_line":"        source_disk_format \u003d {"},{"line_number":39,"context_line":"            \u0027description\u0027: \u0027Your image data must be in one of these disk \u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a122d0e_40ab8dd6","line":36,"range":{"start_line":36,"start_character":26,"end_line":36,"end_character":56},"in_reply_to":"1a122d0e_39421011","updated":"2016-04-18 17:34:14.000000000","message":"If I remove \u0027bare\u0027 from container_formats I can\u0027t upload an image with that container_format:\n\n glance image-create --file /etc/fstab --container-format bare --disk-format raw \n Unable to set \u0027container_format\u0027 to \u0027bare\u0027. Reason: u\u0027bare\u0027 is not one of [None,  u\u0027ami\u0027, u\u0027ari\u0027, u\u0027aki\u0027, u\u0027ovf\u0027, u\u0027ova\u0027, u\u0027docker\u0027]\n\n Failed validating u\u0027enum\u0027 in schema[u\u0027properties\u0027][u\u0027container_format\u0027]:\n    {u\u0027description\u0027: u\u0027Format of the container\u0027,\n     u\u0027enum\u0027: [None, u\u0027ami\u0027, u\u0027ari\u0027, u\u0027aki\u0027, u\u0027ovf\u0027, u\u0027ova\u0027, u\u0027docker\u0027],\n     u\u0027type\u0027: [u\u0027null\u0027, u\u0027string\u0027]}\n\n On instance[u\u0027container_format\u0027]:\n    u\u0027bare\u0027\n\nso CONF.image_format.container_formats both informs you what you can upload to /file and enforces those restrictions.\n\nSimilar to the image_size_cap I\u0027d be happy to see us tackle the decoupling of the allowed \u0027upload\u0027 formats and the allowed \u0027import\u0027 formats in a separate, specific follow on patch later (once we have some of the data flow stuff implemented). It might actually get tricky. (It\u0027s good to have brought it up, but let\u0027s not block on it.)","commit_id":"aeb50978579a3a6884710c619601696dc95ceeff"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"c3bccb54160bbce6c9bec20dff2d39404d133227","unresolved":false,"context_lines":[{"line_number":33,"context_line":"            \u0027description\u0027: \u0027Your image data must be in one of these container \u0027"},{"line_number":34,"context_line":"                           \u0027formats.\u0027,"},{"line_number":35,"context_line":"            \u0027type\u0027: \u0027array\u0027,"},{"line_number":36,"context_line":"            \u0027value\u0027: CONF.image_format.container_formats"},{"line_number":37,"context_line":"        }"},{"line_number":38,"context_line":"        source_disk_format \u003d {"},{"line_number":39,"context_line":"            \u0027description\u0027: \u0027Your image data must be in one of these disk \u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a122d0e_9f2cdf03","line":36,"range":{"start_line":36,"start_character":26,"end_line":36,"end_character":56},"in_reply_to":"1a122d0e_40ab8dd6","updated":"2016-04-18 18:32:43.000000000","message":"I\u0027m only pushing on this because we seem to be thinking about this differently.  You asked for an example of disjoint in-use container formats from allowable-import container formats.  So in-use \u003d {ova} and allowable-import \u003d {bare}.  So an end user imports a bare to /stage (should work, it\u0027s allowed) but PUT of a bare to /file fails (which is OK, the operator is going to package the disk as an ova before actually storing it.  Or am I completely missing your point here?","commit_id":"aeb50978579a3a6884710c619601696dc95ceeff"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"66a98a9b554f198ec491957dbb726cd533bd3938","unresolved":false,"context_lines":[{"line_number":33,"context_line":"            \u0027description\u0027: \u0027Your image data must be in one of these container \u0027"},{"line_number":34,"context_line":"                           \u0027formats.\u0027,"},{"line_number":35,"context_line":"            \u0027type\u0027: \u0027array\u0027,"},{"line_number":36,"context_line":"            \u0027value\u0027: CONF.image_format.container_formats"},{"line_number":37,"context_line":"        }"},{"line_number":38,"context_line":"        source_disk_format \u003d {"},{"line_number":39,"context_line":"            \u0027description\u0027: \u0027Your image data must be in one of these disk \u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a122d0e_8281ffc5","line":36,"range":{"start_line":36,"start_character":26,"end_line":36,"end_character":56},"in_reply_to":"1a122d0e_9f2cdf03","updated":"2016-04-19 15:31:56.000000000","message":"Done","commit_id":"aeb50978579a3a6884710c619601696dc95ceeff"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"2f9ffbfcce55dd112bdc08f00b1e94de18d65661","unresolved":false,"context_lines":[{"line_number":33,"context_line":"            \u0027description\u0027: \u0027Your image data must be in one of these container \u0027"},{"line_number":34,"context_line":"                           \u0027formats.\u0027,"},{"line_number":35,"context_line":"            \u0027type\u0027: \u0027array\u0027,"},{"line_number":36,"context_line":"            \u0027value\u0027: CONF.image_format.container_formats"},{"line_number":37,"context_line":"        }"},{"line_number":38,"context_line":"        source_disk_format \u003d {"},{"line_number":39,"context_line":"            \u0027description\u0027: \u0027Your image data must be in one of these disk \u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a122d0e_39421011","line":36,"range":{"start_line":36,"start_character":26,"end_line":36,"end_character":56},"in_reply_to":"1a122d0e_ae73bd4c","updated":"2016-04-18 16:10:31.000000000","message":"Maybe this will help.\n\n\u003e When is it useful for users to know \u0027the list of container_formats in use in this cloud\u0027?\n\nI\u0027m not sure it is.  My unclearly stated point here is that this thing: \u0027CONF.image_format.container_formats\u0027 represents all the formats in use in this particular cloud; as that\u0027s NOT what we want to list here in the \"discovery\" output, we need a new configuration option to pull the appropriate info from.\n\n\u003e What tells the formats accepted for import into Glance?\n\nThe new configuration option I\u0027m talking about would do that.\n\n\u003e When are these disjoint?\n\nSome large OpenStack public cloud, for example, might accept only source_container_format \u003d\u003d \u0027bare\u0027 but might actually store images as \u0027ova\u0027 (and maybe some other container formats).\n\n\u003e Thanks.\n\nHope this actually clarified things!","commit_id":"aeb50978579a3a6884710c619601696dc95ceeff"},{"author":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"change_message_id":"2bdab181bc078e3e580c923301e40ae8e7e246df","unresolved":false,"context_lines":[{"line_number":33,"context_line":"            \u0027description\u0027: \u0027Your image data must be in one of these container \u0027"},{"line_number":34,"context_line":"                           \u0027formats.\u0027,"},{"line_number":35,"context_line":"            \u0027type\u0027: \u0027array\u0027,"},{"line_number":36,"context_line":"            \u0027value\u0027: CONF.image_format.container_formats"},{"line_number":37,"context_line":"        }"},{"line_number":38,"context_line":"        source_disk_format \u003d {"},{"line_number":39,"context_line":"            \u0027description\u0027: \u0027Your image data must be in one of these disk \u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a122d0e_ae73bd4c","line":36,"range":{"start_line":36,"start_character":26,"end_line":36,"end_character":56},"in_reply_to":"da0c15f0_692183fb","updated":"2016-04-15 15:48:52.000000000","message":"Ok, I\u0027m confused.\n\n\u003e This is the list of container_formats in use in this cloud; the formats accepted for import may be different.\n\nWhen is it useful for users to know \u0027the list of container_formats in use in this cloud\u0027?\n\nWhat tells be the format\u0027s accepted for import into Glance?\nWhen are these disjoint? Thanks.","commit_id":"aeb50978579a3a6884710c619601696dc95ceeff"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"770bc1e56a772d32010bf71a562813299f9f6a41","unresolved":false,"context_lines":[{"line_number":39,"context_line":"            \u0027description\u0027: \u0027Your image data must be in one of these disk \u0027"},{"line_number":40,"context_line":"                           \u0027formats.\u0027,"},{"line_number":41,"context_line":"            \u0027type\u0027: \u0027array\u0027,"},{"line_number":42,"context_line":"            \u0027value\u0027: CONF.image_format.disk_formats"},{"line_number":43,"context_line":"        }"},{"line_number":44,"context_line":"        import_methods \u003d {"},{"line_number":45,"context_line":"            \u0027description\u0027: \u0027Import methods available at this site.\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"da0c15f0_8965f746","line":42,"range":{"start_line":42,"start_character":26,"end_line":42,"end_character":51},"updated":"2016-03-25 16:36:00.000000000","message":"You\u0027ve probably already guessed ... new config option for this!","commit_id":"aeb50978579a3a6884710c619601696dc95ceeff"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"66a98a9b554f198ec491957dbb726cd533bd3938","unresolved":false,"context_lines":[{"line_number":39,"context_line":"            \u0027description\u0027: \u0027Your image data must be in one of these disk \u0027"},{"line_number":40,"context_line":"                           \u0027formats.\u0027,"},{"line_number":41,"context_line":"            \u0027type\u0027: \u0027array\u0027,"},{"line_number":42,"context_line":"            \u0027value\u0027: CONF.image_format.disk_formats"},{"line_number":43,"context_line":"        }"},{"line_number":44,"context_line":"        import_methods \u003d {"},{"line_number":45,"context_line":"            \u0027description\u0027: \u0027Import methods available at this site.\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a122d0e_628663dc","line":42,"range":{"start_line":42,"start_character":26,"end_line":42,"end_character":51},"in_reply_to":"da0c15f0_8965f746","updated":"2016-04-19 15:31:56.000000000","message":"Done","commit_id":"aeb50978579a3a6884710c619601696dc95ceeff"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"770bc1e56a772d32010bf71a562813299f9f6a41","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        import_methods \u003d {"},{"line_number":45,"context_line":"            \u0027description\u0027: \u0027Import methods available at this site.\u0027,"},{"line_number":46,"context_line":"            \u0027type\u0027: \u0027array\u0027,"},{"line_number":47,"context_line":"            \u0027value\u0027: [\u0027glance-direct\u0027]  # TODO(cyril): Un-hardcode this"},{"line_number":48,"context_line":"        }"},{"line_number":49,"context_line":"        import_schema_location \u003d {"},{"line_number":50,"context_line":"            \u0027description\u0027: \u0027Location of the JSON schema for the image import \u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"da0c15f0_c9d6cfc4","line":47,"updated":"2016-03-25 16:36:00.000000000","message":"You can create the config option for this at the same time you do the others.","commit_id":"aeb50978579a3a6884710c619601696dc95ceeff"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"66a98a9b554f198ec491957dbb726cd533bd3938","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        import_methods \u003d {"},{"line_number":45,"context_line":"            \u0027description\u0027: \u0027Import methods available at this site.\u0027,"},{"line_number":46,"context_line":"            \u0027type\u0027: \u0027array\u0027,"},{"line_number":47,"context_line":"            \u0027value\u0027: [\u0027glance-direct\u0027]  # TODO(cyril): Un-hardcode this"},{"line_number":48,"context_line":"        }"},{"line_number":49,"context_line":"        import_schema_location \u003d {"},{"line_number":50,"context_line":"            \u0027description\u0027: \u0027Location of the JSON schema for the image import \u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a122d0e_4262473f","line":47,"in_reply_to":"1a122d0e_6ed885f0","updated":"2016-04-19 15:31:56.000000000","message":"This sounds reasonable to me :)","commit_id":"aeb50978579a3a6884710c619601696dc95ceeff"},{"author":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"change_message_id":"2bdab181bc078e3e580c923301e40ae8e7e246df","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        import_methods \u003d {"},{"line_number":45,"context_line":"            \u0027description\u0027: \u0027Import methods available at this site.\u0027,"},{"line_number":46,"context_line":"            \u0027type\u0027: \u0027array\u0027,"},{"line_number":47,"context_line":"            \u0027value\u0027: [\u0027glance-direct\u0027]  # TODO(cyril): Un-hardcode this"},{"line_number":48,"context_line":"        }"},{"line_number":49,"context_line":"        import_schema_location \u003d {"},{"line_number":50,"context_line":"            \u0027description\u0027: \u0027Location of the JSON schema for the image import \u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a122d0e_6ed885f0","line":47,"in_reply_to":"da0c15f0_c9d6cfc4","updated":"2016-04-15 15:48:52.000000000","message":"I\u0027m actually ok with hardcoding this for a first implementation.","commit_id":"aeb50978579a3a6884710c619601696dc95ceeff"},{"author":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"change_message_id":"2bdab181bc078e3e580c923301e40ae8e7e246df","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        return {"},{"line_number":57,"context_line":"            \u0027max_upload_bytes\u0027: max_upload_bytes,"},{"line_number":58,"context_line":"            \u0027max_virtual_bytes\u0027: {},  # TODO(cyril): Get this value"},{"line_number":59,"context_line":"            \u0027max_upload_time\u0027: {},  # TODO(cyril): Get this value"},{"line_number":60,"context_line":"            \u0027data_TTL_after_import_error\u0027: {},  # TODO(cyril): Get this value"},{"line_number":61,"context_line":"            # source_* and target_* should be different"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a122d0e_8e6d2135","line":58,"range":{"start_line":58,"start_character":13,"end_line":58,"end_character":30},"updated":"2016-04-15 15:48:52.000000000","message":"I\u0027d set this to \u00270\u0027 for the initial implementation. Where 0 implies no maximum.","commit_id":"aeb50978579a3a6884710c619601696dc95ceeff"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"2f9ffbfcce55dd112bdc08f00b1e94de18d65661","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        return {"},{"line_number":57,"context_line":"            \u0027max_upload_bytes\u0027: max_upload_bytes,"},{"line_number":58,"context_line":"            \u0027max_virtual_bytes\u0027: {},  # TODO(cyril): Get this value"},{"line_number":59,"context_line":"            \u0027max_upload_time\u0027: {},  # TODO(cyril): Get this value"},{"line_number":60,"context_line":"            \u0027data_TTL_after_import_error\u0027: {},  # TODO(cyril): Get this value"},{"line_number":61,"context_line":"            # source_* and target_* should be different"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a122d0e_d9cafc19","line":58,"range":{"start_line":58,"start_character":13,"end_line":58,"end_character":30},"in_reply_to":"1a122d0e_8e6d2135","updated":"2016-04-18 16:10:31.000000000","message":"This is a tricky one, because detecting it is going to require introspection, which will depend (most likely) on the operator\u0027s code plugged into taskflow.  Look at this as a point of information being supplied in the \"discovery\" call, not as something glance has to enforce for MVP.\n\nReminder: The motivation for this field is that the feedback we got during discussion of the spec is that for interoperability, you can\u0027t tell people to \"read the docs\"; important information like \"what\u0027s the max virtual size image you\u0027ll allow?\" needs to be discoverable the same way in every OpenStack cloud.  So we are providing that info here.","commit_id":"aeb50978579a3a6884710c619601696dc95ceeff"},{"author":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"change_message_id":"2bdab181bc078e3e580c923301e40ae8e7e246df","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        return {"},{"line_number":57,"context_line":"            \u0027max_upload_bytes\u0027: max_upload_bytes,"},{"line_number":58,"context_line":"            \u0027max_virtual_bytes\u0027: {},  # TODO(cyril): Get this value"},{"line_number":59,"context_line":"            \u0027max_upload_time\u0027: {},  # TODO(cyril): Get this value"},{"line_number":60,"context_line":"            \u0027data_TTL_after_import_error\u0027: {},  # TODO(cyril): Get this value"},{"line_number":61,"context_line":"            # source_* and target_* should be different"},{"line_number":62,"context_line":"            \u0027source_container_format\u0027: source_container_format,"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a122d0e_aeef3daf","line":59,"range":{"start_line":59,"start_character":13,"end_line":59,"end_character":28},"updated":"2016-04-15 15:48:52.000000000","message":"For simplicitly I would set the max_upload_time to \u00270\u0027 initially, where \u00270\u0027 indicates no limit.\n\nWe can add \u0027real\u0027 support for this later.","commit_id":"aeb50978579a3a6884710c619601696dc95ceeff"},{"author":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"change_message_id":"9b274a7c174ea68efdb03540a2e5932f6c0362da","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        return {"},{"line_number":57,"context_line":"            \u0027max_upload_bytes\u0027: max_upload_bytes,"},{"line_number":58,"context_line":"            \u0027max_virtual_bytes\u0027: {},  # TODO(cyril): Get this value"},{"line_number":59,"context_line":"            \u0027max_upload_time\u0027: {},  # TODO(cyril): Get this value"},{"line_number":60,"context_line":"            \u0027data_TTL_after_import_error\u0027: {},  # TODO(cyril): Get this value"},{"line_number":61,"context_line":"            # source_* and target_* should be different"},{"line_number":62,"context_line":"            \u0027source_container_format\u0027: source_container_format,"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a122d0e_60cfa97f","line":59,"range":{"start_line":59,"start_character":13,"end_line":59,"end_character":28},"in_reply_to":"1a122d0e_39b7b087","updated":"2016-04-18 17:34:14.000000000","message":"I think we should introduce the parameter and the code that does something with the parameter in the same patch (later).\n\nIf it is only informational and there is no actual glance code which does anything with it I still think we should put it in a separate patch. We can bikeshed there.\n\nI don\u0027t think we should block this patch on it.","commit_id":"aeb50978579a3a6884710c619601696dc95ceeff"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"66a98a9b554f198ec491957dbb726cd533bd3938","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        return {"},{"line_number":57,"context_line":"            \u0027max_upload_bytes\u0027: max_upload_bytes,"},{"line_number":58,"context_line":"            \u0027max_virtual_bytes\u0027: {},  # TODO(cyril): Get this value"},{"line_number":59,"context_line":"            \u0027max_upload_time\u0027: {},  # TODO(cyril): Get this value"},{"line_number":60,"context_line":"            \u0027data_TTL_after_import_error\u0027: {},  # TODO(cyril): Get this value"},{"line_number":61,"context_line":"            # source_* and target_* should be different"},{"line_number":62,"context_line":"            \u0027source_container_format\u0027: source_container_format,"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a122d0e_851e295d","line":59,"range":{"start_line":59,"start_character":13,"end_line":59,"end_character":28},"in_reply_to":"1a122d0e_60cfa97f","updated":"2016-04-19 15:31:56.000000000","message":"I must say I agree with this :)","commit_id":"aeb50978579a3a6884710c619601696dc95ceeff"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"2f9ffbfcce55dd112bdc08f00b1e94de18d65661","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        return {"},{"line_number":57,"context_line":"            \u0027max_upload_bytes\u0027: max_upload_bytes,"},{"line_number":58,"context_line":"            \u0027max_virtual_bytes\u0027: {},  # TODO(cyril): Get this value"},{"line_number":59,"context_line":"            \u0027max_upload_time\u0027: {},  # TODO(cyril): Get this value"},{"line_number":60,"context_line":"            \u0027data_TTL_after_import_error\u0027: {},  # TODO(cyril): Get this value"},{"line_number":61,"context_line":"            # source_* and target_* should be different"},{"line_number":62,"context_line":"            \u0027source_container_format\u0027: source_container_format,"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a122d0e_39b7b087","line":59,"range":{"start_line":59,"start_character":13,"end_line":59,"end_character":28},"in_reply_to":"1a122d0e_aeef3daf","updated":"2016-04-18 16:10:31.000000000","message":"Well, the problem with \u0027unlimited\u0027 is that is certainly going to be false.  Look at this *not* as a statement that your upload is guaranteed to be cut off at max_upload_time seconds, but as a statement that you shouldn\u0027t try to upload anything that won\u0027t complete before max_upload_time seconds.","commit_id":"aeb50978579a3a6884710c619601696dc95ceeff"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"697a144a075dfbcd0493c62e5140252b7a653a14","unresolved":false,"context_lines":[{"line_number":58,"context_line":"            \u0027max_virtual_bytes\u0027: {},  # TODO(cyril): Get this value"},{"line_number":59,"context_line":"            \u0027max_upload_time\u0027: {},  # TODO(cyril): Get this value"},{"line_number":60,"context_line":"            \u0027data_TTL_after_import_error\u0027: {},  # TODO(cyril): Get this value"},{"line_number":61,"context_line":"            # source_* and target_* should be different"},{"line_number":62,"context_line":"            \u0027source_container_format\u0027: source_container_format,"},{"line_number":63,"context_line":"            \u0027source_disk_format\u0027: source_disk_format,"},{"line_number":64,"context_line":"            \u0027target_container_format\u0027: source_container_format,"}],"source_content_type":"text/x-python","patch_set":6,"id":"da0c15f0_7435e544","line":61,"updated":"2016-03-25 13:59:27.000000000","message":"should this be a `TODO` as well?","commit_id":"aeb50978579a3a6884710c619601696dc95ceeff"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"770bc1e56a772d32010bf71a562813299f9f6a41","unresolved":false,"context_lines":[{"line_number":61,"context_line":"            # source_* and target_* should be different"},{"line_number":62,"context_line":"            \u0027source_container_format\u0027: source_container_format,"},{"line_number":63,"context_line":"            \u0027source_disk_format\u0027: source_disk_format,"},{"line_number":64,"context_line":"            \u0027target_container_format\u0027: source_container_format,"},{"line_number":65,"context_line":"            \u0027target_disk_format\u0027: source_disk_format,"},{"line_number":66,"context_line":"            \u0027os_type\u0027: {},  # TODO(cyril): Get this value"},{"line_number":67,"context_line":"            \u0027import-schema-location\u0027: import_schema_location,"},{"line_number":68,"context_line":"            \u0027import-methods\u0027: import_methods,"}],"source_content_type":"text/x-python","patch_set":6,"id":"da0c15f0_8c798596","line":65,"range":{"start_line":64,"start_character":0,"end_line":65,"end_character":53},"updated":"2016-03-25 16:36:00.000000000","message":"These also need to be new config options, there\u0027s no requirement that the source and target formats be the same.","commit_id":"aeb50978579a3a6884710c619601696dc95ceeff"},{"author":{"_account_id":10035,"name":"greghaynes","email":"greg@greghaynes.net","username":"greghaynes"},"change_message_id":"1e4b8f449c1f07c3c0eb25e91e159ebf71cafba1","unresolved":false,"context_lines":[{"line_number":61,"context_line":"            # source_* and target_* should be different"},{"line_number":62,"context_line":"            \u0027source_container_format\u0027: source_container_format,"},{"line_number":63,"context_line":"            \u0027source_disk_format\u0027: source_disk_format,"},{"line_number":64,"context_line":"            \u0027target_container_format\u0027: source_container_format,"},{"line_number":65,"context_line":"            \u0027target_disk_format\u0027: source_disk_format,"},{"line_number":66,"context_line":"            \u0027os_type\u0027: {},  # TODO(cyril): Get this value"},{"line_number":67,"context_line":"            \u0027import-schema-location\u0027: import_schema_location,"},{"line_number":68,"context_line":"            \u0027import-methods\u0027: import_methods,"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a122d0e_d67e79ad","line":65,"range":{"start_line":64,"start_character":0,"end_line":65,"end_character":53},"in_reply_to":"1a122d0e_2e116dad","updated":"2016-04-16 15:11:47.000000000","message":"I agree on not supporting conversion at the start, but we should make sure this matches the spec (https://specs.openstack.org/openstack/glance-specs/specs/mitaka/approved/image-import/image-import-refactor.html#value-discovery).\n\n\nI am not sure how we can specify these in a way where we indicate \u0027image conversion is not supported\u0027, so it seems like we need to either amend the spec (and remove them) or specify in there that something like a null value indicates no conversion is supported.","commit_id":"aeb50978579a3a6884710c619601696dc95ceeff"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"66a98a9b554f198ec491957dbb726cd533bd3938","unresolved":false,"context_lines":[{"line_number":61,"context_line":"            # source_* and target_* should be different"},{"line_number":62,"context_line":"            \u0027source_container_format\u0027: source_container_format,"},{"line_number":63,"context_line":"            \u0027source_disk_format\u0027: source_disk_format,"},{"line_number":64,"context_line":"            \u0027target_container_format\u0027: source_container_format,"},{"line_number":65,"context_line":"            \u0027target_disk_format\u0027: source_disk_format,"},{"line_number":66,"context_line":"            \u0027os_type\u0027: {},  # TODO(cyril): Get this value"},{"line_number":67,"context_line":"            \u0027import-schema-location\u0027: import_schema_location,"},{"line_number":68,"context_line":"            \u0027import-methods\u0027: import_methods,"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a122d0e_6544ad1a","line":65,"range":{"start_line":64,"start_character":0,"end_line":65,"end_character":53},"in_reply_to":"1a122d0e_4c9f4c50","updated":"2016-04-19 15:31:56.000000000","message":"K, I\u0027m dropping them for now.","commit_id":"aeb50978579a3a6884710c619601696dc95ceeff"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"2f9ffbfcce55dd112bdc08f00b1e94de18d65661","unresolved":false,"context_lines":[{"line_number":61,"context_line":"            # source_* and target_* should be different"},{"line_number":62,"context_line":"            \u0027source_container_format\u0027: source_container_format,"},{"line_number":63,"context_line":"            \u0027source_disk_format\u0027: source_disk_format,"},{"line_number":64,"context_line":"            \u0027target_container_format\u0027: source_container_format,"},{"line_number":65,"context_line":"            \u0027target_disk_format\u0027: source_disk_format,"},{"line_number":66,"context_line":"            \u0027os_type\u0027: {},  # TODO(cyril): Get this value"},{"line_number":67,"context_line":"            \u0027import-schema-location\u0027: import_schema_location,"},{"line_number":68,"context_line":"            \u0027import-methods\u0027: import_methods,"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a122d0e_4c9f4c50","line":65,"range":{"start_line":64,"start_character":0,"end_line":65,"end_character":53},"in_reply_to":"1a122d0e_d67e79ad","updated":"2016-04-18 16:10:31.000000000","message":"What we\u0027re not supporting is on-demand image conversion, where the end-user supplies format X and says \"give me format Y\".  It may be the case that the operator, as part of the import operation, changes the disk_format or container_format of what the end-user supplied.  Thus, the source_* say, \"this is what I will accept\", and the target_* say, \"this is how I store stuff\".  But they don\u0027t indicate that the end-user can specify what will happen in the interval.\n\nWe could drop the target_* for MVP as long as we make it clear that there\u0027s no guarantee that your source_* properties are actually the way the created Image will be stored.  (The target_* were already dropped from the import call by a previous patch.)  That\u0027s probably what we should do, since having them seems to be a point of confusion.","commit_id":"aeb50978579a3a6884710c619601696dc95ceeff"},{"author":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"change_message_id":"2bdab181bc078e3e580c923301e40ae8e7e246df","unresolved":false,"context_lines":[{"line_number":61,"context_line":"            # source_* and target_* should be different"},{"line_number":62,"context_line":"            \u0027source_container_format\u0027: source_container_format,"},{"line_number":63,"context_line":"            \u0027source_disk_format\u0027: source_disk_format,"},{"line_number":64,"context_line":"            \u0027target_container_format\u0027: source_container_format,"},{"line_number":65,"context_line":"            \u0027target_disk_format\u0027: source_disk_format,"},{"line_number":66,"context_line":"            \u0027os_type\u0027: {},  # TODO(cyril): Get this value"},{"line_number":67,"context_line":"            \u0027import-schema-location\u0027: import_schema_location,"},{"line_number":68,"context_line":"            \u0027import-methods\u0027: import_methods,"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a122d0e_2e116dad","line":65,"range":{"start_line":64,"start_character":0,"end_line":65,"end_character":53},"in_reply_to":"da0c15f0_8c798596","updated":"2016-04-15 15:48:52.000000000","message":"For the initial version we will not support conversion.\n\nI\u0027d suggest removing the target_* stuff, at least for the initial implementation.","commit_id":"aeb50978579a3a6884710c619601696dc95ceeff"},{"author":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"change_message_id":"19584e46022de4383394a647ffd6a0162ff38495","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        }"},{"line_number":32,"context_line":"        max_virtual_bytes \u003d {"},{"line_number":33,"context_line":"            \u0027description\u0027: \u0027You may not upload a virtual disk whose virtual \u0027"},{"line_number":34,"context_line":"                           \u0027size exceeds this number of bytes.\u0027,"},{"line_number":35,"context_line":"            \u0027type\u0027: \u0027integer\u0027,"},{"line_number":36,"context_line":"            \u0027value\u0027: 0  # TODO(cyril): Un-hardcode this"},{"line_number":37,"context_line":"        },"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a122d0e_440c0aed","line":34,"range":{"start_line":34,"start_character":56,"end_line":34,"end_character":61},"updated":"2016-04-19 17:30:51.000000000","message":"I think a value of 0 will always mean \u0027no limit\u0027. It may be worth putting that in the help text.","commit_id":"67ed0d34f0b49d469dfac9d86c39d6889864a4ca"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"c1e1bb34fdf8af1a38a4d1cd9da20d5325520018","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        }"},{"line_number":32,"context_line":"        max_virtual_bytes \u003d {"},{"line_number":33,"context_line":"            \u0027description\u0027: \u0027You may not upload a virtual disk whose virtual \u0027"},{"line_number":34,"context_line":"                           \u0027size exceeds this number of bytes.\u0027,"},{"line_number":35,"context_line":"            \u0027type\u0027: \u0027integer\u0027,"},{"line_number":36,"context_line":"            \u0027value\u0027: 0  # TODO(cyril): Un-hardcode this"},{"line_number":37,"context_line":"        },"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a122d0e_7469c1f8","line":34,"range":{"start_line":34,"start_character":56,"end_line":34,"end_character":61},"in_reply_to":"1a122d0e_440c0aed","updated":"2016-04-20 14:27:05.000000000","message":"Done","commit_id":"67ed0d34f0b49d469dfac9d86c39d6889864a4ca"},{"author":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"change_message_id":"19584e46022de4383394a647ffd6a0162ff38495","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                           \u0027data upload.  Expressed in seconds.  (Does not \u0027"},{"line_number":41,"context_line":"                           \u0027apply to the \\\u0027swift-local\\\u0027 import method.)\u0027,"},{"line_number":42,"context_line":"            \u0027type\u0027: \u0027integer\u0027,"},{"line_number":43,"context_line":"            \u0027value\u0027: 0  # TODO(cyril): Un-hardcode this"},{"line_number":44,"context_line":"        },"},{"line_number":45,"context_line":"        source_container_format \u003d {"},{"line_number":46,"context_line":"            \u0027description\u0027: \u0027Your image data must be in one of these container \u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a122d0e_c4f81ac6","line":43,"range":{"start_line":43,"start_character":21,"end_line":43,"end_character":22},"updated":"2016-04-19 17:30:51.000000000","message":"ditto","commit_id":"67ed0d34f0b49d469dfac9d86c39d6889864a4ca"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"c1e1bb34fdf8af1a38a4d1cd9da20d5325520018","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                           \u0027data upload.  Expressed in seconds.  (Does not \u0027"},{"line_number":41,"context_line":"                           \u0027apply to the \\\u0027swift-local\\\u0027 import method.)\u0027,"},{"line_number":42,"context_line":"            \u0027type\u0027: \u0027integer\u0027,"},{"line_number":43,"context_line":"            \u0027value\u0027: 0  # TODO(cyril): Un-hardcode this"},{"line_number":44,"context_line":"        },"},{"line_number":45,"context_line":"        source_container_format \u003d {"},{"line_number":46,"context_line":"            \u0027description\u0027: \u0027Your image data must be in one of these container \u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a122d0e_f40af124","line":43,"range":{"start_line":43,"start_character":21,"end_line":43,"end_character":22},"in_reply_to":"1a122d0e_c4f81ac6","updated":"2016-04-20 14:27:05.000000000","message":"Done","commit_id":"67ed0d34f0b49d469dfac9d86c39d6889864a4ca"},{"author":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"change_message_id":"19584e46022de4383394a647ffd6a0162ff38495","unresolved":false,"context_lines":[{"line_number":41,"context_line":"                           \u0027apply to the \\\u0027swift-local\\\u0027 import method.)\u0027,"},{"line_number":42,"context_line":"            \u0027type\u0027: \u0027integer\u0027,"},{"line_number":43,"context_line":"            \u0027value\u0027: 0  # TODO(cyril): Un-hardcode this"},{"line_number":44,"context_line":"        },"},{"line_number":45,"context_line":"        source_container_format \u003d {"},{"line_number":46,"context_line":"            \u0027description\u0027: \u0027Your image data must be in one of these container \u0027"},{"line_number":47,"context_line":"                           \u0027formats.\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a122d0e_c4c93a5b","line":44,"range":{"start_line":44,"start_character":0,"end_line":44,"end_character":8},"updated":"2016-04-19 17:30:51.000000000","message":"Does any one know what we want the Glance code to eventually do with the max_upload_time parameter? \n\nWill glance always ignore it? Will it stop reading in the image bytes when this time has expired? (I don\u0027t believe that is possible with eventlet.) Will it be like max_upload_bytes where (I presume) the image data will be deleted after the upload completes?\n\nSomething else?\n\n(For the purposes of this patch I\u0027m ok with setting this to zero. But \u0027You only have this much time to complete your data upload\u0027 sounds like we\u0027re telling operators glance will drop incoming connections when we hit the time limit.)","commit_id":"67ed0d34f0b49d469dfac9d86c39d6889864a4ca"},{"author":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"change_message_id":"aa0c5e17308c8ffbc1e40e1c5f3c7bcaba6cdf59","unresolved":false,"context_lines":[{"line_number":41,"context_line":"                           \u0027apply to the \\\u0027swift-local\\\u0027 import method.)\u0027,"},{"line_number":42,"context_line":"            \u0027type\u0027: \u0027integer\u0027,"},{"line_number":43,"context_line":"            \u0027value\u0027: 0  # TODO(cyril): Un-hardcode this"},{"line_number":44,"context_line":"        },"},{"line_number":45,"context_line":"        source_container_format \u003d {"},{"line_number":46,"context_line":"            \u0027description\u0027: \u0027Your image data must be in one of these container \u0027"},{"line_number":47,"context_line":"                           \u0027formats.\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a122d0e_5db2e1e5","line":44,"range":{"start_line":44,"start_character":0,"end_line":44,"end_character":8},"in_reply_to":"1a122d0e_59e5d6a5","updated":"2016-04-20 15:40:43.000000000","message":":-)","commit_id":"67ed0d34f0b49d469dfac9d86c39d6889864a4ca"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"a7a9287923b25639bc254d356aa5d761a55304e8","unresolved":false,"context_lines":[{"line_number":41,"context_line":"                           \u0027apply to the \\\u0027swift-local\\\u0027 import method.)\u0027,"},{"line_number":42,"context_line":"            \u0027type\u0027: \u0027integer\u0027,"},{"line_number":43,"context_line":"            \u0027value\u0027: 0  # TODO(cyril): Un-hardcode this"},{"line_number":44,"context_line":"        },"},{"line_number":45,"context_line":"        source_container_format \u003d {"},{"line_number":46,"context_line":"            \u0027description\u0027: \u0027Your image data must be in one of these container \u0027"},{"line_number":47,"context_line":"                           \u0027formats.\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a122d0e_59e5d6a5","line":44,"range":{"start_line":44,"start_character":0,"end_line":44,"end_character":8},"in_reply_to":"1a122d0e_607aa089","updated":"2016-04-20 15:28:19.000000000","message":"I guess I\u0027m ok with that approach, as long as implementation choices for the /stage don\u0027t leave us snookered in this regard.","commit_id":"67ed0d34f0b49d469dfac9d86c39d6889864a4ca"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"da5d2d0d5fd2ebce650724ac9f4874e3ae9738c1","unresolved":false,"context_lines":[{"line_number":41,"context_line":"                           \u0027apply to the \\\u0027swift-local\\\u0027 import method.)\u0027,"},{"line_number":42,"context_line":"            \u0027type\u0027: \u0027integer\u0027,"},{"line_number":43,"context_line":"            \u0027value\u0027: 0  # TODO(cyril): Un-hardcode this"},{"line_number":44,"context_line":"        },"},{"line_number":45,"context_line":"        source_container_format \u003d {"},{"line_number":46,"context_line":"            \u0027description\u0027: \u0027Your image data must be in one of these container \u0027"},{"line_number":47,"context_line":"                           \u0027formats.\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a122d0e_fafbfd76","line":44,"range":{"start_line":44,"start_character":0,"end_line":44,"end_character":8},"in_reply_to":"1a122d0e_8e6f3d2a","updated":"2016-04-20 13:02:03.000000000","message":"(Sorry about the typo, first paragraph is about max bytes, second is about max time.)\n\nI think we need to protect against both in the Glance code itself, or at the very least in the standard Glance deployment.  As far as how, naively it seems that we do something like this: spawn a thread to receive the upload, monitor it, and kill it if some condition (time, number of bytes uploaded so far) is exceeded using some appropriate exception that the thread is ready to handle gracefully.","commit_id":"67ed0d34f0b49d469dfac9d86c39d6889864a4ca"},{"author":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"change_message_id":"6ff5416824a8b3845f22c76e7c12f3acd6192016","unresolved":false,"context_lines":[{"line_number":41,"context_line":"                           \u0027apply to the \\\u0027swift-local\\\u0027 import method.)\u0027,"},{"line_number":42,"context_line":"            \u0027type\u0027: \u0027integer\u0027,"},{"line_number":43,"context_line":"            \u0027value\u0027: 0  # TODO(cyril): Un-hardcode this"},{"line_number":44,"context_line":"        },"},{"line_number":45,"context_line":"        source_container_format \u003d {"},{"line_number":46,"context_line":"            \u0027description\u0027: \u0027Your image data must be in one of these container \u0027"},{"line_number":47,"context_line":"                           \u0027formats.\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a122d0e_8e6f3d2a","line":44,"range":{"start_line":44,"start_character":0,"end_line":44,"end_character":8},"in_reply_to":"1a122d0e_b005457b","updated":"2016-04-20 09:27:29.000000000","message":"Hi Brian,\n\n\u003e The idea behind max_upload_bytes\n\n(typo? max_upload_bytes-\u003emax_upload_time\u0027)\n\nI understand the \u0027why\u0027 of max_upload_time. (Wouldn\u0027t it be nice to drop connections/return 400 when we hit a time limit.)\n\nWhat I\u0027m not clear on is the \u0027how\u0027. For example, is this something that we intend to happen in the glance code in some way? If so, how? Or is the intention that something outside of glance (eg networking hardware/software rate limiter) will be configured to enforce this? If the latter, then it would be good to clearly communicate to operators that this is advisory only.","commit_id":"67ed0d34f0b49d469dfac9d86c39d6889864a4ca"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"c553478d1cf07d83d7dd65767c33fdb70a5e2e1e","unresolved":false,"context_lines":[{"line_number":41,"context_line":"                           \u0027apply to the \\\u0027swift-local\\\u0027 import method.)\u0027,"},{"line_number":42,"context_line":"            \u0027type\u0027: \u0027integer\u0027,"},{"line_number":43,"context_line":"            \u0027value\u0027: 0  # TODO(cyril): Un-hardcode this"},{"line_number":44,"context_line":"        },"},{"line_number":45,"context_line":"        source_container_format \u003d {"},{"line_number":46,"context_line":"            \u0027description\u0027: \u0027Your image data must be in one of these container \u0027"},{"line_number":47,"context_line":"                           \u0027formats.\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a122d0e_b005457b","line":44,"range":{"start_line":44,"start_character":0,"end_line":44,"end_character":8},"in_reply_to":"1a122d0e_c4c93a5b","updated":"2016-04-20 02:28:47.000000000","message":"With max_upload_bytes, I think we need to close the connection when the value is exceeded (and then delete the data).  We can\u0027t allow the upload to complete first because it could fill all the available space (at which point the connection is going to be closed whether we like it or not).\n\nThe idea behind max_upload_bytes was to prevent a really slow connection from hogging resources.  One of these wouldn\u0027t be a big deal, but if some joker did a large number of concurrent imports, it\u0027s possible that service could be denied to other users.  If we are able to limit the number of PUT /stage a particular user is allowed, that sort of mitigates this attack, as the attacker would have to steal a large number of accounts to make it happen, and if we also limit the number of concurrent PUT /stage across all accounts, then the DOS would only affect image import.\n\nI guess what it comes down to is we need to decide: what are the types of protections that a reasonable operator would expect to be in place if the operator is encouraged to expose this functionality to end-users?  These are all missing from the current image-upload functionality.","commit_id":"67ed0d34f0b49d469dfac9d86c39d6889864a4ca"},{"author":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"change_message_id":"6234458af75d80602a950e126b04aaa8b78bf3b7","unresolved":false,"context_lines":[{"line_number":41,"context_line":"                           \u0027apply to the \\\u0027swift-local\\\u0027 import method.)\u0027,"},{"line_number":42,"context_line":"            \u0027type\u0027: \u0027integer\u0027,"},{"line_number":43,"context_line":"            \u0027value\u0027: 0  # TODO(cyril): Un-hardcode this"},{"line_number":44,"context_line":"        },"},{"line_number":45,"context_line":"        source_container_format \u003d {"},{"line_number":46,"context_line":"            \u0027description\u0027: \u0027Your image data must be in one of these container \u0027"},{"line_number":47,"context_line":"                           \u0027formats.\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a122d0e_607aa089","line":44,"range":{"start_line":44,"start_character":0,"end_line":44,"end_character":8},"in_reply_to":"1a122d0e_fafbfd76","updated":"2016-04-20 13:27:54.000000000","message":"Hi Brian,\n\nOk, that clarifies the intent here somewhat -- thanks.\n\nI\u0027d like to see us avoid blocking on this though.\n\nIn otherwords, not getting bogged down in how we do this before we implement a working /stage API.\n\nI\u0027d see us as implementing that first, and then adding the timeout logic \"later\". ie reach a point where our proverbial physics department can use import, and then bikeshed on the merits of implementing this in glance or elsewhere. Note: there are many non-upload related ways of holding connections open.","commit_id":"67ed0d34f0b49d469dfac9d86c39d6889864a4ca"},{"author":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"change_message_id":"19584e46022de4383394a647ffd6a0162ff38495","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        import_methods \u003d {"},{"line_number":58,"context_line":"            \u0027description\u0027: \u0027Import methods available at this site.\u0027,"},{"line_number":59,"context_line":"            \u0027type\u0027: \u0027array\u0027,"},{"line_number":60,"context_line":"            \u0027value\u0027: [\u0027glance-direct\u0027]  # TODO(cyril): Un-hardcode this"},{"line_number":61,"context_line":"        }"},{"line_number":62,"context_line":"        import_schema_location \u003d {"},{"line_number":63,"context_line":"            \u0027description\u0027: \u0027Location of the JSON schema for the image import \u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a122d0e_efd08f21","line":60,"range":{"start_line":60,"start_character":30,"end_line":60,"end_character":36},"updated":"2016-04-19 17:30:51.000000000","message":"Do folks feel it\u0027s ok to have an v2/info/import resource saying glance-direct is available before the import stuff is implemented?\n\nie v2/info/import\u0027s goal is discoverability; to find out what/how you can import. If I queried this resource and was told glance-direct is supported I\u0027d expect to be able to make a follow up call to upload the bits into Glance, but that\u0027s not the case yet.\n\nShould this be an empty list for now?","commit_id":"67ed0d34f0b49d469dfac9d86c39d6889864a4ca"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"c1e1bb34fdf8af1a38a4d1cd9da20d5325520018","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        import_methods \u003d {"},{"line_number":58,"context_line":"            \u0027description\u0027: \u0027Import methods available at this site.\u0027,"},{"line_number":59,"context_line":"            \u0027type\u0027: \u0027array\u0027,"},{"line_number":60,"context_line":"            \u0027value\u0027: [\u0027glance-direct\u0027]  # TODO(cyril): Un-hardcode this"},{"line_number":61,"context_line":"        }"},{"line_number":62,"context_line":"        import_schema_location \u003d {"},{"line_number":63,"context_line":"            \u0027description\u0027: \u0027Location of the JSON schema for the image import \u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a122d0e_37710b45","line":60,"range":{"start_line":60,"start_character":30,"end_line":60,"end_character":36},"in_reply_to":"1a122d0e_103eb927","updated":"2016-04-20 14:27:05.000000000","message":"Done","commit_id":"67ed0d34f0b49d469dfac9d86c39d6889864a4ca"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"c553478d1cf07d83d7dd65767c33fdb70a5e2e1e","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        import_methods \u003d {"},{"line_number":58,"context_line":"            \u0027description\u0027: \u0027Import methods available at this site.\u0027,"},{"line_number":59,"context_line":"            \u0027type\u0027: \u0027array\u0027,"},{"line_number":60,"context_line":"            \u0027value\u0027: [\u0027glance-direct\u0027]  # TODO(cyril): Un-hardcode this"},{"line_number":61,"context_line":"        }"},{"line_number":62,"context_line":"        import_schema_location \u003d {"},{"line_number":63,"context_line":"            \u0027description\u0027: \u0027Location of the JSON schema for the image import \u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a122d0e_103eb927","line":60,"range":{"start_line":60,"start_character":30,"end_line":60,"end_character":36},"in_reply_to":"1a122d0e_efd08f21","updated":"2016-04-20 02:28:47.000000000","message":"That\u0027s a good point, I\u0027m inclined to agree that an empty list makes sense at this point.","commit_id":"67ed0d34f0b49d469dfac9d86c39d6889864a4ca"},{"author":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"change_message_id":"d76e4741cf3482e9254863018c165e10cb485261","unresolved":false,"context_lines":[{"line_number":75,"context_line":"            \u0027data_TTL_after_import_error\u0027: {},  # TODO(cyril): Get this value"},{"line_number":76,"context_line":"            \u0027source_container_format\u0027: source_container_format,"},{"line_number":77,"context_line":"            \u0027source_disk_format\u0027: source_disk_format,"},{"line_number":78,"context_line":"            # TODO(cyiril): Add target_container_format and target_disk_format"},{"line_number":79,"context_line":"            \u0027os_type\u0027: {},  # TODO(cyril): Get this value"},{"line_number":80,"context_line":"            \u0027import-schema-location\u0027: import_schema_location,"},{"line_number":81,"context_line":"            \u0027import-methods\u0027: import_methods,"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a122d0e_a6d966f5","line":78,"range":{"start_line":78,"start_character":19,"end_line":78,"end_character":25},"updated":"2016-04-20 16:32:11.000000000","message":"typo","commit_id":"f8ce266e586161ae2689713617066c51bf026be0"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"c81b87800625c17fb09b256497696c0f394c4003","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            \u0027value\u0027: CONF.image_import.disk_formats"},{"line_number":58,"context_line":"        }"},{"line_number":59,"context_line":"        import_methods \u003d {"},{"line_number":60,"context_line":"            \u0027description\u0027: \u0027Import methods available at this site.\u0027,"},{"line_number":61,"context_line":"            \u0027type\u0027: \u0027array\u0027,"},{"line_number":62,"context_line":"            \u0027value\u0027: []  # TODO(cyril): Gather the right values"},{"line_number":63,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a122d0e_afa06491","line":60,"updated":"2016-05-05 21:44:01.000000000","message":"I hope I\u0027m not understanding this right.\n\nWhat are we envisioning this array could have? It seems like we\u0027re falling back to the same problem where end users, and application developers are going to have to deal with edge cases here based on what possible values a cloud could have here based on their deployment choices - which is defeating the purpose an API.","commit_id":"985d69fdb2910e47586ddd3d2bd2a32be141d598"},{"author":{"_account_id":7822,"name":"Chris Hoge (not involved in upstream development)","email":"chris@hogepodge.com","username":"hogepodge"},"change_message_id":"2da8046e9994b5ef29ff49d0a18423fa3dc09169","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            \u0027value\u0027: CONF.image_import.disk_formats"},{"line_number":58,"context_line":"        }"},{"line_number":59,"context_line":"        import_methods \u003d {"},{"line_number":60,"context_line":"            \u0027description\u0027: \u0027Import methods available at this site.\u0027,"},{"line_number":61,"context_line":"            \u0027type\u0027: \u0027array\u0027,"},{"line_number":62,"context_line":"            \u0027value\u0027: []  # TODO(cyril): Gather the right values"},{"line_number":63,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":10,"id":"dab17558_7ab98d2e","line":60,"in_reply_to":"1a122d0e_afa06491","updated":"2016-05-05 21:53:56.000000000","message":"It would be nice if the import methods were clearly defined and restricted. If it\u0027s any old thing that a deployer hacks up we\u0027re back to the exact same problem of the task api, non-discoverable and deployer-determined methods. This should be restricted to the one or two import methods described in the blueprint, and those methods need to be implemented.","commit_id":"985d69fdb2910e47586ddd3d2bd2a32be141d598"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"fa37778b1609ae902322e03a9f3151824fe5d68c","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            \u0027value\u0027: CONF.image_import.disk_formats"},{"line_number":58,"context_line":"        }"},{"line_number":59,"context_line":"        import_methods \u003d {"},{"line_number":60,"context_line":"            \u0027description\u0027: \u0027Import methods available at this site.\u0027,"},{"line_number":61,"context_line":"            \u0027type\u0027: \u0027array\u0027,"},{"line_number":62,"context_line":"            \u0027value\u0027: []  # TODO(cyril): Gather the right values"},{"line_number":63,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":10,"id":"dab17558_d56dba05","line":60,"in_reply_to":"dab17558_05e8b90f","updated":"2016-05-06 22:53:39.000000000","message":"I do not mind keeping this patch having a Depends-On for the glance-direct call. We need to time these two to land at the same time.","commit_id":"985d69fdb2910e47586ddd3d2bd2a32be141d598"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"ef7c06d3597c445efdbe8d27b205c3978e58c371","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            \u0027value\u0027: CONF.image_import.disk_formats"},{"line_number":58,"context_line":"        }"},{"line_number":59,"context_line":"        import_methods \u003d {"},{"line_number":60,"context_line":"            \u0027description\u0027: \u0027Import methods available at this site.\u0027,"},{"line_number":61,"context_line":"            \u0027type\u0027: \u0027array\u0027,"},{"line_number":62,"context_line":"            \u0027value\u0027: []  # TODO(cyril): Gather the right values"},{"line_number":63,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":10,"id":"dab17558_6e310b5a","line":60,"in_reply_to":"dab17558_0fb2334c","updated":"2016-05-11 08:21:36.000000000","message":"I guess this : https://review.openstack.org/#/c/312653/2","commit_id":"985d69fdb2910e47586ddd3d2bd2a32be141d598"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"7a1b2e9606b52d15327fe4bc7a84bdfca2a86a83","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            \u0027value\u0027: CONF.image_import.disk_formats"},{"line_number":58,"context_line":"        }"},{"line_number":59,"context_line":"        import_methods \u003d {"},{"line_number":60,"context_line":"            \u0027description\u0027: \u0027Import methods available at this site.\u0027,"},{"line_number":61,"context_line":"            \u0027type\u0027: \u0027array\u0027,"},{"line_number":62,"context_line":"            \u0027value\u0027: []  # TODO(cyril): Gather the right values"},{"line_number":63,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":10,"id":"dab17558_7200ad34","line":60,"in_reply_to":"dab17558_52c929ab","updated":"2016-05-11 19:04:39.000000000","message":"@Doug,\n\nI would be 100% in support of that. If there is \"pluggable\" bits for \"other things\" I want to see a well defined interface so there isn\u0027t magic \"oh and this method needs arg X\" but \"other method needs arg Y\".\n\nMy concern/confusion is this looks like it is not going towards \"2 methods\" but \"2 methods and pluggable for anything else\"","commit_id":"985d69fdb2910e47586ddd3d2bd2a32be141d598"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"539ee93d2e3af5d109a3ec4bb04d6e9317cce732","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            \u0027value\u0027: CONF.image_import.disk_formats"},{"line_number":58,"context_line":"        }"},{"line_number":59,"context_line":"        import_methods \u003d {"},{"line_number":60,"context_line":"            \u0027description\u0027: \u0027Import methods available at this site.\u0027,"},{"line_number":61,"context_line":"            \u0027type\u0027: \u0027array\u0027,"},{"line_number":62,"context_line":"            \u0027value\u0027: []  # TODO(cyril): Gather the right values"},{"line_number":63,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":10,"id":"dab17558_8c65f6e2","line":60,"in_reply_to":"dab17558_53a0e690","updated":"2016-05-06 16:58:10.000000000","message":"What Stuart said.\n\nThis is all discussed in the spec (which is one reason it\u0027s so long!).  You can read this part for a quick summary:\n\nhttp://specs.openstack.org/openstack/glance-specs/specs/mitaka/approved/image-import/image-import-refactor.html#summary-of-the-constraints-around-this-project","commit_id":"985d69fdb2910e47586ddd3d2bd2a32be141d598"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"10f33e43f0a5139b3a72c79cbb56809f4b6fb20b","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            \u0027value\u0027: CONF.image_import.disk_formats"},{"line_number":58,"context_line":"        }"},{"line_number":59,"context_line":"        import_methods \u003d {"},{"line_number":60,"context_line":"            \u0027description\u0027: \u0027Import methods available at this site.\u0027,"},{"line_number":61,"context_line":"            \u0027type\u0027: \u0027array\u0027,"},{"line_number":62,"context_line":"            \u0027value\u0027: []  # TODO(cyril): Gather the right values"},{"line_number":63,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":10,"id":"bab6814e_5e531d17","line":60,"in_reply_to":"dab17558_5d9931c3","updated":"2016-05-21 14:23:52.000000000","message":"tl;dr: with a little help, I think we can make this look almost like a v1 import to the user, and even do some basic failure cleanup.\n\n\nThere may be some additional import_method-specific attributes required (such as scope of network access of indirect import) that should also be defined rather than be an arbitrary dict.\n\n-----\nDoug: But there would be no way for deployers to add other methods so clients would only have to deal with the 2 methods. Is that still the plan?\n\ndt: That is my plan, the user sees two variants, where \u0027swift-local\u0027 is a special-case of indirect (\u0027copy-from\u0027).  Signalling the available scope of indirect is the point of the above comment.  I really want OSC to only have two choices: --filename|--location for the user to specify the source of the bits to be imported.  (yeah, there may be additional blanks to fill in, but those two will be the switch).  And if I cared to parse URIs, supporting file:// would work too, but that\u0027s not quite as user-friendly.\n\n-----\nMorgan: My concern/confusion is this looks like it is not going towards \"2 methods\" but \"2 methods and pluggable for anything else\"\n\ndt: I want that to be phrased \"2 methods where one (indirect) may have vendor-specific characteristics\" if there must be value-add options here.   Indirect can be a single method (from the user POV) if all of the desired \"plugging\" is handled in the URI: swift://, vmware://, https://, gopher://, etc  After all, that\u0027s why URIs have schemes...and users smart enough to upload images get that.\n\n-----\nNikhil: Like I mentioned above, the feedback from security team has been that `copy-from-url` cannot be considered as a standard practice as it has assumptions around the setup of network, access permissions to the url, scrutiny of data flowing through the wires, etc. So, we would like to avoid the `copy-from-url` case to not be part of the RefStack tests. It needs to be supported by operators who intend to expose it for use case like that of \"pulling an image from apps.openstack.org\"\n\ndt: I need to go read all of that security feedback for full context, at first reading, the major difference between direct and indirect to me is the network access required for the Glance process to fetch an indirect URL.  \u0027copy-fron\u0027 appears to assume full Internet access, \u0027swift-local\u0027 appears to only assume Swift endpoints, which may be completely internal to the cloud deployment (risk of some internal exposure there!) and of course direct is receive-only from the server standpoint.  All of the other risk factors appear to be common for all import methods.  Oh, one other difference: for direct you have only the credentials used for the user as audit for \u0027who did this\u0027, for indirect you also have the source URL, both of which may be compromised in worst-case.\n-----\n\nIdeally there will be no scheme-specific (swift/vmware/whatever) bits in the clients to deal with those implementations.  Just as with disk_format and friends, the indirect import scheme can be queried and selected by the user with the exact same (client) code path.  Anything vendor-specific will not make it into OSC for example...","commit_id":"985d69fdb2910e47586ddd3d2bd2a32be141d598"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"bbafe5117916d980325ba8f208b6a92fccdeee9e","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            \u0027value\u0027: CONF.image_import.disk_formats"},{"line_number":58,"context_line":"        }"},{"line_number":59,"context_line":"        import_methods \u003d {"},{"line_number":60,"context_line":"            \u0027description\u0027: \u0027Import methods available at this site.\u0027,"},{"line_number":61,"context_line":"            \u0027type\u0027: \u0027array\u0027,"},{"line_number":62,"context_line":"            \u0027value\u0027: []  # TODO(cyril): Gather the right values"},{"line_number":63,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":10,"id":"dab17558_e1e8047f","line":60,"in_reply_to":"dab17558_61ba5425","updated":"2016-05-06 20:50:03.000000000","message":"I also have the same worries as well. I\u0027m not convinced this any better of a solution until Glance is enforcing a strict list of methods and Defcore can be sure to have a clear strict list of that\u0027s what it\u0027ll be testing.","commit_id":"985d69fdb2910e47586ddd3d2bd2a32be141d598"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"2e651bf7bd05af98efa454450d73f9e9c83f64a7","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            \u0027value\u0027: CONF.image_import.disk_formats"},{"line_number":58,"context_line":"        }"},{"line_number":59,"context_line":"        import_methods \u003d {"},{"line_number":60,"context_line":"            \u0027description\u0027: \u0027Import methods available at this site.\u0027,"},{"line_number":61,"context_line":"            \u0027type\u0027: \u0027array\u0027,"},{"line_number":62,"context_line":"            \u0027value\u0027: []  # TODO(cyril): Gather the right values"},{"line_number":63,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":10,"id":"dab17558_52c929ab","line":60,"in_reply_to":"dab17558_6e310b5a","updated":"2016-05-11 18:53:05.000000000","message":"I thought we agreed that glance would implement exactly 2 methods, uploading directly into glance and uploading to swift and pulling it back down. The swift method would not always be activated since not all deployments have swift, so we need the discovery mechanism. But there would be no way for deployers to add other methods so clients would only have to deal with the 2 methods. Is that still the plan?","commit_id":"985d69fdb2910e47586ddd3d2bd2a32be141d598"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"cc0ae9825dad55879f6671a1149e974785cfca1d","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            \u0027value\u0027: CONF.image_import.disk_formats"},{"line_number":58,"context_line":"        }"},{"line_number":59,"context_line":"        import_methods \u003d {"},{"line_number":60,"context_line":"            \u0027description\u0027: \u0027Import methods available at this site.\u0027,"},{"line_number":61,"context_line":"            \u0027type\u0027: \u0027array\u0027,"},{"line_number":62,"context_line":"            \u0027value\u0027: []  # TODO(cyril): Gather the right values"},{"line_number":63,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":10,"id":"dab17558_5d9931c3","line":60,"in_reply_to":"dab17558_7200ad34","updated":"2016-05-12 00:30:19.000000000","message":"@Morgan, @Doug:\n\n\n\n\u003e I am not sure I am reading this correctly, but it seems that you are advocating for a non-strict interface that could do many things, meaning the user of the API would have implementation-details changing how this interface works.\n\n\nNo, user will not have implementation details of how this would work. I am advocating that user will have to know what the available way to import is in a particular cloud, that will be returned as a response via this import_methods call.\n\n\n\n\u003e Making the list of methods highly variable, deployer/operator specific, and not well defined makes me nervous this is going to be another one of the interfaces that end users will need magic knowledge of what it means to consume. That \"magic\" knowledge is what is concerning us from a RefStack/Defcore/\"Not Open Core\" perspective.\n\n\nI asked a bunch of people at the summit and the response was that as long as RefStack tests pass you don\u0027t have an interop issue. If a site supports either `glance-direct` or `swift-local` , you will not have an interop issue as that\u0027s what the RefStack tests should test and they will pass for the clouds.\n\nThe way we look at it, the RefStack list is defined as [\u0027glance-direct`, `swift-local`]. We are going to accept additional implementation of the upload mechanism (which is a deal breaker for some clouds) (and also supports feature parity with v1) (and was asked by many operators during the v1 deprecation session) is `copy-from-url` where a user is expected to provide a http(s) url to import the data from a remote (sometimes non-trusted data source). \n\nAs there are many deployment specific assumptions -- say you only allow internal http(s) locations, or you only allow https locations, etc, this needs to be a non-DefCore (non-RefStack) implementation of the upload/data-copy mechanism. What that means is, it should be a choice of an operator if they intend to support it based on the security, performance etc assumptions.\n\nI was hinted at the request to support may be a vmware specific location for those deployments to help speed-en snapshots.\n\nWhere will the implementations live? -- all upstream. \n\nWhat are the plugins (I really really want us to avoid using this term, more so because I want to avoid working on another hour long response, something that\u0027s not professionally healthy.) -- a set of scripts that operator can run on image data that has already been uploaded to the staging area (example [2]). The scripts will run on the image data itself and will be opaque from user\u0027s POV. Also, tasks need to be configurable as a image introspection/conversion on one cloud can be totally different from that on the other. (These set of operations are opaque to the user.)\n\nCan this be done? I do not see a reason why not. I followed the blog from Mark [1] to see if it is OK. \n\n[1] http://markvoelker.github.io/blog/defcore-for-devs/\n[2] http://specs.openstack.org/openstack/glance-specs/specs/mitaka/approved/image-import/image-import-refactor.html#data-put\n\n\n\n\u003e I want us to be sure we\u0027re doing our best to not leak implementation details to the end user(s). \n\n\nFrom what I described above, you tell me if we are exposing implementation details and why so?\n\n\n\n\u003e I thought we agreed that glance would implement exactly 2 methods, uploading directly into glance and uploading to swift and pulling it back down. The swift method would not always be activated since not all deployments have swift, so we need the discovery mechanism. But there would be no way for deployers to add other methods so clients would only have to deal with the 2 methods. Is that still the plan?\n\n\nI think we will work with openstackclient (not sure about others) to support other provisioning like copy-from. Since operators will only be able to use what is upstream, we will have a provisioning with client with that update. As of now, we only have been given 3 strong use cases -- `glance-direct` , `swift-local` , `copy-from-url` with the first and the third being more popular with small scale clouds and second being preferable with large scale one.\n\nAs far as, which methods would be activated is concerned -- I think if we are giving a choice on `glance-direct` or `swift-local` then only one of those needs to be activated at a site for the tests to pass. I would assume operators who are worried about their public facing endpoint being subject to attacks, the `glance-direct` would be switched off.\n\nOr did I misunderstand?\n\nI had clearly communicated the requirement of a `copy-from-url` use case on the import spec. \n\nPlease take a look at comment on https://review.openstack.org/#/c/232371/ with the following search attributes you can use to find that comment. Also a response from Flavio on the same PS indicating the accommodation of that use case:\n\n\"\nNikhil Komawar    Dec 8 1:37 AM\nPatch Set 7:\n\"\n\n\n\n\u003e I would be 100% in support of that. If there is \"pluggable\" bits for \"other things\" I want to see a well defined interface so there isn\u0027t magic \"oh and this method needs arg X\" but \"other method needs arg Y\".\n\n\u003e My concern/confusion is this looks like it is not going towards \"2 methods\" but \"2 methods and pluggable for anything else\"\n\nLike I mentioned above, the feedback from security team has been that `copy-from-url` cannot be considered as a standard practice as it has assumptions around the setup of network, access permissions to the url, scrutiny of data flowing through the wires, etc. So, we would like to avoid the `copy-from-url` case to not be part of the RefStack tests. It needs to be supported by operators who intend to expose it for use case like that of \"pulling an image from apps.openstack.org\"\n\n---\n\nHaving said that, irrespective of the implementation the APIs will be upstream. Hence, they will have info for the client to know the expected requests/responses.\n\nThe optional attributes are well defined as well, as the current proposal is for the three use-cases.\n\nI do not see a reason why, if we need to support a vmware specific url to pull the data from data source, we can\u0027t do it without letting the client know of the expected request/responses.\n\nEven if the support is for more than `glance-direct` or `swift-local`, DefCore capabilities will require all clouds to expose either of the above two to get the branding approved so they will always be available (in interop clouds) to ensure clients work successfully.\n\n---\n\nLet me know if I\u0027ve missed anything. I\u0027d really like to avoid repeating the same arguments again. So, if the intent isn\u0027t clear even now, we need to setup a hangout of air or likes of it, for a conversation that can be recorded and be made publicly available. \n\nI appreciate your time and thank you for understanding.\n\nWe would love for Glance to make progress in this and many other required important directions.","commit_id":"985d69fdb2910e47586ddd3d2bd2a32be141d598"},{"author":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"change_message_id":"fca59a674cd7416643428c548d753ddf324eeba6","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            \u0027value\u0027: CONF.image_import.disk_formats"},{"line_number":58,"context_line":"        }"},{"line_number":59,"context_line":"        import_methods \u003d {"},{"line_number":60,"context_line":"            \u0027description\u0027: \u0027Import methods available at this site.\u0027,"},{"line_number":61,"context_line":"            \u0027type\u0027: \u0027array\u0027,"},{"line_number":62,"context_line":"            \u0027value\u0027: []  # TODO(cyril): Gather the right values"},{"line_number":63,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":10,"id":"dab17558_53a0e690","line":60,"in_reply_to":"dab17558_7ab98d2e","updated":"2016-05-06 09:25:51.000000000","message":"This has been discussed quite a bit as part of the spec process.\n\nMy understanding is that two methods will be anointed for defcore:\n\n1) put the bits directly into glance (if you\u0027ve no swift)\n2) put the bits into swift and tell glance where the object is (if you have swift)\n\nTo pass the defcore tests at least one of these two will need to be available.\n\nNo doubt other methods will probably be proposed (eg import from a URL) but that\u0027s outside the current scope. We\u0027ll need to think about whether we want to support other proposed methods, and if so, how we make it clear that they are \u0027alternative\u0027 and not necessarily interoperable.","commit_id":"985d69fdb2910e47586ddd3d2bd2a32be141d598"},{"author":{"_account_id":7822,"name":"Chris Hoge (not involved in upstream development)","email":"chris@hogepodge.com","username":"hogepodge"},"change_message_id":"1381530434a5058fcbaf7f7cbec928e9789d8bc2","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            \u0027value\u0027: CONF.image_import.disk_formats"},{"line_number":58,"context_line":"        }"},{"line_number":59,"context_line":"        import_methods \u003d {"},{"line_number":60,"context_line":"            \u0027description\u0027: \u0027Import methods available at this site.\u0027,"},{"line_number":61,"context_line":"            \u0027type\u0027: \u0027array\u0027,"},{"line_number":62,"context_line":"            \u0027value\u0027: []  # TODO(cyril): Gather the right values"},{"line_number":63,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":10,"id":"dab17558_aa6a5a18","line":60,"in_reply_to":"dab17558_8c65f6e2","updated":"2016-05-06 18:13:15.000000000","message":"Thanks for sharing the spec, I read it earlier and was alarmed that neither of the two methods mentioned weren\u0027t included in the default value array. Instead it\u0027s left an an inline TODO item. Historically this was also a problem with the task api, which afaik did not have an upstream implementation for some time (please correct me if I\u0027m mistaken on that). It would be nice to nail down what\u0027s in the spec and signal a commitment to building at least one default import method rather than leave an empty array.","commit_id":"985d69fdb2910e47586ddd3d2bd2a32be141d598"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"76a0cafc2a26509aaccc76b0b22d06fa8f9fe81a","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            \u0027value\u0027: CONF.image_import.disk_formats"},{"line_number":58,"context_line":"        }"},{"line_number":59,"context_line":"        import_methods \u003d {"},{"line_number":60,"context_line":"            \u0027description\u0027: \u0027Import methods available at this site.\u0027,"},{"line_number":61,"context_line":"            \u0027type\u0027: \u0027array\u0027,"},{"line_number":62,"context_line":"            \u0027value\u0027: []  # TODO(cyril): Gather the right values"},{"line_number":63,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":10,"id":"dab17558_61ba5425","line":60,"in_reply_to":"dab17558_aa6a5a18","updated":"2016-05-06 20:30:56.000000000","message":"I want to echo what Chris Hoge said, this is dangerously close to \"Open Core\" (but I don\u0027t think it is by design, just as an oversight), please do not leave \"upstream implementation\" as a \"TODO\" in code. We all mean do to well and complete all the \"TODO\" items, but I would apply a solid -1 or -2 with the volume of TODO\u0027s here unless they are clearly fleshed out in subsequent patches or in future patch sets.\n\nI want to see a well defined interface if we are getting an import interface.","commit_id":"985d69fdb2910e47586ddd3d2bd2a32be141d598"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"7fca632f4f8e5b0851ce0e94d35dc77a16232608","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            \u0027value\u0027: CONF.image_import.disk_formats"},{"line_number":58,"context_line":"        }"},{"line_number":59,"context_line":"        import_methods \u003d {"},{"line_number":60,"context_line":"            \u0027description\u0027: \u0027Import methods available at this site.\u0027,"},{"line_number":61,"context_line":"            \u0027type\u0027: \u0027array\u0027,"},{"line_number":62,"context_line":"            \u0027value\u0027: []  # TODO(cyril): Gather the right values"},{"line_number":63,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":10,"id":"dab17558_05e8b90f","line":60,"in_reply_to":"dab17558_aa6a5a18","updated":"2016-05-06 18:22:40.000000000","message":"Sorry, I misunderstand your point.  There\u0027s a discussion about this on PS 7.  Basically, this discovery call will probably merge before glance-direct is completed, so an empty list is correct for now.  Thanks for keeping us honest, though!","commit_id":"985d69fdb2910e47586ddd3d2bd2a32be141d598"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"292b49a75cf13d1ee161aedf07f993ce72a96f1a","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            \u0027value\u0027: CONF.image_import.disk_formats"},{"line_number":58,"context_line":"        }"},{"line_number":59,"context_line":"        import_methods \u003d {"},{"line_number":60,"context_line":"            \u0027description\u0027: \u0027Import methods available at this site.\u0027,"},{"line_number":61,"context_line":"            \u0027type\u0027: \u0027array\u0027,"},{"line_number":62,"context_line":"            \u0027value\u0027: []  # TODO(cyril): Gather the right values"},{"line_number":63,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":10,"id":"dab17558_dfc47460","line":60,"in_reply_to":"dab17558_d5d13acf","updated":"2016-05-10 00:44:23.000000000","message":"@Nikhil,\n\nI am not sure I am reading this correctly, but it seems that you are advocating for a non-strict interface that could do many things, meaning the user of the API would have implementation-details changing how this interface works.\n\nMaking the list of methods highly variable, deployer/operator specific, and not well defined makes me nervous this is going to be another one of the interfaces that end users will need magic knowledge of what it means to consume. That \"magic\" knowledge is what is concerning us from a RefStack/Defcore/\"Not Open Core\" perspective.\n\nI want us to be sure we\u0027re doing our best to not leak implementation details to the end user(s). \n\nSo in short: Please clarify what flexibility is being added here, why it can\u0027t be well-defined, etc.\n\nThanks for bearing with me here, I appreciate the effort you are putting in to communicate the intentions.","commit_id":"985d69fdb2910e47586ddd3d2bd2a32be141d598"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"a0dadb36109a0ea1480192bdd69813222fc27f27","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            \u0027value\u0027: CONF.image_import.disk_formats"},{"line_number":58,"context_line":"        }"},{"line_number":59,"context_line":"        import_methods \u003d {"},{"line_number":60,"context_line":"            \u0027description\u0027: \u0027Import methods available at this site.\u0027,"},{"line_number":61,"context_line":"            \u0027type\u0027: \u0027array\u0027,"},{"line_number":62,"context_line":"            \u0027value\u0027: []  # TODO(cyril): Gather the right values"},{"line_number":63,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":10,"id":"dab17558_0fb2334c","line":60,"in_reply_to":"dab17558_dfc47460","updated":"2016-05-10 15:48:04.000000000","message":"OK, so maybe we should define the glance-direct method before merging this patch. Is anyone working on this?","commit_id":"985d69fdb2910e47586ddd3d2bd2a32be141d598"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"fa37778b1609ae902322e03a9f3151824fe5d68c","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            \u0027value\u0027: CONF.image_import.disk_formats"},{"line_number":58,"context_line":"        }"},{"line_number":59,"context_line":"        import_methods \u003d {"},{"line_number":60,"context_line":"            \u0027description\u0027: \u0027Import methods available at this site.\u0027,"},{"line_number":61,"context_line":"            \u0027type\u0027: \u0027array\u0027,"},{"line_number":62,"context_line":"            \u0027value\u0027: []  # TODO(cyril): Gather the right values"},{"line_number":63,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":10,"id":"dab17558_d5d13acf","line":60,"in_reply_to":"dab17558_e1e8047f","updated":"2016-05-06 22:53:39.000000000","message":"I would say that Glance should enforce one of the two methods as described by the spec. \n\nBut the import from url and likes of it are required by the operators that assume certain type of setup (for example more trusted, less secure for other cases).\n\nSo we cannot be stringent on what all operators will support, we can be stringent on glance-direct or swift-local as described by the spec. That will ensure the RefStack tests pass and you don\u0027t have a interop issue.\n\nOTOH, we can\u0027t have an implementation that will restrict very important use cases for some of the operators for eg. pulling an image from apps.openstack.org","commit_id":"985d69fdb2910e47586ddd3d2bd2a32be141d598"}],"glance/api/v2/router.py":[{"author":{"_account_id":17116,"name":"Niall Bunting","email":"niall.bunting@hpe.com","username":"NiallBunting"},"change_message_id":"e603a05f67fecd978378950063364551d086b9c0","unresolved":false,"context_lines":[{"line_number":522,"context_line":"        mapper.connect(\u0027/info/import\u0027,"},{"line_number":523,"context_line":"                       controller\u003dinfo_resource,"},{"line_number":524,"context_line":"                       action\u003d\u0027import_info\u0027,"},{"line_number":525,"context_line":"                       conditions\u003d{\u0027method\u0027: [\u0027GET\u0027]})"},{"line_number":526,"context_line":""},{"line_number":527,"context_line":"        super(API, self).__init__(mapper)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3afc51ec_491a767e","line":525,"updated":"2016-03-15 11:05:03.000000000","message":"If this does not take a body, you should add \u0027body_reject\u003dTrue\u0027.","commit_id":"25658def2de934d8309e229fd5964559a9a91763"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"3cd4ac884e2b2dd0fab02b39877fd5c930ea6498","unresolved":false,"context_lines":[{"line_number":522,"context_line":"        mapper.connect(\u0027/info/import\u0027,"},{"line_number":523,"context_line":"                       controller\u003dinfo_resource,"},{"line_number":524,"context_line":"                       action\u003d\u0027import_info\u0027,"},{"line_number":525,"context_line":"                       conditions\u003d{\u0027method\u0027: [\u0027GET\u0027]})"},{"line_number":526,"context_line":""},{"line_number":527,"context_line":"        super(API, self).__init__(mapper)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1af94dfe_b3e7a33f","line":525,"in_reply_to":"3afc51ec_491a767e","updated":"2016-03-15 15:23:27.000000000","message":"Done","commit_id":"25658def2de934d8309e229fd5964559a9a91763"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"697a144a075dfbcd0493c62e5140252b7a653a14","unresolved":false,"context_lines":[{"line_number":538,"context_line":"                       action\u003d\u0027reject\u0027,"},{"line_number":539,"context_line":"                       allowed_methods\u003d\u0027GET, DELETE\u0027)"},{"line_number":540,"context_line":""},{"line_number":541,"context_line":"        # Discoverability"},{"line_number":542,"context_line":"        info_resource \u003d info.create_resource()"},{"line_number":543,"context_line":"        mapper.connect(\u0027/info/import\u0027,"},{"line_number":544,"context_line":"                       controller\u003dinfo_resource,"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa0719c6_a513890c","line":541,"range":{"start_line":541,"start_character":10,"end_line":541,"end_character":25},"updated":"2016-03-25 13:59:27.000000000","message":":)","commit_id":"aeb50978579a3a6884710c619601696dc95ceeff"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"4b040ca3862924bb55904857145beaf6db67230d","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from glance.api.v2 import image_members"},{"line_number":19,"context_line":"from glance.api.v2 import image_tags"},{"line_number":20,"context_line":"from glance.api.v2 import images"},{"line_number":21,"context_line":"from glance.api.v2 import info"},{"line_number":22,"context_line":"from glance.api.v2 import metadef_namespaces"},{"line_number":23,"context_line":"from glance.api.v2 import metadef_objects"},{"line_number":24,"context_line":"from glance.api.v2 import metadef_properties"}],"source_content_type":"text/x-python","patch_set":10,"id":"bacf61ea_c6d0cc21","line":21,"range":{"start_line":21,"start_character":5,"end_line":21,"end_character":30},"updated":"2016-08-05 20:38:26.000000000","message":"I think the namespace is a bit misleading as well.\n\nMay be this needs to be glance.api.v2.import.info rather than glance.api.v2.info\n\nAnd then glance.api.v2.import.* will have other calls like data streaming.","commit_id":"985d69fdb2910e47586ddd3d2bd2a32be141d598"}],"glance/common/config.py":[{"author":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"change_message_id":"19584e46022de4383394a647ffd6a0162ff38495","unresolved":false,"context_lines":[{"line_number":143,"context_line":"    cfg.IntOpt(\u0027image_import_size_cap\u0027, default\u003d0,"},{"line_number":144,"context_line":"               max\u003d9223372036854775808,"},{"line_number":145,"context_line":"               help\u003d_(\"Maximum size of image a user can import (in bytes).\""},{"line_number":146,"context_line":"                      \"Defaults to 0 byte.\")),"},{"line_number":147,"context_line":"    cfg.StrOpt(\u0027user_storage_quota\u0027, default\u003d\u00270\u0027,"},{"line_number":148,"context_line":"               help\u003d_(\"Set a system wide quota for every user. This value is \""},{"line_number":149,"context_line":"                      \"the total capacity that a user can use across \""}],"source_content_type":"text/x-python","patch_set":7,"id":"1a122d0e_24c74e65","line":146,"range":{"start_line":146,"start_character":35,"end_line":146,"end_character":36},"updated":"2016-04-19 17:30:51.000000000","message":"May be useful to note 0 \u003d unlimited.","commit_id":"67ed0d34f0b49d469dfac9d86c39d6889864a4ca"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"c1e1bb34fdf8af1a38a4d1cd9da20d5325520018","unresolved":false,"context_lines":[{"line_number":143,"context_line":"    cfg.IntOpt(\u0027image_import_size_cap\u0027, default\u003d0,"},{"line_number":144,"context_line":"               max\u003d9223372036854775808,"},{"line_number":145,"context_line":"               help\u003d_(\"Maximum size of image a user can import (in bytes).\""},{"line_number":146,"context_line":"                      \"Defaults to 0 byte.\")),"},{"line_number":147,"context_line":"    cfg.StrOpt(\u0027user_storage_quota\u0027, default\u003d\u00270\u0027,"},{"line_number":148,"context_line":"               help\u003d_(\"Set a system wide quota for every user. This value is \""},{"line_number":149,"context_line":"                      \"the total capacity that a user can use across \""}],"source_content_type":"text/x-python","patch_set":7,"id":"1a122d0e_2ab40233","line":146,"range":{"start_line":146,"start_character":35,"end_line":146,"end_character":36},"in_reply_to":"1a122d0e_24c74e65","updated":"2016-04-20 14:27:05.000000000","message":"Done","commit_id":"67ed0d34f0b49d469dfac9d86c39d6889864a4ca"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"d7dbfeebec07e3727459d1f7b7edfec33140e948","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                deprecated_opts\u003d[cfg.DeprecatedOpt(\u0027disk_formats\u0027,"},{"line_number":56,"context_line":"                                                   group\u003d\u0027DEFAULT\u0027)]),"},{"line_number":57,"context_line":"]"},{"line_number":58,"context_line":"image_import_opts \u003d ["},{"line_number":59,"context_line":"    cfg.ListOpt(\u0027container_formats\u0027,"},{"line_number":60,"context_line":"                default\u003d[\u0027ami\u0027, \u0027ari\u0027, \u0027aki\u0027, \u0027bare\u0027, \u0027ovf\u0027, \u0027ova\u0027, \u0027docker\u0027],"},{"line_number":61,"context_line":"                help\u003d_(\"\"\""}],"source_content_type":"text/x-python","patch_set":10,"id":"1a122d0e_a4e35ed7","line":58,"updated":"2016-05-05 08:06:09.000000000","message":"If we decide to make these Image Import specific, I don\u0027t think common/config.py is the right place to define them. Rather do that in the module.","commit_id":"985d69fdb2910e47586ddd3d2bd2a32be141d598"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"a0dadb36109a0ea1480192bdd69813222fc27f27","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                deprecated_opts\u003d[cfg.DeprecatedOpt(\u0027disk_formats\u0027,"},{"line_number":56,"context_line":"                                                   group\u003d\u0027DEFAULT\u0027)]),"},{"line_number":57,"context_line":"]"},{"line_number":58,"context_line":"image_import_opts \u003d ["},{"line_number":59,"context_line":"    cfg.ListOpt(\u0027container_formats\u0027,"},{"line_number":60,"context_line":"                default\u003d[\u0027ami\u0027, \u0027ari\u0027, \u0027aki\u0027, \u0027bare\u0027, \u0027ovf\u0027, \u0027ova\u0027, \u0027docker\u0027],"},{"line_number":61,"context_line":"                help\u003d_(\"\"\""}],"source_content_type":"text/x-python","patch_set":10,"id":"dab17558_ef4a4f25","line":58,"in_reply_to":"1a122d0e_a4e35ed7","updated":"2016-05-10 15:48:04.000000000","message":"Works with me. Anybody against moving this to glance/api/v2/info.py ?","commit_id":"985d69fdb2910e47586ddd3d2bd2a32be141d598"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"b891b9acd150680fa4ebb09b9da4cc036a05dec7","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                deprecated_opts\u003d[cfg.DeprecatedOpt(\u0027disk_formats\u0027,"},{"line_number":56,"context_line":"                                                   group\u003d\u0027DEFAULT\u0027)]),"},{"line_number":57,"context_line":"]"},{"line_number":58,"context_line":"image_import_opts \u003d ["},{"line_number":59,"context_line":"    cfg.ListOpt(\u0027container_formats\u0027,"},{"line_number":60,"context_line":"                default\u003d[\u0027ami\u0027, \u0027ari\u0027, \u0027aki\u0027, \u0027bare\u0027, \u0027ovf\u0027, \u0027ova\u0027, \u0027docker\u0027],"},{"line_number":61,"context_line":"                help\u003d_(\"\"\""}],"source_content_type":"text/x-python","patch_set":10,"id":"bacf61ea_40e1d299","line":58,"in_reply_to":"dab17558_ef4a4f25","updated":"2016-08-04 01:43:35.000000000","message":"Please see my comment on the etc/ file.","commit_id":"985d69fdb2910e47586ddd3d2bd2a32be141d598"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"4b040ca3862924bb55904857145beaf6db67230d","unresolved":false,"context_lines":[{"line_number":56,"context_line":"                                                   group\u003d\u0027DEFAULT\u0027)]),"},{"line_number":57,"context_line":"]"},{"line_number":58,"context_line":"image_import_opts \u003d ["},{"line_number":59,"context_line":"    cfg.ListOpt(\u0027container_formats\u0027,"},{"line_number":60,"context_line":"                default\u003d[\u0027ami\u0027, \u0027ari\u0027, \u0027aki\u0027, \u0027bare\u0027, \u0027ovf\u0027, \u0027ova\u0027, \u0027docker\u0027],"},{"line_number":61,"context_line":"                help\u003d_(\"\"\""},{"line_number":62,"context_line":"The list of container formats that may be used during the image import"}],"source_content_type":"text/x-python","patch_set":10,"id":"bacf61ea_c6a56ca2","line":59,"range":{"start_line":59,"start_character":17,"end_line":59,"end_character":34},"updated":"2016-08-05 20:38:26.000000000","message":"same comment as mentioned below for disk_formats config option.","commit_id":"985d69fdb2910e47586ddd3d2bd2a32be141d598"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"4b040ca3862924bb55904857145beaf6db67230d","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                default\u003d[\u0027ami\u0027, \u0027ari\u0027, \u0027aki\u0027, \u0027vhd\u0027, \u0027vmdk\u0027, \u0027raw\u0027, \u0027qcow2\u0027,"},{"line_number":78,"context_line":"                         \u0027vdi\u0027, \u0027iso\u0027],"},{"line_number":79,"context_line":"                help\u003d_(\"\"\""},{"line_number":80,"context_line":"The list of disk formats that may be used during the image import process."},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"Services which consume this:"},{"line_number":83,"context_line":"    * glance-api"}],"source_content_type":"text/x-python","patch_set":10,"id":"bacf61ea_26944835","line":80,"range":{"start_line":80,"start_character":0,"end_line":80,"end_character":74},"updated":"2016-08-05 20:38:26.000000000","message":"I think this should say more about what the image format represents.\n\nThe name should also be source_disk_formats and then description will include information about the kind of data user has with them that could be uploaded for the import workflow to process that type of data on the server.\n\nWith the current text, I am sure many operators will get confused.","commit_id":"985d69fdb2910e47586ddd3d2bd2a32be141d598"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"4b040ca3862924bb55904857145beaf6db67230d","unresolved":false,"context_lines":[{"line_number":90,"context_line":""},{"line_number":91,"context_line":"\"\"\")),"},{"line_number":92,"context_line":"    cfg.IntOpt(\u0027image_size_cap\u0027, default\u003d0,"},{"line_number":93,"context_line":"               max\u003d9223372036854775808,"},{"line_number":94,"context_line":"               help\u003d_(\"\"\""},{"line_number":95,"context_line":"The maximum size of an image the user can import (in bytes)."},{"line_number":96,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"bacf61ea_464fbc6a","line":93,"range":{"start_line":93,"start_character":19,"end_line":93,"end_character":38},"updated":"2016-08-05 20:38:26.000000000","message":"This number posted is ridiculously high. Not sure what the intent is: https://goo.gl/zi09U9 ? \n\nWith the introduction of vhdx, may be this will be 64TB now (lol)? But seriously speaking, this should be something that\u0027s much smaller than the filesystem capacity we set as default for our filesystem store. (For example, quota is 1TB so this value should be 1TB/3)","commit_id":"985d69fdb2910e47586ddd3d2bd2a32be141d598"},{"author":{"_account_id":7822,"name":"Chris Hoge (not involved in upstream development)","email":"chris@hogepodge.com","username":"hogepodge"},"change_message_id":"7534004a1d5592bc6f23f9aabe18e2e1c585cb87","unresolved":false,"context_lines":[{"line_number":221,"context_line":"CONF \u003d cfg.CONF"},{"line_number":222,"context_line":"CONF.register_opts(paste_deploy_opts, group\u003d\u0027paste_deploy\u0027)"},{"line_number":223,"context_line":"CONF.register_opts(image_format_opts, group\u003d\u0027image_format\u0027)"},{"line_number":224,"context_line":"CONF.register_opts(image_import_opts, group\u003d\u0027image_import\u0027)"},{"line_number":225,"context_line":"CONF.register_opts(task_opts, group\u003d\u0027task\u0027)"},{"line_number":226,"context_line":"CONF.register_opts(common_opts)"},{"line_number":227,"context_line":"policy.Enforcer(CONF)"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a122d0e_2fd57442","line":224,"updated":"2016-05-04 23:06:14.000000000","message":"As a point of information, the oslo configuration object now supports generation of  group-level help text in the sample configuration file. Since this is a new set of options for glance, it could be a good opportunity to take advantage of this feature and give higher-level information on how the new import api is configured.","commit_id":"985d69fdb2910e47586ddd3d2bd2a32be141d598"},{"author":{"_account_id":22448,"name":"Alexander Bashmakov","email":"abashmak@yahoo.com","username":"abashmak"},"change_message_id":"9995d5e2aae501030a299922ad8a27e6592a0541","unresolved":false,"context_lines":[{"line_number":62,"context_line":"The list of container formats of the image data that a user may choose to"},{"line_number":63,"context_line":"upload in, during the image import process."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"Services which consume this:"},{"line_number":66,"context_line":"    * glance-api"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"Possible values:"},{"line_number":69,"context_line":"    * ``ami``, ``ari``, ``aki``, ``bare``, ``ovf``, ``ova``, ``docker``"}],"source_content_type":"text/x-python","patch_set":13,"id":"1ac06dbe_0eb54a30","line":66,"range":{"start_line":65,"start_character":0,"end_line":66,"end_character":16},"updated":"2016-08-25 17:54:11.000000000","message":"I think we\u0027ve been removing this section from help texts.","commit_id":"01b634a8b5a7d6766cb669d1cd8c938747bfd1fc"},{"author":{"_account_id":22448,"name":"Alexander Bashmakov","email":"abashmak@yahoo.com","username":"abashmak"},"change_message_id":"9995d5e2aae501030a299922ad8a27e6592a0541","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    * ``ami``, ``ari``, ``aki``, ``bare``, ``ovf``, ``ova``, ``docker``"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"Related options:"},{"line_number":72,"context_line":"    * ``source_disk_formats``"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"\"\"\")),"},{"line_number":75,"context_line":"    cfg.ListOpt(\u0027source_disk_formats\u0027,"}],"source_content_type":"text/x-python","patch_set":13,"id":"1ac06dbe_ceaa12d2","line":72,"range":{"start_line":72,"start_character":8,"end_line":72,"end_character":27},"updated":"2016-08-25 17:54:11.000000000","message":"It would be nice to add in the description above how this option is related.","commit_id":"01b634a8b5a7d6766cb669d1cd8c938747bfd1fc"},{"author":{"_account_id":22448,"name":"Alexander Bashmakov","email":"abashmak@yahoo.com","username":"abashmak"},"change_message_id":"9995d5e2aae501030a299922ad8a27e6592a0541","unresolved":false,"context_lines":[{"line_number":79,"context_line":"The list of disk formats of the image data that a user may choose to"},{"line_number":80,"context_line":"upload in, during the image import process."},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"Services which consume this:"},{"line_number":83,"context_line":"    * glance-api"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"Possible values:"},{"line_number":86,"context_line":"    * ``ami``, ``ari``, ``aki``, ``vhd``, ``vhdx``, ``vmdk``, ``raw``,"}],"source_content_type":"text/x-python","patch_set":13,"id":"1ac06dbe_6e82fe53","line":83,"range":{"start_line":82,"start_character":0,"end_line":83,"end_character":16},"updated":"2016-08-25 17:54:11.000000000","message":"ditto line 65","commit_id":"01b634a8b5a7d6766cb669d1cd8c938747bfd1fc"},{"author":{"_account_id":22448,"name":"Alexander Bashmakov","email":"abashmak@yahoo.com","username":"abashmak"},"change_message_id":"9995d5e2aae501030a299922ad8a27e6592a0541","unresolved":false,"context_lines":[{"line_number":87,"context_line":"      ``\u0027qcow2``, ``vdi``, ``iso``"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"Related options:"},{"line_number":90,"context_line":"    * ``source_container_formats``"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"\"\"\")),"},{"line_number":93,"context_line":"    cfg.IntOpt(\u0027image_size_cap\u0027, default\u003d0,"}],"source_content_type":"text/x-python","patch_set":13,"id":"1ac06dbe_8ecdbab9","line":90,"range":{"start_line":90,"start_character":8,"end_line":90,"end_character":32},"updated":"2016-08-25 17:54:11.000000000","message":"ditto line 72","commit_id":"01b634a8b5a7d6766cb669d1cd8c938747bfd1fc"},{"author":{"_account_id":22448,"name":"Alexander Bashmakov","email":"abashmak@yahoo.com","username":"abashmak"},"change_message_id":"9995d5e2aae501030a299922ad8a27e6592a0541","unresolved":false,"context_lines":[{"line_number":96,"context_line":"The maximum size of the image data that a user may choose to"},{"line_number":97,"context_line":"upload during the image import process (in bytes)."},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"Services which consume this:"},{"line_number":100,"context_line":"    * glance-api"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"Possible values:"},{"line_number":103,"context_line":"    * The default value is 0 byte, which means \u0027unlimited\u0027."}],"source_content_type":"text/x-python","patch_set":13,"id":"1ac06dbe_8e449a1b","line":100,"range":{"start_line":99,"start_character":0,"end_line":100,"end_character":16},"updated":"2016-08-25 17:54:11.000000000","message":"ditto line 65","commit_id":"01b634a8b5a7d6766cb669d1cd8c938747bfd1fc"}],"glance/tests/unit/v2/test_info_resource.py":[{"author":{"_account_id":17116,"name":"Niall Bunting","email":"niall.bunting@hpe.com","username":"NiallBunting"},"change_message_id":"e603a05f67fecd978378950063364551d086b9c0","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        self.assertIn(\u0027target_container_format\u0027, output)"},{"line_number":40,"context_line":"        self.assertIn(\u0027target_disk_format\u0027, output)"},{"line_number":41,"context_line":"        self.assertIn(\u0027os-type\u0027, output)"},{"line_number":42,"context_line":"        self.assertIn(\u0027import-schema-location\u0027, output)"},{"line_number":43,"context_line":"        self.assertIn(\u0027import-methods\u0027, output)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3afc51ec_8c7acc75","line":42,"range":{"start_line":42,"start_character":9,"end_line":42,"end_character":55},"updated":"2016-03-15 11:05:03.000000000","message":"Duplicate with the top one?","commit_id":"25658def2de934d8309e229fd5964559a9a91763"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"3cd4ac884e2b2dd0fab02b39877fd5c930ea6498","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        self.assertIn(\u0027target_container_format\u0027, output)"},{"line_number":40,"context_line":"        self.assertIn(\u0027target_disk_format\u0027, output)"},{"line_number":41,"context_line":"        self.assertIn(\u0027os-type\u0027, output)"},{"line_number":42,"context_line":"        self.assertIn(\u0027import-schema-location\u0027, output)"},{"line_number":43,"context_line":"        self.assertIn(\u0027import-methods\u0027, output)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1af94dfe_9348a75d","line":42,"range":{"start_line":42,"start_character":9,"end_line":42,"end_character":55},"in_reply_to":"3afc51ec_8c7acc75","updated":"2016-03-15 15:23:27.000000000","message":"indeed, done","commit_id":"25658def2de934d8309e229fd5964559a9a91763"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"4b040ca3862924bb55904857145beaf6db67230d","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        self.assertIn(\u0027max_upload_time\u0027, output)"},{"line_number":36,"context_line":"        self.assertIn(\u0027data_TTL_after_import_error\u0027, output)"},{"line_number":37,"context_line":"        self.assertIn(\u0027source_container_format\u0027, output)"},{"line_number":38,"context_line":"        self.assertIn(\u0027source_disk_format\u0027, output)"},{"line_number":39,"context_line":"        self.assertIn(\u0027os_type\u0027, output)"},{"line_number":40,"context_line":"        self.assertIn(\u0027import-methods\u0027, output)"}],"source_content_type":"text/x-python","patch_set":10,"id":"bacf61ea_66de403f","line":38,"range":{"start_line":38,"start_character":23,"end_line":38,"end_character":41},"updated":"2016-08-05 20:38:26.000000000","message":"I noticed that the intent is shown to use just source_disk_format but that\u0027s prolly got me confused.\n\nI think you should mark this patch as WIP until this completely describes the value discovery call http://specs.openstack.org/openstack/glance-specs/specs/mitaka/approved/image-import/image-import-refactor.html#value-discovery","commit_id":"985d69fdb2910e47586ddd3d2bd2a32be141d598"}]}
