)]}'
{"doc/source/user/dynamic-emulator.rst":[{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"e9476ca42032dca8a02e0ef88f4fab9d90ccfb04","unresolved":false,"context_lines":[{"line_number":626,"context_line":"one or more drives. "},{"line_number":627,"context_line":""},{"line_number":628,"context_line":"The *Drive* instances are keyed in a composite manner using"},{"line_number":629,"context_line":"(System_UUID, Storage_ID) where System_UUID is the uuid of the System"},{"line_number":630,"context_line":"and Storage_ID is the id of the Storage resource to which that particular"},{"line_number":631,"context_line":"drive belongs."},{"line_number":632,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"7faddb67_4c8e0f28","line":629,"range":{"start_line":629,"start_character":51,"end_line":629,"end_character":55},"updated":"2019-08-14 10:13:18.000000000","message":"nit: UUID","commit_id":"6c4e6f376ec12a16d1039a6db19afde33ab1fde7"},{"author":{"_account_id":30013,"name":"Varsha Verma","email":"varsha.verma.eee15@itbhu.ac.in","username":"verma-varsha"},"change_message_id":"d2f45493fbcee21a000a1d2582e6b353b52f7f32","unresolved":false,"context_lines":[{"line_number":626,"context_line":"one or more drives. "},{"line_number":627,"context_line":""},{"line_number":628,"context_line":"The *Drive* instances are keyed in a composite manner using"},{"line_number":629,"context_line":"(System_UUID, Storage_ID) where System_UUID is the uuid of the System"},{"line_number":630,"context_line":"and Storage_ID is the id of the Storage resource to which that particular"},{"line_number":631,"context_line":"drive belongs."},{"line_number":632,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"7faddb67_820d873f","line":629,"range":{"start_line":629,"start_character":51,"end_line":629,"end_character":55},"in_reply_to":"7faddb67_4c8e0f28","updated":"2019-08-15 10:12:01.000000000","message":"Done","commit_id":"6c4e6f376ec12a16d1039a6db19afde33ab1fde7"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"e9476ca42032dca8a02e0ef88f4fab9d90ccfb04","unresolved":false,"context_lines":[{"line_number":627,"context_line":""},{"line_number":628,"context_line":"The *Drive* instances are keyed in a composite manner using"},{"line_number":629,"context_line":"(System_UUID, Storage_ID) where System_UUID is the uuid of the System"},{"line_number":630,"context_line":"and Storage_ID is the id of the Storage resource to which that particular"},{"line_number":631,"context_line":"drive belongs."},{"line_number":632,"context_line":""},{"line_number":633,"context_line":".. code-block:: python"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7faddb67_2c9b9366","line":630,"range":{"start_line":630,"start_character":22,"end_line":630,"end_character":24},"updated":"2019-08-14 10:13:18.000000000","message":"nit: ID","commit_id":"6c4e6f376ec12a16d1039a6db19afde33ab1fde7"},{"author":{"_account_id":30013,"name":"Varsha Verma","email":"varsha.verma.eee15@itbhu.ac.in","username":"verma-varsha"},"change_message_id":"d2f45493fbcee21a000a1d2582e6b353b52f7f32","unresolved":false,"context_lines":[{"line_number":627,"context_line":""},{"line_number":628,"context_line":"The *Drive* instances are keyed in a composite manner using"},{"line_number":629,"context_line":"(System_UUID, Storage_ID) where System_UUID is the uuid of the System"},{"line_number":630,"context_line":"and Storage_ID is the id of the Storage resource to which that particular"},{"line_number":631,"context_line":"drive belongs."},{"line_number":632,"context_line":""},{"line_number":633,"context_line":".. code-block:: python"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7faddb67_a20a0323","line":630,"range":{"start_line":630,"start_character":22,"end_line":630,"end_character":24},"in_reply_to":"7faddb67_2c9b9366","updated":"2019-08-15 10:12:01.000000000","message":"Done","commit_id":"6c4e6f376ec12a16d1039a6db19afde33ab1fde7"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"e9476ca42032dca8a02e0ef88f4fab9d90ccfb04","unresolved":false,"context_lines":[{"line_number":643,"context_line":"        ]"},{"line_number":644,"context_line":"    }"},{"line_number":645,"context_line":""},{"line_number":646,"context_line":"The *Drive* resource can be revealed querying it via the System and the"},{"line_number":647,"context_line":"Storage resource it belongs to."},{"line_number":648,"context_line":""},{"line_number":649,"context_line":".. code-block:: python"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7faddb67_8caba773","line":646,"range":{"start_line":646,"start_character":36,"end_line":646,"end_character":37},"updated":"2019-08-14 10:13:18.000000000","message":"by","commit_id":"6c4e6f376ec12a16d1039a6db19afde33ab1fde7"},{"author":{"_account_id":30013,"name":"Varsha Verma","email":"varsha.verma.eee15@itbhu.ac.in","username":"verma-varsha"},"change_message_id":"d2f45493fbcee21a000a1d2582e6b353b52f7f32","unresolved":false,"context_lines":[{"line_number":643,"context_line":"        ]"},{"line_number":644,"context_line":"    }"},{"line_number":645,"context_line":""},{"line_number":646,"context_line":"The *Drive* resource can be revealed querying it via the System and the"},{"line_number":647,"context_line":"Storage resource it belongs to."},{"line_number":648,"context_line":""},{"line_number":649,"context_line":".. code-block:: python"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7faddb67_42030f11","line":646,"range":{"start_line":646,"start_character":36,"end_line":646,"end_character":37},"in_reply_to":"7faddb67_8caba773","updated":"2019-08-15 10:12:01.000000000","message":"Done","commit_id":"6c4e6f376ec12a16d1039a6db19afde33ab1fde7"}],"sushy_tools/emulator/main.py":[{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"e9476ca42032dca8a02e0ef88f4fab9d90ccfb04","unresolved":false,"context_lines":[{"line_number":692,"context_line":"    for drv in drives:"},{"line_number":693,"context_line":"        if drv[\u0027Id\u0027] \u003d\u003d drv_id:"},{"line_number":694,"context_line":"            return flask.render_template("},{"line_number":695,"context_line":"                \u0027drive.json\u0027, identity\u003didentity, storage_id\u003dstg_id, drive\u003ddrv)"},{"line_number":696,"context_line":""},{"line_number":697,"context_line":"    return \u0027Not found\u0027, 404"},{"line_number":698,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7faddb67_ea8d4a2a","line":695,"range":{"start_line":695,"start_character":17,"end_line":695,"end_character":22},"updated":"2019-08-14 10:13:18.000000000","message":"Should we also render drives in `chassis.json`?","commit_id":"6c4e6f376ec12a16d1039a6db19afde33ab1fde7"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"323aa9b005de2ee567aa9189107b0a078baf510f","unresolved":false,"context_lines":[{"line_number":692,"context_line":"    for drv in drives:"},{"line_number":693,"context_line":"        if drv[\u0027Id\u0027] \u003d\u003d drv_id:"},{"line_number":694,"context_line":"            return flask.render_template("},{"line_number":695,"context_line":"                \u0027drive.json\u0027, identity\u003didentity, storage_id\u003dstg_id, drive\u003ddrv)"},{"line_number":696,"context_line":""},{"line_number":697,"context_line":"    return \u0027Not found\u0027, 404"},{"line_number":698,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7faddb67_a4545055","line":695,"range":{"start_line":695,"start_character":17,"end_line":695,"end_character":22},"in_reply_to":"7faddb67_0c4d5071","updated":"2019-08-30 16:11:14.000000000","message":"Perhaps that should work","commit_id":"6c4e6f376ec12a16d1039a6db19afde33ab1fde7"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"29859a29999c33e2740a83a4126583ec10fdb5fb","unresolved":false,"context_lines":[{"line_number":692,"context_line":"    for drv in drives:"},{"line_number":693,"context_line":"        if drv[\u0027Id\u0027] \u003d\u003d drv_id:"},{"line_number":694,"context_line":"            return flask.render_template("},{"line_number":695,"context_line":"                \u0027drive.json\u0027, identity\u003didentity, storage_id\u003dstg_id, drive\u003ddrv)"},{"line_number":696,"context_line":""},{"line_number":697,"context_line":"    return \u0027Not found\u0027, 404"},{"line_number":698,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7faddb67_71005f03","line":695,"range":{"start_line":695,"start_character":17,"end_line":695,"end_character":22},"in_reply_to":"7faddb67_11956be4","updated":"2019-08-15 06:55:29.000000000","message":"I think the approach we currently have in sushy-tools is like this:\n\n1) hide the implementation details (such as pulling drives from the map) inside driver (e.g. staticdriver)\n2) expose some higher level and universally applicable abstraction across all prospective drivers (e.g. get-me-all-drives)\n3) do the linkage (e.g. chassis-\u003edrivers) in `main.py` flask view\n\nDoes it make sense?","commit_id":"6c4e6f376ec12a16d1039a6db19afde33ab1fde7"},{"author":{"_account_id":30013,"name":"Varsha Verma","email":"varsha.verma.eee15@itbhu.ac.in","username":"verma-varsha"},"change_message_id":"3964f2c950edb39e1e355b5a7aaae9dc2aef1abe","unresolved":false,"context_lines":[{"line_number":692,"context_line":"    for drv in drives:"},{"line_number":693,"context_line":"        if drv[\u0027Id\u0027] \u003d\u003d drv_id:"},{"line_number":694,"context_line":"            return flask.render_template("},{"line_number":695,"context_line":"                \u0027drive.json\u0027, identity\u003didentity, storage_id\u003dstg_id, drive\u003ddrv)"},{"line_number":696,"context_line":""},{"line_number":697,"context_line":"    return \u0027Not found\u0027, 404"},{"line_number":698,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7faddb67_0c4d5071","line":695,"range":{"start_line":695,"start_character":17,"end_line":695,"end_character":22},"in_reply_to":"7faddb67_71005f03","updated":"2019-08-15 07:01:44.000000000","message":"So I just need to write a get-me-all-drives kind of function in the staticdriver.py for drives and call it in main.py?","commit_id":"6c4e6f376ec12a16d1039a6db19afde33ab1fde7"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"979810f291498f3534f7717bdf753ed60b04a443","unresolved":false,"context_lines":[{"line_number":692,"context_line":"    for drv in drives:"},{"line_number":693,"context_line":"        if drv[\u0027Id\u0027] \u003d\u003d drv_id:"},{"line_number":694,"context_line":"            return flask.render_template("},{"line_number":695,"context_line":"                \u0027drive.json\u0027, identity\u003didentity, storage_id\u003dstg_id, drive\u003ddrv)"},{"line_number":696,"context_line":""},{"line_number":697,"context_line":"    return \u0027Not found\u0027, 404"},{"line_number":698,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7faddb67_60aab284","line":695,"range":{"start_line":695,"start_character":17,"end_line":695,"end_character":22},"in_reply_to":"7faddb67_75683987","updated":"2019-09-02 10:12:09.000000000","message":"Done","commit_id":"6c4e6f376ec12a16d1039a6db19afde33ab1fde7"},{"author":{"_account_id":30013,"name":"Varsha Verma","email":"varsha.verma.eee15@itbhu.ac.in","username":"verma-varsha"},"change_message_id":"f8fdef249d77350f845a6a08554e7a929de4256b","unresolved":false,"context_lines":[{"line_number":692,"context_line":"    for drv in drives:"},{"line_number":693,"context_line":"        if drv[\u0027Id\u0027] \u003d\u003d drv_id:"},{"line_number":694,"context_line":"            return flask.render_template("},{"line_number":695,"context_line":"                \u0027drive.json\u0027, identity\u003didentity, storage_id\u003dstg_id, drive\u003ddrv)"},{"line_number":696,"context_line":""},{"line_number":697,"context_line":"    return \u0027Not found\u0027, 404"},{"line_number":698,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7faddb67_75683987","line":695,"range":{"start_line":695,"start_character":17,"end_line":695,"end_character":22},"in_reply_to":"7faddb67_a4545055","updated":"2019-09-01 18:45:36.000000000","message":"I have added a function called get_all_drives in the latest patch which renders all the drives for the first chassis. Please have a look :)","commit_id":"6c4e6f376ec12a16d1039a6db19afde33ab1fde7"},{"author":{"_account_id":30013,"name":"Varsha Verma","email":"varsha.verma.eee15@itbhu.ac.in","username":"verma-varsha"},"change_message_id":"7681348ff5cff4143de38099df814d8e8e778063","unresolved":false,"context_lines":[{"line_number":692,"context_line":"    for drv in drives:"},{"line_number":693,"context_line":"        if drv[\u0027Id\u0027] \u003d\u003d drv_id:"},{"line_number":694,"context_line":"            return flask.render_template("},{"line_number":695,"context_line":"                \u0027drive.json\u0027, identity\u003didentity, storage_id\u003dstg_id, drive\u003ddrv)"},{"line_number":696,"context_line":""},{"line_number":697,"context_line":"    return \u0027Not found\u0027, 404"},{"line_number":698,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7faddb67_11956be4","line":695,"range":{"start_line":695,"start_character":17,"end_line":695,"end_character":22},"in_reply_to":"7faddb67_ea8d4a2a","updated":"2019-08-15 06:28:54.000000000","message":"For chassis, should I write a separate function that can pull all the drives from the map in emulator.conf and put them in the first chassis?","commit_id":"6c4e6f376ec12a16d1039a6db19afde33ab1fde7"}],"sushy_tools/emulator/resources/drives/staticdriver.py":[{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"e9476ca42032dca8a02e0ef88f4fab9d90ccfb04","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def get_drives(self, identity, storage_id):"},{"line_number":43,"context_line":"        try:"},{"line_number":44,"context_line":"            uu_identity \u003d str(uuid.UUID(identity))"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"            return self._drives[(uu_identity, storage_id)]"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7faddb67_6c7bcbf3","line":44,"range":{"start_line":44,"start_character":11,"end_line":44,"end_character":50},"updated":"2019-08-14 10:13:18.000000000","message":"If this line would rise an exception, that might not be KeyError...","commit_id":"6c4e6f376ec12a16d1039a6db19afde33ab1fde7"},{"author":{"_account_id":30013,"name":"Varsha Verma","email":"varsha.verma.eee15@itbhu.ac.in","username":"verma-varsha"},"change_message_id":"d2f45493fbcee21a000a1d2582e6b353b52f7f32","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def get_drives(self, identity, storage_id):"},{"line_number":43,"context_line":"        try:"},{"line_number":44,"context_line":"            uu_identity \u003d str(uuid.UUID(identity))"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"            return self._drives[(uu_identity, storage_id)]"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7faddb67_62008b03","line":44,"range":{"start_line":44,"start_character":11,"end_line":44,"end_character":50},"in_reply_to":"7faddb67_6c7bcbf3","updated":"2019-08-15 10:12:01.000000000","message":"Done","commit_id":"6c4e6f376ec12a16d1039a6db19afde33ab1fde7"}],"sushy_tools/emulator/templates/drive.json":[{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"e9476ca42032dca8a02e0ef88f4fab9d90ccfb04","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    \"CapableSpeedGbs\": 12,"},{"line_number":26,"context_line":"    \"NegotiatedSpeedGbs\": 12,"},{"line_number":27,"context_line":"    \"Links\": {"},{"line_number":28,"context_line":"        \"@odata.type\": \"#Drive.v1_2_0.Links\""},{"line_number":29,"context_line":"    },"},{"line_number":30,"context_line":"    \"Actions\": {"},{"line_number":31,"context_line":"        \"@odata.type\": \"#Drive.v1_0_0.Actions\","}],"source_content_type":"application/json","patch_set":1,"id":"7faddb67_acdea3d7","line":28,"range":{"start_line":28,"start_character":0,"end_line":28,"end_character":44},"updated":"2019-08-14 10:13:18.000000000","message":"Should the drives be linked back to storage controllers?","commit_id":"6c4e6f376ec12a16d1039a6db19afde33ab1fde7"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"323aa9b005de2ee567aa9189107b0a078baf510f","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    \"CapableSpeedGbs\": 12,"},{"line_number":26,"context_line":"    \"NegotiatedSpeedGbs\": 12,"},{"line_number":27,"context_line":"    \"Links\": {"},{"line_number":28,"context_line":"        \"@odata.type\": \"#Drive.v1_2_0.Links\""},{"line_number":29,"context_line":"    },"},{"line_number":30,"context_line":"    \"Actions\": {"},{"line_number":31,"context_line":"        \"@odata.type\": \"#Drive.v1_0_0.Actions\","}],"source_content_type":"application/json","patch_set":1,"id":"7faddb67_44c23ceb","line":28,"range":{"start_line":28,"start_character":0,"end_line":28,"end_character":44},"in_reply_to":"7faddb67_040a041f","updated":"2019-08-30 16:11:14.000000000","message":"Done","commit_id":"6c4e6f376ec12a16d1039a6db19afde33ab1fde7"},{"author":{"_account_id":30013,"name":"Varsha Verma","email":"varsha.verma.eee15@itbhu.ac.in","username":"verma-varsha"},"change_message_id":"d2f45493fbcee21a000a1d2582e6b353b52f7f32","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    \"CapableSpeedGbs\": 12,"},{"line_number":26,"context_line":"    \"NegotiatedSpeedGbs\": 12,"},{"line_number":27,"context_line":"    \"Links\": {"},{"line_number":28,"context_line":"        \"@odata.type\": \"#Drive.v1_2_0.Links\""},{"line_number":29,"context_line":"    },"},{"line_number":30,"context_line":"    \"Actions\": {"},{"line_number":31,"context_line":"        \"@odata.type\": \"#Drive.v1_0_0.Actions\","}],"source_content_type":"application/json","patch_set":1,"id":"7faddb67_040a041f","line":28,"range":{"start_line":28,"start_character":0,"end_line":28,"end_character":44},"in_reply_to":"7faddb67_acdea3d7","updated":"2019-08-15 10:12:01.000000000","message":"The link is implicit from the Drive URL. Moreover, any such back linking is not stated in the Standard Redfish Schema. I mistakenly forgot to remove the \"Links\" field from the json template.","commit_id":"6c4e6f376ec12a16d1039a6db19afde33ab1fde7"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"e9476ca42032dca8a02e0ef88f4fab9d90ccfb04","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    \"Actions\": {"},{"line_number":31,"context_line":"        \"@odata.type\": \"#Drive.v1_0_0.Actions\","},{"line_number":32,"context_line":"        \"#Drive.SecureErase\": {"},{"line_number":33,"context_line":"            \"target\": {{ \"/redfish/v1/Systems/%s/Storage/%s/Drives/%s/Actions/Drive.SecureErase\"|format(identity, storage_id, drive[\u0027Id\u0027])|tojson }}"},{"line_number":34,"context_line":"        }"},{"line_number":35,"context_line":"    },"},{"line_number":36,"context_line":"    \"@odata.context\": \"/redfish/v1/$metadata#Drive.Drive\","}],"source_content_type":"application/json","patch_set":1,"id":"7faddb67_6c642b4a","line":33,"range":{"start_line":33,"start_character":0,"end_line":33,"end_character":148},"updated":"2019-08-14 10:13:18.000000000","message":"I am not sure if we should announce this Action at all given that we do not support it. WDYT?","commit_id":"6c4e6f376ec12a16d1039a6db19afde33ab1fde7"},{"author":{"_account_id":30013,"name":"Varsha Verma","email":"varsha.verma.eee15@itbhu.ac.in","username":"verma-varsha"},"change_message_id":"d2f45493fbcee21a000a1d2582e6b353b52f7f32","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    \"Actions\": {"},{"line_number":31,"context_line":"        \"@odata.type\": \"#Drive.v1_0_0.Actions\","},{"line_number":32,"context_line":"        \"#Drive.SecureErase\": {"},{"line_number":33,"context_line":"            \"target\": {{ \"/redfish/v1/Systems/%s/Storage/%s/Drives/%s/Actions/Drive.SecureErase\"|format(identity, storage_id, drive[\u0027Id\u0027])|tojson }}"},{"line_number":34,"context_line":"        }"},{"line_number":35,"context_line":"    },"},{"line_number":36,"context_line":"    \"@odata.context\": \"/redfish/v1/$metadata#Drive.Drive\","}],"source_content_type":"application/json","patch_set":1,"id":"7faddb67_a4121057","line":33,"range":{"start_line":33,"start_character":0,"end_line":33,"end_character":148},"in_reply_to":"7faddb67_6c642b4a","updated":"2019-08-15 10:12:01.000000000","message":"Done","commit_id":"6c4e6f376ec12a16d1039a6db19afde33ab1fde7"}]}
