)]}'
{"doc/source/index.rst":[{"author":{"_account_id":11739,"name":"Alex Weeks","email":"alex.weeks@gmail.com","username":"aweeks"},"change_message_id":"f7151035f07a6478e900b0dd8f5ef80e441807fa","unresolved":false,"context_lines":[{"line_number":5,"context_line":"Introduction"},{"line_number":6,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"An agent for controlling and deploying Ironic controlled baremetal nodes."},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"The ironic-python-agent works with the agent driver in Ironic to provision"},{"line_number":11,"context_line":"nodes. Starting with ironic-python-agent running on a ramdisk on the"}],"source_content_type":"text/x-rst","patch_set":1,"id":"da9b358b_5eddedde","side":"PARENT","line":8,"updated":"2015-03-31 17:50:37.000000000","message":"Ironic-controlled","commit_id":"32aa7616df52462984335f521e638f8f07761363"},{"author":{"_account_id":11739,"name":"Alex Weeks","email":"alex.weeks@gmail.com","username":"aweeks"},"change_message_id":"f7151035f07a6478e900b0dd8f5ef80e441807fa","unresolved":false,"context_lines":[{"line_number":2,"context_line":"Welcome to Ironic-Python-Agent documentation!"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"Overview"},{"line_number":6,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"An agent for controlling and deploying Ironic controlled baremetal nodes."}],"source_content_type":"text/x-rst","patch_set":1,"id":"da9b358b_09ee0dec","line":5,"updated":"2015-03-31 17:50:37.000000000","message":"General nit:\n- Be consistent about \"ironic-python-agent\" vs \"Ironic Python Agent.\"  Perhaps use once in each section, and the switch to \"the agent,\" thereafter.","commit_id":"bcccc3c0e5b517371c88e43b6aa74fd822048f13"},{"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":"3d4b9634546e3dee1493610aa12f1c8621a55831","unresolved":false,"context_lines":[{"line_number":2,"context_line":"Welcome to Ironic-Python-Agent documentation!"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"Overview"},{"line_number":6,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"An agent for controlling and deploying Ironic controlled baremetal nodes."}],"source_content_type":"text/x-rst","patch_set":1,"id":"da9b358b_4322a953","line":5,"in_reply_to":"da9b358b_09ee0dec","updated":"2015-03-31 23:18:32.000000000","message":"Done","commit_id":"bcccc3c0e5b517371c88e43b6aa74fd822048f13"},{"author":{"_account_id":11739,"name":"Alex Weeks","email":"alex.weeks@gmail.com","username":"aweeks"},"change_message_id":"f7151035f07a6478e900b0dd8f5ef80e441807fa","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"Lookup"},{"line_number":33,"context_line":"~~~~~~"},{"line_number":34,"context_line":"On startup, the agent performs a lookup in Ironic to determine it\u0027s node UUID."},{"line_number":35,"context_line":"It does this by sending a hardware profile to the Ironic vendor_passthru lookup"},{"line_number":36,"context_line":"endpoint ``/v1/nodes/{node_ident}/vendor_passthru/heartbeat``."},{"line_number":37,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"da9b358b_1ec0857a","line":34,"updated":"2015-03-31 17:50:37.000000000","message":"its","commit_id":"bcccc3c0e5b517371c88e43b6aa74fd822048f13"},{"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":"3d4b9634546e3dee1493610aa12f1c8621a55831","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"Lookup"},{"line_number":33,"context_line":"~~~~~~"},{"line_number":34,"context_line":"On startup, the agent performs a lookup in Ironic to determine it\u0027s node UUID."},{"line_number":35,"context_line":"It does this by sending a hardware profile to the Ironic vendor_passthru lookup"},{"line_number":36,"context_line":"endpoint ``/v1/nodes/{node_ident}/vendor_passthru/heartbeat``."},{"line_number":37,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"da9b358b_635c8ded","line":34,"in_reply_to":"da9b358b_1ec0857a","updated":"2015-03-31 23:18:32.000000000","message":"Done","commit_id":"bcccc3c0e5b517371c88e43b6aa74fd822048f13"},{"author":{"_account_id":11739,"name":"Alex Weeks","email":"alex.weeks@gmail.com","username":"aweeks"},"change_message_id":"f7151035f07a6478e900b0dd8f5ef80e441807fa","unresolved":false,"context_lines":[{"line_number":32,"context_line":"Lookup"},{"line_number":33,"context_line":"~~~~~~"},{"line_number":34,"context_line":"On startup, the agent performs a lookup in Ironic to determine it\u0027s node UUID."},{"line_number":35,"context_line":"It does this by sending a hardware profile to the Ironic vendor_passthru lookup"},{"line_number":36,"context_line":"endpoint ``/v1/nodes/{node_ident}/vendor_passthru/heartbeat``."},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"Heartbeat"}],"source_content_type":"text/x-rst","patch_set":1,"id":"da9b358b_be675924","line":35,"updated":"2015-03-31 17:50:37.000000000","message":"\"It does this\" \u003d awkward sentence","commit_id":"bcccc3c0e5b517371c88e43b6aa74fd822048f13"},{"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":"3d4b9634546e3dee1493610aa12f1c8621a55831","unresolved":false,"context_lines":[{"line_number":32,"context_line":"Lookup"},{"line_number":33,"context_line":"~~~~~~"},{"line_number":34,"context_line":"On startup, the agent performs a lookup in Ironic to determine it\u0027s node UUID."},{"line_number":35,"context_line":"It does this by sending a hardware profile to the Ironic vendor_passthru lookup"},{"line_number":36,"context_line":"endpoint ``/v1/nodes/{node_ident}/vendor_passthru/heartbeat``."},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"Heartbeat"}],"source_content_type":"text/x-rst","patch_set":1,"id":"da9b358b_63afed94","line":35,"in_reply_to":"da9b358b_be675924","updated":"2015-03-31 23:18:32.000000000","message":"Done","commit_id":"bcccc3c0e5b517371c88e43b6aa74fd822048f13"},{"author":{"_account_id":11739,"name":"Alex Weeks","email":"alex.weeks@gmail.com","username":"aweeks"},"change_message_id":"f7151035f07a6478e900b0dd8f5ef80e441807fa","unresolved":false,"context_lines":[{"line_number":39,"context_line":"~~~~~~~~~"},{"line_number":40,"context_line":"After successfully looking up its node, the agent heartbeats every N seconds,"},{"line_number":41,"context_line":"where N is the Ironic conductor\u0027s agent.heartbeat_timeout value multiplied by"},{"line_number":42,"context_line":"a number between .3 and .6."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"After the agent heartbeats, the conductor performs any actions needed against"},{"line_number":45,"context_line":"the node; including querying status of an already run command, or beginning"}],"source_content_type":"text/x-rst","patch_set":1,"id":"da9b358b_1e08852b","line":42,"updated":"2015-03-31 17:50:37.000000000","message":"How is this number chosen?  Uniform random distribution?\n\nAlso, if this is referring to a config file (which isn\u0027t 100% clear from this doc), I\u0027d include the full config:\n\n[agent]\n\nheartbeat_timout","commit_id":"bcccc3c0e5b517371c88e43b6aa74fd822048f13"},{"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":"3d4b9634546e3dee1493610aa12f1c8621a55831","unresolved":false,"context_lines":[{"line_number":39,"context_line":"~~~~~~~~~"},{"line_number":40,"context_line":"After successfully looking up its node, the agent heartbeats every N seconds,"},{"line_number":41,"context_line":"where N is the Ironic conductor\u0027s agent.heartbeat_timeout value multiplied by"},{"line_number":42,"context_line":"a number between .3 and .6."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"After the agent heartbeats, the conductor performs any actions needed against"},{"line_number":45,"context_line":"the node; including querying status of an already run command, or beginning"}],"source_content_type":"text/x-rst","patch_set":1,"id":"da9b358b_e3c41d60","line":42,"in_reply_to":"da9b358b_1e08852b","updated":"2015-03-31 23:18:32.000000000","message":"Done","commit_id":"bcccc3c0e5b517371c88e43b6aa74fd822048f13"},{"author":{"_account_id":11739,"name":"Alex Weeks","email":"alex.weeks@gmail.com","username":"aweeks"},"change_message_id":"f7151035f07a6478e900b0dd8f5ef80e441807fa","unresolved":false,"context_lines":[{"line_number":42,"context_line":"a number between .3 and .6."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"After the agent heartbeats, the conductor performs any actions needed against"},{"line_number":45,"context_line":"the node; including querying status of an already run command, or beginning"},{"line_number":46,"context_line":"cleaning on a node in CLEANING state, for example."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"Image Builders"}],"source_content_type":"text/x-rst","patch_set":1,"id":"da9b358b_c903850c","line":45,"updated":"2015-03-31 17:50:37.000000000","message":"semicolon not appropriate here","commit_id":"bcccc3c0e5b517371c88e43b6aa74fd822048f13"},{"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":"3d4b9634546e3dee1493610aa12f1c8621a55831","unresolved":false,"context_lines":[{"line_number":42,"context_line":"a number between .3 and .6."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"After the agent heartbeats, the conductor performs any actions needed against"},{"line_number":45,"context_line":"the node; including querying status of an already run command, or beginning"},{"line_number":46,"context_line":"cleaning on a node in CLEANING state, for example."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"Image Builders"}],"source_content_type":"text/x-rst","patch_set":1,"id":"da9b358b_83ff9166","line":45,"in_reply_to":"da9b358b_c903850c","updated":"2015-03-31 23:18:32.000000000","message":"Done","commit_id":"bcccc3c0e5b517371c88e43b6aa74fd822048f13"},{"author":{"_account_id":11739,"name":"Alex Weeks","email":"alex.weeks@gmail.com","username":"aweeks"},"change_message_id":"f7151035f07a6478e900b0dd8f5ef80e441807fa","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"After the agent heartbeats, the conductor performs any actions needed against"},{"line_number":45,"context_line":"the node; including querying status of an already run command, or beginning"},{"line_number":46,"context_line":"cleaning on a node in CLEANING state, for example."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"Image Builders"},{"line_number":49,"context_line":"--------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"da9b358b_091a8d6e","line":46,"updated":"2015-03-31 17:50:37.000000000","message":"perhaps restructure sentence along the lines of \"...including, for example, ...\"","commit_id":"bcccc3c0e5b517371c88e43b6aa74fd822048f13"},{"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":"3d4b9634546e3dee1493610aa12f1c8621a55831","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"After the agent heartbeats, the conductor performs any actions needed against"},{"line_number":45,"context_line":"the node; including querying status of an already run command, or beginning"},{"line_number":46,"context_line":"cleaning on a node in CLEANING state, for example."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"Image Builders"},{"line_number":49,"context_line":"--------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"da9b358b_43faa976","line":46,"in_reply_to":"da9b358b_091a8d6e","updated":"2015-03-31 23:18:32.000000000","message":"Done","commit_id":"bcccc3c0e5b517371c88e43b6aa74fd822048f13"},{"author":{"_account_id":11739,"name":"Alex Weeks","email":"alex.weeks@gmail.com","username":"aweeks"},"change_message_id":"f7151035f07a6478e900b0dd8f5ef80e441807fa","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"Image Builders"},{"line_number":49,"context_line":"--------------"},{"line_number":50,"context_line":"Unlike most other python software, ironic-python-agent requires building before"},{"line_number":51,"context_line":"use. This is because it\u0027s not installed in an operating system, but instead is"},{"line_number":52,"context_line":"exclusively run from within a ramdisk."},{"line_number":53,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"da9b358b_69435943","line":50,"updated":"2015-03-31 17:50:37.000000000","message":"\"must be built before use\"","commit_id":"bcccc3c0e5b517371c88e43b6aa74fd822048f13"},{"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":"3d4b9634546e3dee1493610aa12f1c8621a55831","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"Image Builders"},{"line_number":49,"context_line":"--------------"},{"line_number":50,"context_line":"Unlike most other python software, ironic-python-agent requires building before"},{"line_number":51,"context_line":"use. This is because it\u0027s not installed in an operating system, but instead is"},{"line_number":52,"context_line":"exclusively run from within a ramdisk."},{"line_number":53,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"da9b358b_83367150","line":50,"in_reply_to":"da9b358b_69435943","updated":"2015-03-31 23:18:32.000000000","message":"Done","commit_id":"bcccc3c0e5b517371c88e43b6aa74fd822048f13"},{"author":{"_account_id":11739,"name":"Alex Weeks","email":"alex.weeks@gmail.com","username":"aweeks"},"change_message_id":"f7151035f07a6478e900b0dd8f5ef80e441807fa","unresolved":false,"context_lines":[{"line_number":72,"context_line":"Customizing the image"},{"line_number":73,"context_line":"\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c"},{"line_number":74,"context_line":"There are several methods you can use to customize the ironic-python-agent"},{"line_number":75,"context_line":"ramdisk."},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"* Embed SSH keys by putting an authorized_keys file in /usr/share/oem/"},{"line_number":78,"context_line":"* Add your own hardware managers by modifying the Dockerfile to install"}],"source_content_type":"text/x-rst","patch_set":1,"id":"da9b358b_696a39b5","line":75,"updated":"2015-03-31 17:50:37.000000000","message":"s/\\./:/","commit_id":"bcccc3c0e5b517371c88e43b6aa74fd822048f13"},{"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":"3d4b9634546e3dee1493610aa12f1c8621a55831","unresolved":false,"context_lines":[{"line_number":72,"context_line":"Customizing the image"},{"line_number":73,"context_line":"\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c"},{"line_number":74,"context_line":"There are several methods you can use to customize the ironic-python-agent"},{"line_number":75,"context_line":"ramdisk."},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"* Embed SSH keys by putting an authorized_keys file in /usr/share/oem/"},{"line_number":78,"context_line":"* Add your own hardware managers by modifying the Dockerfile to install"}],"source_content_type":"text/x-rst","patch_set":1,"id":"da9b358b_c31359b7","line":75,"in_reply_to":"da9b358b_696a39b5","updated":"2015-03-31 23:18:32.000000000","message":"Done","commit_id":"bcccc3c0e5b517371c88e43b6aa74fd822048f13"},{"author":{"_account_id":11739,"name":"Alex Weeks","email":"alex.weeks@gmail.com","username":"aweeks"},"change_message_id":"f7151035f07a6478e900b0dd8f5ef80e441807fa","unresolved":false,"context_lines":[{"line_number":77,"context_line":"* Embed SSH keys by putting an authorized_keys file in /usr/share/oem/"},{"line_number":78,"context_line":"* Add your own hardware managers by modifying the Dockerfile to install"},{"line_number":79,"context_line":"  additional python packages."},{"line_number":80,"context_line":"* Modify the cloud-config.yml [1]_ to perform additional tasks at boottime."},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"disk-image-builder"},{"line_number":83,"context_line":"\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c"}],"source_content_type":"text/x-rst","patch_set":1,"id":"da9b358b_89a9fde1","line":80,"updated":"2015-03-31 17:50:37.000000000","message":"\"boot-time\", or \"boot time\"","commit_id":"bcccc3c0e5b517371c88e43b6aa74fd822048f13"},{"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":"3d4b9634546e3dee1493610aa12f1c8621a55831","unresolved":false,"context_lines":[{"line_number":77,"context_line":"* Embed SSH keys by putting an authorized_keys file in /usr/share/oem/"},{"line_number":78,"context_line":"* Add your own hardware managers by modifying the Dockerfile to install"},{"line_number":79,"context_line":"  additional python packages."},{"line_number":80,"context_line":"* Modify the cloud-config.yml [1]_ to perform additional tasks at boottime."},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"disk-image-builder"},{"line_number":83,"context_line":"\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c"}],"source_content_type":"text/x-rst","patch_set":1,"id":"da9b358b_63100da9","line":80,"in_reply_to":"da9b358b_89a9fde1","updated":"2015-03-31 23:18:32.000000000","message":"Done","commit_id":"bcccc3c0e5b517371c88e43b6aa74fd822048f13"},{"author":{"_account_id":11739,"name":"Alex Weeks","email":"alex.weeks@gmail.com","username":"aweeks"},"change_message_id":"f7151035f07a6478e900b0dd8f5ef80e441807fa","unresolved":false,"context_lines":[{"line_number":93,"context_line":""},{"line_number":94,"context_line":"Why build a custom HardwareManager?"},{"line_number":95,"context_line":"-----------------------------------"},{"line_number":96,"context_line":"Custom hardware managers allow you to include hardware specific tools, files"},{"line_number":97,"context_line":"and cleaning steps in the Ironic Python Agent. For example, you could include a"},{"line_number":98,"context_line":"BIOS flashing utility and BIOS file in a custom ramdisk. Your custom"},{"line_number":99,"context_line":"hardware manager could expose a cleaning step that calls the the flashing"}],"source_content_type":"text/x-rst","patch_set":1,"id":"da9b358b_8980dd47","line":96,"updated":"2015-03-31 17:50:37.000000000","message":"hardware-specific","commit_id":"bcccc3c0e5b517371c88e43b6aa74fd822048f13"},{"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":"3d4b9634546e3dee1493610aa12f1c8621a55831","unresolved":false,"context_lines":[{"line_number":93,"context_line":""},{"line_number":94,"context_line":"Why build a custom HardwareManager?"},{"line_number":95,"context_line":"-----------------------------------"},{"line_number":96,"context_line":"Custom hardware managers allow you to include hardware specific tools, files"},{"line_number":97,"context_line":"and cleaning steps in the Ironic Python Agent. For example, you could include a"},{"line_number":98,"context_line":"BIOS flashing utility and BIOS file in a custom ramdisk. Your custom"},{"line_number":99,"context_line":"hardware manager could expose a cleaning step that calls the the flashing"}],"source_content_type":"text/x-rst","patch_set":1,"id":"da9b358b_0395c1dc","line":96,"in_reply_to":"da9b358b_8980dd47","updated":"2015-03-31 23:18:32.000000000","message":"Done","commit_id":"bcccc3c0e5b517371c88e43b6aa74fd822048f13"},{"author":{"_account_id":13997,"name":"SHIGEMATSU Mitsuhiro","email":"shigematsu.mitsuhiro@lab.ntt.co.jp","username":"pshige"},"change_message_id":"fbd430c86e6a0967044c64838bbb8ca351b72261","unresolved":false,"context_lines":[{"line_number":96,"context_line":"Custom hardware managers allow you to include hardware specific tools, files"},{"line_number":97,"context_line":"and cleaning steps in the Ironic Python Agent. For example, you could include a"},{"line_number":98,"context_line":"BIOS flashing utility and BIOS file in a custom ramdisk. Your custom"},{"line_number":99,"context_line":"hardware manager could expose a cleaning step that calls the the flashing"},{"line_number":100,"context_line":"utility and flashes the packaged BIOS version (or even download it from a"},{"line_number":101,"context_line":"tested web server)."},{"line_number":102,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"da9b358b_e74ed695","line":99,"updated":"2015-03-28 00:55:04.000000000","message":"s/the the/the/","commit_id":"bcccc3c0e5b517371c88e43b6aa74fd822048f13"},{"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":"3d4b9634546e3dee1493610aa12f1c8621a55831","unresolved":false,"context_lines":[{"line_number":96,"context_line":"Custom hardware managers allow you to include hardware specific tools, files"},{"line_number":97,"context_line":"and cleaning steps in the Ironic Python Agent. For example, you could include a"},{"line_number":98,"context_line":"BIOS flashing utility and BIOS file in a custom ramdisk. Your custom"},{"line_number":99,"context_line":"hardware manager could expose a cleaning step that calls the the flashing"},{"line_number":100,"context_line":"utility and flashes the packaged BIOS version (or even download it from a"},{"line_number":101,"context_line":"tested web server)."},{"line_number":102,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"da9b358b_e38f7dca","line":99,"in_reply_to":"da9b358b_e74ed695","updated":"2015-03-31 23:18:32.000000000","message":"Done","commit_id":"bcccc3c0e5b517371c88e43b6aa74fd822048f13"},{"author":{"_account_id":11739,"name":"Alex Weeks","email":"alex.weeks@gmail.com","username":"aweeks"},"change_message_id":"f7151035f07a6478e900b0dd8f5ef80e441807fa","unresolved":false,"context_lines":[{"line_number":116,"context_line":"~~~~~~~~~~"},{"line_number":117,"context_line":"Each hardware manager has a name a version. This version is used during"},{"line_number":118,"context_line":"a node\u0027s cleaning to ensure the same version of the agent is used during"},{"line_number":119,"context_line":"the entire process. If the version changes, cleaning will be restarted"},{"line_number":120,"context_line":"from the beginning to ensure consistent cleaning operations and to make"},{"line_number":121,"context_line":"updating the agent in production simpler."},{"line_number":122,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"da9b358b_49e4150c","line":119,"updated":"2015-03-31 17:50:37.000000000","message":"s/will/is/ for consistent tense.","commit_id":"bcccc3c0e5b517371c88e43b6aa74fd822048f13"},{"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":"3d4b9634546e3dee1493610aa12f1c8621a55831","unresolved":false,"context_lines":[{"line_number":116,"context_line":"~~~~~~~~~~"},{"line_number":117,"context_line":"Each hardware manager has a name a version. This version is used during"},{"line_number":118,"context_line":"a node\u0027s cleaning to ensure the same version of the agent is used during"},{"line_number":119,"context_line":"the entire process. If the version changes, cleaning will be restarted"},{"line_number":120,"context_line":"from the beginning to ensure consistent cleaning operations and to make"},{"line_number":121,"context_line":"updating the agent in production simpler."},{"line_number":122,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"da9b358b_237445cd","line":119,"in_reply_to":"da9b358b_49e4150c","updated":"2015-03-31 23:18:32.000000000","message":"Done","commit_id":"bcccc3c0e5b517371c88e43b6aa74fd822048f13"},{"author":{"_account_id":11739,"name":"Alex Weeks","email":"alex.weeks@gmail.com","username":"aweeks"},"change_message_id":"f7151035f07a6478e900b0dd8f5ef80e441807fa","unresolved":false,"context_lines":[{"line_number":125,"context_line":"is \u00271.0\u0027. You should change this version string any time you update your"},{"line_number":126,"context_line":"hardware manager. You can also change the name your hardware manager presents"},{"line_number":127,"context_line":"by creating a class variable called HARDWARE_MANAGER_NAME, which is a string."},{"line_number":128,"context_line":"The name defaults to the class name."},{"line_number":129,"context_line":""},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"How are methods executed on HardwareManagers?"}],"source_content_type":"text/x-rst","patch_set":1,"id":"da9b358b_09172dee","line":128,"updated":"2015-03-31 17:50:37.000000000","message":"I had to look at the source code to figure out name and version are both arbitrary strings, that are compared only by value (no ordering enforced).  This could be confusing.","commit_id":"bcccc3c0e5b517371c88e43b6aa74fd822048f13"},{"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":"3d4b9634546e3dee1493610aa12f1c8621a55831","unresolved":false,"context_lines":[{"line_number":125,"context_line":"is \u00271.0\u0027. You should change this version string any time you update your"},{"line_number":126,"context_line":"hardware manager. You can also change the name your hardware manager presents"},{"line_number":127,"context_line":"by creating a class variable called HARDWARE_MANAGER_NAME, which is a string."},{"line_number":128,"context_line":"The name defaults to the class name."},{"line_number":129,"context_line":""},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"How are methods executed on HardwareManagers?"}],"source_content_type":"text/x-rst","patch_set":1,"id":"da9b358b_036f0093","line":128,"in_reply_to":"da9b358b_09172dee","updated":"2015-03-31 23:18:32.000000000","message":"Done","commit_id":"bcccc3c0e5b517371c88e43b6aa74fd822048f13"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"c6927fba3b1a0ba6bba3aef711556f623aba774c","unresolved":false,"context_lines":[{"line_number":6,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"Ironic Python Agent is an agent for controlling and deploying Ironic controlled"},{"line_number":9,"context_line":"baremetal nodes. Typical run in a ramdisk, the agent exposes a REST API for"},{"line_number":10,"context_line":"provisioning servers."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Throughout the remainder of the document, Ironic Python Agent will be"}],"source_content_type":"text/x-rst","patch_set":3,"id":"baa041b7_8aff0c34","line":9,"updated":"2015-04-01 17:08:34.000000000","message":"nit: s/Typical/Typically/","commit_id":"ec4cf90d93f907d5642e41feb8913bf0ccd2b911"},{"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":"25308e0f6debee56fd7ff56866a9fcb5281815e4","unresolved":false,"context_lines":[{"line_number":6,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"Ironic Python Agent is an agent for controlling and deploying Ironic controlled"},{"line_number":9,"context_line":"baremetal nodes. Typical run in a ramdisk, the agent exposes a REST API for"},{"line_number":10,"context_line":"provisioning servers."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Throughout the remainder of the document, Ironic Python Agent will be"}],"source_content_type":"text/x-rst","patch_set":3,"id":"baa041b7_20601f35","line":9,"in_reply_to":"baa041b7_8aff0c34","updated":"2015-04-01 17:49:47.000000000","message":"Done","commit_id":"ec4cf90d93f907d5642e41feb8913bf0ccd2b911"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"c6927fba3b1a0ba6bba3aef711556f623aba774c","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Integration with Ironic"},{"line_number":19,"context_line":"-----------------------"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Compatible Deploy Drivers"},{"line_number":22,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"baa041b7_4a7ea4af","line":20,"updated":"2015-04-01 17:08:34.000000000","message":"maybe add a link to the IPA section of the enabling drivers page: http://docs.openstack.org/developer/ironic/deploy/drivers.html#ironic-python-agent-agent","commit_id":"ec4cf90d93f907d5642e41feb8913bf0ccd2b911"},{"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":"25308e0f6debee56fd7ff56866a9fcb5281815e4","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Integration with Ironic"},{"line_number":19,"context_line":"-----------------------"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Compatible Deploy Drivers"},{"line_number":22,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"baa041b7_e0591790","line":20,"in_reply_to":"baa041b7_4a7ea4af","updated":"2015-04-01 17:49:47.000000000","message":"Done","commit_id":"ec4cf90d93f907d5642e41feb8913bf0ccd2b911"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"c6927fba3b1a0ba6bba3aef711556f623aba774c","unresolved":false,"context_lines":[{"line_number":24,"context_line":"Agent Deploy Driver"},{"line_number":25,"context_line":"\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c"},{"line_number":26,"context_line":"IPA works with the agent Deploy driver in Ironic to provision nodes. Starting"},{"line_number":27,"context_line":"with ironic-python-agent running on a ramdisk on the unprovisioned node,"},{"line_number":28,"context_line":"Ironic makes API calls to ironic-python-agent to provision the machine. This"},{"line_number":29,"context_line":"allows for greater control and flexibility of the entire deployment process."},{"line_number":30,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"baa041b7_aa2530c3","line":27,"updated":"2015-04-01 17:08:34.000000000","message":"nit: s/on the unprovisioned/on an unprovisioned/","commit_id":"ec4cf90d93f907d5642e41feb8913bf0ccd2b911"},{"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":"25308e0f6debee56fd7ff56866a9fcb5281815e4","unresolved":false,"context_lines":[{"line_number":24,"context_line":"Agent Deploy Driver"},{"line_number":25,"context_line":"\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c"},{"line_number":26,"context_line":"IPA works with the agent Deploy driver in Ironic to provision nodes. Starting"},{"line_number":27,"context_line":"with ironic-python-agent running on a ramdisk on the unprovisioned node,"},{"line_number":28,"context_line":"Ironic makes API calls to ironic-python-agent to provision the machine. This"},{"line_number":29,"context_line":"allows for greater control and flexibility of the entire deployment process."},{"line_number":30,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"baa041b7_a0542f54","line":27,"in_reply_to":"baa041b7_aa2530c3","updated":"2015-04-01 17:49:47.000000000","message":"Done","commit_id":"ec4cf90d93f907d5642e41feb8913bf0ccd2b911"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"c6927fba3b1a0ba6bba3aef711556f623aba774c","unresolved":false,"context_lines":[{"line_number":92,"context_line":"disk-image-builder"},{"line_number":93,"context_line":"\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c"},{"line_number":94,"context_line":"There is currently no production-ready ironic-python-agent ramdisk images"},{"line_number":95,"context_line":"using disk-image-builder, but one is currently under development."},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"Hardware Managers"},{"line_number":98,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":3,"id":"baa041b7_dd56fc05","line":95,"updated":"2015-04-01 17:08:34.000000000","message":"worth adding a link to the element?","commit_id":"ec4cf90d93f907d5642e41feb8913bf0ccd2b911"},{"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":"25308e0f6debee56fd7ff56866a9fcb5281815e4","unresolved":false,"context_lines":[{"line_number":92,"context_line":"disk-image-builder"},{"line_number":93,"context_line":"\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c"},{"line_number":94,"context_line":"There is currently no production-ready ironic-python-agent ramdisk images"},{"line_number":95,"context_line":"using disk-image-builder, but one is currently under development."},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"Hardware Managers"},{"line_number":98,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":3,"id":"baa041b7_60e507a7","line":95,"in_reply_to":"baa041b7_dd56fc05","updated":"2015-04-01 17:49:47.000000000","message":"Done","commit_id":"ec4cf90d93f907d5642e41feb8913bf0ccd2b911"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"c6927fba3b1a0ba6bba3aef711556f623aba774c","unresolved":false,"context_lines":[{"line_number":142,"context_line":""},{"line_number":143,"context_line":"Versioning"},{"line_number":144,"context_line":"~~~~~~~~~~"},{"line_number":145,"context_line":"Each hardware manager has a name a version. This version is used during"},{"line_number":146,"context_line":"cleaning to ensure the same version of the agent is used to on a node through"},{"line_number":147,"context_line":"the entire process. If the version changes, cleaning is restarted from the"},{"line_number":148,"context_line":"beginning to ensure consistent cleaning operations and to make"}],"source_content_type":"text/x-rst","patch_set":3,"id":"baa041b7_1d9b44cb","line":145,"updated":"2015-04-01 17:08:34.000000000","message":"nit: s/a name a version/a name and version/","commit_id":"ec4cf90d93f907d5642e41feb8913bf0ccd2b911"},{"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":"25308e0f6debee56fd7ff56866a9fcb5281815e4","unresolved":false,"context_lines":[{"line_number":142,"context_line":""},{"line_number":143,"context_line":"Versioning"},{"line_number":144,"context_line":"~~~~~~~~~~"},{"line_number":145,"context_line":"Each hardware manager has a name a version. This version is used during"},{"line_number":146,"context_line":"cleaning to ensure the same version of the agent is used to on a node through"},{"line_number":147,"context_line":"the entire process. If the version changes, cleaning is restarted from the"},{"line_number":148,"context_line":"beginning to ensure consistent cleaning operations and to make"}],"source_content_type":"text/x-rst","patch_set":3,"id":"baa041b7_c0ecd391","line":145,"in_reply_to":"baa041b7_1d9b44cb","updated":"2015-04-01 17:49:47.000000000","message":"Done","commit_id":"ec4cf90d93f907d5642e41feb8913bf0ccd2b911"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"72f45d5462cc3c5e0dc5bb8c9fc629403722a27b","unresolved":false,"context_lines":[{"line_number":42,"context_line":"~~~~~~"},{"line_number":43,"context_line":"On startup, the agent performs a lookup in Ironic to determine its node UUID"},{"line_number":44,"context_line":"by sending a hardware profile to the Ironic vendor_passthru lookup endpoint:"},{"line_number":45,"context_line":"``/v1/nodes/{node_ident}/vendor_passthru/heartbeat``."},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"Heartbeat"},{"line_number":48,"context_line":"~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":4,"id":"baa041b7_7255d61b","line":45,"updated":"2015-04-01 20:16:11.000000000","message":"s/heartbeat/lookup","commit_id":"6bd2dd78d10f0d835491296f33cfb18688622061"},{"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":"44258c101ce9c4ec1a005942ea478063f5adb0de","unresolved":false,"context_lines":[{"line_number":42,"context_line":"~~~~~~"},{"line_number":43,"context_line":"On startup, the agent performs a lookup in Ironic to determine its node UUID"},{"line_number":44,"context_line":"by sending a hardware profile to the Ironic vendor_passthru lookup endpoint:"},{"line_number":45,"context_line":"``/v1/nodes/{node_ident}/vendor_passthru/heartbeat``."},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"Heartbeat"},{"line_number":48,"context_line":"~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":4,"id":"baa041b7_55187c84","line":45,"in_reply_to":"baa041b7_7255d61b","updated":"2015-04-01 20:49:07.000000000","message":"Done","commit_id":"6bd2dd78d10f0d835491296f33cfb18688622061"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"72f45d5462cc3c5e0dc5bb8c9fc629403722a27b","unresolved":false,"context_lines":[{"line_number":45,"context_line":"``/v1/nodes/{node_ident}/vendor_passthru/heartbeat``."},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"Heartbeat"},{"line_number":48,"context_line":"~~~~~~~~~"},{"line_number":49,"context_line":"After successfully looking up its node, the agent heartbeats every N seconds,"},{"line_number":50,"context_line":"where N is the Ironic conductor\u0027s agent.heartbeat_timeout value multiplied by"},{"line_number":51,"context_line":"a number between .3 and .6."}],"source_content_type":"text/x-rst","patch_set":4,"id":"baa041b7_d225c2c2","line":48,"updated":"2015-04-01 20:16:11.000000000","message":"And since it\u0027s a different endpoint, should we mention the heartbeat endpoint here?","commit_id":"6bd2dd78d10f0d835491296f33cfb18688622061"},{"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":"44258c101ce9c4ec1a005942ea478063f5adb0de","unresolved":false,"context_lines":[{"line_number":45,"context_line":"``/v1/nodes/{node_ident}/vendor_passthru/heartbeat``."},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"Heartbeat"},{"line_number":48,"context_line":"~~~~~~~~~"},{"line_number":49,"context_line":"After successfully looking up its node, the agent heartbeats every N seconds,"},{"line_number":50,"context_line":"where N is the Ironic conductor\u0027s agent.heartbeat_timeout value multiplied by"},{"line_number":51,"context_line":"a number between .3 and .6."}],"source_content_type":"text/x-rst","patch_set":4,"id":"baa041b7_351df873","line":48,"in_reply_to":"baa041b7_d225c2c2","updated":"2015-04-01 20:49:07.000000000","message":"Done","commit_id":"6bd2dd78d10f0d835491296f33cfb18688622061"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"72f45d5462cc3c5e0dc5bb8c9fc629403722a27b","unresolved":false,"context_lines":[{"line_number":66,"context_line":"--------------"},{"line_number":67,"context_line":"Unlike most other python software, you must build an IPA ramdisk image before"},{"line_number":68,"context_line":"use. This is because it\u0027s not installed in an operating system, but instead is"},{"line_number":69,"context_line":"exclusively run from within a ramdisk."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"CoreOS"},{"line_number":72,"context_line":"~~~~~~"}],"source_content_type":"text/x-rst","patch_set":4,"id":"baa041b7_1509d42c","line":69,"updated":"2015-04-01 20:16:11.000000000","message":"Earlier (line 9) you say \"typically ran in a ramdisk\", but here you say \"exclusively\"; let\u0027s pick one :)","commit_id":"6bd2dd78d10f0d835491296f33cfb18688622061"},{"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":"44258c101ce9c4ec1a005942ea478063f5adb0de","unresolved":false,"context_lines":[{"line_number":66,"context_line":"--------------"},{"line_number":67,"context_line":"Unlike most other python software, you must build an IPA ramdisk image before"},{"line_number":68,"context_line":"use. This is because it\u0027s not installed in an operating system, but instead is"},{"line_number":69,"context_line":"exclusively run from within a ramdisk."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"CoreOS"},{"line_number":72,"context_line":"~~~~~~"}],"source_content_type":"text/x-rst","patch_set":4,"id":"baa041b7_d83a83cd","line":69,"in_reply_to":"baa041b7_1509d42c","updated":"2015-04-01 20:49:07.000000000","message":"Done","commit_id":"6bd2dd78d10f0d835491296f33cfb18688622061"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"72f45d5462cc3c5e0dc5bb8c9fc629403722a27b","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":"CoreOS"},{"line_number":72,"context_line":"~~~~~~"},{"line_number":73,"context_line":"The only current supported ramdisk image for IPA is a CoreOS pxe image [1]_."},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"Build process"},{"line_number":76,"context_line":"\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c"}],"source_content_type":"text/x-rst","patch_set":4,"id":"baa041b7_1520b49a","line":73,"updated":"2015-04-01 20:16:11.000000000","message":"What about ISO?","commit_id":"6bd2dd78d10f0d835491296f33cfb18688622061"},{"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":"44258c101ce9c4ec1a005942ea478063f5adb0de","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":"CoreOS"},{"line_number":72,"context_line":"~~~~~~"},{"line_number":73,"context_line":"The only current supported ramdisk image for IPA is a CoreOS pxe image [1]_."},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"Build process"},{"line_number":76,"context_line":"\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c"}],"source_content_type":"text/x-rst","patch_set":4,"id":"baa041b7_583793b0","line":73,"in_reply_to":"baa041b7_1520b49a","updated":"2015-04-01 20:49:07.000000000","message":"Done","commit_id":"6bd2dd78d10f0d835491296f33cfb18688622061"}]}
