)]}'
{"specs/approved/collect-system-logs-from-ipa.rst":[{"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":"ca4fbde6ab3ab877a14f0549856d97fa943d2ecb","unresolved":false,"context_lines":[{"line_number":60,"context_line":"Since we do support different base OSs for IPA (e.g Tiny Core Linux,"},{"line_number":61,"context_line":"Fedora, Debian) we need different ways to find the logs depending on the"},{"line_number":62,"context_line":"system. This spec proposes two ways that should be enough for mostly of"},{"line_number":63,"context_line":"the distros today:"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"#. For distributions using ``systemd``, all system logs are available via"},{"line_number":66,"context_line":"   ``journald``. IPA will then invoke the ``journalctl`` command and get"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9abb7d3a_c43da090","line":63,"updated":"2016-05-31 17:48:18.000000000","message":"Perhaps we should instead set a logging standard for ramdisks; i.e. \"IPA logs must be in dir X\" and then modify the ramdisks to match the standard? Seems a lot more sane than trying to support every ramdisk under the sun.","commit_id":"2cbe9e4e708ae5119c417f0c521f69e9d73e3676"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"9b19d86483222db22a388b0a5703b1f618933c2f","unresolved":false,"context_lines":[{"line_number":60,"context_line":"Since we do support different base OSs for IPA (e.g Tiny Core Linux,"},{"line_number":61,"context_line":"Fedora, Debian) we need different ways to find the logs depending on the"},{"line_number":62,"context_line":"system. This spec proposes two ways that should be enough for mostly of"},{"line_number":63,"context_line":"the distros today:"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"#. For distributions using ``systemd``, all system logs are available via"},{"line_number":66,"context_line":"   ``journald``. IPA will then invoke the ``journalctl`` command and get"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9abb7d3a_800884db","line":63,"in_reply_to":"9abb7d3a_c43da090","updated":"2016-06-01 09:56:49.000000000","message":"I will defer this answer to the same answer/question that I\u0027ve put in the PoC patch [0]\n\n[0] https://review.openstack.org/#/c/248832/9/ironic_python_agent/extensions/log.py","commit_id":"2cbe9e4e708ae5119c417f0c521f69e9d73e3676"},{"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":"ca4fbde6ab3ab877a14f0549856d97fa943d2ecb","unresolved":false,"context_lines":[{"line_number":87,"context_line":"``log.collect_system_logs`` command now exposed by IPA which will return"},{"line_number":88,"context_line":"a base64 enconded gzip file with the logs. Ironic should decode the string"},{"line_number":89,"context_line":"and upload the resulting gzip file to Swift. Operators can later get these"},{"line_number":90,"context_line":"files from Swift and troubleshoot the possible causes for the failures."},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"Note that, this implementation requires the network to be setup correctly,"},{"line_number":93,"context_line":"otherwise Ironic will not be able to contact the IPA API. When debugging"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9abb7d3a_a4533ce1","line":90,"updated":"2016-05-31 17:48:18.000000000","message":"How do operators know the URL to these logs? What cleans them up out of swift? Are we going to ensure any secrets in the IPA logs are sanitized before shipping them out?","commit_id":"2cbe9e4e708ae5119c417f0c521f69e9d73e3676"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"9b19d86483222db22a388b0a5703b1f618933c2f","unresolved":false,"context_lines":[{"line_number":87,"context_line":"``log.collect_system_logs`` command now exposed by IPA which will return"},{"line_number":88,"context_line":"a base64 enconded gzip file with the logs. Ironic should decode the string"},{"line_number":89,"context_line":"and upload the resulting gzip file to Swift. Operators can later get these"},{"line_number":90,"context_line":"files from Swift and troubleshoot the possible causes for the failures."},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"Note that, this implementation requires the network to be setup correctly,"},{"line_number":93,"context_line":"otherwise Ironic will not be able to contact the IPA API. When debugging"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9abb7d3a_004f7437","line":90,"in_reply_to":"9abb7d3a_a4533ce1","updated":"2016-06-01 09:56:49.000000000","message":"Good questions. It made me look at what Swift can offer and I came up with some ideas.\n\nSo, when uploading the logs to swift the object name will follow the template: \u003cnode-uuid\u003e\u003ctimestamp\u003e, it will also have a custom metada associated with it X-Object-Meta-Instance-UUID which will contain the instance_uuid associated with that failure (if present, since instance_uuid is not required for the standalone version of Ironic)\n\nI want to include a new configuration option for the clean up, this config should set how many days the logs should be kept in swift and will use the native \"expiring object\" support from it [0]\n\nAbout the secrets, no, I don\u0027t plan to have IPA to try to sanitize logs. First because it\u0027s about the deployment, so at that stage the machine haven\u0027t been used by anyone yet. Also, the services - like Ironic does - should be the ones responsible for masking secrets from their logs and if they don\u0027t do it, it should be considered a bug.\n\nLemme know what you think.\n\nI will add these points to the spec on the next patch-set.\n\n[0] http://docs.openstack.org/developer/swift/overview_expiring_objects.html","commit_id":"2cbe9e4e708ae5119c417f0c521f69e9d73e3676"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"f26ab2e06f62c7791136368bd971daf085b01826","unresolved":false,"context_lines":[{"line_number":196,"context_line":"Work Items"},{"line_number":197,"context_line":"----------"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"* Create the new ``ipxe_config`` method for the PXEVendorPassthru interface."},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"* Change the PXE configuration options passed to the DHCP server to point"},{"line_number":202,"context_line":"  to the ``v1/drivers/\u003cdriver"},{"line_number":203,"context_line":"  name\u003e/vendor_passthru/ipxe_config?node_uuid\u003d\u003cnode UUID\u003e`` endpoint in"},{"line_number":204,"context_line":"  the Ironic API instead of pointing to the URL to download the boot.ipxe"},{"line_number":205,"context_line":"  script (the script won\u0027t be need anymore and will be deleted)."},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"* Extend the ``vendor_passthru`` and ``driver_vendor_passthru`` RPC"},{"line_number":208,"context_line":"  methods to return a flag indicating whether the return value should"},{"line_number":209,"context_line":"  be attached to the response object as a file or returned as a response"},{"line_number":210,"context_line":"  message."},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"* Update the methods ``prepare_ramdisk`` and ``clean_up_ramdisk`` from"},{"line_number":213,"context_line":"  the **IPXEBoot** interface to not attempt to create or delete the iPXE"},{"line_number":214,"context_line":"  configuration files."},{"line_number":215,"context_line":""},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"Dependencies"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9abb7d3a_04f688f8","line":214,"range":{"start_line":199,"start_character":0,"end_line":214,"end_character":22},"updated":"2016-05-31 17:46:03.000000000","message":"oh I should remove this ...","commit_id":"2cbe9e4e708ae5119c417f0c521f69e9d73e3676"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"e925d0a83e4a95c6c9f91ef8fcd142e618453e23","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"A new ``log`` extension will be added to IPA. This extension will"},{"line_number":56,"context_line":"introduce a new command called ``collect_system_logs``, by invoking this"},{"line_number":57,"context_line":"command IPA will then gzip and base64 encode the system logs and return"},{"line_number":58,"context_line":"the resulting string to the caller."},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"Since we do support different base OSs for IPA (e.g Tiny Core Linux,"}],"source_content_type":"text/x-rst","patch_set":5,"id":"9abb7d3a_af8230fe","line":57,"updated":"2016-06-03 16:57:16.000000000","message":"by gzip you mean tar.gz, right? otherwise you won\u0027t be able to pack several files.","commit_id":"3d34a34fdfaad3312defde411c7f8433136410c7"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"5298a7d3c956360310e99ca12d1e73a47848d1c4","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"A new ``log`` extension will be added to IPA. This extension will"},{"line_number":56,"context_line":"introduce a new command called ``collect_system_logs``, by invoking this"},{"line_number":57,"context_line":"command IPA will then gzip and base64 encode the system logs and return"},{"line_number":58,"context_line":"the resulting string to the caller."},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"Since we do support different base OSs for IPA (e.g Tiny Core Linux,"}],"source_content_type":"text/x-rst","patch_set":5,"id":"7aa08908_7fa597b3","line":57,"in_reply_to":"9abb7d3a_af8230fe","updated":"2016-06-07 10:08:19.000000000","message":"Yes, it\u0027s tar.gz. Will update","commit_id":"3d34a34fdfaad3312defde411c7f8433136410c7"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"e925d0a83e4a95c6c9f91ef8fcd142e618453e23","unresolved":false,"context_lines":[{"line_number":69,"context_line":"#. For other distributions, this spec proposes retaining all logs from"},{"line_number":70,"context_line":"   the */var/log* directory and from the ``dmesg`` command to start with. Of"},{"line_number":71,"context_line":"   course, more could logs could be added later for example, the output of"},{"line_number":72,"context_line":"   ``ps``, ``df``, ``iptables`` are often used for troubleshooting purposes."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"Changes in Ironic"},{"line_number":75,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"9abb7d3a_8f85ac08","line":72,"updated":"2016-06-03 16:57:16.000000000","message":"I think we should do all of this in all cases. Also I wonder if we can just use http://linux.die.net/man/1/sosreport which is something we heavily use downstream.","commit_id":"3d34a34fdfaad3312defde411c7f8433136410c7"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"5298a7d3c956360310e99ca12d1e73a47848d1c4","unresolved":false,"context_lines":[{"line_number":69,"context_line":"#. For other distributions, this spec proposes retaining all logs from"},{"line_number":70,"context_line":"   the */var/log* directory and from the ``dmesg`` command to start with. Of"},{"line_number":71,"context_line":"   course, more could logs could be added later for example, the output of"},{"line_number":72,"context_line":"   ``ps``, ``df``, ``iptables`` are often used for troubleshooting purposes."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"Changes in Ironic"},{"line_number":75,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"7aa08908_a78411d4","line":72,"in_reply_to":"9abb7d3a_8f85ac08","updated":"2016-06-07 10:08:19.000000000","message":"Agreed this command should be used in all cases, I will change that. \n\nAbout \"sosreport\" that\u0027s great, but unfortunately it\u0027s not available for tiny core linux [0] which is the main distro target for this fallback mechanism.\n\n[0] http://distro.ibiblio.org/tinycorelinux/7.x/x86_64/tcz/","commit_id":"3d34a34fdfaad3312defde411c7f8433136410c7"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"e925d0a83e4a95c6c9f91ef8fcd142e618453e23","unresolved":false,"context_lines":[{"line_number":78,"context_line":""},{"line_number":79,"context_line":"#. ``agent_retrieve_deploy_logs_on_deploy_failure`` (boolean): If True collect"},{"line_number":80,"context_line":"   the logs from the deploy ramdisk upon a deployment failure, if False do"},{"line_number":81,"context_line":"   nothing. Defaults to False."},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"#. ``agent_deploy_logs_swift_container`` (string): The name of the Swift"},{"line_number":84,"context_line":"   container to store the logs. Defaults to *ironic_deploy_logs_container*."}],"source_content_type":"text/x-rst","patch_set":5,"id":"9abb7d3a_ef7c3822","line":81,"updated":"2016-06-03 16:57:16.000000000","message":"Is the default only because of backward compatibility? If so, I\u0027d slightly prefer it to be True by default, with \"command not found\" error not being a hard failure.\n\nAlso from inspector experience I would really want one more option: agent_always_retrieve_deploy_logs. Trust me, this is needed :)","commit_id":"3d34a34fdfaad3312defde411c7f8433136410c7"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"5298a7d3c956360310e99ca12d1e73a47848d1c4","unresolved":false,"context_lines":[{"line_number":78,"context_line":""},{"line_number":79,"context_line":"#. ``agent_retrieve_deploy_logs_on_deploy_failure`` (boolean): If True collect"},{"line_number":80,"context_line":"   the logs from the deploy ramdisk upon a deployment failure, if False do"},{"line_number":81,"context_line":"   nothing. Defaults to False."},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"#. ``agent_deploy_logs_swift_container`` (string): The name of the Swift"},{"line_number":84,"context_line":"   container to store the logs. Defaults to *ironic_deploy_logs_container*."}],"source_content_type":"text/x-rst","patch_set":5,"id":"7aa08908_9fc84324","line":81,"in_reply_to":"9abb7d3a_ef7c3822","updated":"2016-06-07 10:08:19.000000000","message":"The default was False because this spec requires Swift, I don\u0027t want to make it a dependency by default.\n\nI will extend this spec to also store logs in the local filesystem for the standalone case (as per comment at L84), so we may rethink this default.\n\nRe: always_retrieve_deploy_logs, let\u0027s do on failures first and extend it later.","commit_id":"3d34a34fdfaad3312defde411c7f8433136410c7"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"e925d0a83e4a95c6c9f91ef8fcd142e618453e23","unresolved":false,"context_lines":[{"line_number":81,"context_line":"   nothing. Defaults to False."},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"#. ``agent_deploy_logs_swift_container`` (string): The name of the Swift"},{"line_number":84,"context_line":"   container to store the logs. Defaults to *ironic_deploy_logs_container*."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"#. ``agent_deploy_logs_swift_days_to_expire`` (integer):"},{"line_number":87,"context_line":"   Number of days before a log object is `marked as expired in Swift"}],"source_content_type":"text/x-rst","patch_set":5,"id":"9abb7d3a_cf77b439","line":84,"updated":"2016-06-03 16:57:16.000000000","message":"We should definitely allow storing it in local files (see inspector for example). Otherwise standalone users won\u0027t benefit from it.","commit_id":"3d34a34fdfaad3312defde411c7f8433136410c7"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"5298a7d3c956360310e99ca12d1e73a47848d1c4","unresolved":false,"context_lines":[{"line_number":81,"context_line":"   nothing. Defaults to False."},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"#. ``agent_deploy_logs_swift_container`` (string): The name of the Swift"},{"line_number":84,"context_line":"   container to store the logs. Defaults to *ironic_deploy_logs_container*."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"#. ``agent_deploy_logs_swift_days_to_expire`` (integer):"},{"line_number":87,"context_line":"   Number of days before a log object is `marked as expired in Swift"}],"source_content_type":"text/x-rst","patch_set":5,"id":"7aa08908_bfec1f90","line":84,"in_reply_to":"9abb7d3a_cf77b439","updated":"2016-06-07 10:08:19.000000000","message":"Agreed, I will extend the spec. Thanks","commit_id":"3d34a34fdfaad3312defde411c7f8433136410c7"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"e925d0a83e4a95c6c9f91ef8fcd142e618453e23","unresolved":false,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":"When the deployment of a node fails Ironic will invoke the"},{"line_number":93,"context_line":"``log.collect_system_logs`` command now exposed by IPA which will return"},{"line_number":94,"context_line":"a base64 enconded gzip file with the logs. Ironic should decode the string"},{"line_number":95,"context_line":"and upload the resulting gzip file to Swift. Operators can later get these"},{"line_number":96,"context_line":"files from Swift and troubleshoot the possible causes for the failures."},{"line_number":97,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"9abb7d3a_2f77603b","line":94,"updated":"2016-06-03 16:57:16.000000000","message":"I wonder if we can make IPA extensions return binary data, so that we don\u0027t base64 encode/decode a potentially big archive (imagine long running ramdisks).","commit_id":"3d34a34fdfaad3312defde411c7f8433136410c7"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"5298a7d3c956360310e99ca12d1e73a47848d1c4","unresolved":false,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":"When the deployment of a node fails Ironic will invoke the"},{"line_number":93,"context_line":"``log.collect_system_logs`` command now exposed by IPA which will return"},{"line_number":94,"context_line":"a base64 enconded gzip file with the logs. Ironic should decode the string"},{"line_number":95,"context_line":"and upload the resulting gzip file to Swift. Operators can later get these"},{"line_number":96,"context_line":"files from Swift and troubleshoot the possible causes for the failures."},{"line_number":97,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"7aa08908_b158d333","line":94,"in_reply_to":"9abb7d3a_2f77603b","updated":"2016-06-07 10:08:19.000000000","message":"Something to look at, for now I\u0027m trying to use the same mechanism for running commands and getting the results from it.\n\nWe can also truncate the logs by number of lines if size becomes a problem.","commit_id":"3d34a34fdfaad3312defde411c7f8433136410c7"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a1fa2bd1c0ca229b54c56d353ce7dde03105a17c","unresolved":false,"context_lines":[{"line_number":79,"context_line":""},{"line_number":80,"context_line":"New configuration options will be added to Ironic:"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"#. ``agent_retrieve_deploy_logs_on_deploy_failure`` (boolean): If True collect"},{"line_number":83,"context_line":"   the logs from the deploy ramdisk upon a deployment failure, if False do"},{"line_number":84,"context_line":"   nothing. Defaults to False."},{"line_number":85,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"7aa08908_b2943843","line":82,"range":{"start_line":82,"start_character":5,"end_line":82,"end_character":11},"updated":"2016-06-07 15:46:07.000000000","message":"instead of agent_ prefixes, we should put this and the other options to [agent] section.","commit_id":"b549d4a2d900575b538c8220cbcb614e7c905bb0"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"b7b260563667449f7c99919dcd9a9b6996c4bd77","unresolved":false,"context_lines":[{"line_number":79,"context_line":""},{"line_number":80,"context_line":"New configuration options will be added to Ironic:"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"#. ``agent_retrieve_deploy_logs_on_deploy_failure`` (boolean): If True collect"},{"line_number":83,"context_line":"   the logs from the deploy ramdisk upon a deployment failure, if False do"},{"line_number":84,"context_line":"   nothing. Defaults to False."},{"line_number":85,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"7aa08908_0db88d29","line":82,"range":{"start_line":82,"start_character":5,"end_line":82,"end_character":11},"in_reply_to":"7aa08908_b2943843","updated":"2016-06-07 16:02:54.000000000","message":"agreed","commit_id":"b549d4a2d900575b538c8220cbcb614e7c905bb0"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a1fa2bd1c0ca229b54c56d353ce7dde03105a17c","unresolved":false,"context_lines":[{"line_number":92,"context_line":"   ``agent_deploy_logs_storage_backend`` is configured to"},{"line_number":93,"context_line":"   **local**. Defaults to ``/var/log/ironic_deploy_logs``."},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"#. ``agent_deploy_logs_swift_container`` (string): The name of the Swift"},{"line_number":96,"context_line":"   container to store the logs, used when the"},{"line_number":97,"context_line":"   ``agent_deploy_logs_storage_backend`` is configured to"},{"line_number":98,"context_line":"   **swift**. Defaults to *ironic_deploy_logs_container*."},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"#. ``agent_deploy_logs_swift_days_to_expire`` (integer):"},{"line_number":101,"context_line":"   Number of days before a log object is `marked as expired in Swift"}],"source_content_type":"text/x-rst","patch_set":6,"id":"7aa08908_32bde8b7","line":98,"range":{"start_line":95,"start_character":3,"end_line":98,"end_character":56},"updated":"2016-06-07 15:46:07.000000000","message":"I wonder if we should unify agent_deploy_logs_local_path and agent_deploy_logs_swift_container to just deploy_logs_location (with different meanings depending on deploy_logs_storage_backend)","commit_id":"b549d4a2d900575b538c8220cbcb614e7c905bb0"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"b7b260563667449f7c99919dcd9a9b6996c4bd77","unresolved":false,"context_lines":[{"line_number":92,"context_line":"   ``agent_deploy_logs_storage_backend`` is configured to"},{"line_number":93,"context_line":"   **local**. Defaults to ``/var/log/ironic_deploy_logs``."},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"#. ``agent_deploy_logs_swift_container`` (string): The name of the Swift"},{"line_number":96,"context_line":"   container to store the logs, used when the"},{"line_number":97,"context_line":"   ``agent_deploy_logs_storage_backend`` is configured to"},{"line_number":98,"context_line":"   **swift**. Defaults to *ironic_deploy_logs_container*."},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"#. ``agent_deploy_logs_swift_days_to_expire`` (integer):"},{"line_number":101,"context_line":"   Number of days before a log object is `marked as expired in Swift"}],"source_content_type":"text/x-rst","patch_set":6,"id":"7aa08908_8de63dae","line":98,"range":{"start_line":95,"start_character":3,"end_line":98,"end_character":56},"in_reply_to":"7aa08908_32bde8b7","updated":"2016-06-07 16:02:54.000000000","message":"So, \"deploy_logs_location\" would get a path or the name of the container ? Hmm that would work but not sure if it would get more complicated, specially when we want to leave an open ground for people extending the functionality to support other storage backends.\n\nFWIW, other features do offer a way to setting the container name on a separated option. E.g, configdrive [0] and ilo [1].\n\nI guess I will leave as-is for the next patch-set and change it if someone has a strong objection.\n\n[0] https://github.com/openstack/ironic/blob/master/etc/ironic/ironic.conf.sample#L581\n\n[1] https://github.com/openstack/ironic/blob/master/etc/ironic/ironic.conf.sample#L1070","commit_id":"b549d4a2d900575b538c8220cbcb614e7c905bb0"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"9ed87e51fef2eaaae4f11e43092af9f443c2fa44","unresolved":false,"context_lines":[{"line_number":56,"context_line":"A new ``log`` extension will be added to IPA. This extension will"},{"line_number":57,"context_line":"introduce a new command called ``collect_system_logs``, by invoking this"},{"line_number":58,"context_line":"command IPA will then tar.gz and base64 encode the system logs and return"},{"line_number":59,"context_line":"the resulting string to the caller."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"Since we do support different base OSs for IPA (e.g Tiny Core Linux,"},{"line_number":62,"context_line":"Fedora, Debian) we need different ways to find the logs depending on the"}],"source_content_type":"text/x-rst","patch_set":8,"id":"7aa08908_5a2eff8c","line":59,"updated":"2016-06-16 13:58:43.000000000","message":"Will this command be syncronous or async?","commit_id":"d048eabf26ab8cc4b58ad8a63c33c69da1c2d951"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"ff0cbca9a8a07578c00774825914fd85430ebb96","unresolved":false,"context_lines":[{"line_number":56,"context_line":"A new ``log`` extension will be added to IPA. This extension will"},{"line_number":57,"context_line":"introduce a new command called ``collect_system_logs``, by invoking this"},{"line_number":58,"context_line":"command IPA will then tar.gz and base64 encode the system logs and return"},{"line_number":59,"context_line":"the resulting string to the caller."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"Since we do support different base OSs for IPA (e.g Tiny Core Linux,"},{"line_number":62,"context_line":"Fedora, Debian) we need different ways to find the logs depending on the"}],"source_content_type":"text/x-rst","patch_set":8,"id":"7aa08908_9a4b4786","line":59,"in_reply_to":"7aa08908_5a2eff8c","updated":"2016-06-16 14:14:11.000000000","message":"Ops, forgot to add that. It\u0027s a synchronous command because we need the response (the base64 string with the logs)","commit_id":"d048eabf26ab8cc4b58ad8a63c33c69da1c2d951"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"24fab78df9faf8c700583c72a8b6a49445ef22d0","unresolved":false,"context_lines":[{"line_number":67,"context_line":"   ``journald``. IPA will then invoke the ``journalctl`` command and"},{"line_number":68,"context_line":"   get the logs from there."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"#. For other distributions, this spec proposes retaining all the logs"},{"line_number":71,"context_line":"   from */var/log* and the output of the ``dmesg`` command."},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"The logs from all distributions independent of the init system, will"}],"source_content_type":"text/x-rst","patch_set":8,"id":"7aa08908_6d274363","line":70,"range":{"start_line":70,"start_character":57,"end_line":70,"end_character":69},"updated":"2016-06-14 12:54:58.000000000","message":"All logs can produce a big output file. Maybe add also option like \"only_ipa_log\" (return only IPA log)?","commit_id":"d048eabf26ab8cc4b58ad8a63c33c69da1c2d951"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"9ed87e51fef2eaaae4f11e43092af9f443c2fa44","unresolved":false,"context_lines":[{"line_number":67,"context_line":"   ``journald``. IPA will then invoke the ``journalctl`` command and"},{"line_number":68,"context_line":"   get the logs from there."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"#. For other distributions, this spec proposes retaining all the logs"},{"line_number":71,"context_line":"   from */var/log* and the output of the ``dmesg`` command."},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"The logs from all distributions independent of the init system, will"}],"source_content_type":"text/x-rst","patch_set":8,"id":"7aa08908_97c84023","line":70,"range":{"start_line":70,"start_character":57,"end_line":70,"end_character":69},"in_reply_to":"7aa08908_3556b206","updated":"2016-06-16 13:58:43.000000000","message":"I\u0027m hoping that /var/log won\u0027t have much in it, since we shouldn\u0027t be running many services here, but it could...\n\nPerhaps a future optimization is allow configuring a list of things to grab from /var/log (so I could maybe skip auth.log but still get syslog)","commit_id":"d048eabf26ab8cc4b58ad8a63c33c69da1c2d951"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"153147b8ce454735a33f3fa913cf745f7ecb8d6c","unresolved":false,"context_lines":[{"line_number":67,"context_line":"   ``journald``. IPA will then invoke the ``journalctl`` command and"},{"line_number":68,"context_line":"   get the logs from there."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"#. For other distributions, this spec proposes retaining all the logs"},{"line_number":71,"context_line":"   from */var/log* and the output of the ``dmesg`` command."},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"The logs from all distributions independent of the init system, will"}],"source_content_type":"text/x-rst","patch_set":8,"id":"7aa08908_3556b206","line":70,"range":{"start_line":70,"start_character":57,"end_line":70,"end_character":69},"in_reply_to":"7aa08908_6d274363","updated":"2016-06-16 10:13:40.000000000","message":"Yeah we could add something like that in the future if we think we have way too many logs there (specially for long running agent).\n\nFor now I would prefer to keep returning all the possible logs.","commit_id":"d048eabf26ab8cc4b58ad8a63c33c69da1c2d951"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"ff0cbca9a8a07578c00774825914fd85430ebb96","unresolved":false,"context_lines":[{"line_number":67,"context_line":"   ``journald``. IPA will then invoke the ``journalctl`` command and"},{"line_number":68,"context_line":"   get the logs from there."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"#. For other distributions, this spec proposes retaining all the logs"},{"line_number":71,"context_line":"   from */var/log* and the output of the ``dmesg`` command."},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"The logs from all distributions independent of the init system, will"}],"source_content_type":"text/x-rst","patch_set":8,"id":"7aa08908_ba160356","line":70,"range":{"start_line":70,"start_character":57,"end_line":70,"end_character":69},"in_reply_to":"7aa08908_97c84023","updated":"2016-06-16 14:14:11.000000000","message":"True, yeah I would like to keep it as a future optimization as you suggest.\n\njournalctl also allows you to filter by units which would be analogous to the list of things to grab from /var/log, so I think we can come up with an abstraction layer here.","commit_id":"d048eabf26ab8cc4b58ad8a63c33c69da1c2d951"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"9ed87e51fef2eaaae4f11e43092af9f443c2fa44","unresolved":false,"context_lines":[{"line_number":91,"context_line":"#. ``deploy_logs_local_path`` (string): The path to the directory"},{"line_number":92,"context_line":"   where the logs should be stored, used when the"},{"line_number":93,"context_line":"   ``deploy_logs_storage_backend`` is configured to **local**. Defaults to"},{"line_number":94,"context_line":"   ``/var/log/ironic_deploy_logs``."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"#. ``deploy_logs_swift_container`` (string): The name of the Swift"},{"line_number":97,"context_line":"   container to store the logs, used when the"}],"source_content_type":"text/x-rst","patch_set":8,"id":"7aa08908_daa66f0e","line":94,"updated":"2016-06-16 13:58:43.000000000","message":"Hm, I wonder if /var/log/ironic/deploy/ would be better? Keep them all in one place, and it may help that /var/log/ironic will typically already be writeable by the ironic user. With the current proposal I\u0027ll need to change my deploy automation to ensure /var/log/ironic_deploy_logs exists and is writeable.","commit_id":"d048eabf26ab8cc4b58ad8a63c33c69da1c2d951"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"ff0cbca9a8a07578c00774825914fd85430ebb96","unresolved":false,"context_lines":[{"line_number":91,"context_line":"#. ``deploy_logs_local_path`` (string): The path to the directory"},{"line_number":92,"context_line":"   where the logs should be stored, used when the"},{"line_number":93,"context_line":"   ``deploy_logs_storage_backend`` is configured to **local**. Defaults to"},{"line_number":94,"context_line":"   ``/var/log/ironic_deploy_logs``."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"#. ``deploy_logs_swift_container`` (string): The name of the Swift"},{"line_number":97,"context_line":"   container to store the logs, used when the"}],"source_content_type":"text/x-rst","patch_set":8,"id":"7aa08908_dd0ae91f","line":94,"in_reply_to":"7aa08908_daa66f0e","updated":"2016-06-16 14:14:11.000000000","message":"Good point, +1 to that! Will change","commit_id":"d048eabf26ab8cc4b58ad8a63c33c69da1c2d951"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"0e729d3287147aeba475f36abc75b35de3e74b1a","unresolved":false,"context_lines":[{"line_number":111,"context_line":"   the operator to configure an external job to do it, if wanted."},{"line_number":112,"context_line":""},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"Depending on the value of the ``retrieve_deploy_logs`` Ironic will invoked"},{"line_number":115,"context_line":"``log.collect_system_logs`` as part of the deployment of the node. For"},{"line_number":116,"context_line":"example, if ``retrieve_deploy_logs`` is set to **always** Ironic will"},{"line_number":117,"context_line":"collect the logs independently of the deployment being a success or a"}],"source_content_type":"text/x-rst","patch_set":8,"id":"7aa08908_04ba9f6e","line":114,"range":{"start_line":114,"start_character":67,"end_line":114,"end_character":74},"updated":"2016-06-09 13:42:51.000000000","message":"nit: invoke","commit_id":"d048eabf26ab8cc4b58ad8a63c33c69da1c2d951"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"153147b8ce454735a33f3fa913cf745f7ecb8d6c","unresolved":false,"context_lines":[{"line_number":111,"context_line":"   the operator to configure an external job to do it, if wanted."},{"line_number":112,"context_line":""},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"Depending on the value of the ``retrieve_deploy_logs`` Ironic will invoked"},{"line_number":115,"context_line":"``log.collect_system_logs`` as part of the deployment of the node. For"},{"line_number":116,"context_line":"example, if ``retrieve_deploy_logs`` is set to **always** Ironic will"},{"line_number":117,"context_line":"collect the logs independently of the deployment being a success or a"}],"source_content_type":"text/x-rst","patch_set":8,"id":"7aa08908_9545e644","line":114,"range":{"start_line":114,"start_character":67,"end_line":114,"end_character":74},"in_reply_to":"7aa08908_04ba9f6e","updated":"2016-06-16 10:13:40.000000000","message":"Thanks, since it\u0027s only a nit I will fix it if I happen to have to submit a new patch-set.","commit_id":"d048eabf26ab8cc4b58ad8a63c33c69da1c2d951"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"9ed87e51fef2eaaae4f11e43092af9f443c2fa44","unresolved":false,"context_lines":[{"line_number":117,"context_line":"collect the logs independently of the deployment being a success or a"},{"line_number":118,"context_line":"failure; by setting it to **on_failure** Ironic will collect the logs"},{"line_number":119,"context_line":"upon a deployment failure; by setting it to **never** makes Ironic never"},{"line_number":120,"context_line":"collect the deployment logs."},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"When the logs are collected, Ironic should decode the base64 encoded"},{"line_number":123,"context_line":"tar.gz file and store it according to the ``deploy_logs_storage_backend``"}],"source_content_type":"text/x-rst","patch_set":8,"id":"7aa08908_9aea270d","line":120,"updated":"2016-06-16 13:58:43.000000000","message":"When exactly will this happen, right before we reboot/poweroff the node?","commit_id":"d048eabf26ab8cc4b58ad8a63c33c69da1c2d951"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"ff0cbca9a8a07578c00774825914fd85430ebb96","unresolved":false,"context_lines":[{"line_number":117,"context_line":"collect the logs independently of the deployment being a success or a"},{"line_number":118,"context_line":"failure; by setting it to **on_failure** Ironic will collect the logs"},{"line_number":119,"context_line":"upon a deployment failure; by setting it to **never** makes Ironic never"},{"line_number":120,"context_line":"collect the deployment logs."},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"When the logs are collected, Ironic should decode the base64 encoded"},{"line_number":123,"context_line":"tar.gz file and store it according to the ``deploy_logs_storage_backend``"}],"source_content_type":"text/x-rst","patch_set":8,"id":"7aa08908_9d5fc1e3","line":120,"in_reply_to":"7aa08908_9aea270d","updated":"2016-06-16 14:14:11.000000000","message":"exactly, right before the power off/reboot, e.g, on_failure happens here [0]\n\n[0] https://github.com/openstack/ironic/blob/6c96257142c18adb9f070617022a6d6c1414ae1f/ironic/drivers/modules/deploy_utils.py#L498","commit_id":"d048eabf26ab8cc4b58ad8a63c33c69da1c2d951"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"9ed87e51fef2eaaae4f11e43092af9f443c2fa44","unresolved":false,"context_lines":[{"line_number":152,"context_line":"  failures, at that point the node have not been setup correctly nor have"},{"line_number":153,"context_line":"  been used by the tenant requesting the instance. Second, the services"},{"line_number":154,"context_line":"  generating the logs should be responsible for masking secrets in their"},{"line_number":155,"context_line":"  logs (like we do in Ironic), if not, it should be considered a bug."},{"line_number":156,"context_line":""},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":8,"id":"7aa08908_3af853c4","line":155,"updated":"2016-06-16 13:58:43.000000000","message":"Well, this spec isn\u0027t limited to deploy failures anymore :)\n\nBut I do agree with this paragraph in general.","commit_id":"d048eabf26ab8cc4b58ad8a63c33c69da1c2d951"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"ff0cbca9a8a07578c00774825914fd85430ebb96","unresolved":false,"context_lines":[{"line_number":152,"context_line":"  failures, at that point the node have not been setup correctly nor have"},{"line_number":153,"context_line":"  been used by the tenant requesting the instance. Second, the services"},{"line_number":154,"context_line":"  generating the logs should be responsible for masking secrets in their"},{"line_number":155,"context_line":"  logs (like we do in Ironic), if not, it should be considered a bug."},{"line_number":156,"context_line":""},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":8,"id":"7aa08908_7d193522","line":155,"in_reply_to":"7aa08908_3af853c4","updated":"2016-06-16 14:14:11.000000000","message":"heh yeah, left over. I will reword that \"deploy failure\" bit","commit_id":"d048eabf26ab8cc4b58ad8a63c33c69da1c2d951"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"9ed87e51fef2eaaae4f11e43092af9f443c2fa44","unresolved":false,"context_lines":[{"line_number":211,"context_line":""},{"line_number":212,"context_line":"None."},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"As a note, no credentials **are not** passed from Ironic to the deploy"},{"line_number":215,"context_line":"ramdisk, the ``ironic-conductor`` service, which already holds the Swift"},{"line_number":216,"context_line":"credentials, is the one responsible for uploading the logs to Swift."},{"line_number":217,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"7aa08908_dade6f3d","line":214,"updated":"2016-06-16 13:58:43.000000000","message":"s/no credentials/credentials/","commit_id":"d048eabf26ab8cc4b58ad8a63c33c69da1c2d951"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"9ed87e51fef2eaaae4f11e43092af9f443c2fa44","unresolved":false,"context_lines":[{"line_number":229,"context_line":"------------------"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"The node might stay a little longer on the ``deploy fail`` provision"},{"line_number":232,"context_line":"state while IPA is collecting the logs."},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"Other deployer impact"},{"line_number":235,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":8,"id":"7aa08908_9abb47e4","line":232,"updated":"2016-06-16 13:58:43.000000000","message":"If turned on always, this will add some extra time to deploys as well.","commit_id":"d048eabf26ab8cc4b58ad8a63c33c69da1c2d951"},{"author":{"_account_id":18893,"name":"Miles Gould","email":"mgould@redhat.com","username":"pozorvlak"},"change_message_id":"d79de34c4c5b52a4038c37b0bdb548c823e795da","unresolved":false,"context_lines":[{"line_number":18,"context_line":"We currently have no mechanism to automatically retrieve the system"},{"line_number":19,"context_line":"logs from the IPA deploy ramdisk. Having access to the logs may be very"},{"line_number":20,"context_line":"useful, especially when troubleshooting a deployment failure.  Currently,"},{"line_number":21,"context_line":"there are few ways to get access to the logs in the ramdisk, but they"},{"line_number":22,"context_line":"are manual and sometimes undesired to be enabled in production. The"},{"line_number":23,"context_line":"following points describe two of them:"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"7aa08908_1be636e8","line":21,"updated":"2016-06-16 15:45:57.000000000","message":"nit: \"a few ways\"","commit_id":"7bfd33cb4205edd34e01c711e19c6a61c511944c"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"bf6397540122a1be742037b3f12ce0e4875078a5","unresolved":false,"context_lines":[{"line_number":18,"context_line":"We currently have no mechanism to automatically retrieve the system"},{"line_number":19,"context_line":"logs from the IPA deploy ramdisk. Having access to the logs may be very"},{"line_number":20,"context_line":"useful, especially when troubleshooting a deployment failure.  Currently,"},{"line_number":21,"context_line":"there are few ways to get access to the logs in the ramdisk, but they"},{"line_number":22,"context_line":"are manual and sometimes undesired to be enabled in production. The"},{"line_number":23,"context_line":"following points describe two of them:"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"7aa08908_3134f1dd","line":21,"in_reply_to":"7aa08908_1be636e8","updated":"2016-06-16 16:04:18.000000000","message":"Done","commit_id":"7bfd33cb4205edd34e01c711e19c6a61c511944c"},{"author":{"_account_id":18893,"name":"Miles Gould","email":"mgould@redhat.com","username":"pozorvlak"},"change_message_id":"d79de34c4c5b52a4038c37b0bdb548c823e795da","unresolved":false,"context_lines":[{"line_number":19,"context_line":"logs from the IPA deploy ramdisk. Having access to the logs may be very"},{"line_number":20,"context_line":"useful, especially when troubleshooting a deployment failure.  Currently,"},{"line_number":21,"context_line":"there are few ways to get access to the logs in the ramdisk, but they"},{"line_number":22,"context_line":"are manual and sometimes undesired to be enabled in production. The"},{"line_number":23,"context_line":"following points describe two of them:"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"#. Have a console session enabled for the node being deployed."}],"source_content_type":"text/x-rst","patch_set":9,"id":"7aa08908_9bf18698","line":22,"updated":"2016-06-16 15:45:57.000000000","message":"This phrasing is a bit awkward. \"but they are manual, and sometimes it is not desirable to enable them in production\" is more idiomatic.","commit_id":"7bfd33cb4205edd34e01c711e19c6a61c511944c"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"bf6397540122a1be742037b3f12ce0e4875078a5","unresolved":false,"context_lines":[{"line_number":19,"context_line":"logs from the IPA deploy ramdisk. Having access to the logs may be very"},{"line_number":20,"context_line":"useful, especially when troubleshooting a deployment failure.  Currently,"},{"line_number":21,"context_line":"there are few ways to get access to the logs in the ramdisk, but they"},{"line_number":22,"context_line":"are manual and sometimes undesired to be enabled in production. The"},{"line_number":23,"context_line":"following points describe two of them:"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"#. Have a console session enabled for the node being deployed."}],"source_content_type":"text/x-rst","patch_set":9,"id":"7aa08908_913325f6","line":22,"in_reply_to":"7aa08908_9bf18698","updated":"2016-06-16 16:04:18.000000000","message":"Done","commit_id":"7bfd33cb4205edd34e01c711e19c6a61c511944c"},{"author":{"_account_id":18893,"name":"Miles Gould","email":"mgould@redhat.com","username":"pozorvlak"},"change_message_id":"d79de34c4c5b52a4038c37b0bdb548c823e795da","unresolved":false,"context_lines":[{"line_number":25,"context_line":"#. Have a console session enabled for the node being deployed."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"   While this works, it\u0027s tricky because the operator needs to figure out"},{"line_number":28,"context_line":"   which node was pick by the scheduler and enable the console for it. Also,"},{"line_number":29,"context_line":"   not all drivers do have console support."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"#. Disable powering off a node upon a deployment failure."}],"source_content_type":"text/x-rst","patch_set":9,"id":"7aa08908_7b43faaf","line":28,"updated":"2016-06-16 15:45:57.000000000","message":"nit: \"was picked\"","commit_id":"7bfd33cb4205edd34e01c711e19c6a61c511944c"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"bf6397540122a1be742037b3f12ce0e4875078a5","unresolved":false,"context_lines":[{"line_number":25,"context_line":"#. Have a console session enabled for the node being deployed."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"   While this works, it\u0027s tricky because the operator needs to figure out"},{"line_number":28,"context_line":"   which node was pick by the scheduler and enable the console for it. Also,"},{"line_number":29,"context_line":"   not all drivers do have console support."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"#. Disable powering off a node upon a deployment failure."}],"source_content_type":"text/x-rst","patch_set":9,"id":"7aa08908_313b51ca","line":28,"in_reply_to":"7aa08908_7b43faaf","updated":"2016-06-16 16:04:18.000000000","message":"Done","commit_id":"7bfd33cb4205edd34e01c711e19c6a61c511944c"},{"author":{"_account_id":18893,"name":"Miles Gould","email":"mgould@redhat.com","username":"pozorvlak"},"change_message_id":"d79de34c4c5b52a4038c37b0bdb548c823e795da","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"   While this works, it\u0027s tricky because the operator needs to figure out"},{"line_number":28,"context_line":"   which node was pick by the scheduler and enable the console for it. Also,"},{"line_number":29,"context_line":"   not all drivers do have console support."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"#. Disable powering off a node upon a deployment failure."},{"line_number":32,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"7aa08908_db102eae","line":29,"updated":"2016-06-16 15:45:57.000000000","message":"nit: \"not all drivers have\"","commit_id":"7bfd33cb4205edd34e01c711e19c6a61c511944c"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"bf6397540122a1be742037b3f12ce0e4875078a5","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"   While this works, it\u0027s tricky because the operator needs to figure out"},{"line_number":28,"context_line":"   which node was pick by the scheduler and enable the console for it. Also,"},{"line_number":29,"context_line":"   not all drivers do have console support."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"#. Disable powering off a node upon a deployment failure."},{"line_number":32,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"7aa08908_5167fde9","line":29,"in_reply_to":"7aa08908_db102eae","updated":"2016-06-16 16:04:18.000000000","message":"Done","commit_id":"7bfd33cb4205edd34e01c711e19c6a61c511944c"},{"author":{"_account_id":18893,"name":"Miles Gould","email":"mgould@redhat.com","username":"pozorvlak"},"change_message_id":"d79de34c4c5b52a4038c37b0bdb548c823e795da","unresolved":false,"context_lines":[{"line_number":31,"context_line":"#. Disable powering off a node upon a deployment failure."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"   Operators could `disable powering off a node upon a deployment"},{"line_number":34,"context_line":"   failure \u003chttps://review.openstack.org/#/c/259119\u003e`_ but this have"},{"line_number":35,"context_line":"   some implications:"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"   a. It does not work in conjunction with Nova. When the instance"}],"source_content_type":"text/x-rst","patch_set":9,"id":"7aa08908_9b1fc6b6","line":34,"updated":"2016-06-16 15:45:57.000000000","message":"nit: \"have\" -\u003e \"has\"","commit_id":"7bfd33cb4205edd34e01c711e19c6a61c511944c"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"bf6397540122a1be742037b3f12ce0e4875078a5","unresolved":false,"context_lines":[{"line_number":31,"context_line":"#. Disable powering off a node upon a deployment failure."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"   Operators could `disable powering off a node upon a deployment"},{"line_number":34,"context_line":"   failure \u003chttps://review.openstack.org/#/c/259119\u003e`_ but this have"},{"line_number":35,"context_line":"   some implications:"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"   a. It does not work in conjunction with Nova. When the instance"}],"source_content_type":"text/x-rst","patch_set":9,"id":"7aa08908_f16f09c2","line":34,"in_reply_to":"7aa08908_9b1fc6b6","updated":"2016-06-16 16:04:18.000000000","message":"Done","commit_id":"7bfd33cb4205edd34e01c711e19c6a61c511944c"},{"author":{"_account_id":18893,"name":"Miles Gould","email":"mgould@redhat.com","username":"pozorvlak"},"change_message_id":"d79de34c4c5b52a4038c37b0bdb548c823e795da","unresolved":false,"context_lines":[{"line_number":45,"context_line":"Proposed change"},{"line_number":46,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"The proposed implementation consists in having Ironic to retrieve"},{"line_number":49,"context_line":"the system logs from the deploy ramdisk (IPA) via its API and then"},{"line_number":50,"context_line":"upload it to Swift or save on the local file-system of that conductor"},{"line_number":51,"context_line":"(for standalone-mode users)."}],"source_content_type":"text/x-rst","patch_set":9,"id":"7aa08908_3b67b252","line":48,"updated":"2016-06-16 15:45:57.000000000","message":"s/to //","commit_id":"7bfd33cb4205edd34e01c711e19c6a61c511944c"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"bf6397540122a1be742037b3f12ce0e4875078a5","unresolved":false,"context_lines":[{"line_number":45,"context_line":"Proposed change"},{"line_number":46,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"The proposed implementation consists in having Ironic to retrieve"},{"line_number":49,"context_line":"the system logs from the deploy ramdisk (IPA) via its API and then"},{"line_number":50,"context_line":"upload it to Swift or save on the local file-system of that conductor"},{"line_number":51,"context_line":"(for standalone-mode users)."}],"source_content_type":"text/x-rst","patch_set":9,"id":"7aa08908_51aedde7","line":48,"in_reply_to":"7aa08908_3b67b252","updated":"2016-06-16 16:04:18.000000000","message":"Done","commit_id":"7bfd33cb4205edd34e01c711e19c6a61c511944c"},{"author":{"_account_id":18893,"name":"Miles Gould","email":"mgould@redhat.com","username":"pozorvlak"},"change_message_id":"d79de34c4c5b52a4038c37b0bdb548c823e795da","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"The proposed implementation consists in having Ironic to retrieve"},{"line_number":49,"context_line":"the system logs from the deploy ramdisk (IPA) via its API and then"},{"line_number":50,"context_line":"upload it to Swift or save on the local file-system of that conductor"},{"line_number":51,"context_line":"(for standalone-mode users)."},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"Changes in IPA"}],"source_content_type":"text/x-rst","patch_set":9,"id":"7aa08908_db5e6e78","line":50,"updated":"2016-06-16 15:45:57.000000000","message":"\"or save it\"","commit_id":"7bfd33cb4205edd34e01c711e19c6a61c511944c"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"bf6397540122a1be742037b3f12ce0e4875078a5","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"The proposed implementation consists in having Ironic to retrieve"},{"line_number":49,"context_line":"the system logs from the deploy ramdisk (IPA) via its API and then"},{"line_number":50,"context_line":"upload it to Swift or save on the local file-system of that conductor"},{"line_number":51,"context_line":"(for standalone-mode users)."},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"Changes in IPA"}],"source_content_type":"text/x-rst","patch_set":9,"id":"7aa08908_91768504","line":50,"in_reply_to":"7aa08908_db5e6e78","updated":"2016-06-16 16:04:18.000000000","message":"Done","commit_id":"7bfd33cb4205edd34e01c711e19c6a61c511944c"},{"author":{"_account_id":18893,"name":"Miles Gould","email":"mgould@redhat.com","username":"pozorvlak"},"change_message_id":"d79de34c4c5b52a4038c37b0bdb548c823e795da","unresolved":false,"context_lines":[{"line_number":54,"context_line":"--------------"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"A new ``log`` extension will be added to IPA. This extension will"},{"line_number":57,"context_line":"introduce a new synchronous command called ``collect_system_logs``, by"},{"line_number":58,"context_line":"invoking this command IPA will then tar.gz and base64 encode the system"},{"line_number":59,"context_line":"logs and return the resulting string to the caller."},{"line_number":60,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"7aa08908_7b481ab4","line":57,"updated":"2016-06-16 15:45:57.000000000","message":"\", by\" -\u003e \". By\"","commit_id":"7bfd33cb4205edd34e01c711e19c6a61c511944c"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"bf6397540122a1be742037b3f12ce0e4875078a5","unresolved":false,"context_lines":[{"line_number":54,"context_line":"--------------"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"A new ``log`` extension will be added to IPA. This extension will"},{"line_number":57,"context_line":"introduce a new synchronous command called ``collect_system_logs``, by"},{"line_number":58,"context_line":"invoking this command IPA will then tar.gz and base64 encode the system"},{"line_number":59,"context_line":"logs and return the resulting string to the caller."},{"line_number":60,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"7aa08908_918fa574","line":57,"in_reply_to":"7aa08908_7b481ab4","updated":"2016-06-16 16:04:18.000000000","message":"Done","commit_id":"7bfd33cb4205edd34e01c711e19c6a61c511944c"},{"author":{"_account_id":18893,"name":"Miles Gould","email":"mgould@redhat.com","username":"pozorvlak"},"change_message_id":"d79de34c4c5b52a4038c37b0bdb548c823e795da","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"A new ``log`` extension will be added to IPA. This extension will"},{"line_number":57,"context_line":"introduce a new synchronous command called ``collect_system_logs``, by"},{"line_number":58,"context_line":"invoking this command IPA will then tar.gz and base64 encode the system"},{"line_number":59,"context_line":"logs and return the resulting string to the caller."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"Since we do support different base OSs for IPA (e.g Tiny Core Linux,"}],"source_content_type":"text/x-rst","patch_set":9,"id":"7aa08908_1be756ad","line":58,"updated":"2016-06-16 15:45:57.000000000","message":"I was surprised to see \"tar.gz\" used as a verb - I\u0027d say \"IPA will then tar, gzip and base64-encode the system\".","commit_id":"7bfd33cb4205edd34e01c711e19c6a61c511944c"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"bf6397540122a1be742037b3f12ce0e4875078a5","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"A new ``log`` extension will be added to IPA. This extension will"},{"line_number":57,"context_line":"introduce a new synchronous command called ``collect_system_logs``, by"},{"line_number":58,"context_line":"invoking this command IPA will then tar.gz and base64 encode the system"},{"line_number":59,"context_line":"logs and return the resulting string to the caller."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"Since we do support different base OSs for IPA (e.g Tiny Core Linux,"}],"source_content_type":"text/x-rst","patch_set":9,"id":"7aa08908_514a5d28","line":58,"in_reply_to":"7aa08908_1be756ad","updated":"2016-06-16 16:04:18.000000000","message":"Done","commit_id":"7bfd33cb4205edd34e01c711e19c6a61c511944c"},{"author":{"_account_id":18893,"name":"Miles Gould","email":"mgould@redhat.com","username":"pozorvlak"},"change_message_id":"d79de34c4c5b52a4038c37b0bdb548c823e795da","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"Since we do support different base OSs for IPA (e.g Tiny Core Linux,"},{"line_number":62,"context_line":"Fedora, Debian) we need different ways to find the logs depending on the"},{"line_number":63,"context_line":"system. This spec proposes two ways that should be enough for mostly of"},{"line_number":64,"context_line":"the distros today:"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"#. For distributions using ``systemd``, all system logs are available via"}],"source_content_type":"text/x-rst","patch_set":9,"id":"7aa08908_7bf65a5e","line":63,"updated":"2016-06-16 15:45:57.000000000","message":"\"mostly\" -\u003e \"most\"","commit_id":"7bfd33cb4205edd34e01c711e19c6a61c511944c"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"bf6397540122a1be742037b3f12ce0e4875078a5","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"Since we do support different base OSs for IPA (e.g Tiny Core Linux,"},{"line_number":62,"context_line":"Fedora, Debian) we need different ways to find the logs depending on the"},{"line_number":63,"context_line":"system. This spec proposes two ways that should be enough for mostly of"},{"line_number":64,"context_line":"the distros today:"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"#. For distributions using ``systemd``, all system logs are available via"}],"source_content_type":"text/x-rst","patch_set":9,"id":"7aa08908_31451115","line":63,"in_reply_to":"7aa08908_7bf65a5e","updated":"2016-06-16 16:04:18.000000000","message":"Done","commit_id":"7bfd33cb4205edd34e01c711e19c6a61c511944c"},{"author":{"_account_id":18893,"name":"Miles Gould","email":"mgould@redhat.com","username":"pozorvlak"},"change_message_id":"d79de34c4c5b52a4038c37b0bdb548c823e795da","unresolved":false,"context_lines":[{"line_number":85,"context_line":"   or \"never\". Defaults to \"on_failure\"."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"#. ``deploy_logs_storage_backend`` (string): The name of the storage"},{"line_number":88,"context_line":"   backend where the response file will be storaged at. One of the two:"},{"line_number":89,"context_line":"   \"local\" or \"swift\". Defaults to \"local\"."},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"#. ``deploy_logs_local_path`` (string): The path to the directory"}],"source_content_type":"text/x-rst","patch_set":9,"id":"7aa08908_9b80668d","line":88,"updated":"2016-06-16 15:45:57.000000000","message":"\"storaged at\" -\u003e \"stored\"","commit_id":"7bfd33cb4205edd34e01c711e19c6a61c511944c"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"bf6397540122a1be742037b3f12ce0e4875078a5","unresolved":false,"context_lines":[{"line_number":85,"context_line":"   or \"never\". Defaults to \"on_failure\"."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"#. ``deploy_logs_storage_backend`` (string): The name of the storage"},{"line_number":88,"context_line":"   backend where the response file will be storaged at. One of the two:"},{"line_number":89,"context_line":"   \"local\" or \"swift\". Defaults to \"local\"."},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"#. ``deploy_logs_local_path`` (string): The path to the directory"}],"source_content_type":"text/x-rst","patch_set":9,"id":"7aa08908_d15c8df2","line":88,"in_reply_to":"7aa08908_9b80668d","updated":"2016-06-16 16:04:18.000000000","message":"Done","commit_id":"7bfd33cb4205edd34e01c711e19c6a61c511944c"},{"author":{"_account_id":18893,"name":"Miles Gould","email":"mgould@redhat.com","username":"pozorvlak"},"change_message_id":"d79de34c4c5b52a4038c37b0bdb548c823e795da","unresolved":false,"context_lines":[{"line_number":101,"context_line":"#. ``deploy_logs_swift_days_to_expire`` (integer):"},{"line_number":102,"context_line":"   Number of days before a log object is `marked as expired in Swift"},{"line_number":103,"context_line":"   \u003chttp://docs.openstack.org/developer/swift/overview_expiring_objects.html\u003e`_."},{"line_number":104,"context_line":"   If None, the logs will be kept forever or until manually deleted, used"},{"line_number":105,"context_line":"   when the ``deploy_logs_storage_backend`` is configured to **swift**."},{"line_number":106,"context_line":"   Defaults to *30 days*."},{"line_number":107,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"7aa08908_5b0b9e2b","line":104,"updated":"2016-06-16 15:45:57.000000000","message":"\"deleted, used\" -\u003e \"deleted. Used\"","commit_id":"7bfd33cb4205edd34e01c711e19c6a61c511944c"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"bf6397540122a1be742037b3f12ce0e4875078a5","unresolved":false,"context_lines":[{"line_number":101,"context_line":"#. ``deploy_logs_swift_days_to_expire`` (integer):"},{"line_number":102,"context_line":"   Number of days before a log object is `marked as expired in Swift"},{"line_number":103,"context_line":"   \u003chttp://docs.openstack.org/developer/swift/overview_expiring_objects.html\u003e`_."},{"line_number":104,"context_line":"   If None, the logs will be kept forever or until manually deleted, used"},{"line_number":105,"context_line":"   when the ``deploy_logs_storage_backend`` is configured to **swift**."},{"line_number":106,"context_line":"   Defaults to *30 days*."},{"line_number":107,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"7aa08908_f159c9fe","line":104,"in_reply_to":"7aa08908_5b0b9e2b","updated":"2016-06-16 16:04:18.000000000","message":"Done","commit_id":"7bfd33cb4205edd34e01c711e19c6a61c511944c"},{"author":{"_account_id":18893,"name":"Miles Gould","email":"mgould@redhat.com","username":"pozorvlak"},"change_message_id":"d79de34c4c5b52a4038c37b0bdb548c823e795da","unresolved":false,"context_lines":[{"line_number":107,"context_line":""},{"line_number":108,"context_line":".. note::"},{"line_number":109,"context_line":"   When storing the logs in the local file-system Ironic won\u0027t be"},{"line_number":110,"context_line":"   responsible for deleting the logs after a certain time, it\u0027s up to"},{"line_number":111,"context_line":"   the operator to configure an external job to do it, if wanted."},{"line_number":112,"context_line":""},{"line_number":113,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"7aa08908_3e0de035","line":110,"updated":"2016-06-16 15:45:57.000000000","message":"\"time, it\u0027s\" -\u003e \"time. It\u0027s\"","commit_id":"7bfd33cb4205edd34e01c711e19c6a61c511944c"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"bf6397540122a1be742037b3f12ce0e4875078a5","unresolved":false,"context_lines":[{"line_number":107,"context_line":""},{"line_number":108,"context_line":".. note::"},{"line_number":109,"context_line":"   When storing the logs in the local file-system Ironic won\u0027t be"},{"line_number":110,"context_line":"   responsible for deleting the logs after a certain time, it\u0027s up to"},{"line_number":111,"context_line":"   the operator to configure an external job to do it, if wanted."},{"line_number":112,"context_line":""},{"line_number":113,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"7aa08908_511ffd08","line":110,"in_reply_to":"7aa08908_3e0de035","updated":"2016-06-16 16:04:18.000000000","message":"Done","commit_id":"7bfd33cb4205edd34e01c711e19c6a61c511944c"},{"author":{"_account_id":18893,"name":"Miles Gould","email":"mgould@redhat.com","username":"pozorvlak"},"change_message_id":"d79de34c4c5b52a4038c37b0bdb548c823e795da","unresolved":false,"context_lines":[{"line_number":116,"context_line":"node (right before powering it off or rebooting). For example, if"},{"line_number":117,"context_line":"``retrieve_deploy_logs`` is set to **always** Ironic will collect the"},{"line_number":118,"context_line":"logs independently of the deployment being a success or a failure;"},{"line_number":119,"context_line":"by setting it to **on_failure** Ironic will collect the logs upon"},{"line_number":120,"context_line":"a deployment failure; by setting it to **never** makes Ironic never"},{"line_number":121,"context_line":"collect the deployment logs."},{"line_number":122,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"7aa08908_7e2e488d","line":119,"updated":"2016-06-16 15:45:57.000000000","message":"\"by setting it to\" -\u003e \"if it is set to\"","commit_id":"7bfd33cb4205edd34e01c711e19c6a61c511944c"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"bf6397540122a1be742037b3f12ce0e4875078a5","unresolved":false,"context_lines":[{"line_number":116,"context_line":"node (right before powering it off or rebooting). For example, if"},{"line_number":117,"context_line":"``retrieve_deploy_logs`` is set to **always** Ironic will collect the"},{"line_number":118,"context_line":"logs independently of the deployment being a success or a failure;"},{"line_number":119,"context_line":"by setting it to **on_failure** Ironic will collect the logs upon"},{"line_number":120,"context_line":"a deployment failure; by setting it to **never** makes Ironic never"},{"line_number":121,"context_line":"collect the deployment logs."},{"line_number":122,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"7aa08908_1159f58e","line":119,"in_reply_to":"7aa08908_7e2e488d","updated":"2016-06-16 16:04:18.000000000","message":"Done","commit_id":"7bfd33cb4205edd34e01c711e19c6a61c511944c"},{"author":{"_account_id":18893,"name":"Miles Gould","email":"mgould@redhat.com","username":"pozorvlak"},"change_message_id":"d79de34c4c5b52a4038c37b0bdb548c823e795da","unresolved":false,"context_lines":[{"line_number":117,"context_line":"``retrieve_deploy_logs`` is set to **always** Ironic will collect the"},{"line_number":118,"context_line":"logs independently of the deployment being a success or a failure;"},{"line_number":119,"context_line":"by setting it to **on_failure** Ironic will collect the logs upon"},{"line_number":120,"context_line":"a deployment failure; by setting it to **never** makes Ironic never"},{"line_number":121,"context_line":"collect the deployment logs."},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"When the logs are collected, Ironic should decode the base64 encoded"}],"source_content_type":"text/x-rst","patch_set":9,"id":"7aa08908_be755098","line":120,"updated":"2016-06-16 15:45:57.000000000","message":"\"by setting it to **never** makes Ironic never\" -\u003e \"if it is set to **never**, Ironic will never\"","commit_id":"7bfd33cb4205edd34e01c711e19c6a61c511944c"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"bf6397540122a1be742037b3f12ce0e4875078a5","unresolved":false,"context_lines":[{"line_number":117,"context_line":"``retrieve_deploy_logs`` is set to **always** Ironic will collect the"},{"line_number":118,"context_line":"logs independently of the deployment being a success or a failure;"},{"line_number":119,"context_line":"by setting it to **on_failure** Ironic will collect the logs upon"},{"line_number":120,"context_line":"a deployment failure; by setting it to **never** makes Ironic never"},{"line_number":121,"context_line":"collect the deployment logs."},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"When the logs are collected, Ironic should decode the base64 encoded"}],"source_content_type":"text/x-rst","patch_set":9,"id":"7aa08908_319d1158","line":120,"in_reply_to":"7aa08908_be755098","updated":"2016-06-16 16:04:18.000000000","message":"Done","commit_id":"7bfd33cb4205edd34e01c711e19c6a61c511944c"},{"author":{"_account_id":18893,"name":"Miles Gould","email":"mgould@redhat.com","username":"pozorvlak"},"change_message_id":"d79de34c4c5b52a4038c37b0bdb548c823e795da","unresolved":false,"context_lines":[{"line_number":122,"context_line":""},{"line_number":123,"context_line":"When the logs are collected, Ironic should decode the base64 encoded"},{"line_number":124,"context_line":"tar.gz file and store it according to the ``deploy_logs_storage_backend``"},{"line_number":125,"context_line":"configuration. All log object will be named with the following pattern:"},{"line_number":126,"context_line":"*\u003cnode-uuid\u003e[_\u003cinstance-uuid\u003e]_\u003ctimestamp\u003e*. Note that, ``instance_uuid``"},{"line_number":127,"context_line":"is not a required field for deploying a node when Ironic is configured"},{"line_number":128,"context_line":"to be used in **standalone** mode so, if present it will be appended to"}],"source_content_type":"text/x-rst","patch_set":9,"id":"7aa08908_3e6200da","line":125,"updated":"2016-06-16 15:45:57.000000000","message":"\"object\" -\u003e \"objects\"","commit_id":"7bfd33cb4205edd34e01c711e19c6a61c511944c"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"bf6397540122a1be742037b3f12ce0e4875078a5","unresolved":false,"context_lines":[{"line_number":122,"context_line":""},{"line_number":123,"context_line":"When the logs are collected, Ironic should decode the base64 encoded"},{"line_number":124,"context_line":"tar.gz file and store it according to the ``deploy_logs_storage_backend``"},{"line_number":125,"context_line":"configuration. All log object will be named with the following pattern:"},{"line_number":126,"context_line":"*\u003cnode-uuid\u003e[_\u003cinstance-uuid\u003e]_\u003ctimestamp\u003e*. Note that, ``instance_uuid``"},{"line_number":127,"context_line":"is not a required field for deploying a node when Ironic is configured"},{"line_number":128,"context_line":"to be used in **standalone** mode so, if present it will be appended to"}],"source_content_type":"text/x-rst","patch_set":9,"id":"7aa08908_d1dbed1f","line":125,"in_reply_to":"7aa08908_3e6200da","updated":"2016-06-16 16:04:18.000000000","message":"Done","commit_id":"7bfd33cb4205edd34e01c711e19c6a61c511944c"},{"author":{"_account_id":18893,"name":"Miles Gould","email":"mgould@redhat.com","username":"pozorvlak"},"change_message_id":"d79de34c4c5b52a4038c37b0bdb548c823e795da","unresolved":false,"context_lines":[{"line_number":143,"context_line":"  This implementation requires the network to be setup correctly,"},{"line_number":144,"context_line":"  otherwise Ironic will not be able to contact the IPA API. When debugging"},{"line_number":145,"context_line":"  such problems the only action is to look at the console of the nodes to"},{"line_number":146,"context_line":"  see some logs, this method has some caveats see the `Problem description`_"},{"line_number":147,"context_line":"  for more information."},{"line_number":148,"context_line":""},{"line_number":149,"context_line":".. note::"}],"source_content_type":"text/x-rst","patch_set":9,"id":"7aa08908_9e54d4ca","line":146,"updated":"2016-06-16 15:45:57.000000000","message":"Run-on sentence. \"When debugging such problems, the only action possible is to look at the consoles of the nodes to see some logs. This method has some caveats: see the `Problem description` for more information.\"","commit_id":"7bfd33cb4205edd34e01c711e19c6a61c511944c"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"bf6397540122a1be742037b3f12ce0e4875078a5","unresolved":false,"context_lines":[{"line_number":143,"context_line":"  This implementation requires the network to be setup correctly,"},{"line_number":144,"context_line":"  otherwise Ironic will not be able to contact the IPA API. When debugging"},{"line_number":145,"context_line":"  such problems the only action is to look at the console of the nodes to"},{"line_number":146,"context_line":"  see some logs, this method has some caveats see the `Problem description`_"},{"line_number":147,"context_line":"  for more information."},{"line_number":148,"context_line":""},{"line_number":149,"context_line":".. note::"}],"source_content_type":"text/x-rst","patch_set":9,"id":"7aa08908_d1292df4","line":146,"in_reply_to":"7aa08908_9e54d4ca","updated":"2016-06-16 16:04:18.000000000","message":"Done","commit_id":"7bfd33cb4205edd34e01c711e19c6a61c511944c"},{"author":{"_account_id":18893,"name":"Miles Gould","email":"mgould@redhat.com","username":"pozorvlak"},"change_message_id":"d79de34c4c5b52a4038c37b0bdb548c823e795da","unresolved":false,"context_lines":[{"line_number":149,"context_line":".. note::"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"  Neither Ironic or IPA will be responsible for sanitizing any logs"},{"line_number":152,"context_line":"  before storing it. First because this spec is limited to collect"},{"line_number":153,"context_line":"  logs from the deployment only and at this point the tenant won\u0027t have"},{"line_number":154,"context_line":"  used the node yet. Second, the services generating the logs should be"},{"line_number":155,"context_line":"  responsible for masking secrets in their logs (like we do in Ironic),"}],"source_content_type":"text/x-rst","patch_set":9,"id":"7aa08908_fe5998fe","line":152,"updated":"2016-06-16 15:45:57.000000000","message":"\"it\" -\u003e \"them\"\n\"collect\" -\u003e \"collecting\"","commit_id":"7bfd33cb4205edd34e01c711e19c6a61c511944c"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"bf6397540122a1be742037b3f12ce0e4875078a5","unresolved":false,"context_lines":[{"line_number":149,"context_line":".. note::"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"  Neither Ironic or IPA will be responsible for sanitizing any logs"},{"line_number":152,"context_line":"  before storing it. First because this spec is limited to collect"},{"line_number":153,"context_line":"  logs from the deployment only and at this point the tenant won\u0027t have"},{"line_number":154,"context_line":"  used the node yet. Second, the services generating the logs should be"},{"line_number":155,"context_line":"  responsible for masking secrets in their logs (like we do in Ironic),"}],"source_content_type":"text/x-rst","patch_set":9,"id":"7aa08908_d1100dae","line":152,"in_reply_to":"7aa08908_fe5998fe","updated":"2016-06-16 16:04:18.000000000","message":"Done","commit_id":"7bfd33cb4205edd34e01c711e19c6a61c511944c"},{"author":{"_account_id":18893,"name":"Miles Gould","email":"mgould@redhat.com","username":"pozorvlak"},"change_message_id":"d79de34c4c5b52a4038c37b0bdb548c823e795da","unresolved":false,"context_lines":[{"line_number":213,"context_line":"None."},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"As a note, credentials **are not** passed from Ironic to the deploy"},{"line_number":216,"context_line":"ramdisk, the ``ironic-conductor`` service, which already holds the Swift"},{"line_number":217,"context_line":"credentials, is the one responsible for uploading the logs to Swift."},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"Other end user impact"}],"source_content_type":"text/x-rst","patch_set":9,"id":"7aa08908_9e0214b3","line":216,"updated":"2016-06-16 15:45:57.000000000","message":"\"ramdisk, the\" -\u003e \"ramdisk. The\"","commit_id":"7bfd33cb4205edd34e01c711e19c6a61c511944c"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"bf6397540122a1be742037b3f12ce0e4875078a5","unresolved":false,"context_lines":[{"line_number":213,"context_line":"None."},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"As a note, credentials **are not** passed from Ironic to the deploy"},{"line_number":216,"context_line":"ramdisk, the ``ironic-conductor`` service, which already holds the Swift"},{"line_number":217,"context_line":"credentials, is the one responsible for uploading the logs to Swift."},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"Other end user impact"}],"source_content_type":"text/x-rst","patch_set":9,"id":"7aa08908_51253d08","line":216,"in_reply_to":"7aa08908_9e0214b3","updated":"2016-06-16 16:04:18.000000000","message":"Done","commit_id":"7bfd33cb4205edd34e01c711e19c6a61c511944c"},{"author":{"_account_id":18893,"name":"Miles Gould","email":"mgould@redhat.com","username":"pozorvlak"},"change_message_id":"d79de34c4c5b52a4038c37b0bdb548c823e795da","unresolved":false,"context_lines":[{"line_number":282,"context_line":""},{"line_number":283,"context_line":"None."},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"As a note, when using an old IPA ramdisk which do not support the new"},{"line_number":286,"context_line":"``log.collect_system_logs`` command Ironic should handle such exception"},{"line_number":287,"context_line":"and log a warning message to the operator if ``retrieve_deploy_logs``"},{"line_number":288,"context_line":"is set to **always** or **on_failure**."}],"source_content_type":"text/x-rst","patch_set":9,"id":"7aa08908_3e1a0019","line":285,"updated":"2016-06-16 15:45:57.000000000","message":"\"do\" -\u003e \"does\"","commit_id":"7bfd33cb4205edd34e01c711e19c6a61c511944c"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"bf6397540122a1be742037b3f12ce0e4875078a5","unresolved":false,"context_lines":[{"line_number":282,"context_line":""},{"line_number":283,"context_line":"None."},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"As a note, when using an old IPA ramdisk which do not support the new"},{"line_number":286,"context_line":"``log.collect_system_logs`` command Ironic should handle such exception"},{"line_number":287,"context_line":"and log a warning message to the operator if ``retrieve_deploy_logs``"},{"line_number":288,"context_line":"is set to **always** or **on_failure**."}],"source_content_type":"text/x-rst","patch_set":9,"id":"7aa08908_711af9c7","line":285,"in_reply_to":"7aa08908_3e1a0019","updated":"2016-06-16 16:04:18.000000000","message":"Done","commit_id":"7bfd33cb4205edd34e01c711e19c6a61c511944c"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"175a5a80951bd7310057f132a01a0c66e821fcac","unresolved":false,"context_lines":[{"line_number":59,"context_line":"system logs and return the resulting string to the caller."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"Since we do support different base OSs for IPA (e.g Tiny Core Linux,"},{"line_number":62,"context_line":"Fedora, Debian) we need different ways to find the logs depending on the"},{"line_number":63,"context_line":"system. This spec proposes two ways that should be enough for most of"},{"line_number":64,"context_line":"the distros today:"},{"line_number":65,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"7aa08908_7f84775c","line":62,"updated":"2016-06-16 20:17:49.000000000","message":"we still support coreOS, right?","commit_id":"8068e1f6d92d22bf25a56b8327c1abd0821b1bcd"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"2ed23fb2a354ae6e5fcf6ed46acfcdcf64d03501","unresolved":false,"context_lines":[{"line_number":59,"context_line":"system logs and return the resulting string to the caller."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"Since we do support different base OSs for IPA (e.g Tiny Core Linux,"},{"line_number":62,"context_line":"Fedora, Debian) we need different ways to find the logs depending on the"},{"line_number":63,"context_line":"system. This spec proposes two ways that should be enough for most of"},{"line_number":64,"context_line":"the distros today:"},{"line_number":65,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"7aa08908_1e943d35","line":62,"in_reply_to":"7aa08908_7f84775c","updated":"2016-06-17 10:49:26.000000000","message":"Yes, CoreOS does use systemd","commit_id":"8068e1f6d92d22bf25a56b8327c1abd0821b1bcd"},{"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":"cdf8243cac30647d189626a3b380373154faec48","unresolved":false,"context_lines":[{"line_number":68,"context_line":"   get the logs from there."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"#. For other distributions, this spec proposes retaining all the logs"},{"line_number":71,"context_line":"   from */var/log* and the output of the ``dmesg`` command."},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"The logs from all distributions independent of the init system, will"},{"line_number":74,"context_line":"also contain the output of the following commands files: ``ps``, ``df``,"}],"source_content_type":"text/x-rst","patch_set":10,"id":"7aa08908_4053a16c","line":71,"updated":"2016-06-16 17:21:15.000000000","message":"nit: When we implement this, we may want to skip dmesg -- most distributions funnel dmesg into /var/log/kmsg.log or similar (sometimes even just /var/log/dmesg) so I suspect this will be redundant.\n\nEither way; mostly an implementation issue/question.","commit_id":"8068e1f6d92d22bf25a56b8327c1abd0821b1bcd"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"2ed23fb2a354ae6e5fcf6ed46acfcdcf64d03501","unresolved":false,"context_lines":[{"line_number":68,"context_line":"   get the logs from there."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"#. For other distributions, this spec proposes retaining all the logs"},{"line_number":71,"context_line":"   from */var/log* and the output of the ``dmesg`` command."},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"The logs from all distributions independent of the init system, will"},{"line_number":74,"context_line":"also contain the output of the following commands files: ``ps``, ``df``,"}],"source_content_type":"text/x-rst","patch_set":10,"id":"7aa08908_7ee3c1d8","line":71,"in_reply_to":"7aa08908_4053a16c","updated":"2016-06-17 10:49:26.000000000","message":"Yeah, I\u0027ve added dmesg because I haven\u0027t seem that when using TinyIPA. I can retest it and see if that\u0027s really the case.","commit_id":"8068e1f6d92d22bf25a56b8327c1abd0821b1bcd"},{"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":"cdf8243cac30647d189626a3b380373154faec48","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"The logs from all distributions independent of the init system, will"},{"line_number":74,"context_line":"also contain the output of the following commands files: ``ps``, ``df``,"},{"line_number":75,"context_line":"``iptables`` and ``/proc/cmdline``."},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"Changes in Ironic"},{"line_number":78,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"7aa08908_e0d28dd0","line":75,"updated":"2016-06-16 17:21:15.000000000","message":"/proc/cmdline is printed in kernel logs on boot. No need to explicitly log it separately.","commit_id":"8068e1f6d92d22bf25a56b8327c1abd0821b1bcd"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"2ed23fb2a354ae6e5fcf6ed46acfcdcf64d03501","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"The logs from all distributions independent of the init system, will"},{"line_number":74,"context_line":"also contain the output of the following commands files: ``ps``, ``df``,"},{"line_number":75,"context_line":"``iptables`` and ``/proc/cmdline``."},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"Changes in Ironic"},{"line_number":78,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"7aa08908_5effe565","line":75,"in_reply_to":"7aa08908_e0d28dd0","updated":"2016-06-17 10:49:26.000000000","message":"True","commit_id":"8068e1f6d92d22bf25a56b8327c1abd0821b1bcd"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"175a5a80951bd7310057f132a01a0c66e821fcac","unresolved":false,"context_lines":[{"line_number":82,"context_line":""},{"line_number":83,"context_line":"#. ``retrieve_deploy_logs`` (string): Whether Ironic should retrieve"},{"line_number":84,"context_line":"   the deployment logs or not. Valid options are: \"always\", \"on_failure\""},{"line_number":85,"context_line":"   or \"never\". Defaults to \"on_failure\"."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"#. ``deploy_logs_storage_backend`` (string): The name of the storage"},{"line_number":88,"context_line":"   backend where the response file will be stored. One of the two:"}],"source_content_type":"text/x-rst","patch_set":10,"id":"7aa08908_5fbedbff","line":85,"updated":"2016-06-16 20:17:49.000000000","message":"all the other configs are prefixed with \u0027deploy_logs\u0027; just wondering what you thought of changing this to eg \u0027deploy_logs_retrieved\u0027, \u0027deploy_logs_stored\u0027, \u0027deploy_logs_collect\u0027","commit_id":"8068e1f6d92d22bf25a56b8327c1abd0821b1bcd"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"2ed23fb2a354ae6e5fcf6ed46acfcdcf64d03501","unresolved":false,"context_lines":[{"line_number":82,"context_line":""},{"line_number":83,"context_line":"#. ``retrieve_deploy_logs`` (string): Whether Ironic should retrieve"},{"line_number":84,"context_line":"   the deployment logs or not. Valid options are: \"always\", \"on_failure\""},{"line_number":85,"context_line":"   or \"never\". Defaults to \"on_failure\"."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"#. ``deploy_logs_storage_backend`` (string): The name of the storage"},{"line_number":88,"context_line":"   backend where the response file will be stored. One of the two:"}],"source_content_type":"text/x-rst","patch_set":10,"id":"7aa08908_7e7f41df","line":85,"in_reply_to":"7aa08908_5fbedbff","updated":"2016-06-17 10:49:26.000000000","message":"That\u0027s a good point, I think it\u0027s important to have consistent names. From the list you\u0027ve proposed I do like \"deploy_logs_collect\" it reads nice when you have \"deploy_logs_collect\u003dalways, on_failure or never\".\n\nSo +1, I\u0027ll change it to \"deploy_logs_Collect\".","commit_id":"8068e1f6d92d22bf25a56b8327c1abd0821b1bcd"},{"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":"cdf8243cac30647d189626a3b380373154faec48","unresolved":false,"context_lines":[{"line_number":108,"context_line":".. note::"},{"line_number":109,"context_line":"   When storing the logs in the local file-system Ironic won\u0027t be"},{"line_number":110,"context_line":"   responsible for deleting the logs after a certain time. It\u0027s up to"},{"line_number":111,"context_line":"   the operator to configure an external job to do it, if wanted."},{"line_number":112,"context_line":""},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"Depending on the value of the ``retrieve_deploy_logs`` Ironic will"}],"source_content_type":"text/x-rst","patch_set":10,"id":"7aa08908_60f69d5e","line":111,"updated":"2016-06-16 17:21:15.000000000","message":"We should make sure upstream packagers know to include this in log rotation configs (logrotate.d/blah).","commit_id":"8068e1f6d92d22bf25a56b8327c1abd0821b1bcd"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"2ed23fb2a354ae6e5fcf6ed46acfcdcf64d03501","unresolved":false,"context_lines":[{"line_number":108,"context_line":".. note::"},{"line_number":109,"context_line":"   When storing the logs in the local file-system Ironic won\u0027t be"},{"line_number":110,"context_line":"   responsible for deleting the logs after a certain time. It\u0027s up to"},{"line_number":111,"context_line":"   the operator to configure an external job to do it, if wanted."},{"line_number":112,"context_line":""},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"Depending on the value of the ``retrieve_deploy_logs`` Ironic will"}],"source_content_type":"text/x-rst","patch_set":10,"id":"7aa08908_dede35d9","line":111,"in_reply_to":"7aa08908_60f69d5e","updated":"2016-06-17 10:49:26.000000000","message":"True, we can add notes as part of the documentation for it.","commit_id":"8068e1f6d92d22bf25a56b8327c1abd0821b1bcd"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"175a5a80951bd7310057f132a01a0c66e821fcac","unresolved":false,"context_lines":[{"line_number":122,"context_line":"When the logs are collected, Ironic should decode the base64 encoded"},{"line_number":123,"context_line":"tar.gz file and store it according to the ``deploy_logs_storage_backend``"},{"line_number":124,"context_line":"configuration. All log objects will be named with the following pattern:"},{"line_number":125,"context_line":"*\u003cnode-uuid\u003e[_\u003cinstance-uuid\u003e]_\u003ctimestamp\u003e*. Note that, ``instance_uuid``"},{"line_number":126,"context_line":"is not a required field for deploying a node when Ironic is configured"},{"line_number":127,"context_line":"to be used in **standalone** mode so, if present it will be appended to"},{"line_number":128,"context_line":"the name."}],"source_content_type":"text/x-rst","patch_set":10,"id":"7aa08908_bfe9bfb9","line":125,"updated":"2016-06-16 20:17:49.000000000","message":".gz, right?\n\nwhat time will be used for the timestamp? The time that ironic is storing the log file? or the time that ironic got the file? And by timestamp you mean -- unix epoch, or yyyy-mm-dd-... ??","commit_id":"8068e1f6d92d22bf25a56b8327c1abd0821b1bcd"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"2ed23fb2a354ae6e5fcf6ed46acfcdcf64d03501","unresolved":false,"context_lines":[{"line_number":122,"context_line":"When the logs are collected, Ironic should decode the base64 encoded"},{"line_number":123,"context_line":"tar.gz file and store it according to the ``deploy_logs_storage_backend``"},{"line_number":124,"context_line":"configuration. All log objects will be named with the following pattern:"},{"line_number":125,"context_line":"*\u003cnode-uuid\u003e[_\u003cinstance-uuid\u003e]_\u003ctimestamp\u003e*. Note that, ``instance_uuid``"},{"line_number":126,"context_line":"is not a required field for deploying a node when Ironic is configured"},{"line_number":127,"context_line":"to be used in **standalone** mode so, if present it will be appended to"},{"line_number":128,"context_line":"the name."}],"source_content_type":"text/x-rst","patch_set":10,"id":"7aa08908_9eadcd33","line":125,"in_reply_to":"7aa08908_bfe9bfb9","updated":"2016-06-17 10:49:26.000000000","message":"Right, .tar.gz\n\nYeah I was thinking of using yyyy-mm-dd... Like the example on L137","commit_id":"8068e1f6d92d22bf25a56b8327c1abd0821b1bcd"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"175a5a80951bd7310057f132a01a0c66e821fcac","unresolved":false,"context_lines":[{"line_number":129,"context_line":""},{"line_number":130,"context_line":"When using Swift, operators can associate the objects in the container"},{"line_number":131,"context_line":"with the nodes in Ironic and search for the logs of a specific node"},{"line_number":132,"context_line":"using the ``prefix`` parameter, for example:"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":".. code-block:: bash"},{"line_number":135,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"7aa08908_5f77fb01","line":132,"updated":"2016-06-16 20:17:49.000000000","message":"I don\u0027t know much about swift. would it be easy to search for an instance UUID?","commit_id":"8068e1f6d92d22bf25a56b8327c1abd0821b1bcd"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"2ed23fb2a354ae6e5fcf6ed46acfcdcf64d03501","unresolved":false,"context_lines":[{"line_number":129,"context_line":""},{"line_number":130,"context_line":"When using Swift, operators can associate the objects in the container"},{"line_number":131,"context_line":"with the nodes in Ironic and search for the logs of a specific node"},{"line_number":132,"context_line":"using the ``prefix`` parameter, for example:"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":".. code-block:: bash"},{"line_number":135,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"7aa08908_a16508e2","line":132,"in_reply_to":"7aa08908_5f77fb01","updated":"2016-06-17 10:49:26.000000000","message":"I was looking at the Swift documentation because I\u0027m also no expert on it, but, unfortunately it doesn\u0027t seem to be very straight forward to query items in Swift by a substring, AFAICT it only accepts search for a \"prefix\" string [0].\n\nThat\u0027s why having the node UUID first is the best case scenario here because instance UUID may not be present at the file\u0027s name for some cases.\n\nOfc, one could download the list of files and use bash commands (grep) to filter it out, e.g:\n\n$ swift list ironic_deploy_logs_container | grep \u003cinstance uuid\u003e\n\n[0] http://docs.openstack.org/cli-reference/swift.html","commit_id":"8068e1f6d92d22bf25a56b8327c1abd0821b1bcd"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"175a5a80951bd7310057f132a01a0c66e821fcac","unresolved":false,"context_lines":[{"line_number":143,"context_line":"  otherwise Ironic will not be able to contact the IPA API.  When"},{"line_number":144,"context_line":"  debugging such problems, the only action possible is to look at the"},{"line_number":145,"context_line":"  consoles of the nodes to see some logs. This method has some caveats:"},{"line_number":146,"context_line":"  see the `Problem description`_ for more information."},{"line_number":147,"context_line":""},{"line_number":148,"context_line":".. note::"},{"line_number":149,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"7aa08908_1fdbb3ee","line":146,"updated":"2016-06-16 20:17:49.000000000","message":"I don\u0027t understand this note. I thought this spec was so that operators don\u0027t have to debug by looking at the consoles of nodes to see logs.","commit_id":"8068e1f6d92d22bf25a56b8327c1abd0821b1bcd"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"2ed23fb2a354ae6e5fcf6ed46acfcdcf64d03501","unresolved":false,"context_lines":[{"line_number":143,"context_line":"  otherwise Ironic will not be able to contact the IPA API.  When"},{"line_number":144,"context_line":"  debugging such problems, the only action possible is to look at the"},{"line_number":145,"context_line":"  consoles of the nodes to see some logs. This method has some caveats:"},{"line_number":146,"context_line":"  see the `Problem description`_ for more information."},{"line_number":147,"context_line":""},{"line_number":148,"context_line":".. note::"},{"line_number":149,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"7aa08908_e1ea70d7","line":146,"in_reply_to":"7aa08908_1fdbb3ee","updated":"2016-06-17 10:49:26.000000000","message":"Right, there are corner cases that are inevitable in this case since we are dealing with baremetal and not VMs (which contain a hypervisor).\n\nIf we can\u0027t boot the ramdisk onto a node or if the ramdisk can not talk to the Ironic services there\u0027s no way we can\u0027t collect any logs via the network. So, this spec assumes that at least the network is setup correctly to allow the services to talk to each other.","commit_id":"8068e1f6d92d22bf25a56b8327c1abd0821b1bcd"},{"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":"cdf8243cac30647d189626a3b380373154faec48","unresolved":false,"context_lines":[{"line_number":148,"context_line":".. note::"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"  Neither Ironic or IPA will be responsible for sanitizing any logs"},{"line_number":151,"context_line":"  before storing them. First because this spec is limited to collectint"},{"line_number":152,"context_line":"  logs from the deployment only and at this point the tenant won\u0027t have"},{"line_number":153,"context_line":"  used the node yet. Second, the services generating the logs should be"},{"line_number":154,"context_line":"  responsible for masking secrets in their logs (like we do in Ironic),"}],"source_content_type":"text/x-rst","patch_set":10,"id":"7aa08908_00b5197d","line":151,"updated":"2016-06-16 17:21:15.000000000","message":"s/collectint/collecting/","commit_id":"8068e1f6d92d22bf25a56b8327c1abd0821b1bcd"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"2ed23fb2a354ae6e5fcf6ed46acfcdcf64d03501","unresolved":false,"context_lines":[{"line_number":148,"context_line":".. note::"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"  Neither Ironic or IPA will be responsible for sanitizing any logs"},{"line_number":151,"context_line":"  before storing them. First because this spec is limited to collectint"},{"line_number":152,"context_line":"  logs from the deployment only and at this point the tenant won\u0027t have"},{"line_number":153,"context_line":"  used the node yet. Second, the services generating the logs should be"},{"line_number":154,"context_line":"  responsible for masking secrets in their logs (like we do in Ironic),"}],"source_content_type":"text/x-rst","patch_set":10,"id":"7aa08908_41ba64e2","line":151,"in_reply_to":"7aa08908_00b5197d","updated":"2016-06-17 10:49:26.000000000","message":"Done","commit_id":"8068e1f6d92d22bf25a56b8327c1abd0821b1bcd"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"175a5a80951bd7310057f132a01a0c66e821fcac","unresolved":false,"context_lines":[{"line_number":152,"context_line":"  logs from the deployment only and at this point the tenant won\u0027t have"},{"line_number":153,"context_line":"  used the node yet. Second, the services generating the logs should be"},{"line_number":154,"context_line":"  responsible for masking secrets in their logs (like we do in Ironic),"},{"line_number":155,"context_line":"  if not, it should be considered a bug."},{"line_number":156,"context_line":""},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":10,"id":"7aa08908_1f261316","line":155,"updated":"2016-06-16 20:17:49.000000000","message":"well, even if it is a non-ironic bug, it would be a problem. we should remember to check that there isn\u0027t sensitive info.","commit_id":"8068e1f6d92d22bf25a56b8327c1abd0821b1bcd"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"2ed23fb2a354ae6e5fcf6ed46acfcdcf64d03501","unresolved":false,"context_lines":[{"line_number":152,"context_line":"  logs from the deployment only and at this point the tenant won\u0027t have"},{"line_number":153,"context_line":"  used the node yet. Second, the services generating the logs should be"},{"line_number":154,"context_line":"  responsible for masking secrets in their logs (like we do in Ironic),"},{"line_number":155,"context_line":"  if not, it should be considered a bug."},{"line_number":156,"context_line":""},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":10,"id":"7aa08908_411264b5","line":155,"in_reply_to":"7aa08908_1f261316","updated":"2016-06-17 10:49:26.000000000","message":"Right, this note is more about stating that there\u0027s no way (sane) which Ironic or IPA can use to sanitize random logs from random services. Operators should be aware of that and in case they find something from some service which is not right, they should report it or disable that service or something else since they have control over the ramdisk image used for deployment.","commit_id":"8068e1f6d92d22bf25a56b8327c1abd0821b1bcd"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"e8349aef9dbf964d77bf3d8c7d2bacb63a31ae06","unresolved":false,"context_lines":[{"line_number":152,"context_line":"  logs from the deployment only and at this point the tenant won\u0027t have"},{"line_number":153,"context_line":"  used the node yet. Second, the services generating the logs should be"},{"line_number":154,"context_line":"  responsible for masking secrets in their logs (like we do in Ironic),"},{"line_number":155,"context_line":"  if not, it should be considered a bug."},{"line_number":156,"context_line":""},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":10,"id":"7aa08908_c5f659d6","line":155,"in_reply_to":"7aa08908_411264b5","updated":"2016-06-17 11:55:17.000000000","message":"Yeah, I think it may happen with user image swift tempurl tho.","commit_id":"8068e1f6d92d22bf25a56b8327c1abd0821b1bcd"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"175a5a80951bd7310057f132a01a0c66e821fcac","unresolved":false,"context_lines":[{"line_number":160,"context_line":""},{"line_number":161,"context_line":"Since we already provide ways of doing that via accessing the console"},{"line_number":162,"context_line":"or disabling the powering off the nodes on failures, there are few"},{"line_number":163,"context_line":"alternatives left for this work."},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"The current proposed solution could be extended to fit more use cases"},{"line_number":166,"context_line":"beyond what this spec proposes. For example, instead of uploading it to"}],"source_content_type":"text/x-rst","patch_set":10,"id":"7aa08908_fffce740","line":163,"updated":"2016-06-16 20:17:49.000000000","message":"Alternatives to this were mentioned above right? You\u0027re just saying that there are a few other alternatives besides those?","commit_id":"8068e1f6d92d22bf25a56b8327c1abd0821b1bcd"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"2ed23fb2a354ae6e5fcf6ed46acfcdcf64d03501","unresolved":false,"context_lines":[{"line_number":160,"context_line":""},{"line_number":161,"context_line":"Since we already provide ways of doing that via accessing the console"},{"line_number":162,"context_line":"or disabling the powering off the nodes on failures, there are few"},{"line_number":163,"context_line":"alternatives left for this work."},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"The current proposed solution could be extended to fit more use cases"},{"line_number":166,"context_line":"beyond what this spec proposes. For example, instead of uploading it to"}],"source_content_type":"text/x-rst","patch_set":10,"id":"7aa08908_219ab814","line":163,"in_reply_to":"7aa08908_fffce740","updated":"2016-06-17 10:49:26.000000000","message":"Yes, there are an alternative, one could plug-in a monitor and watch the logs there for example. Not very scalable or automatic, but still an alternative.","commit_id":"8068e1f6d92d22bf25a56b8327c1abd0821b1bcd"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"175a5a80951bd7310057f132a01a0c66e821fcac","unresolved":false,"context_lines":[{"line_number":165,"context_line":"The current proposed solution could be extended to fit more use cases"},{"line_number":166,"context_line":"beyond what this spec proposes. For example, instead of uploading it to"},{"line_number":167,"context_line":"Swift or storing it in the local file-system, Ironic could upload it to"},{"line_number":168,"context_line":"a HTTP/FTP server."},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"As briefly described at `Changes in IPA`_ the method to collect the logs"},{"line_number":171,"context_line":"could be extended to include more logs and output of different commands"}],"source_content_type":"text/x-rst","patch_set":10,"id":"7aa08908_3f8e6fd0","line":168,"updated":"2016-06-16 20:17:49.000000000","message":"or extend to use CEPH via rados-gw.","commit_id":"8068e1f6d92d22bf25a56b8327c1abd0821b1bcd"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"2ed23fb2a354ae6e5fcf6ed46acfcdcf64d03501","unresolved":false,"context_lines":[{"line_number":165,"context_line":"The current proposed solution could be extended to fit more use cases"},{"line_number":166,"context_line":"beyond what this spec proposes. For example, instead of uploading it to"},{"line_number":167,"context_line":"Swift or storing it in the local file-system, Ironic could upload it to"},{"line_number":168,"context_line":"a HTTP/FTP server."},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"As briefly described at `Changes in IPA`_ the method to collect the logs"},{"line_number":171,"context_line":"could be extended to include more logs and output of different commands"}],"source_content_type":"text/x-rst","patch_set":10,"id":"7aa08908_61a04043","line":168,"in_reply_to":"7aa08908_3f8e6fd0","updated":"2016-06-17 10:49:26.000000000","message":"Right.\n\nAs a note, CEPH can also be used as a backend to swift/glance","commit_id":"8068e1f6d92d22bf25a56b8327c1abd0821b1bcd"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"175a5a80951bd7310057f132a01a0c66e821fcac","unresolved":false,"context_lines":[{"line_number":169,"context_line":""},{"line_number":170,"context_line":"As briefly described at `Changes in IPA`_ the method to collect the logs"},{"line_number":171,"context_line":"could be extended to include more logs and output of different commands"},{"line_number":172,"context_line":"that are useful for troubleshooting."},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"Data model impact"},{"line_number":175,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"7aa08908_7f4c779d","line":172,"updated":"2016-06-16 20:17:49.000000000","message":"Have you thought about how to pass the information (as to the amount of detail/logs) from user to ironic to ipa? Could the proposed configs be extended to include such information? [Only asking cuz if they could, it might have an impact on the value or naming of the config option.]","commit_id":"8068e1f6d92d22bf25a56b8327c1abd0821b1bcd"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"d10a425e63d1a2ce874bb59c84b596d58a9d6261","unresolved":false,"context_lines":[{"line_number":169,"context_line":""},{"line_number":170,"context_line":"As briefly described at `Changes in IPA`_ the method to collect the logs"},{"line_number":171,"context_line":"could be extended to include more logs and output of different commands"},{"line_number":172,"context_line":"that are useful for troubleshooting."},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"Data model impact"},{"line_number":175,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3aaa91ec_a5bc226d","line":172,"in_reply_to":"7aa08908_32304856","updated":"2016-06-22 21:27:49.000000000","message":"Sorry, I meant to be able to specify which logs and the output of which commands. Whether that would be configurable somehow. (Just wondering and can be done later.)","commit_id":"8068e1f6d92d22bf25a56b8327c1abd0821b1bcd"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"2ed23fb2a354ae6e5fcf6ed46acfcdcf64d03501","unresolved":false,"context_lines":[{"line_number":169,"context_line":""},{"line_number":170,"context_line":"As briefly described at `Changes in IPA`_ the method to collect the logs"},{"line_number":171,"context_line":"could be extended to include more logs and output of different commands"},{"line_number":172,"context_line":"that are useful for troubleshooting."},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"Data model impact"},{"line_number":175,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"7aa08908_32304856","line":172,"in_reply_to":"7aa08908_7f4c779d","updated":"2016-06-17 10:49:26.000000000","message":"Not sure if I follow 100%. By the user you mean the tenant ?\n\nIf so, that\u0027s not the target for this spec. This feature is used for operators to be able to troubleshoot their cloud, not the tenant.\n\nIf the tenant request an image and it fails to deploy, underneath, the retry filter should be trigged and another machine will be pick for it. If all attempts fail it should contact it\u0027s cloud provider and then the operators may or may not use the logs to figure out what was the problem.","commit_id":"8068e1f6d92d22bf25a56b8327c1abd0821b1bcd"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"175a5a80951bd7310057f132a01a0c66e821fcac","unresolved":false,"context_lines":[{"line_number":213,"context_line":""},{"line_number":214,"context_line":"As a note, credentials **are not** passed from Ironic to the deploy"},{"line_number":215,"context_line":"ramdisk. The ``ironic-conductor`` service, which already holds the Swift"},{"line_number":216,"context_line":"credentials, is the one responsible for uploading the logs to Swift."},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"Other end user impact"},{"line_number":219,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"7aa08908_112f2789","line":216,"updated":"2016-06-16 20:17:49.000000000","message":"via the swift-related configs in [glance]? :-(","commit_id":"8068e1f6d92d22bf25a56b8327c1abd0821b1bcd"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"f7ea760ac59fa91a9489e3002454b2f1ad04ebde","unresolved":false,"context_lines":[{"line_number":213,"context_line":""},{"line_number":214,"context_line":"As a note, credentials **are not** passed from Ironic to the deploy"},{"line_number":215,"context_line":"ramdisk. The ``ironic-conductor`` service, which already holds the Swift"},{"line_number":216,"context_line":"credentials, is the one responsible for uploading the logs to Swift."},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"Other end user impact"},{"line_number":219,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"7aa08908_875c757e","line":216,"in_reply_to":"7aa08908_112f2789","updated":"2016-06-16 21:12:34.000000000","message":"Maybe of interest, I was reminded of this patch: https://review.openstack.org/#/c/251277/","commit_id":"8068e1f6d92d22bf25a56b8327c1abd0821b1bcd"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"2ed23fb2a354ae6e5fcf6ed46acfcdcf64d03501","unresolved":false,"context_lines":[{"line_number":213,"context_line":""},{"line_number":214,"context_line":"As a note, credentials **are not** passed from Ironic to the deploy"},{"line_number":215,"context_line":"ramdisk. The ``ironic-conductor`` service, which already holds the Swift"},{"line_number":216,"context_line":"credentials, is the one responsible for uploading the logs to Swift."},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"Other end user impact"},{"line_number":219,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"7aa08908_b286f8b6","line":216,"in_reply_to":"7aa08908_875c757e","updated":"2016-06-17 10:49:26.000000000","message":"Not from [glance] but from the keystonemiddleware [0], this is the same as we do for e.g uploading the virtualmedia ISO to swift.\n\nBut different from that, we don\u0027t need to create a temporary URL that will be passed to the ramdisk or things like that. Ironic just stores it in swift and that\u0027s it. The IPA ramdisk does not know anything about how Ironic will store the logs.\n\n[0] https://github.com/openstack/ironic/blob/master/ironic/common/swift.py#L39-L54","commit_id":"8068e1f6d92d22bf25a56b8327c1abd0821b1bcd"},{"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":"cdf8243cac30647d189626a3b380373154faec48","unresolved":false,"context_lines":[{"line_number":229,"context_line":"------------------"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"The node will stay a little longer on the ``deploy fail`` or ``deploying``"},{"line_number":232,"context_line":"provision state while IPA is collecting the logs, if enabled."},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"Other deployer impact"},{"line_number":235,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"7aa08908_80a90927","line":232,"updated":"2016-06-16 17:21:15.000000000","message":"We need to not transition this to deploy failed until after the logs are collected. Otherwise we significantly change the meaning of the deploy failed state.","commit_id":"8068e1f6d92d22bf25a56b8327c1abd0821b1bcd"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"2ed23fb2a354ae6e5fcf6ed46acfcdcf64d03501","unresolved":false,"context_lines":[{"line_number":229,"context_line":"------------------"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"The node will stay a little longer on the ``deploy fail`` or ``deploying``"},{"line_number":232,"context_line":"provision state while IPA is collecting the logs, if enabled."},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"Other deployer impact"},{"line_number":235,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"7aa08908_92401c61","line":232,"in_reply_to":"7aa08908_80a90927","updated":"2016-06-17 10:49:26.000000000","message":"True, yeah it can be done prior to the state transition and before the power off. Good point","commit_id":"8068e1f6d92d22bf25a56b8327c1abd0821b1bcd"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"175a5a80951bd7310057f132a01a0c66e821fcac","unresolved":false,"context_lines":[{"line_number":230,"context_line":""},{"line_number":231,"context_line":"The node will stay a little longer on the ``deploy fail`` or ``deploying``"},{"line_number":232,"context_line":"provision state while IPA is collecting the logs, if enabled."},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"Other deployer impact"},{"line_number":235,"context_line":"---------------------"},{"line_number":236,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"7aa08908_519d2fba","line":233,"updated":"2016-06-16 20:17:49.000000000","message":"Any idea how big these log files will be? What if someone has it turned on always. Would there be a small bottleneck anywhere? Maybe if someone tries to deploy to a large (how large) number of nodes \"at the same time\"?\n\nI suppose the bottleneck would be similar to deploying/getting images from swift anyway.","commit_id":"8068e1f6d92d22bf25a56b8327c1abd0821b1bcd"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"2ed23fb2a354ae6e5fcf6ed46acfcdcf64d03501","unresolved":false,"context_lines":[{"line_number":230,"context_line":""},{"line_number":231,"context_line":"The node will stay a little longer on the ``deploy fail`` or ``deploying``"},{"line_number":232,"context_line":"provision state while IPA is collecting the logs, if enabled."},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"Other deployer impact"},{"line_number":235,"context_line":"---------------------"},{"line_number":236,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"7aa08908_2d790994","line":233,"in_reply_to":"7aa08908_519d2fba","updated":"2016-06-17 10:49:26.000000000","message":"The ramdisks we have at the moment just runs a small set of services, so it should be fairly small (specially since we do gzip it as text).\n\nFor long running agents the logs may increase depending on the time the agent is on. For this use case, if size becomes a problem we can always extend it later to have a whitelist of services which we should collect the logs instead of all, or/and truncate the number of lines for each log etc...\n\nIt\u0027s extendable, but I\u0027m leaving it out of this spec because it\u0027s an optimization.","commit_id":"8068e1f6d92d22bf25a56b8327c1abd0821b1bcd"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"e8349aef9dbf964d77bf3d8c7d2bacb63a31ae06","unresolved":false,"context_lines":[{"line_number":262,"context_line":"  section."},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"* Invoke the new ``log.collect_system_logs`` method in IPA when a"},{"line_number":265,"context_line":"  deployment fails and store the response file according to the"},{"line_number":266,"context_line":"  ``deploy_logs_storage_backend`` configuration option."},{"line_number":267,"context_line":""},{"line_number":268,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"7aa08908_e56d5533","line":265,"range":{"start_line":265,"start_character":13,"end_line":265,"end_character":18},"updated":"2016-06-17 11:55:17.000000000","message":"It depends on the config option right?","commit_id":"8068e1f6d92d22bf25a56b8327c1abd0821b1bcd"}]}
