)]}'
{"specs/newton/approved/standardize-capabilities.rst":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"10a67d4dae19859ca6dd13e35ffade1cb4d4a821","unresolved":false,"context_lines":[{"line_number":46,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"We propose to create a set of `nova.objects.fields.Enum` classes for"},{"line_number":49,"context_line":"representing the capabilities of various components in the system. Followup"},{"line_number":50,"context_line":"blueprints will tackle the migration of existing capabilities to a standardized"},{"line_number":51,"context_line":"database schema model and tackle the creation of REST APIs that expose various"},{"line_number":52,"context_line":"capabilities at the different levels of the system."}],"source_content_type":"text/x-rst","patch_set":2,"id":"bab6814e_8b44821b","line":49,"updated":"2016-05-25 13:06:37.000000000","message":"I share Ed\u0027s concern. Nova moves far too slowly. If I\u0027m a deployer or packager who wants to show off the new shiz capability in a cloud, how will I do it? I guess I\u0027ll have to patch the code because having the new shiz is part of how I distinguish myself in the market.\n\nAs we\u0027ve seen with the need for dynamic resource classes (which are an evolution from static enums) we\u0027ll probably need some way to have standard and dynamic capabilities. Is that something we need to address now in this spec?","commit_id":"91bd9ba2f8d819f581acc6f08fe9d8cb991a52f3"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"c273ede3046c1accd473fb0e0033a41302b8d2da","unresolved":false,"context_lines":[{"line_number":45,"context_line":"Proposed change"},{"line_number":46,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"We propose to create a set of `nova.objects.fields.Enum` classes for"},{"line_number":49,"context_line":"representing the capabilities of various components in the system. Followup"},{"line_number":50,"context_line":"blueprints will tackle the migration of existing capabilities to a standardized"},{"line_number":51,"context_line":"database schema model and tackle the creation of REST APIs that expose various"},{"line_number":52,"context_line":"capabilities at the different levels of the system."}],"source_content_type":"text/x-rst","patch_set":2,"id":"bab6814e_d8c17630","line":49,"range":{"start_line":48,"start_character":0,"end_line":49,"end_character":66},"updated":"2016-05-18 18:22:22.000000000","message":"This sounds like a nightmare to me. We *know* that hardware will continue to evolve, and that new stuff is inevitable. So what is the process for adding support for these new capabilities? Will it require proposing a code change? If so, that means that the *best case* scenario is 6 months from when a feature is introduced until it is usable in Nova. More likely, given the release schedule, is a year. And that adds more review burden, documentation updates, etc.","commit_id":"91bd9ba2f8d819f581acc6f08fe9d8cb991a52f3"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"3c1ba22914c3045d4e7754145a2b988f2b567f5c","unresolved":false,"context_lines":[{"line_number":45,"context_line":"Proposed change"},{"line_number":46,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"We propose to create a set of `nova.objects.fields.Enum` classes for"},{"line_number":49,"context_line":"representing the capabilities of various components in the system. Followup"},{"line_number":50,"context_line":"blueprints will tackle the migration of existing capabilities to a standardized"},{"line_number":51,"context_line":"database schema model and tackle the creation of REST APIs that expose various"},{"line_number":52,"context_line":"capabilities at the different levels of the system."}],"source_content_type":"text/x-rst","patch_set":2,"id":"bab6814e_922a26e6","line":49,"range":{"start_line":48,"start_character":0,"end_line":49,"end_character":66},"in_reply_to":"bab6814e_d8c17630","updated":"2016-05-24 17:59:15.000000000","message":"No, I think having an Enum means that it could be a very good interop for all the clouds, given that a new capability should be discussed first for all our operators.","commit_id":"91bd9ba2f8d819f581acc6f08fe9d8cb991a52f3"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"c273ede3046c1accd473fb0e0033a41302b8d2da","unresolved":false,"context_lines":[{"line_number":57,"context_line":"What is a Capability?"},{"line_number":58,"context_line":"---------------------"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"A capability is a *singular* piece of information describing some"},{"line_number":61,"context_line":"**functionality** or **feature** of an entity that can be provided to a"},{"line_number":62,"context_line":"consumer. A capability is *not* a *set* of things describing some functionality"},{"line_number":63,"context_line":"(that is a set of capabilities)."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"Capabilities must be described as a single value, not a key/value combination."},{"line_number":66,"context_line":"However, groups of related capabilities should be modeled in the system in"}],"source_content_type":"text/x-rst","patch_set":2,"id":"bab6814e_01cc2a88","line":63,"range":{"start_line":60,"start_character":0,"end_line":63,"end_character":32},"updated":"2016-05-18 18:22:22.000000000","message":"So in this view, the only question is boolean in nature: does this compute node have this capability? I\u0027m not sure that this is sufficiently descriptive, and it seems very limiting.","commit_id":"91bd9ba2f8d819f581acc6f08fe9d8cb991a52f3"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"75e8371b12aa64cc1170c492dcd5184edf31a831","unresolved":false,"context_lines":[{"line_number":79,"context_line":"When referring to the **capability** of a host to expose these CPU instruction"},{"line_number":80,"context_line":"sets to a guest, we might represent this as a *set* of capabilites, such as:"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"* `hw:x86_cpu_instruction_set_ext:sse`"},{"line_number":83,"context_line":"* `hw:x86_cpu_instruction_set_ext:mmx`"},{"line_number":84,"context_line":"* `hw:x86_cpu_instruction_set_ext:avx`"},{"line_number":85,"context_line":"* `hw:x86_cpu_instruction_set_ext:avx2`"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a122d0e_9f63f2b0","line":82,"range":{"start_line":82,"start_character":6,"end_line":82,"end_character":33},"updated":"2016-04-27 13:49:20.000000000","message":"Can we change this to something shorter like \"x86_isa\" or \"x86_cpu\"? I don\u0027t know why \"ext\" is in this, and the rest seems mostly extraneous to me.","commit_id":"91bd9ba2f8d819f581acc6f08fe9d8cb991a52f3"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"75e8371b12aa64cc1170c492dcd5184edf31a831","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"We could say that the above four capabilities all belong to a capability group"},{"line_number":91,"context_line":"called `hw:x86_cpu_instruction_set` and that all capabilities in that group"},{"line_number":92,"context_line":"belong to a wider group called `hw`."},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"\"hypervisor\" capabilities"},{"line_number":95,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a122d0e_bfd34e37","line":92,"updated":"2016-04-27 13:49:20.000000000","message":"I\u0027m not sure why we would expose them flat instead of as a series of nested dicts. The contents of the dicts could be dicts or lists.\n\nI mean, I\u0027m okay with the flat layout, but it seems odd to me.","commit_id":"91bd9ba2f8d819f581acc6f08fe9d8cb991a52f3"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"ca5e87ea6441c21edc28f03545ade27f66ece6ed","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"We could say that the above four capabilities all belong to a capability group"},{"line_number":91,"context_line":"called `hw:x86_cpu_instruction_set` and that all capabilities in that group"},{"line_number":92,"context_line":"belong to a wider group called `hw`."},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"\"hypervisor\" capabilities"},{"line_number":95,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":2,"id":"dab17558_04e05228","line":92,"in_reply_to":"1a122d0e_bfd34e37","updated":"2016-05-11 21:30:58.000000000","message":"So, just to make sure I get it, the HostCapabilities object will contain only contain one field for this (hw_x86_cpu_instruction_set_ext) containing all 4 values, right? Hopefully, we won\u0027t have to add a new field for each one. :)\n\nAlso, we are going to save these capabilities in the database. Are we going to save each one of them as a separate entry?","commit_id":"91bd9ba2f8d819f581acc6f08fe9d8cb991a52f3"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"c273ede3046c1accd473fb0e0033a41302b8d2da","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"We could say that the above four capabilities all belong to a capability group"},{"line_number":91,"context_line":"called `hw:x86_cpu_instruction_set` and that all capabilities in that group"},{"line_number":92,"context_line":"belong to a wider group called `hw`."},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"\"hypervisor\" capabilities"},{"line_number":95,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":2,"id":"bab6814e_21f96e81","line":92,"in_reply_to":"1a122d0e_bfd34e37","updated":"2016-05-18 18:22:22.000000000","message":"Well, given the boolean nature of this view of capabilities, flat does seem a lot simpler. A nested structure would be better for a design that allows testing for \"in\" or \"not in\".","commit_id":"91bd9ba2f8d819f581acc6f08fe9d8cb991a52f3"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"10a67d4dae19859ca6dd13e35ffade1cb4d4a821","unresolved":false,"context_lines":[{"line_number":110,"context_line":"* `virt:libvirt:set_admin_pass`"},{"line_number":111,"context_line":"* `virt:libvirt:huge_pages`"},{"line_number":112,"context_line":"* `virt:libvirt:uefi_boot`"},{"line_number":113,"context_line":"* `virt:hyperv:secure_boot`"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"Bad examples of capabilities"},{"line_number":116,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":2,"id":"bab6814e_0b1c12c0","line":113,"updated":"2016-05-25 13:06:37.000000000","message":"I think, but this may be lack of experience, that when I\u0027m inspecting a cloud for capabilities I don\u0027t care if it is libvirt or hyperv. I care if I can have huge_pages or a secure_boot. Maybe only hyperv can give me a secure_boot but who the provider is doesn\u0027t matter.\n\nIf we\u0027ve got  a situation where there\u0027s a virt:hyperv:secure_boot and a virt:othervisor:secure_boot and they are actually different things providing different behaviors then I reckon what we really want is different names for the behavior (without the hypervisor).\n\nBut that\u0027s just a gut reaction.","commit_id":"91bd9ba2f8d819f581acc6f08fe9d8cb991a52f3"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"75e8371b12aa64cc1170c492dcd5184edf31a831","unresolved":false,"context_lines":[{"line_number":110,"context_line":"* `virt:libvirt:set_admin_pass`"},{"line_number":111,"context_line":"* `virt:libvirt:huge_pages`"},{"line_number":112,"context_line":"* `virt:libvirt:uefi_boot`"},{"line_number":113,"context_line":"* `virt:hyperv:secure_boot`"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"Bad examples of capabilities"},{"line_number":116,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a122d0e_7f9c166a","line":113,"updated":"2016-04-27 13:49:20.000000000","message":"So, these are cool, but namespacing them by hypervisor seems like it should be the exception, not the rule. For example, xen has set_admin_pass, so why should someone have to list all these and iterate over virt:*:set_admin_pass keys to see if that feature is supported?\n\nIt seems to me that we should avoid exposing virt-specific capabilities whenever possible, no?","commit_id":"91bd9ba2f8d819f581acc6f08fe9d8cb991a52f3"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"ca5e87ea6441c21edc28f03545ade27f66ece6ed","unresolved":false,"context_lines":[{"line_number":110,"context_line":"* `virt:libvirt:set_admin_pass`"},{"line_number":111,"context_line":"* `virt:libvirt:huge_pages`"},{"line_number":112,"context_line":"* `virt:libvirt:uefi_boot`"},{"line_number":113,"context_line":"* `virt:hyperv:secure_boot`"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"Bad examples of capabilities"},{"line_number":116,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":2,"id":"dab17558_298233c8","line":113,"in_reply_to":"1a122d0e_7f9c166a","updated":"2016-05-11 21:30:58.000000000","message":"We are going to list the capabilities through the /os-hypervisors api. I\u0027m thinking that you\u0027ll want to list those capability expressions, right? Unfortunately, this would only give information on what capabilities a compute node will have, but not how to request them. Any ideas on this? For now, most of the capabilities I\u0027ve defined in the HostCapabilities object have the same name as some image metadata properties or flavor extra_specs. (e.g.: the ``os_secure_boot`` capability has the same name as the ``os_secure_boot`` image meta prop. Thus, if an image required this capability, the instance would be scheduled on an instance that has this capability).\n\nAlso, it seems that you want to list \"unrequestable\" capabilities, like xen\u0027s set_admin_pass, it\u0027s not something a user would / should request. Any reason we would need this category of capabilities? Also, should we make a distinction between them?\n\n\n@Dan, any reason why we shouldn\u0027t expose virt-specific capabilities?","commit_id":"91bd9ba2f8d819f581acc6f08fe9d8cb991a52f3"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"c273ede3046c1accd473fb0e0033a41302b8d2da","unresolved":false,"context_lines":[{"line_number":110,"context_line":"* `virt:libvirt:set_admin_pass`"},{"line_number":111,"context_line":"* `virt:libvirt:huge_pages`"},{"line_number":112,"context_line":"* `virt:libvirt:uefi_boot`"},{"line_number":113,"context_line":"* `virt:hyperv:secure_boot`"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"Bad examples of capabilities"},{"line_number":116,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":2,"id":"bab6814e_e19f6601","line":113,"in_reply_to":"1a122d0e_7f9c166a","updated":"2016-05-18 18:22:22.000000000","message":"We should definitely avoid adding virt-specific stuff to the Nova code and database. So that would rule out a deployer ever exposing any capability that every (or the majority of) virt systems support.","commit_id":"91bd9ba2f8d819f581acc6f08fe9d8cb991a52f3"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"3c1ba22914c3045d4e7754145a2b988f2b567f5c","unresolved":false,"context_lines":[{"line_number":110,"context_line":"* `virt:libvirt:set_admin_pass`"},{"line_number":111,"context_line":"* `virt:libvirt:huge_pages`"},{"line_number":112,"context_line":"* `virt:libvirt:uefi_boot`"},{"line_number":113,"context_line":"* `virt:hyperv:secure_boot`"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"Bad examples of capabilities"},{"line_number":116,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":2,"id":"bab6814e_32e25aa0","line":113,"in_reply_to":"1a122d0e_7f9c166a","updated":"2016-05-24 17:59:15.000000000","message":"totally agreed with Dan, it\u0027s part of the Nova role to provide an abstraction for all our hypervisors, so we should rather provide capabilities without saying which ones are related to an hypervisor.","commit_id":"91bd9ba2f8d819f581acc6f08fe9d8cb991a52f3"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"c273ede3046c1accd473fb0e0033a41302b8d2da","unresolved":false,"context_lines":[{"line_number":123,"context_line":""},{"line_number":124,"context_line":"* `virt:hyperv_version:2012r2`"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"The problem with the above is that the value does not describe a **feature** of"},{"line_number":127,"context_line":"an entity. Instead, it describes some metadata about the entity. A **feature**"},{"line_number":128,"context_line":"is something that the entity can perform or provide for a consumer. A version"},{"line_number":129,"context_line":"is not something that an entity can provide or perform for a consumer."},{"line_number":130,"context_line":"of values that exist for Hyper-V versions."}],"source_content_type":"text/x-rst","patch_set":2,"id":"bab6814e_64a0a4a0","line":127,"range":{"start_line":126,"start_character":0,"end_line":127,"end_character":64},"updated":"2016-05-18 18:22:22.000000000","message":"It describes a collection of features, in the same way that the hardware feature \u0027hw:x86_cpu_instruction_set_ext:sse\u0027 mentioned above is a collection of many, many instructions that are not available on non-SSE chips. Along those same lines, there is SSE2, which is a superset of SSE. If I just need SSE, but the chip has SSE2, how should that be represented? SSE2 would meet all of my needs, but since I asked for plain old SSE, this model wouldn\u0027t be able to recognize that SSE2 is a superset.","commit_id":"91bd9ba2f8d819f581acc6f08fe9d8cb991a52f3"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"3c1ba22914c3045d4e7754145a2b988f2b567f5c","unresolved":false,"context_lines":[{"line_number":127,"context_line":"an entity. Instead, it describes some metadata about the entity. A **feature**"},{"line_number":128,"context_line":"is something that the entity can perform or provide for a consumer. A version"},{"line_number":129,"context_line":"is not something that an entity can provide or perform for a consumer."},{"line_number":130,"context_line":"of values that exist for Hyper-V versions."},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"* `hw:x86_cpu_instruction_set:avx,avx2`"},{"line_number":133,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"bab6814e_99b886e7","line":130,"updated":"2016-05-24 17:59:15.000000000","message":"do you mean that then the capability would need some metadata ?\n\nHow could we help the above to be correlated with capabilities ?","commit_id":"91bd9ba2f8d819f581acc6f08fe9d8cb991a52f3"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"3c1ba22914c3045d4e7754145a2b988f2b567f5c","unresolved":false,"context_lines":[{"line_number":132,"context_line":"* `hw:x86_cpu_instruction_set:avx,avx2`"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"The problem with the above is that two values are combined into a single"},{"line_number":135,"context_line":"capability."},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"* `virt:libvirt_version:\u003e\u003d1.2.1`"},{"line_number":138,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"bab6814e_d9ca0e6e","line":135,"updated":"2016-05-24 17:59:15.000000000","message":"yeah, agreed.","commit_id":"91bd9ba2f8d819f581acc6f08fe9d8cb991a52f3"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"75e8371b12aa64cc1170c492dcd5184edf31a831","unresolved":false,"context_lines":[{"line_number":151,"context_line":"A series of `Enum` field classes will be added that provide a standardized"},{"line_number":152,"context_line":"taxonomy for capabilities::"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    class CapabilityGroup(Enum):"},{"line_number":155,"context_line":"        \"\"\"Groups of capabilities.\"\"\""},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        SYSTEM \u003d \u0027sys\u0027"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a122d0e_dfa0ca44","line":154,"updated":"2016-04-27 13:49:20.000000000","message":"I\u0027m confused about the hierarchy in modeling here, when we\u0027re exposing this flatly....","commit_id":"91bd9ba2f8d819f581acc6f08fe9d8cb991a52f3"},{"author":{"_account_id":20264,"name":"ram krishnan","email":"ramkri123@gmail.com","username":"ramki"},"change_message_id":"41d7a99d140a8d597ef36c3c796ca2c5f338f48e","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        SYSTEM \u003d \u0027sys\u0027"},{"line_number":158,"context_line":"        HARDWARE \u003d \u0027hw\u0027"},{"line_number":159,"context_line":"        HYPERVISOR \u003d \u0027virt\u0027"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    class Capability(Enum):"},{"line_number":163,"context_line":"        pass"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3aaa91ec_4272824a","line":160,"updated":"2016-07-06 22:25:33.000000000","message":"We are planning on grouping all networking related capabilities such as port mirroring, L2/L3 tunnel (VXLAN etc.) under group named NETWORK \u003d \u0027net\u0027.\n\nPPA team","commit_id":"91bd9ba2f8d819f581acc6f08fe9d8cb991a52f3"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"c273ede3046c1accd473fb0e0033a41302b8d2da","unresolved":false,"context_lines":[{"line_number":196,"context_line":"            HUGE_PAGES,"},{"line_number":197,"context_line":"        )"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"The above are merely examples. Not complete by any means, but meant to"},{"line_number":200,"context_line":"illustrate how to codify the various capabilities within Nova."},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"REST API impact"},{"line_number":203,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"bab6814e_12e8f6e1","line":200,"range":{"start_line":199,"start_character":0,"end_line":200,"end_character":62},"updated":"2016-05-18 18:22:22.000000000","message":"Again, the need to specify every possible capability *in code* will be a maintenance nightmare. This might work for a few common capabilities, but to make it the basis for all qualitative aspects of a request is not workable.","commit_id":"91bd9ba2f8d819f581acc6f08fe9d8cb991a52f3"}]}
