)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"42eb597921e84ae0c2dcab3be30a5107e1d9a9af","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"3a57f1b5_7a5d68e8","line":23,"updated":"2016-02-10 16:26:58.000000000","message":"Implements: blueprint yada-yada-yada","commit_id":"31648a926d07564e8e09685c0bd6e0b7d1536167"}],"specs/mitaka/license-management.rst":[{"author":{"_account_id":1976,"name":"Jonathan Halterman","email":"jhalterman@hp.com","username":"jhalterman"},"change_message_id":"424c767171682ba953c7c660b02ec0493a18f695","unresolved":false,"context_lines":[{"line_number":102,"context_line":"                                              automatically applied during"},{"line_number":103,"context_line":"                                              instance/cluster create.  Will"},{"line_number":104,"context_line":"                                              default to \u0027no\u0027 if not provided"},{"line_number":105,"context_line":"    filename       varchar(255)  Yes          Name to write license as.  If"},{"line_number":106,"context_line":"                                              null, will use \u003cname\u003e.lic"},{"line_number":107,"context_line":"    contents       blob          No           License contents"},{"line_number":108,"context_line":"    md5            varchar(32)   No           MD5 hash of license contents"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9a68dd71_c36d7705","line":105,"updated":"2016-01-21 19:15:05.000000000","message":"I am curious if a datastore really requires a file (name) or just the license contents. Also wondering what the filename actually represents - some file that is stored in Trove or some file name that is uploaded to a datastore when installing a license?","commit_id":"c2b43d657114cdfca36b63b6ffbaa90f5a3775d4"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"7058bb9f26d4fc6e1b6308b4670305866c0a4f19","unresolved":false,"context_lines":[{"line_number":102,"context_line":"                                              automatically applied during"},{"line_number":103,"context_line":"                                              instance/cluster create.  Will"},{"line_number":104,"context_line":"                                              default to \u0027no\u0027 if not provided"},{"line_number":105,"context_line":"    filename       varchar(255)  Yes          Name to write license as.  If"},{"line_number":106,"context_line":"                                              null, will use \u003cname\u003e.lic"},{"line_number":107,"context_line":"    contents       blob          No           License contents"},{"line_number":108,"context_line":"    md5            varchar(32)   No           MD5 hash of license contents"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9a68dd71_3eec2129","line":105,"in_reply_to":"9a68dd71_c36d7705","updated":"2016-01-25 17:27:40.000000000","message":"This was in case the software required a specific name for the license, so the license contents would be written into this file(name).  Probably not entirely necessary as the plugin could always rename/move the file if need be.  I\u0027ll remove it and document the \u0027generated\u0027 filename.","commit_id":"c2b43d657114cdfca36b63b6ffbaa90f5a3775d4"},{"author":{"_account_id":1976,"name":"Jonathan Halterman","email":"jhalterman@hp.com","username":"jhalterman"},"change_message_id":"424c767171682ba953c7c660b02ec0493a18f695","unresolved":false,"context_lines":[{"line_number":306,"context_line":""},{"line_number":307,"context_line":"Request::"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"    POST v1/{tenant_id}/instances/{instance_id}/license"},{"line_number":310,"context_line":"    {"},{"line_number":311,"context_line":"        \"id\": \u003cid\u003e,"},{"line_number":312,"context_line":"    }"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9a68dd71_e33e7bd9","line":309,"updated":"2016-01-21 19:15:05.000000000","message":"Instead of appending a license via a /license URI on an instance, it might be more canonical to associate a license with an instance (and a cluster) by just making it an optional field on the license (and cluster) resources.\n\nHaving a separate /license (or /licenses) resource underneath an instance is probably only necessary if multiple licenses can be associated with an instance. I\u0027m guessing that multiple licenses per instance is invalid...","commit_id":"c2b43d657114cdfca36b63b6ffbaa90f5a3775d4"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"7058bb9f26d4fc6e1b6308b4670305866c0a4f19","unresolved":false,"context_lines":[{"line_number":306,"context_line":""},{"line_number":307,"context_line":"Request::"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"    POST v1/{tenant_id}/instances/{instance_id}/license"},{"line_number":310,"context_line":"    {"},{"line_number":311,"context_line":"        \"id\": \u003cid\u003e,"},{"line_number":312,"context_line":"    }"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9a68dd71_3ea421b8","line":309,"in_reply_to":"9a68dd71_e33e7bd9","updated":"2016-01-25 17:27:40.000000000","message":"Well, you could have licenses for multiple products, such as Vertica and New Relic.  I will change the payload to reflect this (add a \u0027licenses\u0027 section to the json dict).  And yes, passing this in to the instance/cluster create will also be addressed (looks like I missed that, thx!).","commit_id":"c2b43d657114cdfca36b63b6ffbaa90f5a3775d4"},{"author":{"_account_id":1976,"name":"Jonathan Halterman","email":"jhalterman@hp.com","username":"jhalterman"},"change_message_id":"424c767171682ba953c7c660b02ec0493a18f695","unresolved":false,"context_lines":[{"line_number":332,"context_line":""},{"line_number":333,"context_line":"Request::"},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"    GET v1/{tenant_id}/instances/{instance_id}/license"},{"line_number":336,"context_line":"    {"},{"line_number":337,"context_line":"    }"},{"line_number":338,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"9a68dd71_5e5e3a13","line":335,"updated":"2016-01-21 19:15:05.000000000","message":"If we\u0027re supporting the association of multiple licenses, this URI should probably be /licenses","commit_id":"c2b43d657114cdfca36b63b6ffbaa90f5a3775d4"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"7058bb9f26d4fc6e1b6308b4670305866c0a4f19","unresolved":false,"context_lines":[{"line_number":332,"context_line":""},{"line_number":333,"context_line":"Request::"},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"    GET v1/{tenant_id}/instances/{instance_id}/license"},{"line_number":336,"context_line":"    {"},{"line_number":337,"context_line":"    }"},{"line_number":338,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"9a68dd71_fe976937","line":335,"in_reply_to":"9a68dd71_5e5e3a13","updated":"2016-01-25 17:27:40.000000000","message":"Done","commit_id":"c2b43d657114cdfca36b63b6ffbaa90f5a3775d4"},{"author":{"_account_id":1976,"name":"Jonathan Halterman","email":"jhalterman@hp.com","username":"jhalterman"},"change_message_id":"424c767171682ba953c7c660b02ec0493a18f695","unresolved":false,"context_lines":[{"line_number":389,"context_line":""},{"line_number":390,"context_line":"Request::"},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"    DELETE /v1.0/{tenant_id}/licenses/{license_id}"},{"line_number":393,"context_line":"    {"},{"line_number":394,"context_line":"    }"},{"line_number":395,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"9a68dd71_7e421e40","line":392,"updated":"2016-01-21 19:15:05.000000000","message":"Assume this cascades and deletes any instance/license associations.","commit_id":"c2b43d657114cdfca36b63b6ffbaa90f5a3775d4"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"021d5a82c95ad170b4656452d215da79743d5846","unresolved":false,"context_lines":[{"line_number":389,"context_line":""},{"line_number":390,"context_line":"Request::"},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"    DELETE /v1.0/{tenant_id}/licenses/{license_id}"},{"line_number":393,"context_line":"    {"},{"line_number":394,"context_line":"    }"},{"line_number":395,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"7a5de9d1_98b849e7","line":392,"in_reply_to":"7a5de9d1_2a5c9024","updated":"2016-01-28 20:46:08.000000000","message":"The license details will only be stored in the Trove DB licenses table, but there won\u0027t be an instance_license table linking them together (that\u0027s what I meant earlier saying that there won\u0027t be license/instance associations).  When viewing the licenses of an instance, the request will go down to the instance itself, and the plugin on the instance will respond with the details if there is a license installed (I\u0027ve cut back the response payload from that request because you\u0027re right, the full information won\u0027t be available on the instance, and in fact the license may not exist in the Trove database anymore).","commit_id":"c2b43d657114cdfca36b63b6ffbaa90f5a3775d4"},{"author":{"_account_id":1976,"name":"Jonathan Halterman","email":"jhalterman@hp.com","username":"jhalterman"},"change_message_id":"3c314ee75324d313ea2011104779d890b0c319fa","unresolved":false,"context_lines":[{"line_number":389,"context_line":""},{"line_number":390,"context_line":"Request::"},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"    DELETE /v1.0/{tenant_id}/licenses/{license_id}"},{"line_number":393,"context_line":"    {"},{"line_number":394,"context_line":"    }"},{"line_number":395,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"7a5de9d1_2a5c9024","line":392,"in_reply_to":"7a5de9d1_9f4f0b92","updated":"2016-01-28 00:03:38.000000000","message":"So I\u0027m wondering, will a license\u0027s details be actually stored (in the DB) numerous times - once for the /licenses resource and once for each instance it\u0027s associated with? Otherwise when deleting a license, wouldn\u0027t the details go away and not be available to view under the instance? If we are storing the details multiple times, what happens when a license\u0027s details are updated?","commit_id":"c2b43d657114cdfca36b63b6ffbaa90f5a3775d4"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"7058bb9f26d4fc6e1b6308b4670305866c0a4f19","unresolved":false,"context_lines":[{"line_number":389,"context_line":""},{"line_number":390,"context_line":"Request::"},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"    DELETE /v1.0/{tenant_id}/licenses/{license_id}"},{"line_number":393,"context_line":"    {"},{"line_number":394,"context_line":"    }"},{"line_number":395,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"9a68dd71_c1d40aed","line":392,"in_reply_to":"9a68dd71_7e421e40","updated":"2016-01-25 17:27:40.000000000","message":"I wasn\u0027t envisioning having instance/license associations - Trove would just apply a given license and be able to display which licenses an instance/cluster had (through the plugin mechanism).  If Trove has to manage the instance/license relationship, then that makes updating/deleting licenses much more restrictive.  On the other hand, if you think a \u0027feature\u0027 of updating a license would be to now apply the \u0027new\u0027 license to all instances running it, then we would need to keep track of the license/instance relationship as well.  Let me know.","commit_id":"c2b43d657114cdfca36b63b6ffbaa90f5a3775d4"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"871b74310fc073e1fd77c4fdcfb5d4934845e7e7","unresolved":false,"context_lines":[{"line_number":389,"context_line":""},{"line_number":390,"context_line":"Request::"},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"    DELETE /v1.0/{tenant_id}/licenses/{license_id}"},{"line_number":393,"context_line":"    {"},{"line_number":394,"context_line":"    }"},{"line_number":395,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"7a5de9d1_9f4f0b92","line":392,"in_reply_to":"9a68dd71_98e1982c","updated":"2016-01-27 23:47:08.000000000","message":"Not exactly.  Deleting the license \u0027definition\u0027 from Trove won\u0027t automatically delete the license from all the instances that it\u0027s been applied to.  The call to\n\n  GET v1/{tenant_id}/instances/{instance_id}/licenses\n\nwill talk to the guest and return the list of all applied licenses, whether or not they still exist in\n\n  GET v1/{tenant_id}/licenses\n\nThat\u0027s also why there is a hash generated, so you can tell if the license in the \u0027definition\u0027 is still the same as the one actually applied to a given instance (it could have been updated, or deleted/recreated).","commit_id":"c2b43d657114cdfca36b63b6ffbaa90f5a3775d4"},{"author":{"_account_id":1976,"name":"Jonathan Halterman","email":"jhalterman@hp.com","username":"jhalterman"},"change_message_id":"21194d8bf4356e2b1dfb731669dab0cfd9061996","unresolved":false,"context_lines":[{"line_number":389,"context_line":""},{"line_number":390,"context_line":"Request::"},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"    DELETE /v1.0/{tenant_id}/licenses/{license_id}"},{"line_number":393,"context_line":"    {"},{"line_number":394,"context_line":"    }"},{"line_number":395,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"9a68dd71_98e1982c","line":392,"in_reply_to":"9a68dd71_c1d40aed","updated":"2016-01-25 18:34:18.000000000","message":"So what I meant was, when doing:\n\nGET v1/{tenant_id}/instances/{instance_id}/license\n\nYou might see some license ID which can then be indirectly deleted via:\n\nDELETE /v1.0/{tenant_id}/licenses/{license_id}\n\nIf that happens I would assume the next\n\nGET v1/{tenant_id}/instances/{instance_id}/license\n\n...would no longer show that license.","commit_id":"c2b43d657114cdfca36b63b6ffbaa90f5a3775d4"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"2777b7fbe79329f432ef36e8f9019ed8c1997a56","unresolved":false,"context_lines":[{"line_number":102,"context_line":"                                              automatically applied during"},{"line_number":103,"context_line":"                                              instance/cluster create.  Will"},{"line_number":104,"context_line":"                                              default to \u0027no\u0027 if not provided"},{"line_number":105,"context_line":"    contents       blob          No           License contents"},{"line_number":106,"context_line":"    md5            varchar(32)   No           MD5 hash of license contents"},{"line_number":107,"context_line":"    created        DateTime      No           Created date"},{"line_number":108,"context_line":"    updated        DateTime      No           Updated date"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a5de9d1_ccbb5fe4","line":105,"updated":"2016-01-28 22:44:22.000000000","message":"Will this be encrypted or plain text?","commit_id":"2ca908687f5b74cf1c368696cbe044827b76b95c"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"bc087d5d620275759681471b1eff2aec97c2e600","unresolved":false,"context_lines":[{"line_number":102,"context_line":"                                              automatically applied during"},{"line_number":103,"context_line":"                                              instance/cluster create.  Will"},{"line_number":104,"context_line":"                                              default to \u0027no\u0027 if not provided"},{"line_number":105,"context_line":"    contents       blob          No           License contents"},{"line_number":106,"context_line":"    md5            varchar(32)   No           MD5 hash of license contents"},{"line_number":107,"context_line":"    created        DateTime      No           Created date"},{"line_number":108,"context_line":"    updated        DateTime      No           Updated date"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a5de9d1_c096863d","line":105,"in_reply_to":"7a5de9d1_78151b47","updated":"2016-01-30 00:54:38.000000000","message":"Done","commit_id":"2ca908687f5b74cf1c368696cbe044827b76b95c"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"4293167005909c51661737b278e7dafc8b303f9d","unresolved":false,"context_lines":[{"line_number":102,"context_line":"                                              automatically applied during"},{"line_number":103,"context_line":"                                              instance/cluster create.  Will"},{"line_number":104,"context_line":"                                              default to \u0027no\u0027 if not provided"},{"line_number":105,"context_line":"    contents       blob          No           License contents"},{"line_number":106,"context_line":"    md5            varchar(32)   No           MD5 hash of license contents"},{"line_number":107,"context_line":"    created        DateTime      No           Created date"},{"line_number":108,"context_line":"    updated        DateTime      No           Updated date"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a5de9d1_f3d05721","line":105,"in_reply_to":"7a5de9d1_ccbb5fe4","updated":"2016-01-29 16:07:20.000000000","message":"The intent was just plain text.  If you\u0027d like it to be encrypted, then we\u0027d need to store the key somewhere (same problem, where do we store it securely?) or have the user supply it every time they create and/or use a license.  We could encrypt/decrypt using a key in the config file (like with backups) if you think that\u0027s useful.","commit_id":"2ca908687f5b74cf1c368696cbe044827b76b95c"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"0053859efdc09112a062f95b67e169ea85cfc5ab","unresolved":false,"context_lines":[{"line_number":102,"context_line":"                                              automatically applied during"},{"line_number":103,"context_line":"                                              instance/cluster create.  Will"},{"line_number":104,"context_line":"                                              default to \u0027no\u0027 if not provided"},{"line_number":105,"context_line":"    contents       blob          No           License contents"},{"line_number":106,"context_line":"    md5            varchar(32)   No           MD5 hash of license contents"},{"line_number":107,"context_line":"    created        DateTime      No           Created date"},{"line_number":108,"context_line":"    updated        DateTime      No           Updated date"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a5de9d1_78151b47","line":105,"in_reply_to":"7a5de9d1_f3d05721","updated":"2016-01-29 17:36:44.000000000","message":"I think this would be better than storing the user data in the db in plain text.","commit_id":"2ca908687f5b74cf1c368696cbe044827b76b95c"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"2777b7fbe79329f432ef36e8f9019ed8c1997a56","unresolved":false,"context_lines":[{"line_number":151,"context_line":"                \u0027description\u0027: \u0027Vertica license for 100GB\u0027,"},{"line_number":152,"context_line":"                \u0027auto_apply\u0027: False,"},{"line_number":153,"context_line":"                \u0027md5\u0027: \u003cmd5\u003e,"},{"line_number":154,"context_line":"                \u0027updated\u0027: \u003cdate\u003e,"},{"line_number":155,"context_line":"            },"},{"line_number":156,"context_line":"            {"},{"line_number":157,"context_line":"                \u0027id\u0027: \u003cid\u003e,"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a5de9d1_8c9a4762","line":154,"updated":"2016-01-28 22:44:22.000000000","message":"\u0027created\u0027 datetime stamp would be useful here as well to verify it was updated.","commit_id":"2ca908687f5b74cf1c368696cbe044827b76b95c"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"4293167005909c51661737b278e7dafc8b303f9d","unresolved":false,"context_lines":[{"line_number":151,"context_line":"                \u0027description\u0027: \u0027Vertica license for 100GB\u0027,"},{"line_number":152,"context_line":"                \u0027auto_apply\u0027: False,"},{"line_number":153,"context_line":"                \u0027md5\u0027: \u003cmd5\u003e,"},{"line_number":154,"context_line":"                \u0027updated\u0027: \u003cdate\u003e,"},{"line_number":155,"context_line":"            },"},{"line_number":156,"context_line":"            {"},{"line_number":157,"context_line":"                \u0027id\u0027: \u003cid\u003e,"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a5de9d1_80a3c7b1","line":154,"in_reply_to":"7a5de9d1_8c9a4762","updated":"2016-01-29 16:07:20.000000000","message":"Done","commit_id":"2ca908687f5b74cf1c368696cbe044827b76b95c"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"2777b7fbe79329f432ef36e8f9019ed8c1997a56","unresolved":false,"context_lines":[{"line_number":265,"context_line":"            \u0027md5\u0027: \u003cmd5\u003e,"},{"line_number":266,"context_line":"            \u0027created\u0027: \u003cdate\u003e,"},{"line_number":267,"context_line":"            \u0027updated\u0027: \u003cdate\u003e,"},{"line_number":268,"context_line":"            \u0027deleted\u0027: False,"},{"line_number":269,"context_line":"            \u0027deleted\u0027: \u0027\u0027,"},{"line_number":270,"context_line":"        }"},{"line_number":271,"context_line":"    }"},{"line_number":272,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a5de9d1_cc059f7a","line":269,"range":{"start_line":268,"start_character":12,"end_line":269,"end_character":26},"updated":"2016-01-28 22:44:22.000000000","message":"these should not be needed","commit_id":"2ca908687f5b74cf1c368696cbe044827b76b95c"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"4293167005909c51661737b278e7dafc8b303f9d","unresolved":false,"context_lines":[{"line_number":265,"context_line":"            \u0027md5\u0027: \u003cmd5\u003e,"},{"line_number":266,"context_line":"            \u0027created\u0027: \u003cdate\u003e,"},{"line_number":267,"context_line":"            \u0027updated\u0027: \u003cdate\u003e,"},{"line_number":268,"context_line":"            \u0027deleted\u0027: False,"},{"line_number":269,"context_line":"            \u0027deleted\u0027: \u0027\u0027,"},{"line_number":270,"context_line":"        }"},{"line_number":271,"context_line":"    }"},{"line_number":272,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a5de9d1_53ae0b99","line":269,"range":{"start_line":268,"start_character":12,"end_line":269,"end_character":26},"in_reply_to":"7a5de9d1_cc059f7a","updated":"2016-01-29 16:07:20.000000000","message":"Done","commit_id":"2ca908687f5b74cf1c368696cbe044827b76b95c"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"2777b7fbe79329f432ef36e8f9019ed8c1997a56","unresolved":false,"context_lines":[{"line_number":280,"context_line":""},{"line_number":281,"context_line":"Response::"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"    This operation has no response body"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"Instance Interaction"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a5de9d1_ec165ba6","line":283,"updated":"2016-01-28 22:44:22.000000000","message":"response code? 200 or 202?","commit_id":"2ca908687f5b74cf1c368696cbe044827b76b95c"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"4293167005909c51661737b278e7dafc8b303f9d","unresolved":false,"context_lines":[{"line_number":280,"context_line":""},{"line_number":281,"context_line":"Response::"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"    This operation has no response body"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"Instance Interaction"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a5de9d1_33802ff7","line":283,"in_reply_to":"7a5de9d1_ec165ba6","updated":"2016-01-29 16:07:20.000000000","message":"Done","commit_id":"2ca908687f5b74cf1c368696cbe044827b76b95c"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"2777b7fbe79329f432ef36e8f9019ed8c1997a56","unresolved":false,"context_lines":[{"line_number":334,"context_line":"                \u0027filename\u0027: \u0027all-new_relic.lic\u0027,"},{"line_number":335,"context_line":"                \u0027md5\u0027: \u003cmd5\u003e,"},{"line_number":336,"context_line":"                \u0027installed\u0027: \u003cdate\u003e,"},{"line_number":337,"context_line":"                \u0027status\u0027: \u0027FAILED\u0027,"},{"line_number":338,"context_line":"            },"},{"line_number":339,"context_line":"        ]"},{"line_number":340,"context_line":"    }"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a5de9d1_2cf9d34d","line":337,"range":{"start_line":337,"start_character":15,"end_line":337,"end_character":35},"updated":"2016-01-28 22:44:22.000000000","message":"this must be making a call down the to guest to figure out the status of the license? What would make this \u0027OK\u0027 verse \u0027FAILED\u0027? and what other statuses could this be? can you add some info on this to this spec?","commit_id":"2ca908687f5b74cf1c368696cbe044827b76b95c"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"4293167005909c51661737b278e7dafc8b303f9d","unresolved":false,"context_lines":[{"line_number":334,"context_line":"                \u0027filename\u0027: \u0027all-new_relic.lic\u0027,"},{"line_number":335,"context_line":"                \u0027md5\u0027: \u003cmd5\u003e,"},{"line_number":336,"context_line":"                \u0027installed\u0027: \u003cdate\u003e,"},{"line_number":337,"context_line":"                \u0027status\u0027: \u0027FAILED\u0027,"},{"line_number":338,"context_line":"            },"},{"line_number":339,"context_line":"        ]"},{"line_number":340,"context_line":"    }"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a5de9d1_963eb18a","line":337,"range":{"start_line":337,"start_character":15,"end_line":337,"end_character":35},"in_reply_to":"7a5de9d1_2cf9d34d","updated":"2016-01-29 16:07:20.000000000","message":"That would be up to the plugin to decide.  I assume that \u0027OK\u0027 and \u0027FAILED\u0027 would be the minimum status values, but each plugin could put whatever made sense here.  I\u0027ll add that to the Guest Agent section where I discuss the plugins.","commit_id":"2ca908687f5b74cf1c368696cbe044827b76b95c"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"2777b7fbe79329f432ef36e8f9019ed8c1997a56","unresolved":false,"context_lines":[{"line_number":352,"context_line":"    {"},{"line_number":353,"context_line":"        \u0027filename\u0027: \u0027vertica_100GB.lic\u0027,"},{"line_number":354,"context_line":"        \u0027contents\u0027: \u003clicense_contents\u003e,"},{"line_number":355,"context_line":"        \u0027md5\u0027: \u003cmd5\u003e,"},{"line_number":356,"context_line":"    }"},{"line_number":357,"context_line":""},{"line_number":358,"context_line":"To delete a license from an instance, the following request would be made:"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a5de9d1_278d6c7b","line":355,"updated":"2016-01-28 22:44:22.000000000","message":"when making this call is it going to just give the contents back here or deliver the contents of the license in a file to download? I\u0027m not sure what the reason for the filename is.","commit_id":"2ca908687f5b74cf1c368696cbe044827b76b95c"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"4293167005909c51661737b278e7dafc8b303f9d","unresolved":false,"context_lines":[{"line_number":352,"context_line":"    {"},{"line_number":353,"context_line":"        \u0027filename\u0027: \u0027vertica_100GB.lic\u0027,"},{"line_number":354,"context_line":"        \u0027contents\u0027: \u003clicense_contents\u003e,"},{"line_number":355,"context_line":"        \u0027md5\u0027: \u003cmd5\u003e,"},{"line_number":356,"context_line":"    }"},{"line_number":357,"context_line":""},{"line_number":358,"context_line":"To delete a license from an instance, the following request would be made:"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a5de9d1_36a33d02","line":355,"in_reply_to":"7a5de9d1_278d6c7b","updated":"2016-01-29 16:07:20.000000000","message":"It will just deliver the contents of the file.  The CLI will then be able to use \u0027filename\u0027 to create the file, if a filename wasn\u0027t supplied by the user.","commit_id":"2ca908687f5b74cf1c368696cbe044827b76b95c"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"2777b7fbe79329f432ef36e8f9019ed8c1997a56","unresolved":false,"context_lines":[{"line_number":365,"context_line":""},{"line_number":366,"context_line":"Response::"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"    This operation has no response body"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"Creation Enhancements"},{"line_number":371,"context_line":"....................."}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a5de9d1_aca3834e","line":368,"updated":"2016-01-28 22:44:22.000000000","message":"this has no body which is fine but what is the response code?","commit_id":"2ca908687f5b74cf1c368696cbe044827b76b95c"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"4293167005909c51661737b278e7dafc8b303f9d","unresolved":false,"context_lines":[{"line_number":365,"context_line":""},{"line_number":366,"context_line":"Response::"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"    This operation has no response body"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"Creation Enhancements"},{"line_number":371,"context_line":"....................."}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a5de9d1_760775ca","line":368,"in_reply_to":"7a5de9d1_aca3834e","updated":"2016-01-29 16:07:20.000000000","message":"Done","commit_id":"2ca908687f5b74cf1c368696cbe044827b76b95c"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"2777b7fbe79329f432ef36e8f9019ed8c1997a56","unresolved":false,"context_lines":[{"line_number":379,"context_line":"data would be added to the payload::"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"    {"},{"line_number":382,"context_line":"        \u0027licenses\u0027: [ \u003clicense_id\u003e, \u003clicense_id\u003e, ... ],"},{"line_number":383,"context_line":"    }"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a5de9d1_8c6ec7ff","line":382,"updated":"2016-01-28 22:44:22.000000000","message":"this is a bit different than above in the api call to apply a license to an instance where its a list of dictionaries verse here its a list of strings. i think these should be similar.","commit_id":"2ca908687f5b74cf1c368696cbe044827b76b95c"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"4293167005909c51661737b278e7dafc8b303f9d","unresolved":false,"context_lines":[{"line_number":379,"context_line":"data would be added to the payload::"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"    {"},{"line_number":382,"context_line":"        \u0027licenses\u0027: [ \u003clicense_id\u003e, \u003clicense_id\u003e, ... ],"},{"line_number":383,"context_line":"    }"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a5de9d1_56b7d9f4","line":382,"in_reply_to":"7a5de9d1_8c6ec7ff","updated":"2016-01-29 16:07:20.000000000","message":"Done","commit_id":"2ca908687f5b74cf1c368696cbe044827b76b95c"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"2777b7fbe79329f432ef36e8f9019ed8c1997a56","unresolved":false,"context_lines":[{"line_number":386,"context_line":"Public API Security"},{"line_number":387,"context_line":"-------------------"},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"No impact"},{"line_number":390,"context_line":""},{"line_number":391,"context_line":"Python API"},{"line_number":392,"context_line":"----------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a5de9d1_0c83b799","line":389,"updated":"2016-01-28 22:44:22.000000000","message":"I think there is a security concern here with the contents being stored in plain text or encrypted. Since this is customer data that they provide to trove we should make every effort to keep it safe.\n\nWhen we are allowing users to provide foreign files to us we should not allow scripts that could be executed that would possibly compromise the system.","commit_id":"2ca908687f5b74cf1c368696cbe044827b76b95c"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"4293167005909c51661737b278e7dafc8b303f9d","unresolved":false,"context_lines":[{"line_number":386,"context_line":"Public API Security"},{"line_number":387,"context_line":"-------------------"},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"No impact"},{"line_number":390,"context_line":""},{"line_number":391,"context_line":"Python API"},{"line_number":392,"context_line":"----------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a5de9d1_a2f5a357","line":389,"in_reply_to":"7a5de9d1_0c83b799","updated":"2016-01-29 16:07:20.000000000","message":"I\u0027ll add something like:\n\n  Since the file will be transmitted clear text across the management\n  network, there is a chance that the license can be intercepted if the network\n  is compromised.\n\nOn your second point, the files supplied are data files, and as such should not be \u0027executed.\u0027  It, of course, will be up to the plugins to ensure that.  This would be a code review issue though (just as we review database commands that are executed with \u0027shell\u003dTrue\u0027).  I\u0027d add something to that effect.","commit_id":"2ca908687f5b74cf1c368696cbe044827b76b95c"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"2777b7fbe79329f432ef36e8f9019ed8c1997a56","unresolved":false,"context_lines":[{"line_number":479,"context_line":""},{"line_number":480,"context_line":"- cluster-create --license [--license]"},{"line_number":481,"context_line":"                        Creates a new cluster and applies the given licenses to"},{"line_number":482,"context_line":"                        each instance."},{"line_number":483,"context_line":""},{"line_number":484,"context_line":"Internal API"},{"line_number":485,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a5de9d1_a7ce3cb2","line":482,"updated":"2016-01-28 22:44:22.000000000","message":"hmm.. should we make this at the higher level like you mention here or a new key field on each instance like we have now with flavor/network/volume/az?","commit_id":"2ca908687f5b74cf1c368696cbe044827b76b95c"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"4293167005909c51661737b278e7dafc8b303f9d","unresolved":false,"context_lines":[{"line_number":479,"context_line":""},{"line_number":480,"context_line":"- cluster-create --license [--license]"},{"line_number":481,"context_line":"                        Creates a new cluster and applies the given licenses to"},{"line_number":482,"context_line":"                        each instance."},{"line_number":483,"context_line":""},{"line_number":484,"context_line":"Internal API"},{"line_number":485,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a5de9d1_625b2bf7","line":482,"in_reply_to":"7a5de9d1_a7ce3cb2","updated":"2016-01-29 16:07:20.000000000","message":"My mistake - I forgot the syntax is different for cluster-create","commit_id":"2ca908687f5b74cf1c368696cbe044827b76b95c"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"2777b7fbe79329f432ef36e8f9019ed8c1997a56","unresolved":false,"context_lines":[{"line_number":508,"context_line":""},{"line_number":509,"context_line":"To provide a concrete, real-world plugin implementation, a Vertica license"},{"line_number":510,"context_line":"plugin will be created to allow licenses to be applied to a Vertica datastore."},{"line_number":511,"context_line":"A New Relic plugin will also be created to illustrate activation of other 3rd"},{"line_number":512,"context_line":"party software on a guest image."},{"line_number":513,"context_line":""},{"line_number":514,"context_line":"Alternatives"},{"line_number":515,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a5de9d1_a7af1c93","line":512,"range":{"start_line":511,"start_character":0,"end_line":512,"end_character":32},"updated":"2016-01-28 22:44:22.000000000","message":"So this assumes that the new relic binary is pre-installed in the image. Will this plugin also make sure to \"enable\", start, or restart the service that may need to be done to activate the license?","commit_id":"2ca908687f5b74cf1c368696cbe044827b76b95c"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"4293167005909c51661737b278e7dafc8b303f9d","unresolved":false,"context_lines":[{"line_number":508,"context_line":""},{"line_number":509,"context_line":"To provide a concrete, real-world plugin implementation, a Vertica license"},{"line_number":510,"context_line":"plugin will be created to allow licenses to be applied to a Vertica datastore."},{"line_number":511,"context_line":"A New Relic plugin will also be created to illustrate activation of other 3rd"},{"line_number":512,"context_line":"party software on a guest image."},{"line_number":513,"context_line":""},{"line_number":514,"context_line":"Alternatives"},{"line_number":515,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a5de9d1_227c531e","line":512,"range":{"start_line":511,"start_character":0,"end_line":512,"end_character":32},"in_reply_to":"7a5de9d1_a7af1c93","updated":"2016-01-29 16:07:20.000000000","message":"Yes, it would be up to the plugin to make sure that everything is done correctly, or report \u0027FAILED\u0027 on a subsequent query of the license.  I\u0027ll the additional info about the plugin stuff here.","commit_id":"2ca908687f5b74cf1c368696cbe044827b76b95c"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"8da1b0c31bd0c8fd4b79a11b1e8941635d8f5e86","unresolved":false,"context_lines":[{"line_number":93,"context_line":"Database"},{"line_number":94,"context_line":"--------"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"A new table (licenses) will be added to the Trove schema:"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d    \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":99,"context_line":"    Column         Type          Allow Nulls  Description"}],"source_content_type":"text/x-rst","patch_set":6,"id":"7a5de9d1_93038a0d","line":96,"updated":"2016-02-02 19:28:30.000000000","message":"This is a very generic mechanism, other than the fact that it is called \"Licence\".  Could me call it something like \"setup\" to reflect the fact that it can be used to configure different types of component.","commit_id":"d41da226567fd247a231fbeba88263b1f55b4f05"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"9b065ba49ffe3a680a4aee7ac509ab8e3988dfa1","unresolved":false,"context_lines":[{"line_number":93,"context_line":"Database"},{"line_number":94,"context_line":"--------"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"A new table (licenses) will be added to the Trove schema:"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d    \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":99,"context_line":"    Column         Type          Allow Nulls  Description"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5a5ae5dd_4778ca8f","line":96,"in_reply_to":"7a5de9d1_93038a0d","updated":"2016-02-04 04:38:16.000000000","message":"How about module?","commit_id":"d41da226567fd247a231fbeba88263b1f55b4f05"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"8da1b0c31bd0c8fd4b79a11b1e8941635d8f5e86","unresolved":false,"context_lines":[{"line_number":99,"context_line":"    Column         Type          Allow Nulls  Description"},{"line_number":100,"context_line":"    \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d    \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":101,"context_line":"    id             varchar(36)   No           ID of license (autogenerated)"},{"line_number":102,"context_line":"    datastore      varchar(36)   No           Name of datastore to apply"},{"line_number":103,"context_line":"                                              license to.  \u0027all\u0027 means license"},{"line_number":104,"context_line":"                                              applies to all datastores"},{"line_number":105,"context_line":"    name           varchar(255)  No           Name of License"}],"source_content_type":"text/x-rst","patch_set":6,"id":"7a5de9d1_303acce8","line":102,"updated":"2016-02-02 19:28:30.000000000","message":"How will this schema handle different licences for different datastore versions?","commit_id":"d41da226567fd247a231fbeba88263b1f55b4f05"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"9b065ba49ffe3a680a4aee7ac509ab8e3988dfa1","unresolved":false,"context_lines":[{"line_number":99,"context_line":"    Column         Type          Allow Nulls  Description"},{"line_number":100,"context_line":"    \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d    \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":101,"context_line":"    id             varchar(36)   No           ID of license (autogenerated)"},{"line_number":102,"context_line":"    datastore      varchar(36)   No           Name of datastore to apply"},{"line_number":103,"context_line":"                                              license to.  \u0027all\u0027 means license"},{"line_number":104,"context_line":"                                              applies to all datastores"},{"line_number":105,"context_line":"    name           varchar(255)  No           Name of License"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5a5ae5dd_67baa625","line":102,"in_reply_to":"7a5de9d1_303acce8","updated":"2016-02-04 04:38:16.000000000","message":"I can add datastore version to the schema as well as a type.  That should make it able to handle just about anything.","commit_id":"d41da226567fd247a231fbeba88263b1f55b4f05"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"8da1b0c31bd0c8fd4b79a11b1e8941635d8f5e86","unresolved":false,"context_lines":[{"line_number":219,"context_line":"        \u0027description\u0027: \u0027New Relic activation\u0027,"},{"line_number":220,"context_line":"        \u0027datastore\u0027: \u0027all\u0027,"},{"line_number":221,"context_line":"        \u0027auto_apply\u0027: True,"},{"line_number":222,"context_line":"        \u0027contents\u0027: \u003clicense_contents\u003e,"},{"line_number":223,"context_line":"        \u0027md5\u0027: \u003cmd5\u003e,"},{"line_number":224,"context_line":"        \u0027created\u0027: \u003cdate\u003e,"},{"line_number":225,"context_line":"        \u0027updated\u0027: \u003cdate\u003e,"}],"source_content_type":"text/x-rst","patch_set":6,"id":"7a5de9d1_93edca27","line":222,"updated":"2016-02-02 19:28:30.000000000","message":"Why is it showing the (presumably encrypted) licence contents here when the other get calls don\u0027t?  If it\u0027s not encrypted, shouldn\u0027t the other single instance get return the contents, too?  If it is encrypted, the column name should probably be different.","commit_id":"d41da226567fd247a231fbeba88263b1f55b4f05"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"9b065ba49ffe3a680a4aee7ac509ab8e3988dfa1","unresolved":false,"context_lines":[{"line_number":219,"context_line":"        \u0027description\u0027: \u0027New Relic activation\u0027,"},{"line_number":220,"context_line":"        \u0027datastore\u0027: \u0027all\u0027,"},{"line_number":221,"context_line":"        \u0027auto_apply\u0027: True,"},{"line_number":222,"context_line":"        \u0027contents\u0027: \u003clicense_contents\u003e,"},{"line_number":223,"context_line":"        \u0027md5\u0027: \u003cmd5\u003e,"},{"line_number":224,"context_line":"        \u0027created\u0027: \u003cdate\u003e,"},{"line_number":225,"context_line":"        \u0027updated\u0027: \u003cdate\u003e,"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5a5ae5dd_a24c0c43","line":222,"in_reply_to":"7a5de9d1_93edca27","updated":"2016-02-04 04:38:16.000000000","message":"Done","commit_id":"d41da226567fd247a231fbeba88263b1f55b4f05"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"8da1b0c31bd0c8fd4b79a11b1e8941635d8f5e86","unresolved":false,"context_lines":[{"line_number":224,"context_line":"        \u0027created\u0027: \u003cdate\u003e,"},{"line_number":225,"context_line":"        \u0027updated\u0027: \u003cdate\u003e,"},{"line_number":226,"context_line":"        \u0027deleted\u0027: False,"},{"line_number":227,"context_line":"        \u0027deleted\u0027: \u0027\u0027,"},{"line_number":228,"context_line":"    }"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"Response Codes::"}],"source_content_type":"text/x-rst","patch_set":6,"id":"7a5de9d1_93786a91","line":227,"updated":"2016-02-02 19:28:30.000000000","message":"Why are there 2 \u0027deleted\u0027 fields here?","commit_id":"d41da226567fd247a231fbeba88263b1f55b4f05"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"9b065ba49ffe3a680a4aee7ac509ab8e3988dfa1","unresolved":false,"context_lines":[{"line_number":224,"context_line":"        \u0027created\u0027: \u003cdate\u003e,"},{"line_number":225,"context_line":"        \u0027updated\u0027: \u003cdate\u003e,"},{"line_number":226,"context_line":"        \u0027deleted\u0027: False,"},{"line_number":227,"context_line":"        \u0027deleted\u0027: \u0027\u0027,"},{"line_number":228,"context_line":"    }"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"Response Codes::"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5a5ae5dd_625614d4","line":227,"in_reply_to":"7a5de9d1_93786a91","updated":"2016-02-04 04:38:16.000000000","message":"Done","commit_id":"d41da226567fd247a231fbeba88263b1f55b4f05"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"8da1b0c31bd0c8fd4b79a11b1e8941635d8f5e86","unresolved":false,"context_lines":[{"line_number":254,"context_line":"            \u0027description\u0027: \u0027Vertica license for 100GB\u0027,"},{"line_number":255,"context_line":"            \u0027datastore\u0027: \u0027vertica\u0027,"},{"line_number":256,"context_line":"            \u0027auto_apply\u0027: False,"},{"line_number":257,"context_line":"            \u0027contents\u0027: \u003clicense_contents\u003e,"},{"line_number":258,"context_line":"            \u0027md5\u0027: \u003cmd5\u003e,"},{"line_number":259,"context_line":"            \u0027created\u0027: \u003cdate\u003e,"},{"line_number":260,"context_line":"            \u0027updated\u0027: \u003cdate\u003e,"}],"source_content_type":"text/x-rst","patch_set":6,"id":"7a5de9d1_93d4ea47","line":257,"updated":"2016-02-02 19:28:30.000000000","message":"Why does POST return contents when PATCH doesn\u0027t?","commit_id":"d41da226567fd247a231fbeba88263b1f55b4f05"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"9b065ba49ffe3a680a4aee7ac509ab8e3988dfa1","unresolved":false,"context_lines":[{"line_number":254,"context_line":"            \u0027description\u0027: \u0027Vertica license for 100GB\u0027,"},{"line_number":255,"context_line":"            \u0027datastore\u0027: \u0027vertica\u0027,"},{"line_number":256,"context_line":"            \u0027auto_apply\u0027: False,"},{"line_number":257,"context_line":"            \u0027contents\u0027: \u003clicense_contents\u003e,"},{"line_number":258,"context_line":"            \u0027md5\u0027: \u003cmd5\u003e,"},{"line_number":259,"context_line":"            \u0027created\u0027: \u003cdate\u003e,"},{"line_number":260,"context_line":"            \u0027updated\u0027: \u003cdate\u003e,"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5a5ae5dd_e299a46f","line":257,"in_reply_to":"7a5de9d1_93d4ea47","updated":"2016-02-04 04:38:16.000000000","message":"Done","commit_id":"d41da226567fd247a231fbeba88263b1f55b4f05"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"8da1b0c31bd0c8fd4b79a11b1e8941635d8f5e86","unresolved":false,"context_lines":[{"line_number":432,"context_line":"has been provisioned correctly."},{"line_number":433,"context_line":""},{"line_number":434,"context_line":"To add a license to an instance during create and cluster-create, the following"},{"line_number":435,"context_line":"data would be added to the payload::"},{"line_number":436,"context_line":""},{"line_number":437,"context_line":"    {"},{"line_number":438,"context_line":"        \u0027licenses\u0027 : ["}],"source_content_type":"text/x-rst","patch_set":6,"id":"7a5de9d1_131d5a0f","line":435,"updated":"2016-02-02 19:28:30.000000000","message":"What if some datastore requires a different licence for each node in a cluster?","commit_id":"d41da226567fd247a231fbeba88263b1f55b4f05"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"9b065ba49ffe3a680a4aee7ac509ab8e3988dfa1","unresolved":false,"context_lines":[{"line_number":432,"context_line":"has been provisioned correctly."},{"line_number":433,"context_line":""},{"line_number":434,"context_line":"To add a license to an instance during create and cluster-create, the following"},{"line_number":435,"context_line":"data would be added to the payload::"},{"line_number":436,"context_line":""},{"line_number":437,"context_line":"    {"},{"line_number":438,"context_line":"        \u0027licenses\u0027 : ["}],"source_content_type":"text/x-rst","patch_set":6,"id":"5a5ae5dd_02b400cf","line":435,"in_reply_to":"7a5de9d1_131d5a0f","updated":"2016-02-04 04:38:16.000000000","message":"it will be handled in the same way as flavor, az, etc.","commit_id":"d41da226567fd247a231fbeba88263b1f55b4f05"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"8da1b0c31bd0c8fd4b79a11b1e8941635d8f5e86","unresolved":false,"context_lines":[{"line_number":469,"context_line":".. code-block:: python"},{"line_number":470,"context_line":""},{"line_number":471,"context_line":"    def license_list(self, datastore\u003dNone):"},{"line_number":472,"context_line":"        \"\"\"Get a list of all licenses that can be applied. Return only"},{"line_number":473,"context_line":"        those that apply to the datastore if it is passed in."},{"line_number":474,"context_line":"        \"\"\""},{"line_number":475,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"7a5de9d1_b3c7a663","line":472,"updated":"2016-02-02 19:28:30.000000000","message":"Do you intend that the caller get the datastore first, or do you also accept datastore-name?","commit_id":"d41da226567fd247a231fbeba88263b1f55b4f05"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"9b065ba49ffe3a680a4aee7ac509ab8e3988dfa1","unresolved":false,"context_lines":[{"line_number":469,"context_line":".. code-block:: python"},{"line_number":470,"context_line":""},{"line_number":471,"context_line":"    def license_list(self, datastore\u003dNone):"},{"line_number":472,"context_line":"        \"\"\"Get a list of all licenses that can be applied. Return only"},{"line_number":473,"context_line":"        those that apply to the datastore if it is passed in."},{"line_number":474,"context_line":"        \"\"\""},{"line_number":475,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"5a5ae5dd_624a94c7","line":472,"in_reply_to":"7a5de9d1_b3c7a663","updated":"2016-02-04 04:38:16.000000000","message":"I\u0027ll model this similar to datastore-version-list","commit_id":"d41da226567fd247a231fbeba88263b1f55b4f05"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"8da1b0c31bd0c8fd4b79a11b1e8941635d8f5e86","unresolved":false,"context_lines":[{"line_number":492,"context_line":""},{"line_number":493,"context_line":".. code-block:: python"},{"line_number":494,"context_line":""},{"line_number":495,"context_line":"    def licence_apply(self, instance, licenses):"},{"line_number":496,"context_line":"        \"\"\"Apply licenses to an instance.\"\"\""},{"line_number":497,"context_line":""},{"line_number":498,"context_line":"    def licence_query(self, instance):"}],"source_content_type":"text/x-rst","patch_set":6,"id":"7a5de9d1_d3726249","line":495,"updated":"2016-02-02 19:28:30.000000000","message":"The REST URI is on /instance, so shouldn\u0027t these be instance_apply_licence calls?\nSame for next 3 calls.","commit_id":"d41da226567fd247a231fbeba88263b1f55b4f05"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"9b065ba49ffe3a680a4aee7ac509ab8e3988dfa1","unresolved":false,"context_lines":[{"line_number":492,"context_line":""},{"line_number":493,"context_line":".. code-block:: python"},{"line_number":494,"context_line":""},{"line_number":495,"context_line":"    def licence_apply(self, instance, licenses):"},{"line_number":496,"context_line":"        \"\"\"Apply licenses to an instance.\"\"\""},{"line_number":497,"context_line":""},{"line_number":498,"context_line":"    def licence_query(self, instance):"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5a5ae5dd_82d790ec","line":495,"in_reply_to":"7a5de9d1_d3726249","updated":"2016-02-04 04:38:16.000000000","message":"I\u0027ve modeled this similar to the root commands","commit_id":"d41da226567fd247a231fbeba88263b1f55b4f05"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"8da1b0c31bd0c8fd4b79a11b1e8941635d8f5e86","unresolved":false,"context_lines":[{"line_number":571,"context_line":"\u0027error_message\u0027 field should be filled with useful information if an error"},{"line_number":572,"context_line":"occurs."},{"line_number":573,"context_line":""},{"line_number":574,"context_line":"A simple plugin that places the file contents into a specified location and can"},{"line_number":575,"context_line":"retrieve the file will be added.  This can be used as the basis for all other"},{"line_number":576,"context_line":"plugins."},{"line_number":577,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"7a5de9d1_b34806ce","line":574,"updated":"2016-02-02 19:28:30.000000000","message":"If you eliminate this plugin, wouldn\u0027t that simplify configuration?  (for this, you would need a configuration that specifies which directory to copy stuff into)","commit_id":"d41da226567fd247a231fbeba88263b1f55b4f05"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"8da1b0c31bd0c8fd4b79a11b1e8941635d8f5e86","unresolved":false,"context_lines":[{"line_number":576,"context_line":"plugins."},{"line_number":577,"context_line":""},{"line_number":578,"context_line":"The Guest Agent code will use the name of the datastore to determine if a"},{"line_number":579,"context_line":"plugin exists for the given license.  If the datastore is \u0027all,\u0027 then the name"},{"line_number":580,"context_line":"of the license will be used instead.  If no plugin can be found, then an error"},{"line_number":581,"context_line":"will be written to the log and processing stopped."},{"line_number":582,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"7a5de9d1_deed89f0","line":579,"updated":"2016-02-02 19:28:30.000000000","message":"I don\u0027t see how the datastore name would determine if a plugin exists for a licence.","commit_id":"d41da226567fd247a231fbeba88263b1f55b4f05"}],"specs/mitaka/module-management.rst":[{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"d5231cec5ccf1401873994c1e082eac463ec5371","unresolved":false,"context_lines":[{"line_number":480,"context_line":"has been provisioned correctly."},{"line_number":481,"context_line":""},{"line_number":482,"context_line":"To add a module to an instance during create and cluster-create, the following"},{"line_number":483,"context_line":"data would be added to the payload::"},{"line_number":484,"context_line":""},{"line_number":485,"context_line":"    {"},{"line_number":486,"context_line":"        \u0027modules\u0027 : ["}],"source_content_type":"text/x-rst","patch_set":8,"id":"5a5ae5dd_dba2f2ad","line":483,"updated":"2016-02-05 20:16:56.000000000","message":"So this is what I was getting at in my previous comment.  You specify above that you intend to add a --module option to cluster-create.  That can be good, but do you additionally need to have --instance\u003dflavor\u003d7,module\u003dfoo and have the module entries added to the create payload of the individual instances in a cluster?","commit_id":"2b662260fcab88bdbe85c5e6b290d7eb6bb59421"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"03db11afb26feab68dbda72fc0f3d8539264b013","unresolved":false,"context_lines":[{"line_number":480,"context_line":"has been provisioned correctly."},{"line_number":481,"context_line":""},{"line_number":482,"context_line":"To add a module to an instance during create and cluster-create, the following"},{"line_number":483,"context_line":"data would be added to the payload::"},{"line_number":484,"context_line":""},{"line_number":485,"context_line":"    {"},{"line_number":486,"context_line":"        \u0027modules\u0027 : ["}],"source_content_type":"text/x-rst","patch_set":8,"id":"5a5ae5dd_b0c38c56","line":483,"in_reply_to":"5a5ae5dd_dba2f2ad","updated":"2016-02-06 00:40:11.000000000","message":"There won\u0027t be both.  They\u0027ll be handled in a similar format to what they are with other fields (such as flavor, az, etc.).  I\u0027ll break it out into two paragraphs.","commit_id":"2b662260fcab88bdbe85c5e6b290d7eb6bb59421"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"d5231cec5ccf1401873994c1e082eac463ec5371","unresolved":false,"context_lines":[{"line_number":540,"context_line":""},{"line_number":541,"context_line":".. code-block:: python"},{"line_number":542,"context_line":""},{"line_number":543,"context_line":"    def module_apply(self, instance, modules):"},{"line_number":544,"context_line":"        \"\"\"Apply modules to an instance.\"\"\""},{"line_number":545,"context_line":""},{"line_number":546,"context_line":"    def module_query(self, instance):"}],"source_content_type":"text/x-rst","patch_set":8,"id":"5a5ae5dd_dbde7210","line":543,"updated":"2016-02-05 20:16:56.000000000","message":"Since we can instance.create(module\u003dfoo), wouldn\u0027t it make sense that you should be able to instance.module_apply(foo)?","commit_id":"2b662260fcab88bdbe85c5e6b290d7eb6bb59421"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"5b8475c2b5f3381e2fcc0e78ed57ad5c3042fd53","unresolved":false,"context_lines":[{"line_number":540,"context_line":""},{"line_number":541,"context_line":".. code-block:: python"},{"line_number":542,"context_line":""},{"line_number":543,"context_line":"    def module_apply(self, instance, modules):"},{"line_number":544,"context_line":"        \"\"\"Apply modules to an instance.\"\"\""},{"line_number":545,"context_line":""},{"line_number":546,"context_line":"    def module_query(self, instance):"}],"source_content_type":"text/x-rst","patch_set":8,"id":"5a5ae5dd_efe6c4ae","line":543,"in_reply_to":"5a5ae5dd_30b79cf6","updated":"2016-02-08 16:59:02.000000000","message":"So if that is what it is, why does it take instance as a parameter?","commit_id":"2b662260fcab88bdbe85c5e6b290d7eb6bb59421"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"03db11afb26feab68dbda72fc0f3d8539264b013","unresolved":false,"context_lines":[{"line_number":540,"context_line":""},{"line_number":541,"context_line":".. code-block:: python"},{"line_number":542,"context_line":""},{"line_number":543,"context_line":"    def module_apply(self, instance, modules):"},{"line_number":544,"context_line":"        \"\"\"Apply modules to an instance.\"\"\""},{"line_number":545,"context_line":""},{"line_number":546,"context_line":"    def module_query(self, instance):"}],"source_content_type":"text/x-rst","patch_set":8,"id":"5a5ae5dd_30b79cf6","line":543,"in_reply_to":"5a5ae5dd_dbde7210","updated":"2016-02-06 00:40:11.000000000","message":"Umm, I thought that what what this is ...","commit_id":"2b662260fcab88bdbe85c5e6b290d7eb6bb59421"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"1099c385318bdd4b8360021048af62919db58d48","unresolved":false,"context_lines":[{"line_number":540,"context_line":""},{"line_number":541,"context_line":".. code-block:: python"},{"line_number":542,"context_line":""},{"line_number":543,"context_line":"    def module_apply(self, instance, modules):"},{"line_number":544,"context_line":"        \"\"\"Apply modules to an instance.\"\"\""},{"line_number":545,"context_line":""},{"line_number":546,"context_line":"    def module_query(self, instance):"}],"source_content_type":"text/x-rst","patch_set":8,"id":"3a57f1b5_d220fc9d","line":543,"in_reply_to":"5a5ae5dd_efe6c4ae","updated":"2016-02-10 19:52:19.000000000","message":"That\u0027s how it is in the instances.py file - the \u0027instance\u0027 is passed in to the \u0027instances\u0027 class methods.  For example:\n\n      def delete(self, instance):\n          \"\"\"Delete the specified instance.","commit_id":"2b662260fcab88bdbe85c5e6b290d7eb6bb59421"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"42eb597921e84ae0c2dcab3be30a5107e1d9a9af","unresolved":false,"context_lines":[{"line_number":134,"context_line":"    contents           blob          No           Encrypted module contents"},{"line_number":135,"context_line":"    md5                varchar(32)   No           MD5 hash of module contents"},{"line_number":136,"context_line":"    created            DateTime      No           Created date"},{"line_number":137,"context_line":"    updated            DateTime      No           Updated date"},{"line_number":138,"context_line":"    deleted            tinyint(1)    Yes          Deleted flag"},{"line_number":139,"context_line":"    deleted_at         DateTime      Yes          Deleted date"},{"line_number":140,"context_line":"    \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\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":9,"id":"3a57f1b5_1a7d541c","line":137,"updated":"2016-02-10 16:26:58.000000000","message":"not null eh?","commit_id":"31648a926d07564e8e09685c0bd6e0b7d1536167"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"f0e2d39b3383612c79614b5038aed890d5335b63","unresolved":false,"context_lines":[{"line_number":134,"context_line":"    contents           blob          No           Encrypted module contents"},{"line_number":135,"context_line":"    md5                varchar(32)   No           MD5 hash of module contents"},{"line_number":136,"context_line":"    created            DateTime      No           Created date"},{"line_number":137,"context_line":"    updated            DateTime      No           Updated date"},{"line_number":138,"context_line":"    deleted            tinyint(1)    Yes          Deleted flag"},{"line_number":139,"context_line":"    deleted_at         DateTime      Yes          Deleted date"},{"line_number":140,"context_line":"    \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\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":9,"id":"3a57f1b5_757339b2","line":137,"in_reply_to":"3a57f1b5_1a7d541c","updated":"2016-02-10 16:30:58.000000000","message":"updated should be equal to created at first so this makes sense.","commit_id":"31648a926d07564e8e09685c0bd6e0b7d1536167"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"37d42d8a3bebf4c54a8b8e2761f166488a4685d1","unresolved":false,"context_lines":[{"line_number":134,"context_line":"    contents           blob          No           Encrypted module contents"},{"line_number":135,"context_line":"    md5                varchar(32)   No           MD5 hash of module contents"},{"line_number":136,"context_line":"    created            DateTime      No           Created date"},{"line_number":137,"context_line":"    updated            DateTime      No           Updated date"},{"line_number":138,"context_line":"    deleted            tinyint(1)    Yes          Deleted flag"},{"line_number":139,"context_line":"    deleted_at         DateTime      Yes          Deleted date"},{"line_number":140,"context_line":"    \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\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":9,"id":"3a57f1b5_12753497","line":137,"in_reply_to":"3a57f1b5_757339b2","updated":"2016-02-10 19:50:38.000000000","message":"Yes, that was my assumption","commit_id":"31648a926d07564e8e09685c0bd6e0b7d1536167"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"42eb597921e84ae0c2dcab3be30a5107e1d9a9af","unresolved":false,"context_lines":[{"line_number":155,"context_line":"Creating modules that apply to \u0027all\u0027 datastores and ones that are auto-applied"},{"line_number":156,"context_line":"will require admin credentials."},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"Public API"},{"line_number":159,"context_line":"----------"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"New ReST API calls will be added to the Trove infrastructure.  These fall into"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a57f1b5_da2fbc9f","line":158,"updated":"2016-02-10 16:26:58.000000000","message":"My only concern about this spec is that the API is being created as part of the tenant/user API. I would much rather this were part of the management API as I don\u0027t believe that an end user should be able to or allowed to manipulate/look at this.","commit_id":"31648a926d07564e8e09685c0bd6e0b7d1536167"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"37d42d8a3bebf4c54a8b8e2761f166488a4685d1","unresolved":false,"context_lines":[{"line_number":155,"context_line":"Creating modules that apply to \u0027all\u0027 datastores and ones that are auto-applied"},{"line_number":156,"context_line":"will require admin credentials."},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"Public API"},{"line_number":159,"context_line":"----------"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"New ReST API calls will be added to the Trove infrastructure.  These fall into"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a57f1b5_32863066","line":158,"in_reply_to":"3a57f1b5_15c5258d","updated":"2016-02-10 19:50:38.000000000","message":"Non-admin users will be restricted from adding auto-apply modules or modules that apply to \u0027all\u0027 datastores.","commit_id":"31648a926d07564e8e09685c0bd6e0b7d1536167"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"f0e2d39b3383612c79614b5038aed890d5335b63","unresolved":false,"context_lines":[{"line_number":155,"context_line":"Creating modules that apply to \u0027all\u0027 datastores and ones that are auto-applied"},{"line_number":156,"context_line":"will require admin credentials."},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"Public API"},{"line_number":159,"context_line":"----------"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"New ReST API calls will be added to the Trove infrastructure.  These fall into"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a57f1b5_15c5258d","line":158,"in_reply_to":"3a57f1b5_da2fbc9f","updated":"2016-02-10 16:30:58.000000000","message":"but each user could potentially have their own licenses and it wouldnt nessesarily be a global license.","commit_id":"31648a926d07564e8e09685c0bd6e0b7d1536167"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"8f81c6eda7f1e0a57bbcf6d0df6a7a31385a837b","unresolved":false,"context_lines":[{"line_number":172,"context_line":""},{"line_number":173,"context_line":"Request::"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    GET v1/{tenant_id}/modules"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"Response::"},{"line_number":178,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a57f1b5_951275b3","line":175,"updated":"2016-02-10 16:36:28.000000000","message":"missing the tenant_id from the database entry to select which modules are avaiable for the tenant.","commit_id":"31648a926d07564e8e09685c0bd6e0b7d1536167"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"37d42d8a3bebf4c54a8b8e2761f166488a4685d1","unresolved":false,"context_lines":[{"line_number":172,"context_line":""},{"line_number":173,"context_line":"Request::"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    GET v1/{tenant_id}/modules"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"Response::"},{"line_number":178,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a57f1b5_320950de","line":175,"in_reply_to":"3a57f1b5_951275b3","updated":"2016-02-10 19:50:38.000000000","message":"Done","commit_id":"31648a926d07564e8e09685c0bd6e0b7d1536167"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"fe34256f05530c72626f7686d84630d49ba341d6","unresolved":false,"context_lines":[{"line_number":224,"context_line":"                \u0027name\u0027: \u0027100GB\u0027,"},{"line_number":225,"context_line":"                \u0027description\u0027: \u0027Vertica license for 100GB\u0027,"},{"line_number":226,"context_line":"                \u0027auto_apply\u0027: False,"},{"line_number":227,"context_line":"                \u0027visible\u0027: True,  # returned for admin only"},{"line_number":228,"context_line":"                \u0027md5\u0027: \u003cmd5\u003e,"},{"line_number":229,"context_line":"                \u0027created\u0027: \u003cdate\u003e,"},{"line_number":230,"context_line":"                \u0027updated\u0027: \u003cdate\u003e,"}],"source_content_type":"text/x-rst","patch_set":11,"id":"dae33548_c2dce014","line":227,"updated":"2016-02-16 03:28:17.000000000","message":"maybe live_update should be returned for admins as well where calling listing or getting a module information?","commit_id":"e383d077666f0229d04a14d5e0d87385c11b1dbd"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"a230d36dcc7a567dbc162328ba04aa18880b295c","unresolved":false,"context_lines":[{"line_number":224,"context_line":"                \u0027name\u0027: \u0027100GB\u0027,"},{"line_number":225,"context_line":"                \u0027description\u0027: \u0027Vertica license for 100GB\u0027,"},{"line_number":226,"context_line":"                \u0027auto_apply\u0027: False,"},{"line_number":227,"context_line":"                \u0027visible\u0027: True,  # returned for admin only"},{"line_number":228,"context_line":"                \u0027md5\u0027: \u003cmd5\u003e,"},{"line_number":229,"context_line":"                \u0027created\u0027: \u003cdate\u003e,"},{"line_number":230,"context_line":"                \u0027updated\u0027: \u003cdate\u003e,"}],"source_content_type":"text/x-rst","patch_set":11,"id":"dae33548_c1cb19a4","line":227,"in_reply_to":"dae33548_c2dce014","updated":"2016-02-16 16:44:11.000000000","message":"Done","commit_id":"e383d077666f0229d04a14d5e0d87385c11b1dbd"}]}
