)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"df58f1750c9c3cb4261c7c3098c1187732da342e","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Lucas Alvares Gomes \u003clucasagomes@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-03-20 16:03:34 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add config drive documentation"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch is documenting how to enable and to access the configuration"},{"line_number":10,"context_line":"drive when deploying instances with Ironic."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"9a80dd14_2413f965","line":7,"updated":"2015-03-20 16:27:14.000000000","message":"... \u0026 script","commit_id":"7dc3dd739786995d29f8b6e38460ada9a07fd1a3"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"5ec0d4e389a214f94eb91658ad39165991df9e0a","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Lucas Alvares Gomes \u003clucasagomes@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-03-20 16:03:34 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add config drive documentation"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch is documenting how to enable and to access the configuration"},{"line_number":10,"context_line":"drive when deploying instances with Ironic."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"9a80dd14_1b500f5d","line":7,"in_reply_to":"9a80dd14_2413f965","updated":"2015-03-20 17:24:20.000000000","message":"Done","commit_id":"7dc3dd739786995d29f8b6e38460ada9a07fd1a3"}],"doc/source/deploy/install-guide.rst":[{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"df58f1750c9c3cb4261c7c3098c1187732da342e","unresolved":false,"context_lines":[{"line_number":1288,"context_line":"Enabling the configuration drive (configdrive)"},{"line_number":1289,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":1290,"context_line":""},{"line_number":1291,"context_line":"Starting with Kilo release, Ironic supports exposing a configuration"},{"line_number":1292,"context_line":"drive image to the instances."},{"line_number":1293,"context_line":""},{"line_number":1294,"context_line":"The configuration drive is usually used in conjunction with Nova, but"}],"source_content_type":"text/x-rst","patch_set":5,"id":"9a80dd14_df03c40a","line":1291,"updated":"2015-03-20 16:27:14.000000000","message":"s/Kilo/the Kilo/\n\nAlso, what is a configuration drive?  I ask because I don\u0027t know.  Maybe the link at the bottom to cloud-init would be good here?","commit_id":"7dc3dd739786995d29f8b6e38460ada9a07fd1a3"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"5ec0d4e389a214f94eb91658ad39165991df9e0a","unresolved":false,"context_lines":[{"line_number":1288,"context_line":"Enabling the configuration drive (configdrive)"},{"line_number":1289,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":1290,"context_line":""},{"line_number":1291,"context_line":"Starting with Kilo release, Ironic supports exposing a configuration"},{"line_number":1292,"context_line":"drive image to the instances."},{"line_number":1293,"context_line":""},{"line_number":1294,"context_line":"The configuration drive is usually used in conjunction with Nova, but"}],"source_content_type":"text/x-rst","patch_set":5,"id":"9a80dd14_9e2a2d7c","line":1291,"in_reply_to":"9a80dd14_df03c40a","updated":"2015-03-20 17:24:20.000000000","message":"Thanks.\n\nA configuration drive is a way to pass metadata to the instances, say for example one doesn\u0027t run a metadata service in their cloud (or the instances can\u0027t access the metadata service depending on the network configuration) so they can use a configuration drive to give the instance the metadata by putting it in a partition on the disk when the node is deployed*.\n\n\\* For VMs, it\u0027s usually a ISO attached to the instance, but since we can\u0027t attach ISOs for all hardware in Ironic we do put it in a partition. (Some BMCs allows attaching ISOs via the virtual media, and that\u0027s an improvement we can do in the future for those types of BMCs)","commit_id":"7dc3dd739786995d29f8b6e38460ada9a07fd1a3"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"1b23bca2d538c47b9216e1bdf4d2d74da419a1ad","unresolved":false,"context_lines":[{"line_number":1318,"context_line":"When used standalone"},{"line_number":1319,"context_line":"--------------------"},{"line_number":1320,"context_line":""},{"line_number":1321,"context_line":"When used without Nova, the operator needs to create a configuration drive"},{"line_number":1322,"context_line":"and give it to Ironic."},{"line_number":1323,"context_line":""},{"line_number":1324,"context_line":"As the format Ironic expects a ``gizped`` and ``base64 enconded``"}],"source_content_type":"text/x-rst","patch_set":5,"id":"9a80dd14_db9f5700","line":1321,"updated":"2015-03-20 17:09:37.000000000","message":"The file layout is fairly specific, perhaps a reference to http://docs.openstack.org/user-guide/content/enable_config_drive.html may be useful to those seeking to create their own configdrives.","commit_id":"7dc3dd739786995d29f8b6e38460ada9a07fd1a3"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"5ec0d4e389a214f94eb91658ad39165991df9e0a","unresolved":false,"context_lines":[{"line_number":1318,"context_line":"When used standalone"},{"line_number":1319,"context_line":"--------------------"},{"line_number":1320,"context_line":""},{"line_number":1321,"context_line":"When used without Nova, the operator needs to create a configuration drive"},{"line_number":1322,"context_line":"and give it to Ironic."},{"line_number":1323,"context_line":""},{"line_number":1324,"context_line":"As the format Ironic expects a ``gizped`` and ``base64 enconded``"}],"source_content_type":"text/x-rst","patch_set":5,"id":"9a80dd14_de6e65c7","line":1321,"in_reply_to":"9a80dd14_db9f5700","updated":"2015-03-20 17:24:20.000000000","message":"That\u0027s a good point! Will point to it","commit_id":"7dc3dd739786995d29f8b6e38460ada9a07fd1a3"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"1b23bca2d538c47b9216e1bdf4d2d74da419a1ad","unresolved":false,"context_lines":[{"line_number":1319,"context_line":"--------------------"},{"line_number":1320,"context_line":""},{"line_number":1321,"context_line":"When used without Nova, the operator needs to create a configuration drive"},{"line_number":1322,"context_line":"and give it to Ironic."},{"line_number":1323,"context_line":""},{"line_number":1324,"context_line":"As the format Ironic expects a ``gizped`` and ``base64 enconded``"},{"line_number":1325,"context_line":"ISO 9660 file with a ``config-2`` label. We provide a script at"}],"source_content_type":"text/x-rst","patch_set":5,"id":"9a80dd14_bba8e38c","line":1322,"updated":"2015-03-20 17:09:37.000000000","message":"I think this might sound a little better and provides users with the fact that, at least with the Agent, it can be a URL.\n\ns/give it to/provide the file or URL to/","commit_id":"7dc3dd739786995d29f8b6e38460ada9a07fd1a3"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"5ec0d4e389a214f94eb91658ad39165991df9e0a","unresolved":false,"context_lines":[{"line_number":1319,"context_line":"--------------------"},{"line_number":1320,"context_line":""},{"line_number":1321,"context_line":"When used without Nova, the operator needs to create a configuration drive"},{"line_number":1322,"context_line":"and give it to Ironic."},{"line_number":1323,"context_line":""},{"line_number":1324,"context_line":"As the format Ironic expects a ``gizped`` and ``base64 enconded``"},{"line_number":1325,"context_line":"ISO 9660 file with a ``config-2`` label. We provide a script at"}],"source_content_type":"text/x-rst","patch_set":5,"id":"9a80dd14_fe6889bb","line":1322,"in_reply_to":"9a80dd14_bba8e38c","updated":"2015-03-20 17:24:20.000000000","message":"+1, thanks. Btw, both Agent and iSCSI supports providing an URL[1]\n\n[1] https://github.com/openstack/ironic/blob/master/ironic/drivers/modules/deploy_utils.py#L498-L499","commit_id":"7dc3dd739786995d29f8b6e38460ada9a07fd1a3"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"df58f1750c9c3cb4261c7c3098c1187732da342e","unresolved":false,"context_lines":[{"line_number":1321,"context_line":"When used without Nova, the operator needs to create a configuration drive"},{"line_number":1322,"context_line":"and give it to Ironic."},{"line_number":1323,"context_line":""},{"line_number":1324,"context_line":"As the format Ironic expects a ``gizped`` and ``base64 enconded``"},{"line_number":1325,"context_line":"ISO 9660 file with a ``config-2`` label. We provide a script at"},{"line_number":1326,"context_line":"``ironic/tools/create_configdrive.py`` to help creating the configuration"},{"line_number":1327,"context_line":"drive files in the expected format."}],"source_content_type":"text/x-rst","patch_set":5,"id":"9a80dd14_df51040f","line":1324,"updated":"2015-03-20 16:27:14.000000000","message":"s/As the format Ironic/For the format of the configdrive, Ironic/\n\ns/gizped/gzipped/\n\ns/enconded/encoded/","commit_id":"7dc3dd739786995d29f8b6e38460ada9a07fd1a3"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"5ec0d4e389a214f94eb91658ad39165991df9e0a","unresolved":false,"context_lines":[{"line_number":1321,"context_line":"When used without Nova, the operator needs to create a configuration drive"},{"line_number":1322,"context_line":"and give it to Ironic."},{"line_number":1323,"context_line":""},{"line_number":1324,"context_line":"As the format Ironic expects a ``gizped`` and ``base64 enconded``"},{"line_number":1325,"context_line":"ISO 9660 file with a ``config-2`` label. We provide a script at"},{"line_number":1326,"context_line":"``ironic/tools/create_configdrive.py`` to help creating the configuration"},{"line_number":1327,"context_line":"drive files in the expected format."}],"source_content_type":"text/x-rst","patch_set":5,"id":"9a80dd14_fbdb3bea","line":1324,"in_reply_to":"9a80dd14_df51040f","updated":"2015-03-20 17:24:20.000000000","message":"Done","commit_id":"7dc3dd739786995d29f8b6e38460ada9a07fd1a3"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"1b23bca2d538c47b9216e1bdf4d2d74da419a1ad","unresolved":false,"context_lines":[{"line_number":1322,"context_line":"and give it to Ironic."},{"line_number":1323,"context_line":""},{"line_number":1324,"context_line":"As the format Ironic expects a ``gizped`` and ``base64 enconded``"},{"line_number":1325,"context_line":"ISO 9660 file with a ``config-2`` label. We provide a script at"},{"line_number":1326,"context_line":"``ironic/tools/create_configdrive.py`` to help creating the configuration"},{"line_number":1327,"context_line":"drive files in the expected format."},{"line_number":1328,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"9a80dd14_fb7c1b22","line":1325,"updated":"2015-03-20 17:09:37.000000000","message":"I believe the filesystem can also be of a vfat format with a size no larger than 64 MB.  It may be worth mentioning, although I\u0027ve not tested using vfat.","commit_id":"7dc3dd739786995d29f8b6e38460ada9a07fd1a3"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"600ce33306cc25f25c2c880c9b90e60a53305517","unresolved":false,"context_lines":[{"line_number":1322,"context_line":"and give it to Ironic."},{"line_number":1323,"context_line":""},{"line_number":1324,"context_line":"As the format Ironic expects a ``gizped`` and ``base64 enconded``"},{"line_number":1325,"context_line":"ISO 9660 file with a ``config-2`` label. We provide a script at"},{"line_number":1326,"context_line":"``ironic/tools/create_configdrive.py`` to help creating the configuration"},{"line_number":1327,"context_line":"drive files in the expected format."},{"line_number":1328,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"9a80dd14_e4cabc9e","line":1325,"in_reply_to":"9a80dd14_deabc585","updated":"2015-03-20 18:16:03.000000000","message":"IPA is hardcoded at 64MiB\n\nhttps://github.com/openstack/ironic-python-agent/blob/master/ironic_python_agent/shell/copy_configdrive_to_disk.sh#L62","commit_id":"7dc3dd739786995d29f8b6e38460ada9a07fd1a3"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"5ec0d4e389a214f94eb91658ad39165991df9e0a","unresolved":false,"context_lines":[{"line_number":1322,"context_line":"and give it to Ironic."},{"line_number":1323,"context_line":""},{"line_number":1324,"context_line":"As the format Ironic expects a ``gizped`` and ``base64 enconded``"},{"line_number":1325,"context_line":"ISO 9660 file with a ``config-2`` label. We provide a script at"},{"line_number":1326,"context_line":"``ironic/tools/create_configdrive.py`` to help creating the configuration"},{"line_number":1327,"context_line":"drive files in the expected format."},{"line_number":1328,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"9a80dd14_deabc585","line":1325,"in_reply_to":"9a80dd14_fb7c1b22","updated":"2015-03-20 17:24:20.000000000","message":"Yeah I mentioned only ISO because the script we have right now only works with ISO, I will put a note about the vfat.\n\nYeah, when nova generates the configdrive with vfat and can\u0027t determine the size of the data it truncates at 64MB[1], tho in Ironic we don\u0027t actually limit or care about the size. So I don\u0027t know if adding a note here about the 64MB would be a bit misleading\n\n[1] https://github.com/openstack/nova/blob/master/nova/virt/configdrive.py#L120-L123","commit_id":"7dc3dd739786995d29f8b6e38460ada9a07fd1a3"},{"author":{"_account_id":11680,"name":"John Stafford","email":"badcub01@gmail.com","username":"badCub"},"change_message_id":"0ce0d35ecd2b253f6aa5074d52fee64f80b944e4","unresolved":false,"context_lines":[{"line_number":1327,"context_line":"creating the configuration drive files in the expected format."},{"line_number":1328,"context_line":""},{"line_number":1329,"context_line":"To generate a configuration drive, you need pass to the script a directory"},{"line_number":1330,"context_line":"path containing files that will be inject into it and the output file,"},{"line_number":1331,"context_line":"for e.g::"},{"line_number":1332,"context_line":""},{"line_number":1333,"context_line":"    ./tools/create_configdrive.py -o /dir/configdrive /files"}],"source_content_type":"text/x-rst","patch_set":6,"id":"9a80dd14_219f6651","line":1330,"updated":"2015-03-20 17:57:45.000000000","message":"Nit: \"inject\" might read better as \"injected\"","commit_id":"fe58205a611eada5fe7bd661fb259f5a78a460bf"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"8eab670650e5017d455aafdbbc8a01a675b856cf","unresolved":false,"context_lines":[{"line_number":1327,"context_line":"creating the configuration drive files in the expected format."},{"line_number":1328,"context_line":""},{"line_number":1329,"context_line":"To generate a configuration drive, you need pass to the script a directory"},{"line_number":1330,"context_line":"path containing files that will be inject into it and the output file,"},{"line_number":1331,"context_line":"for e.g::"},{"line_number":1332,"context_line":""},{"line_number":1333,"context_line":"    ./tools/create_configdrive.py -o /dir/configdrive /files"}],"source_content_type":"text/x-rst","patch_set":6,"id":"9a80dd14_41461ac1","line":1330,"in_reply_to":"9a80dd14_219f6651","updated":"2015-03-20 18:00:41.000000000","message":"Done","commit_id":"fe58205a611eada5fe7bd661fb259f5a78a460bf"},{"author":{"_account_id":11680,"name":"John Stafford","email":"badcub01@gmail.com","username":"badCub"},"change_message_id":"0ce0d35ecd2b253f6aa5074d52fee64f80b944e4","unresolved":false,"context_lines":[{"line_number":1366,"context_line":""},{"line_number":1367,"context_line":"If the guest OS doesn\u0027t support accessing devices by labels, you can use"},{"line_number":1368,"context_line":"another tools such as ``blkid`` to identify which device corresponds to"},{"line_number":1369,"context_line":"the configuration drive and mount it. For e.g::"},{"line_number":1370,"context_line":""},{"line_number":1371,"context_line":"    CONFIG_DEV\u003d$(blkid -t LABEL\u003d\"config-2\" -odevice)"},{"line_number":1372,"context_line":"    mkdir -p /mnt/config"}],"source_content_type":"text/x-rst","patch_set":6,"id":"9a80dd14_a108b691","line":1369,"updated":"2015-03-20 17:57:45.000000000","message":"Nit: another\u003eother","commit_id":"fe58205a611eada5fe7bd661fb259f5a78a460bf"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"8eab670650e5017d455aafdbbc8a01a675b856cf","unresolved":false,"context_lines":[{"line_number":1366,"context_line":""},{"line_number":1367,"context_line":"If the guest OS doesn\u0027t support accessing devices by labels, you can use"},{"line_number":1368,"context_line":"another tools such as ``blkid`` to identify which device corresponds to"},{"line_number":1369,"context_line":"the configuration drive and mount it. For e.g::"},{"line_number":1370,"context_line":""},{"line_number":1371,"context_line":"    CONFIG_DEV\u003d$(blkid -t LABEL\u003d\"config-2\" -odevice)"},{"line_number":1372,"context_line":"    mkdir -p /mnt/config"}],"source_content_type":"text/x-rst","patch_set":6,"id":"9a80dd14_61415ea5","line":1369,"in_reply_to":"9a80dd14_a108b691","updated":"2015-03-20 18:00:41.000000000","message":"Done","commit_id":"fe58205a611eada5fe7bd661fb259f5a78a460bf"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a7b21d46f1abde75d6757fd4f02330cb9f73453c","unresolved":false,"context_lines":[{"line_number":1328,"context_line":""},{"line_number":1329,"context_line":"To generate a configuration drive, you need pass to the script a directory"},{"line_number":1330,"context_line":"path containing files that will be injected into it and the output file,"},{"line_number":1331,"context_line":"for e.g::"},{"line_number":1332,"context_line":""},{"line_number":1333,"context_line":"    ./tools/create_configdrive.py -o /dir/configdrive /files"},{"line_number":1334,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"1a6ced46_bbbb4d71","line":1331,"updated":"2015-03-23 08:43:31.000000000","message":"nit: IIRC \u0027for\u0027 is redundant, e.g. already means \"for example\"","commit_id":"deef9352f757cc8466650bcaca9ba6009dd5681a"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"69e404d7a0730fb7f7753cc061b3c31859443b1a","unresolved":false,"context_lines":[{"line_number":1328,"context_line":""},{"line_number":1329,"context_line":"To generate a configuration drive, you need pass to the script a directory"},{"line_number":1330,"context_line":"path containing files that will be injected into it and the output file,"},{"line_number":1331,"context_line":"for e.g::"},{"line_number":1332,"context_line":""},{"line_number":1333,"context_line":"    ./tools/create_configdrive.py -o /dir/configdrive /files"},{"line_number":1334,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"1a6ced46_a43a4e34","line":1331,"in_reply_to":"1a6ced46_bbbb4d71","updated":"2015-03-23 09:44:20.000000000","message":"Done","commit_id":"deef9352f757cc8466650bcaca9ba6009dd5681a"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a7b21d46f1abde75d6757fd4f02330cb9f73453c","unresolved":false,"context_lines":[{"line_number":1346,"context_line":""},{"line_number":1347,"context_line":""},{"line_number":1348,"context_line":"Once created it can be given to Ironic as part of the ``ironic"},{"line_number":1349,"context_line":"node-set-provision-state`` command when deploying a node. For e.g::"},{"line_number":1350,"context_line":""},{"line_number":1351,"context_line":"    ironic node-set-provision-state active --config-drive /dir/configdrive"},{"line_number":1352,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"1a6ced46_fbace537","line":1349,"updated":"2015-03-23 08:43:31.000000000","message":"ditto (and more below)","commit_id":"deef9352f757cc8466650bcaca9ba6009dd5681a"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"69e404d7a0730fb7f7753cc061b3c31859443b1a","unresolved":false,"context_lines":[{"line_number":1346,"context_line":""},{"line_number":1347,"context_line":""},{"line_number":1348,"context_line":"Once created it can be given to Ironic as part of the ``ironic"},{"line_number":1349,"context_line":"node-set-provision-state`` command when deploying a node. For e.g::"},{"line_number":1350,"context_line":""},{"line_number":1351,"context_line":"    ironic node-set-provision-state active --config-drive /dir/configdrive"},{"line_number":1352,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"1a6ced46_e4cd265f","line":1349,"in_reply_to":"1a6ced46_fbace537","updated":"2015-03-23 09:44:20.000000000","message":"Done","commit_id":"deef9352f757cc8466650bcaca9ba6009dd5681a"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"53073977900d64c5c748bfc5ec32abf46fee1e23","unresolved":false,"context_lines":[{"line_number":1382,"context_line":""},{"line_number":1383,"context_line":"* Since Ironic uses a disk partition as the configuration drive,"},{"line_number":1384,"context_line":"  it will only work with ``cloud-init`` version **\u003e\u003d 0.7.5** [`link"},{"line_number":1385,"context_line":"  \u003chttps://github.com/number5/cloud-init/blob/master/ChangeLog\u003e`_]."},{"line_number":1386,"context_line":""},{"line_number":1387,"context_line":""},{"line_number":1388,"context_line":"* ``Cloud-init`` have a collection of data source modules, so when"}],"source_content_type":"text/x-rst","patch_set":12,"id":"da9b358b_c3b7d9d6","line":1385,"updated":"2015-03-31 22:53:05.000000000","message":"Eck; this is some cloud-init mirror hosted by some random person/company. Probably not the best thing to link to :-P\n\nhttp://bazaar.launchpad.net/~cloud-init-dev/cloud-init/trunk/view/head:/ChangeLog","commit_id":"8d2b558a9a49db3d2c8883acfe6a749700550ea5"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"e37ce2efead845ffe9edc5c7af985a078831735c","unresolved":false,"context_lines":[{"line_number":1382,"context_line":""},{"line_number":1383,"context_line":"* Since Ironic uses a disk partition as the configuration drive,"},{"line_number":1384,"context_line":"  it will only work with ``cloud-init`` version **\u003e\u003d 0.7.5** [`link"},{"line_number":1385,"context_line":"  \u003chttps://github.com/number5/cloud-init/blob/master/ChangeLog\u003e`_]."},{"line_number":1386,"context_line":""},{"line_number":1387,"context_line":""},{"line_number":1388,"context_line":"* ``Cloud-init`` have a collection of data source modules, so when"}],"source_content_type":"text/x-rst","patch_set":12,"id":"da9b358b_e64f8abb","line":1385,"in_reply_to":"da9b358b_c3b7d9d6","updated":"2015-04-01 00:14:04.000000000","message":"The bzr one is the current offical one :)","commit_id":"8d2b558a9a49db3d2c8883acfe6a749700550ea5"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"b18b435106f36f7ef4fc29391acecfbd5a2c07e7","unresolved":false,"context_lines":[{"line_number":1382,"context_line":""},{"line_number":1383,"context_line":"* Since Ironic uses a disk partition as the configuration drive,"},{"line_number":1384,"context_line":"  it will only work with ``cloud-init`` version **\u003e\u003d 0.7.5** [`link"},{"line_number":1385,"context_line":"  \u003chttps://github.com/number5/cloud-init/blob/master/ChangeLog\u003e`_]."},{"line_number":1386,"context_line":""},{"line_number":1387,"context_line":""},{"line_number":1388,"context_line":"* ``Cloud-init`` have a collection of data source modules, so when"}],"source_content_type":"text/x-rst","patch_set":12,"id":"da9b358b_25867f13","line":1385,"in_reply_to":"da9b358b_e64f8abb","updated":"2015-04-01 08:35:54.000000000","message":"Oh thanks much for that! I will update the patch :)","commit_id":"8d2b558a9a49db3d2c8883acfe6a749700550ea5"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"83a1646a1602d592569f9f9e350280676efe1dbe","unresolved":false,"context_lines":[{"line_number":1297,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":1298,"context_line":""},{"line_number":1299,"context_line":"Starting with the Kilo release, Ironic supports exposing a configuration"},{"line_number":1300,"context_line":"drive image to the instances."},{"line_number":1301,"context_line":""},{"line_number":1302,"context_line":"The configuration drive is usually used in conjunction with Nova, but"},{"line_number":1303,"context_line":"Ironic also offers a standalone way of using it. The following sections"}],"source_content_type":"text/x-rst","patch_set":13,"id":"baa041b7_fa9f89b2","line":1300,"updated":"2015-04-01 15:41:40.000000000","message":"It just occurred to me that we have to be more precise now. I think we need to add the microversion too :-(","commit_id":"ca6e577d294cb335117cf23166dc84498a880349"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"c832a0e0c5f5fc50c015a9290672cd4025df53d2","unresolved":false,"context_lines":[{"line_number":1297,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":1298,"context_line":""},{"line_number":1299,"context_line":"Starting with the Kilo release, Ironic supports exposing a configuration"},{"line_number":1300,"context_line":"drive image to the instances."},{"line_number":1301,"context_line":""},{"line_number":1302,"context_line":"The configuration drive is usually used in conjunction with Nova, but"},{"line_number":1303,"context_line":"Ironic also offers a standalone way of using it. The following sections"}],"source_content_type":"text/x-rst","patch_set":13,"id":"baa041b7_7d513062","line":1300,"in_reply_to":"baa041b7_2a600035","updated":"2015-04-01 17:22:09.000000000","message":"Thx Ramakrishnan. Oh, wait. I think I\u0027m totally wrong here. I think this is available in juno w/o needing any microversion. (Even the client, as long as you have an updated client that supports --config-drive, you\u0027re good, no microversion needs to be specified.)","commit_id":"ca6e577d294cb335117cf23166dc84498a880349"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"46aff8685b4a90e830d54ea69efb5655dc32e2ac","unresolved":false,"context_lines":[{"line_number":1297,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":1298,"context_line":""},{"line_number":1299,"context_line":"Starting with the Kilo release, Ironic supports exposing a configuration"},{"line_number":1300,"context_line":"drive image to the instances."},{"line_number":1301,"context_line":""},{"line_number":1302,"context_line":"The configuration drive is usually used in conjunction with Nova, but"},{"line_number":1303,"context_line":"Ironic also offers a standalone way of using it. The following sections"}],"source_content_type":"text/x-rst","patch_set":13,"id":"baa041b7_2a600035","line":1300,"in_reply_to":"baa041b7_fa9f89b2","updated":"2015-04-01 17:05:25.000000000","message":"I think this just says about the configdrive feature and not with the API alone.  We could populate instance_info[\u0027configdrive\u0027] ourselves before deploying the node (like nova) and isn\u0027t dependent on microversion.","commit_id":"ca6e577d294cb335117cf23166dc84498a880349"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"83a1646a1602d592569f9f9e350280676efe1dbe","unresolved":false,"context_lines":[{"line_number":1332,"context_line":"For the format of the configuration drive, Ironic expects a ``gzipped``"},{"line_number":1333,"context_line":"and ``base64`` encoded ISO 9660 [*]_ file with a ``config-2`` label. The"},{"line_number":1334,"context_line":"`Ironic client \u003chttps://github.com/openstack/python-ironicclient\u003e`_"},{"line_number":1335,"context_line":"can generate a configuration drive in the expect format, to do that"},{"line_number":1336,"context_line":"you need to pass a directory path containing the files that will"},{"line_number":1337,"context_line":"be injected into it via the ``--config-drive`` parameter of the"},{"line_number":1338,"context_line":"``node-set-privision-state`` command, e.g::"}],"source_content_type":"text/x-rst","patch_set":13,"id":"baa041b7_8f8961cd","line":1335,"updated":"2015-04-01 15:41:40.000000000","message":"s/expect/expected/\n\nmaybe create a new sentence. s/format, to/format. To/","commit_id":"ca6e577d294cb335117cf23166dc84498a880349"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"9e2d37e061cf833f6ca0f0b597286972539f5776","unresolved":false,"context_lines":[{"line_number":1332,"context_line":"For the format of the configuration drive, Ironic expects a ``gzipped``"},{"line_number":1333,"context_line":"and ``base64`` encoded ISO 9660 [*]_ file with a ``config-2`` label. The"},{"line_number":1334,"context_line":"`Ironic client \u003chttps://github.com/openstack/python-ironicclient\u003e`_"},{"line_number":1335,"context_line":"can generate a configuration drive in the expect format, to do that"},{"line_number":1336,"context_line":"you need to pass a directory path containing the files that will"},{"line_number":1337,"context_line":"be injected into it via the ``--config-drive`` parameter of the"},{"line_number":1338,"context_line":"``node-set-privision-state`` command, e.g::"}],"source_content_type":"text/x-rst","patch_set":13,"id":"baa041b7_720036ab","line":1335,"in_reply_to":"baa041b7_8f8961cd","updated":"2015-04-01 20:00:21.000000000","message":"Done","commit_id":"ca6e577d294cb335117cf23166dc84498a880349"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"83a1646a1602d592569f9f9e350280676efe1dbe","unresolved":false,"context_lines":[{"line_number":1335,"context_line":"can generate a configuration drive in the expect format, to do that"},{"line_number":1336,"context_line":"you need to pass a directory path containing the files that will"},{"line_number":1337,"context_line":"be injected into it via the ``--config-drive`` parameter of the"},{"line_number":1338,"context_line":"``node-set-privision-state`` command, e.g::"},{"line_number":1339,"context_line":""},{"line_number":1340,"context_line":"    ironic node-set-provision-state --config-drive /dir/configdrive_files"},{"line_number":1341,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"baa041b7_cfd089cc","line":1338,"updated":"2015-04-01 15:41:40.000000000","message":"s/privision/provision/","commit_id":"ca6e577d294cb335117cf23166dc84498a880349"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"9e2d37e061cf833f6ca0f0b597286972539f5776","unresolved":false,"context_lines":[{"line_number":1335,"context_line":"can generate a configuration drive in the expect format, to do that"},{"line_number":1336,"context_line":"you need to pass a directory path containing the files that will"},{"line_number":1337,"context_line":"be injected into it via the ``--config-drive`` parameter of the"},{"line_number":1338,"context_line":"``node-set-privision-state`` command, e.g::"},{"line_number":1339,"context_line":""},{"line_number":1340,"context_line":"    ironic node-set-provision-state --config-drive /dir/configdrive_files"},{"line_number":1341,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"baa041b7_522c124a","line":1338,"in_reply_to":"baa041b7_cfd089cc","updated":"2015-04-01 20:00:21.000000000","message":"Done","commit_id":"ca6e577d294cb335117cf23166dc84498a880349"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"83a1646a1602d592569f9f9e350280676efe1dbe","unresolved":false,"context_lines":[{"line_number":1337,"context_line":"be injected into it via the ``--config-drive`` parameter of the"},{"line_number":1338,"context_line":"``node-set-privision-state`` command, e.g::"},{"line_number":1339,"context_line":""},{"line_number":1340,"context_line":"    ironic node-set-provision-state --config-drive /dir/configdrive_files"},{"line_number":1341,"context_line":""},{"line_number":1342,"context_line":""},{"line_number":1343,"context_line":"Accessing the configuration drive data"}],"source_content_type":"text/x-rst","patch_set":13,"id":"baa041b7_8f5e0144","line":1340,"updated":"2015-04-01 15:41:40.000000000","message":"Maybe add \u0027active\u0027 to this, since it only works when setting to active state?\n\neg ironic node-set-provision-state --config-drive /dir/configdrive_files node-identifier active","commit_id":"ca6e577d294cb335117cf23166dc84498a880349"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"46aff8685b4a90e830d54ea69efb5655dc32e2ac","unresolved":false,"context_lines":[{"line_number":1337,"context_line":"be injected into it via the ``--config-drive`` parameter of the"},{"line_number":1338,"context_line":"``node-set-privision-state`` command, e.g::"},{"line_number":1339,"context_line":""},{"line_number":1340,"context_line":"    ironic node-set-provision-state --config-drive /dir/configdrive_files"},{"line_number":1341,"context_line":""},{"line_number":1342,"context_line":""},{"line_number":1343,"context_line":"Accessing the configuration drive data"}],"source_content_type":"text/x-rst","patch_set":13,"id":"baa041b7_ea59f88f","line":1340,"in_reply_to":"baa041b7_8f5e0144","updated":"2015-04-01 17:05:25.000000000","message":"+1 \n\nnow if you do this through API, this is dependent on microversion :)","commit_id":"ca6e577d294cb335117cf23166dc84498a880349"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"9e2d37e061cf833f6ca0f0b597286972539f5776","unresolved":false,"context_lines":[{"line_number":1337,"context_line":"be injected into it via the ``--config-drive`` parameter of the"},{"line_number":1338,"context_line":"``node-set-privision-state`` command, e.g::"},{"line_number":1339,"context_line":""},{"line_number":1340,"context_line":"    ironic node-set-provision-state --config-drive /dir/configdrive_files"},{"line_number":1341,"context_line":""},{"line_number":1342,"context_line":""},{"line_number":1343,"context_line":"Accessing the configuration drive data"}],"source_content_type":"text/x-rst","patch_set":13,"id":"baa041b7_921a9a16","line":1340,"in_reply_to":"baa041b7_ea59f88f","updated":"2015-04-01 20:00:21.000000000","message":"Done","commit_id":"ca6e577d294cb335117cf23166dc84498a880349"},{"author":{"_account_id":3099,"name":"David Shrewsbury","email":"dshrewsb@redhat.com","username":"dshrews"},"change_message_id":"47f630cad9ade6ad7c048fdbe149c68eb7ed6912","unresolved":false,"context_lines":[{"line_number":1345,"context_line":""},{"line_number":1346,"context_line":"When the configuration drive is enabled, Ironic will then create a"},{"line_number":1347,"context_line":"partition on the instance disk and write the configuration drive image"},{"line_number":1348,"context_line":"onto it. To use the configuration drive you need to mount it, if the guest"},{"line_number":1349,"context_line":"OS supports accessing devices by labels, the configuration drive partition"},{"line_number":1350,"context_line":"can be mounted as the ``/dev/disk/by-label/config-2`` device, e.g::"},{"line_number":1351,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"da9b358b_255d5679","line":1348,"updated":"2015-04-01 12:36:29.000000000","message":"nit: If you push another patch, this is a run-on sentence. Probably want:\n\n\"To use the configuration drive, you need to mount it. If the guest...\"","commit_id":"ca6e577d294cb335117cf23166dc84498a880349"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"9e2d37e061cf833f6ca0f0b597286972539f5776","unresolved":false,"context_lines":[{"line_number":1345,"context_line":""},{"line_number":1346,"context_line":"When the configuration drive is enabled, Ironic will then create a"},{"line_number":1347,"context_line":"partition on the instance disk and write the configuration drive image"},{"line_number":1348,"context_line":"onto it. To use the configuration drive you need to mount it, if the guest"},{"line_number":1349,"context_line":"OS supports accessing devices by labels, the configuration drive partition"},{"line_number":1350,"context_line":"can be mounted as the ``/dev/disk/by-label/config-2`` device, e.g::"},{"line_number":1351,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"baa041b7_f2868612","line":1348,"in_reply_to":"baa041b7_3ab6113e","updated":"2015-04-01 20:00:21.000000000","message":"Done","commit_id":"ca6e577d294cb335117cf23166dc84498a880349"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"83a1646a1602d592569f9f9e350280676efe1dbe","unresolved":false,"context_lines":[{"line_number":1345,"context_line":""},{"line_number":1346,"context_line":"When the configuration drive is enabled, Ironic will then create a"},{"line_number":1347,"context_line":"partition on the instance disk and write the configuration drive image"},{"line_number":1348,"context_line":"onto it. To use the configuration drive you need to mount it, if the guest"},{"line_number":1349,"context_line":"OS supports accessing devices by labels, the configuration drive partition"},{"line_number":1350,"context_line":"can be mounted as the ``/dev/disk/by-label/config-2`` device, e.g::"},{"line_number":1351,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"baa041b7_3ab6113e","line":1348,"in_reply_to":"da9b358b_255d5679","updated":"2015-04-01 15:41:40.000000000","message":"+1","commit_id":"ca6e577d294cb335117cf23166dc84498a880349"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"46aff8685b4a90e830d54ea69efb5655dc32e2ac","unresolved":false,"context_lines":[{"line_number":1382,"context_line":""},{"line_number":1383,"context_line":"* Since Ironic uses a disk partition as the configuration drive,"},{"line_number":1384,"context_line":"  it will only work with ``cloud-init`` version **\u003e\u003d 0.7.5** [`link"},{"line_number":1385,"context_line":"  \u003chttp://bazaar.launchpad.net/~cloud-init-dev/cloud-init/trunk/view/head:/ChangeLog\u003e`_]."},{"line_number":1386,"context_line":""},{"line_number":1387,"context_line":""},{"line_number":1388,"context_line":"* ``Cloud-init`` have a collection of data source modules, so when"}],"source_content_type":"text/x-rst","patch_set":13,"id":"baa041b7_8aadcc33","line":1385,"updated":"2015-04-01 17:05:25.000000000","message":"http://bazaar.launchpad.net/~cloud-init-dev/cloud-init/trunk/view/head:/ChangeLog#L96 (may be specify line number to avoid people searching within Changelog)","commit_id":"ca6e577d294cb335117cf23166dc84498a880349"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"876a6be05ee8c8df7c4dc063a489ee59f17eaa65","unresolved":false,"context_lines":[{"line_number":1382,"context_line":""},{"line_number":1383,"context_line":"* Since Ironic uses a disk partition as the configuration drive,"},{"line_number":1384,"context_line":"  it will only work with ``cloud-init`` version **\u003e\u003d 0.7.5** [`link"},{"line_number":1385,"context_line":"  \u003chttp://bazaar.launchpad.net/~cloud-init-dev/cloud-init/trunk/view/head:/ChangeLog\u003e`_]."},{"line_number":1386,"context_line":""},{"line_number":1387,"context_line":""},{"line_number":1388,"context_line":"* ``Cloud-init`` have a collection of data source modules, so when"}],"source_content_type":"text/x-rst","patch_set":13,"id":"baa041b7_ec591090","line":1385,"in_reply_to":"baa041b7_8aadcc33","updated":"2015-04-01 19:33:42.000000000","message":"I\u0027d rather not do that, the changelog lines change over time ;)","commit_id":"ca6e577d294cb335117cf23166dc84498a880349"},{"author":{"_account_id":3099,"name":"David Shrewsbury","email":"dshrewsb@redhat.com","username":"dshrews"},"change_message_id":"47f630cad9ade6ad7c048fdbe149c68eb7ed6912","unresolved":false,"context_lines":[{"line_number":1385,"context_line":"  \u003chttp://bazaar.launchpad.net/~cloud-init-dev/cloud-init/trunk/view/head:/ChangeLog\u003e`_]."},{"line_number":1386,"context_line":""},{"line_number":1387,"context_line":""},{"line_number":1388,"context_line":"* ``Cloud-init`` have a collection of data source modules, so when"},{"line_number":1389,"context_line":"  building the image with `disk-image-builder`_ we have to define"},{"line_number":1390,"context_line":"  ``DIB_CLOUD_INIT_DATASOURCES`` environment variable and set the"},{"line_number":1391,"context_line":"  appropriate sources to enable the configuration driver, e.g::"}],"source_content_type":"text/x-rst","patch_set":13,"id":"da9b358b_659c7e0f","line":1388,"updated":"2015-04-01 12:36:29.000000000","message":"nit: has a collection","commit_id":"ca6e577d294cb335117cf23166dc84498a880349"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"9e2d37e061cf833f6ca0f0b597286972539f5776","unresolved":false,"context_lines":[{"line_number":1385,"context_line":"  \u003chttp://bazaar.launchpad.net/~cloud-init-dev/cloud-init/trunk/view/head:/ChangeLog\u003e`_]."},{"line_number":1386,"context_line":""},{"line_number":1387,"context_line":""},{"line_number":1388,"context_line":"* ``Cloud-init`` have a collection of data source modules, so when"},{"line_number":1389,"context_line":"  building the image with `disk-image-builder`_ we have to define"},{"line_number":1390,"context_line":"  ``DIB_CLOUD_INIT_DATASOURCES`` environment variable and set the"},{"line_number":1391,"context_line":"  appropriate sources to enable the configuration driver, e.g::"}],"source_content_type":"text/x-rst","patch_set":13,"id":"baa041b7_528f7223","line":1388,"in_reply_to":"da9b358b_659c7e0f","updated":"2015-04-01 20:00:21.000000000","message":"Done","commit_id":"ca6e577d294cb335117cf23166dc84498a880349"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"46aff8685b4a90e830d54ea69efb5655dc32e2ac","unresolved":false,"context_lines":[{"line_number":1388,"context_line":"* ``Cloud-init`` have a collection of data source modules, so when"},{"line_number":1389,"context_line":"  building the image with `disk-image-builder`_ we have to define"},{"line_number":1390,"context_line":"  ``DIB_CLOUD_INIT_DATASOURCES`` environment variable and set the"},{"line_number":1391,"context_line":"  appropriate sources to enable the configuration driver, e.g::"},{"line_number":1392,"context_line":""},{"line_number":1393,"context_line":"    DIB_CLOUD_INIT_DATASOURCES\u003d\"ConfigDrive, OpenStack\" disk-image-create -o fedora-cloud-image fedora baremetal"},{"line_number":1394,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"baa041b7_6a81688f","line":1391,"updated":"2015-04-01 17:05:25.000000000","message":"s/driver/drive","commit_id":"ca6e577d294cb335117cf23166dc84498a880349"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"9e2d37e061cf833f6ca0f0b597286972539f5776","unresolved":false,"context_lines":[{"line_number":1388,"context_line":"* ``Cloud-init`` have a collection of data source modules, so when"},{"line_number":1389,"context_line":"  building the image with `disk-image-builder`_ we have to define"},{"line_number":1390,"context_line":"  ``DIB_CLOUD_INIT_DATASOURCES`` environment variable and set the"},{"line_number":1391,"context_line":"  appropriate sources to enable the configuration driver, e.g::"},{"line_number":1392,"context_line":""},{"line_number":1393,"context_line":"    DIB_CLOUD_INIT_DATASOURCES\u003d\"ConfigDrive, OpenStack\" disk-image-create -o fedora-cloud-image fedora baremetal"},{"line_number":1394,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"baa041b7_3294ee35","line":1391,"in_reply_to":"baa041b7_6a81688f","updated":"2015-04-01 20:00:21.000000000","message":"Done","commit_id":"ca6e577d294cb335117cf23166dc84498a880349"}],"tools/contrib/create_configdrive.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"eda9afac69cd4a26f36b293cd8350957aedf0a9b","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"            # Compress file"},{"line_number":56,"context_line":"            tmpfile.seek(0)"},{"line_number":57,"context_line":"            g \u003d gzip.GzipFile(fileobj\u003dtmpzipfile, mode\u003d\u0027wb\u0027)"},{"line_number":58,"context_line":"            g.writelines(tmpfile)"},{"line_number":59,"context_line":"            g.close()"},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1a6ced46_be03d20b","line":57,"updated":"2015-03-25 08:58:23.000000000","message":"nit:\n\n with gzip.GzipFile(fileobj\u003dtmpzipfile, mode\u003d\u0027wb\u0027) as g:","commit_id":"01d2e4c449b7c2f135d983269944e48370e0340f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"9d0bdb76e7206912fd8b474d629902dabaad85ca","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"            # Compress file"},{"line_number":56,"context_line":"            tmpfile.seek(0)"},{"line_number":57,"context_line":"            g \u003d gzip.GzipFile(fileobj\u003dtmpzipfile, mode\u003d\u0027wb\u0027)"},{"line_number":58,"context_line":"            g.writelines(tmpfile)"},{"line_number":59,"context_line":"            g.close()"},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1a6ced46_e5ebe810","line":57,"in_reply_to":"1a6ced46_21a33550","updated":"2015-03-25 16:44:16.000000000","message":"good catch, if we move this to client, we\u0027ll have to support py26 for some time","commit_id":"01d2e4c449b7c2f135d983269944e48370e0340f"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"a7b549a863ef41552eb827eb22204b4dfe130ac4","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"            # Compress file"},{"line_number":56,"context_line":"            tmpfile.seek(0)"},{"line_number":57,"context_line":"            g \u003d gzip.GzipFile(fileobj\u003dtmpzipfile, mode\u003d\u0027wb\u0027)"},{"line_number":58,"context_line":"            g.writelines(tmpfile)"},{"line_number":59,"context_line":"            g.close()"},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1a6ced46_21a33550","line":57,"in_reply_to":"1a6ced46_be03d20b","updated":"2015-03-25 16:42:24.000000000","message":"Note: That was only supported starting in Python 2.7.  Not sure if desire to support Python 2.6 for this script.  I would vote for Python 2.7.","commit_id":"01d2e4c449b7c2f135d983269944e48370e0340f"}],"tools/create_configdrive.py":[{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"df58f1750c9c3cb4261c7c3098c1187732da342e","unresolved":false,"context_lines":[{"line_number":66,"context_line":"def check_dir(path):"},{"line_number":67,"context_line":"    \"\"\"Check if a given directory exists and is readable.\"\"\""},{"line_number":68,"context_line":"    if not os.path.isdir(path):"},{"line_number":69,"context_line":"        sys.stderr.write(\u0027The argument \"%s\" is not a valid directory\u0027 % path)"},{"line_number":70,"context_line":"        sys.exit(1)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    if not os.access(path, os.R_OK):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a80dd14_3f730081","line":69,"updated":"2015-03-20 16:27:14.000000000","message":"s/sys.stderr.write/sys.exit/\n\nsys.exit() will write message to stderr and then exit with 1\n\nhttps://docs.python.org/2/library/sys.html","commit_id":"7dc3dd739786995d29f8b6e38460ada9a07fd1a3"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"5ec0d4e389a214f94eb91658ad39165991df9e0a","unresolved":false,"context_lines":[{"line_number":66,"context_line":"def check_dir(path):"},{"line_number":67,"context_line":"    \"\"\"Check if a given directory exists and is readable.\"\"\""},{"line_number":68,"context_line":"    if not os.path.isdir(path):"},{"line_number":69,"context_line":"        sys.stderr.write(\u0027The argument \"%s\" is not a valid directory\u0027 % path)"},{"line_number":70,"context_line":"        sys.exit(1)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    if not os.access(path, os.R_OK):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a80dd14_1f271c64","line":69,"in_reply_to":"9a80dd14_3f730081","updated":"2015-03-20 17:24:20.000000000","message":"Awesome! Thanks","commit_id":"7dc3dd739786995d29f8b6e38460ada9a07fd1a3"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"b5767486ebc2d92bbe70ceb6c6c9c0a7c5582506","unresolved":false,"context_lines":[{"line_number":44,"context_line":"                                  path],"},{"line_number":45,"context_line":"                                 stdout\u003dsubprocess.PIPE,"},{"line_number":46,"context_line":"                                 stderr\u003dsubprocess.PIPE)"},{"line_number":47,"context_line":"            stdout, stderr \u003d p.communicate()"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"            # Compress file"},{"line_number":50,"context_line":"            tmpfile.seek(0)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a80dd14_c1804ac1","line":47,"updated":"2015-03-20 18:01:57.000000000","message":"Should there be a check to make sure that p.returncode is 0?","commit_id":"fe58205a611eada5fe7bd661fb259f5a78a460bf"},{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"aee8eb7f8e1cbd216c3a05042bb077a24b3e3278","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# -*- coding: utf-8 -*-"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Copyright 2015 Red Hat, Inc."},{"line_number":4,"context_line":"# All Rights Reserved."}],"source_content_type":"text/x-python","patch_set":8,"id":"1a6ced46_7f30af9e","line":1,"updated":"2015-03-24 07:21:49.000000000","message":"Can we add below into first line, because this is a main script which can be executed by command line, make sense?\n\n  #!/usr/bin/env python","commit_id":"deef9352f757cc8466650bcaca9ba6009dd5681a"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"f243a4da0bbb8133c7a50b4a96be3b78b4b90483","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# -*- coding: utf-8 -*-"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Copyright 2015 Red Hat, Inc."},{"line_number":4,"context_line":"# All Rights Reserved."}],"source_content_type":"text/x-python","patch_set":8,"id":"1a6ced46_f4d121fc","line":1,"in_reply_to":"1a6ced46_7f30af9e","updated":"2015-03-24 09:46:03.000000000","message":"I does yes, will add","commit_id":"deef9352f757cc8466650bcaca9ba6009dd5681a"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"d7b31b9c976c4c1923f6509bdafa5519c224f38e","unresolved":false,"context_lines":[{"line_number":54,"context_line":"            # Compress file"},{"line_number":55,"context_line":"            tmpfile.seek(0)"},{"line_number":56,"context_line":"            g \u003d gzip.GzipFile(fileobj\u003dtmpzipfile, mode\u003d\u0027wb\u0027)"},{"line_number":57,"context_line":"            g.writelines(tmpfile.readlines())"},{"line_number":58,"context_line":"            g.close()"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"            # We don\u0027t need to save it to memory, let\u0027s write it directly"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a6ced46_ef5a5f4f","line":57,"updated":"2015-03-23 10:10:24.000000000","message":"You can use \"tmpfile\" as iterator: g.writelines(tmpfile). \"Files support the iterator protocol. Each iteration returns the same result as readline(), and iteration ends when the readline() method returns an empty string.\"","commit_id":"deef9352f757cc8466650bcaca9ba6009dd5681a"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"8859ff126cca6a569c70093369b7a60d173c4aee","unresolved":false,"context_lines":[{"line_number":54,"context_line":"            # Compress file"},{"line_number":55,"context_line":"            tmpfile.seek(0)"},{"line_number":56,"context_line":"            g \u003d gzip.GzipFile(fileobj\u003dtmpzipfile, mode\u003d\u0027wb\u0027)"},{"line_number":57,"context_line":"            g.writelines(tmpfile.readlines())"},{"line_number":58,"context_line":"            g.close()"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"            # We don\u0027t need to save it to memory, let\u0027s write it directly"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a6ced46_aa9e9554","line":57,"in_reply_to":"1a6ced46_ef5a5f4f","updated":"2015-03-23 10:22:27.000000000","message":"O cool, I didn\u0027t know that. If it happens to me to put a new patch-set up I will change it :)\n\nThank you","commit_id":"deef9352f757cc8466650bcaca9ba6009dd5681a"},{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"aee8eb7f8e1cbd216c3a05042bb077a24b3e3278","unresolved":false,"context_lines":[{"line_number":73,"context_line":"    if not os.path.isdir(path):"},{"line_number":74,"context_line":"        sys.exit(\u0027The argument \"%s\" is not a valid directory\u0027 % path)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    if not os.access(path, os.R_OK):"},{"line_number":77,"context_line":"        sys.exit(\u0027The directory \"%s\" is not readable\u0027 % path)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1a6ced46_dfca834e","line":76,"updated":"2015-03-24 07:21:49.000000000","message":"I understand the input should be a valid file, so should we add more check logic as below?\n\n    if not (os.access(path, os.R_OK) and os.path.isfile(path)):","commit_id":"deef9352f757cc8466650bcaca9ba6009dd5681a"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"f243a4da0bbb8133c7a50b4a96be3b78b4b90483","unresolved":false,"context_lines":[{"line_number":73,"context_line":"    if not os.path.isdir(path):"},{"line_number":74,"context_line":"        sys.exit(\u0027The argument \"%s\" is not a valid directory\u0027 % path)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    if not os.access(path, os.R_OK):"},{"line_number":77,"context_line":"        sys.exit(\u0027The directory \"%s\" is not readable\u0027 % path)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1a6ced46_d402656e","line":76,"in_reply_to":"1a6ced46_dfca834e","updated":"2015-03-24 09:46:03.000000000","message":"The input should be a valid directory, and we are copying the contents of that directory inside the configdrive, so isfile() is not what we are looking at here","commit_id":"deef9352f757cc8466650bcaca9ba6009dd5681a"},{"author":{"_account_id":3099,"name":"David Shrewsbury","email":"dshrewsb@redhat.com","username":"dshrews"},"change_message_id":"009190fc2e6b7ccddc22c09f78214d63151cee4e","unresolved":false,"context_lines":[{"line_number":79,"context_line":""},{"line_number":80,"context_line":"def main():"},{"line_number":81,"context_line":"    \"\"\"Main function.\"\"\""},{"line_number":82,"context_line":"    usage \u003d \u0027%(prog)s -o /www/configdrive.iso /files/configdrive\u0027"},{"line_number":83,"context_line":"    parser \u003d argparse.ArgumentParser(usage\u003dusage)"},{"line_number":84,"context_line":"    parser.add_argument(\u0027--output\u0027, \u0027-o\u0027,"},{"line_number":85,"context_line":"                        help\u003d(\u0027The output config drive file. If not specified \u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a6ced46_c2c8fe76","line":82,"updated":"2015-03-23 20:13:11.000000000","message":"nit: Usage output probably shouldn\u0027t give literal paths since these can be anything the user wants/needs.","commit_id":"deef9352f757cc8466650bcaca9ba6009dd5681a"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"f243a4da0bbb8133c7a50b4a96be3b78b4b90483","unresolved":false,"context_lines":[{"line_number":79,"context_line":""},{"line_number":80,"context_line":"def main():"},{"line_number":81,"context_line":"    \"\"\"Main function.\"\"\""},{"line_number":82,"context_line":"    usage \u003d \u0027%(prog)s -o /www/configdrive.iso /files/configdrive\u0027"},{"line_number":83,"context_line":"    parser \u003d argparse.ArgumentParser(usage\u003dusage)"},{"line_number":84,"context_line":"    parser.add_argument(\u0027--output\u0027, \u0027-o\u0027,"},{"line_number":85,"context_line":"                        help\u003d(\u0027The output config drive file. If not specified \u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a6ced46_34f3b99f","line":82,"in_reply_to":"1a6ced46_c2c8fe76","updated":"2015-03-24 09:46:03.000000000","message":"+1 will change","commit_id":"deef9352f757cc8466650bcaca9ba6009dd5681a"}]}
