)]}'
{"guidelines/cloud-profile-schema.json":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"eb89e3046cd412bb5146f8e4bc18797ce4a67f1a","unresolved":false,"context_lines":[{"line_number":14,"context_line":"        \"schema-version\": {"},{"line_number":15,"context_line":"          \"type\": \"string\","},{"line_number":16,"context_line":"          \"description\": \"version of the schema in use\","},{"line_number":17,"context_line":"          \"pattern\": \"^[0-9]+\\.[0-9]+$\""},{"line_number":18,"context_line":"        },"},{"line_number":19,"context_line":"        \"name\": {"},{"line_number":20,"context_line":"          \"type\": \"string\","}],"source_content_type":"application/json","patch_set":9,"id":"3f1d235d_dc9428eb","line":17,"range":{"start_line":17,"start_character":29,"end_line":17,"end_character":30},"updated":"2017-06-29 20:46:33.000000000","message":"Does this backslash need to be doubled?","commit_id":"ea1d271a387c9d83c2d4531ad61dfa7b6da8a238"}],"guidelines/cloud-profile.rst":[{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"ff64bc9aa6cef7665abfd0e08bb57ebe8a4dbaf0","unresolved":false,"context_lines":[{"line_number":65,"context_line":"Updates to the cloud profile schema version are not tied to OpenStack releases."},{"line_number":66,"context_line":"A deployer should always be able to deploy a current cloud profile to an old"},{"line_number":67,"context_line":"OpenStack cloud: e.g. hosting a static json document on a web server associated"},{"line_number":68,"context_line":"with a bexar OpenStack should work."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"The purpose of the cloud profile is to help users understand deployer choices."},{"line_number":71,"context_line":"If a choice needs to be communicated to a user, it belongs in this"}],"source_content_type":"text/x-rst","patch_set":9,"id":"5f201791_10e01596","line":68,"range":{"start_line":68,"start_character":7,"end_line":68,"end_character":12},"updated":"2017-06-22 15:38:42.000000000","message":"Not sure how many people have been around long enough to remember all the release names. Maybe say something like \"with an OpenStack deployment from 2010\"? \n\nAlso, you should have capitalized \u0027Bexar\u0027 :-P","commit_id":"ea1d271a387c9d83c2d4531ad61dfa7b6da8a238"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"964b92731f6c9b96f2de1d3e02396d5c1612866c","unresolved":false,"context_lines":[{"line_number":235,"context_line":"  Name of the region. Matches the region name in the keystone catalog."},{"line_number":236,"context_line":"  Required."},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"regions[].services"},{"line_number":239,"context_line":"  List of services in the region."},{"line_number":240,"context_line":"  Required."},{"line_number":241,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"bf091321_0af01290","line":238,"updated":"2017-06-08 11:47:36.000000000","message":"I\u0027m not entirely comfortable with the entries from here to the end of the section. It effectively  duplicates the service catalog.\n\nIt\u0027s perhaps the case that in a just universe this is how it would have been from the start (service catalog as static doc in well-known location).\n\nBut it wasn\u0027t that universe and now this is duplication, which is weird somehow.","commit_id":"ea1d271a387c9d83c2d4531ad61dfa7b6da8a238"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"ff64bc9aa6cef7665abfd0e08bb57ebe8a4dbaf0","unresolved":false,"context_lines":[{"line_number":235,"context_line":"  Name of the region. Matches the region name in the keystone catalog."},{"line_number":236,"context_line":"  Required."},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"regions[].services"},{"line_number":239,"context_line":"  List of services in the region."},{"line_number":240,"context_line":"  Required."},{"line_number":241,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"5f201791_3008b12a","line":238,"in_reply_to":"7f231b9d_df8f972c","updated":"2017-06-22 15:38:42.000000000","message":"So is it fair to say that this would have been ideal to have from the start, but a different path was chosen? That path has turned out to be less that ideal for the examples given above, such as CLIs, so adding a profile document like this helps to address that shortcoming, and the partial duplication of information is an unavoidable consequence.","commit_id":"ea1d271a387c9d83c2d4531ad61dfa7b6da8a238"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"feaa991d2d2fb117c8c0e8d3a3850bc486cc5508","unresolved":false,"context_lines":[{"line_number":235,"context_line":"  Name of the region. Matches the region name in the keystone catalog."},{"line_number":236,"context_line":"  Required."},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"regions[].services"},{"line_number":239,"context_line":"  List of services in the region."},{"line_number":240,"context_line":"  Required."},{"line_number":241,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"7f231b9d_df8f972c","line":238,"in_reply_to":"7f231b9d_f65de048","updated":"2017-06-19 19:40:10.000000000","message":"SO - it both is and isn\u0027t a duplicate of the service catalog.\n\nIt\u0027s different in that it\u0027s global, not per-user. So a user can have more services in their catalog than what are listed here. It\u0027s also different in that it\u0027s cached copies of the version discovery documents.\n\nThis means that a consumer fetches the profile once per cloud and then can do all of the correct logic re: version discovery without having to deal with calculating cost for doing that vs. hard-coding version endpoints. (real story - python-neutronclient just har-codes a + \u0027/v2.0\u0027 to the url from the catalog because why would they hit their version discovery endpoint)\n\nThis is especially important for things like cli\u0027s, where there is no great way to do in-process caches of lookup data, since it\u0027s a new process each time. BUT - the only time this data changes is when a deployer rolls out a new version of their cloud, so at the moment there are a ton of user API calls to find out information that doesn\u0027t change.\n\nThe catalog is still important. It\u0027s how a cloud can give a user access to services that are not generally available. Since all the profile is is a cache of data that comes from the version discovery endpoints of the services in the basic catalog, a user with a service in their catalog that isn\u0027t in the profile can still use it- it\u0027ll just require a couple more API calls.\n\nIt can also contain the etag of the profile so that the client knows it needs to fetch a new copy of the profile.\n\nBut the cached data here winds up being really important, otherwise discovery is too expensive to be consistently used, and we wind up with a bazillion hacks in all of the client libs trying to find the times when one _actually_ needs to fetch discovery.","commit_id":"ea1d271a387c9d83c2d4531ad61dfa7b6da8a238"},{"author":{"_account_id":7822,"name":"Chris Hoge (not involved in upstream development)","email":"chris@hogepodge.com","username":"hogepodge"},"change_message_id":"4483ec188a294fc4811c1fba029740a4bbc6ff19","unresolved":false,"context_lines":[{"line_number":235,"context_line":"  Name of the region. Matches the region name in the keystone catalog."},{"line_number":236,"context_line":"  Required."},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"regions[].services"},{"line_number":239,"context_line":"  List of services in the region."},{"line_number":240,"context_line":"  Required."},{"line_number":241,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"7f231b9d_f65de048","line":238,"in_reply_to":"bf091321_0af01290","updated":"2017-06-19 18:19:09.000000000","message":"I\u0027m in agreement with Chris on this one, unless there\u0027s a compelling reason to require it.","commit_id":"ea1d271a387c9d83c2d4531ad61dfa7b6da8a238"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"964b92731f6c9b96f2de1d3e02396d5c1612866c","unresolved":false,"context_lines":[{"line_number":273,"context_line":"-------------------------"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"A tool will be provided to take a smaller file that only contains the"},{"line_number":276,"context_line":"deployers answers and a the auth credentials for a normal user account that"},{"line_number":277,"context_line":"will expand those answers into a valid profile document."},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"The information in the document only ever changes when a deployment is changed,"}],"source_content_type":"text/x-rst","patch_set":9,"id":"bf091321_2ac99677","line":276,"updated":"2017-06-08 11:47:36.000000000","message":"s/ a//","commit_id":"ea1d271a387c9d83c2d4531ad61dfa7b6da8a238"}],"guidelines/cloud_profile.rst":[{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"0c1db43528afd373d63abe6df1792714b767c388","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"The cloud profile should readable by unauthenticated users."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"The cloud profile should be located at ``/profile.json`` on the main URL of"},{"line_number":38,"context_line":"the cloud in question."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"The cloud profile should be the primary endpoint communicated to users."},{"line_number":41,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"5ff73747_0f5b3e54","line":38,"range":{"start_line":37,"start_character":0,"end_line":38,"end_character":22},"updated":"2017-04-25 22:44:18.000000000","message":"This the main url of the auth url? Be more specific what the \"main\" url is.","commit_id":"898db5f3937fe3a952e103388f6052d5e349ffda"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"8f475daa632eaec54b2ebf58e6ed60bb85f2a7f1","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"The cloud profile should readable by unauthenticated users."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"The cloud profile should be located at ``/profile.json`` on the main URL of"},{"line_number":38,"context_line":"the cloud in question."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"The cloud profile should be the primary endpoint communicated to users."},{"line_number":41,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"5ff73747_42111dac","line":38,"range":{"start_line":37,"start_character":0,"end_line":38,"end_character":22},"in_reply_to":"5ff73747_0f5b3e54","updated":"2017-04-25 23:09:34.000000000","message":"I think that\u0027s actually a good point- even though you say nevermind in a second...","commit_id":"898db5f3937fe3a952e103388f6052d5e349ffda"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"0c1db43528afd373d63abe6df1792714b767c388","unresolved":false,"context_lines":[{"line_number":66,"context_line":"Feature discoverability needs to be done at the service level, but some things"},{"line_number":67,"context_line":"are old and intractable."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"It is recommended that it be placed on the main domain of the cloud in"},{"line_number":70,"context_line":"question. For instance, if Vexxhost runs a cloud on the domain"},{"line_number":71,"context_line":"``vexxhost.net``, then the cloud profile should be served from"},{"line_number":72,"context_line":"``https://vexxhost.net/profile.json``, but if Vexxhost has other business and"},{"line_number":73,"context_line":"their cloud is but a small part, such that the cloud is run from"},{"line_number":74,"context_line":"``cloud.vexxhost.net``, then it should be served from"},{"line_number":75,"context_line":"``https://cloud.vexxhost.net/profile.json``. Similarly, if there is an"},{"line_number":76,"context_line":"internal private cloud running on ``10.1.2.4``, the profile should be hosted"},{"line_number":77,"context_line":"at ``https://10.1.2.4/profile.json`` but if the entire cloud is below an"},{"line_number":78,"context_line":"suburl, such as ``https://10.1.2.3/openstack`` then the profile document should"},{"line_number":79,"context_line":"be served from ``https://10.1.2.3/openstack/profile.json``. This enables a"},{"line_number":80,"context_line":"deployed to say: \"The cloud is at cloud.vexxhost.net\" or \"The cloud is at"},{"line_number":81,"context_line":"10.1.2.3/openstack\" and the user should be empowered to go from there."},{"line_number":82,"context_line":""},{"line_number":83,"context_line":".. note:: This is intended to be a json document. It is in yaml format here"},{"line_number":84,"context_line":"          for now for ease of reading/responding/commenting. Before we land"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5ff73747_420c7d3a","line":81,"range":{"start_line":69,"start_character":0,"end_line":81,"end_character":70},"updated":"2017-04-25 22:44:18.000000000","message":"ignore my previous comment.","commit_id":"898db5f3937fe3a952e103388f6052d5e349ffda"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"0c1db43528afd373d63abe6df1792714b767c388","unresolved":false,"context_lines":[{"line_number":249,"context_line":"      - v4-public"},{"line_number":250,"context_line":"      - v6-public"},{"line_number":251,"context_line":"      - v4-nat"},{"line_number":252,"context_line":"      - v4-private  "},{"line_number":253,"context_line":"    regions:"},{"line_number":254,"context_line":"    - name: Dallas"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5ff73747_cc1c44c3","line":252,"range":{"start_line":252,"start_character":18,"end_line":252,"end_character":20},"updated":"2017-04-25 22:44:18.000000000","message":"Trailing space (NIT)","commit_id":"898db5f3937fe3a952e103388f6052d5e349ffda"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"8f475daa632eaec54b2ebf58e6ed60bb85f2a7f1","unresolved":false,"context_lines":[{"line_number":249,"context_line":"      - v4-public"},{"line_number":250,"context_line":"      - v6-public"},{"line_number":251,"context_line":"      - v4-nat"},{"line_number":252,"context_line":"      - v4-private  "},{"line_number":253,"context_line":"    regions:"},{"line_number":254,"context_line":"    - name: Dallas"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5ff73747_02231507","line":252,"range":{"start_line":252,"start_character":18,"end_line":252,"end_character":20},"in_reply_to":"5ff73747_cc1c44c3","updated":"2017-04-25 23:09:34.000000000","message":"Done","commit_id":"898db5f3937fe3a952e103388f6052d5e349ffda"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"e9c135e1b69d49c5dc075385b523c1f86ce9685b","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"The cloud profile should readable by unauthenticated users."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"The cloud profile should be located at ``/profile.json`` on the rood of the"},{"line_number":38,"context_line":"primary domain for the cloud."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"For instance, if Vexxhost runs a cloud on the domain ``vexxhost.net``, then"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5ff73747_47ec78f2","line":37,"updated":"2017-04-26 13:55:26.000000000","message":"root","commit_id":"cd63f842e0127a98a90b21a8ad6f419c156e6c16"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"e9c135e1b69d49c5dc075385b523c1f86ce9685b","unresolved":false,"context_lines":[{"line_number":35,"context_line":"The cloud profile should readable by unauthenticated users."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"The cloud profile should be located at ``/profile.json`` on the rood of the"},{"line_number":38,"context_line":"primary domain for the cloud."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"For instance, if Vexxhost runs a cloud on the domain ``vexxhost.net``, then"},{"line_number":41,"context_line":"the cloud profile should be served from ``https://vexxhost.net/profile.json``."}],"source_content_type":"text/x-rst","patch_set":2,"id":"5ff73747_e7b6e4fa","line":38,"updated":"2017-04-26 13:55:26.000000000","message":"Is \"primary domain\" of a cloud a concept that is universal? You explain it below, but I guess I\u0027ve never thought of a cloud has having a domain per se. It\u0027s just that some things in might share a domain name.\n\nIt _should_ have a primary domain, but I\u0027m not sure it is always the case.","commit_id":"cd63f842e0127a98a90b21a8ad6f419c156e6c16"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"e9c135e1b69d49c5dc075385b523c1f86ce9685b","unresolved":false,"context_lines":[{"line_number":96,"context_line":"    # recommended to make this the same as the root of the URL hosting the"},{"line_number":97,"context_line":"    # profile."},{"line_number":98,"context_line":"    # Required."},{"line_number":99,"context_line":"    name: example.com"},{"line_number":100,"context_line":"    # Information needed by users to authenticate to the cloud"},{"line_number":101,"context_line":"    auth:"},{"line_number":102,"context_line":"      # keystone auth_url. can contain {region_name} as a substitution variable"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5ff73747_c78648dc","line":99,"updated":"2017-04-26 13:55:26.000000000","message":"As described above this doesn\u0027t have to be a domain name, but should be. In the case of something like the profile doc being at vexxhost.com/profile.json \u0027vexxhost.com\u0027 makes good sense as a name.\n\nBut for 10.0.0.1/openstack/profile.json \u002710.0.0.1/openstack\u0027 does not a good name make, because you can\u0027t speak it.","commit_id":"cd63f842e0127a98a90b21a8ad6f419c156e6c16"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"e9c135e1b69d49c5dc075385b523c1f86ce9685b","unresolved":false,"context_lines":[{"line_number":128,"context_line":"      # reasons to behave differently."},{"line_number":129,"context_line":"      # Optional. Defaults to password"},{"line_number":130,"context_line":"      default_plugin: password"},{"line_number":131,"context_line":"    web:"},{"line_number":132,"context_line":"      # URL to web interface for the cloud."},{"line_number":133,"context_line":"      # Optional. Defaults to null"},{"line_number":134,"context_line":"      interface: https://console.example.com"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5ff73747_c7d408c0","line":131,"updated":"2017-04-26 13:55:26.000000000","message":"maybe use the service type here instead of web? (if there is one?)","commit_id":"cd63f842e0127a98a90b21a8ad6f419c156e6c16"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"55479ecbce5c8b78fbccb8d758ca96f68ce4866d","unresolved":false,"context_lines":[{"line_number":128,"context_line":"      # reasons to behave differently."},{"line_number":129,"context_line":"      # Optional. Defaults to password"},{"line_number":130,"context_line":"      default_plugin: password"},{"line_number":131,"context_line":"    web:"},{"line_number":132,"context_line":"      # URL to web interface for the cloud."},{"line_number":133,"context_line":"      # Optional. Defaults to null"},{"line_number":134,"context_line":"      interface: https://console.example.com"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5ff73747_7f3ff024","line":131,"in_reply_to":"5ff73747_c7d408c0","updated":"2017-04-26 19:04:49.000000000","message":"Yah - I wasn\u0027t really sure what this should be - I mostly included it because one of the absolute hardest things when interacting with a new OpenStack public cloud is \"where the heck do I log in\" followed by \"I did that, now where do I find my API credentials\"\n\nWe could also just omit this section - it\u0027s not super essential for API consumption.","commit_id":"cd63f842e0127a98a90b21a8ad6f419c156e6c16"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"e9c135e1b69d49c5dc075385b523c1f86ce9685b","unresolved":false,"context_lines":[{"line_number":135,"context_line":"      # If the main web interface is not horizon but a horizon is also"},{"line_number":136,"context_line":"      # available, this is its URL."},{"line_number":137,"context_line":"      # Optional. Defaults to null"},{"line_number":138,"context_line":"      horizon: https://horizon.example.com"},{"line_number":139,"context_line":"      # If the cloud supports self-service account creation, the URL where"},{"line_number":140,"context_line":"      # the user can start that process."},{"line_number":141,"context_line":"      # Optional. Defaults to null"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5ff73747_47e0f896","line":138,"updated":"2017-04-26 13:55:26.000000000","message":"or perhaps here. exposing project names is considered a no-no, no?","commit_id":"cd63f842e0127a98a90b21a8ad6f419c156e6c16"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"e9c135e1b69d49c5dc075385b523c1f86ce9685b","unresolved":false,"context_lines":[{"line_number":140,"context_line":"      # the user can start that process."},{"line_number":141,"context_line":"      # Optional. Defaults to null"},{"line_number":142,"context_line":"      account_url: https://join.example.com"},{"line_number":143,"context_line":"    network:"},{"line_number":144,"context_line":"      # List of available well-known networking architectures available"},{"line_number":145,"context_line":"      # The values are:"},{"line_number":146,"context_line":"      #   v4-public - a user can boot a machine directly on a public network"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5ff73747_ca0c0d3d","line":143,"updated":"2017-04-26 13:55:26.000000000","message":"To some extent it feels like nearly everything from here down should be exposed by the service, not here.\n\nI recognize that that\u0027s ignoring the fact that there\u0027s a real problem _now_ that needs to be solved but it would be good that if we\u0027re going to formalize this stuff we might formalize it in a way that says \"everything here is pragmatic but deprecated\".\n\n_Or_ we should decide that service level capabilities are something we\u0027re not going to do and we should do it here, one or the other, not both.","commit_id":"cd63f842e0127a98a90b21a8ad6f419c156e6c16"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"55479ecbce5c8b78fbccb8d758ca96f68ce4866d","unresolved":false,"context_lines":[{"line_number":140,"context_line":"      # the user can start that process."},{"line_number":141,"context_line":"      # Optional. Defaults to null"},{"line_number":142,"context_line":"      account_url: https://join.example.com"},{"line_number":143,"context_line":"    network:"},{"line_number":144,"context_line":"      # List of available well-known networking architectures available"},{"line_number":145,"context_line":"      # The values are:"},{"line_number":146,"context_line":"      #   v4-public - a user can boot a machine directly on a public network"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5ff73747_1fa7cc51","line":143,"in_reply_to":"5ff73747_ca0c0d3d","updated":"2017-04-26 19:04:49.000000000","message":"Well, I\u0027d love to see services add all of these capabilities - but them doing that isn\u0027t backportable for folks running older openstacks, whereas having a document that could be deployed (or could be made and downloaded ad-hoc like we do now in os-client-config) gets us a possible path to improving things for all of our users, not just the ones we\u0027ll get tomorrow.\n\nSo I totally agree with the sentiment ... perhaps the path is: we put them in here for now, but since there are already some things (versions) that are generated from hitting discovery URLs, over time the file generation tool could start filling in data from the services themselves and there would be even less the operator has to put into their little template document. (which matches what you\u0027re suggesting with pragmatic-but-deprecated)\n\nand perhaps the thing that is deprecated is \"the need to fill in any data in this file manually by the operator\"\n\nI think it\u0027s still valuable to have the top-level file, just like it\u0027s valuable to have the cached collection of version discovery documents - largely because there\u0027s a ton of API usage that happens from shell scripts or ansible/salt type environments, where each interaction is an island that doesn\u0027t have any shared execution context with previous interactions. When we have a pile of services and a pile of capabilities, that\u0027s awesome as a true canonical source, but it\u0027s fairly horrible from a caching perspective - or it winds up with clients making a pile of calls at the start of every command to learn/validate information that will mostly never change. It _can_ be cached locally after being discovered, but then that\u0027s offloading the work to implement fetching and caching and invalidation of each service\u0027s version and capabilities discovery information onto every client library and every application ... and now people are sad. (this is one of the main pushbacks towards getting unversioned discovery urls into the keystone catalog - the fear that, even though it\u0027s a more complete and correct setup, it\u0027s introducing additional roundtrips that will be made every time.","commit_id":"cd63f842e0127a98a90b21a8ad6f419c156e6c16"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"7a44c6b84a9a3553cc2b1b5fb4dacaa645f708ba","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"The cloud profile describes the \u0027public\u0027 interfaces of a cloud\u0027s services."},{"line_number":59,"context_line":"A cloud may also publish a ``profile-internal.json`` and a"},{"line_number":60,"context_line":"``profile-admin.json`` if they choose."},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"OpenStack Clients should always accept a full URL to a cloud profile."},{"line_number":63,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"5ff73747_f5f0c169","line":60,"updated":"2017-04-26 19:57:05.000000000","message":"Because these distinctions have served us so well in the endpoint lists.  Both uses are theoretically \"behind-the-scenes\" and for special use cases (services and admins) so I\u0027d rather just say alternate realities can be exposed via profile-XXXXX.json and not pre-plant the idea that these particular two need to be propagated.","commit_id":"8dfb61ee6252d9365409b5f7c54a19b7b5367e41"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"8e361b3025a21ac059361fc6b31b583884856cde","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"The cloud profile describes the \u0027public\u0027 interfaces of a cloud\u0027s services."},{"line_number":59,"context_line":"A cloud may also publish a ``profile-internal.json`` and a"},{"line_number":60,"context_line":"``profile-admin.json`` if they choose."},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"OpenStack Clients should always accept a full URL to a cloud profile."},{"line_number":63,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"5ff73747_95f726d4","line":60,"in_reply_to":"5ff73747_f5f0c169","updated":"2017-04-27 12:35:34.000000000","message":"Good call!","commit_id":"8dfb61ee6252d9365409b5f7c54a19b7b5367e41"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"7a44c6b84a9a3553cc2b1b5fb4dacaa645f708ba","unresolved":false,"context_lines":[{"line_number":78,"context_line":"  profile:"},{"line_number":79,"context_line":"    # Version of the schema for this profile document, not of the document"},{"line_number":80,"context_line":"    # itself. This is a version of the form XXX.YYY. Adding new fields, or"},{"line_number":81,"context_line":"    # new possible values to an enum should increase"},{"line_number":82,"context_line":"    # Required."},{"line_number":83,"context_line":"    schema_version: 2.0"},{"line_number":84,"context_line":"    # Name of this cloud. For users with accounts on multiple clouds, will be"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5ff73747_95705dde","line":81,"updated":"2017-04-26 19:57:05.000000000","message":"... increase YYY?\n\nAlso, given recent version conversations in general, care to state that things simply will not be removed? :)","commit_id":"8dfb61ee6252d9365409b5f7c54a19b7b5367e41"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"8e361b3025a21ac059361fc6b31b583884856cde","unresolved":false,"context_lines":[{"line_number":78,"context_line":"  profile:"},{"line_number":79,"context_line":"    # Version of the schema for this profile document, not of the document"},{"line_number":80,"context_line":"    # itself. This is a version of the form XXX.YYY. Adding new fields, or"},{"line_number":81,"context_line":"    # new possible values to an enum should increase"},{"line_number":82,"context_line":"    # Required."},{"line_number":83,"context_line":"    schema_version: 2.0"},{"line_number":84,"context_line":"    # Name of this cloud. For users with accounts on multiple clouds, will be"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5ff73747_55fd1eaf","line":81,"in_reply_to":"5ff73747_95705dde","updated":"2017-04-27 12:35:34.000000000","message":"Yes please.","commit_id":"8dfb61ee6252d9365409b5f7c54a19b7b5367e41"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"7a44c6b84a9a3553cc2b1b5fb4dacaa645f708ba","unresolved":false,"context_lines":[{"line_number":138,"context_line":"    # choices organized on a per-service basis. As the services themselves"},{"line_number":139,"context_line":"    # grow the ability to provide discovery of this information, the cloud"},{"line_number":140,"context_line":"    # profile should collect and reflect that information rather than be"},{"line_number":141,"context_line":"    # the primary source of it."},{"line_number":142,"context_line":"    network:"},{"line_number":143,"context_line":"      # List of available well-known networking architectures available"},{"line_number":144,"context_line":"      # The values are:"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5ff73747_ed00f503","line":141,"updated":"2017-04-26 19:57:05.000000000","message":"Should probably be explicit that the key is the service-type.\n\nwhich also leads to the nastiness that is cinderv2, etc.  Do we need to support a \u0027redirect\u0027 for those?","commit_id":"8dfb61ee6252d9365409b5f7c54a19b7b5367e41"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"8e361b3025a21ac059361fc6b31b583884856cde","unresolved":false,"context_lines":[{"line_number":138,"context_line":"    # choices organized on a per-service basis. As the services themselves"},{"line_number":139,"context_line":"    # grow the ability to provide discovery of this information, the cloud"},{"line_number":140,"context_line":"    # profile should collect and reflect that information rather than be"},{"line_number":141,"context_line":"    # the primary source of it."},{"line_number":142,"context_line":"    network:"},{"line_number":143,"context_line":"      # List of available well-known networking architectures available"},{"line_number":144,"context_line":"      # The values are:"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5ff73747_b57fc213","line":141,"in_reply_to":"5ff73747_ed00f503","updated":"2017-04-27 12:35:34.000000000","message":"You know - I\u0027ve left mention of that out of this whole thing altogether. I\u0027ll make another pass and add it. :(","commit_id":"8dfb61ee6252d9365409b5f7c54a19b7b5367e41"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"7a44c6b84a9a3553cc2b1b5fb4dacaa645f708ba","unresolved":false,"context_lines":[{"line_number":265,"context_line":"Some examples to clarify what is meant by the location recommendation:"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"* If ExampleCorp runs a public cloud on the domain ``example.com``, then the"},{"line_number":268,"context_line":"  cloud profile should be served from ``https://vexxhost.net/profile.json``."},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"* If ExampleCorp has other business and their cloud is but one part such that"},{"line_number":271,"context_line":"  their cloud is run from ``cloud.example.com``, then it should be served from"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5ff73747_d592654b","line":268,"updated":"2017-04-26 19:57:05.000000000","message":"https://example.com/profile.json","commit_id":"8dfb61ee6252d9365409b5f7c54a19b7b5367e41"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"7a44c6b84a9a3553cc2b1b5fb4dacaa645f708ba","unresolved":false,"context_lines":[{"line_number":298,"context_line":"fundamentals of the deployment change, there is no requirement it be served"},{"line_number":299,"context_line":"from the same machines that serve the cloud- only that it is put in location"},{"line_number":300,"context_line":"that can become well known and communicated to Users."},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"The cloud profile should be located at ``/profile.json`` on the root of the"},{"line_number":303,"context_line":"URL that would be most reasonably associated logically by users with the cloud."},{"line_number":304,"context_line":"For public clouds this is likely associated with the primary DNS name for the"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5ff73747_752831e1","line":301,"updated":"2017-04-26 19:57:05.000000000","message":"duplicated from this line down?","commit_id":"8dfb61ee6252d9365409b5f7c54a19b7b5367e41"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"8e361b3025a21ac059361fc6b31b583884856cde","unresolved":false,"context_lines":[{"line_number":298,"context_line":"fundamentals of the deployment change, there is no requirement it be served"},{"line_number":299,"context_line":"from the same machines that serve the cloud- only that it is put in location"},{"line_number":300,"context_line":"that can become well known and communicated to Users."},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"The cloud profile should be located at ``/profile.json`` on the root of the"},{"line_number":303,"context_line":"URL that would be most reasonably associated logically by users with the cloud."},{"line_number":304,"context_line":"For public clouds this is likely associated with the primary DNS name for the"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5ff73747_75aa5a71","line":301,"in_reply_to":"5ff73747_752831e1","updated":"2017-04-27 12:35:34.000000000","message":"I just really liked this section I guess!","commit_id":"8dfb61ee6252d9365409b5f7c54a19b7b5367e41"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"85cf09f0d05ae37b3d8b2df029dd36a40456bcc1","unresolved":false,"context_lines":[{"line_number":65,"context_line":"Clouds may not add additional information to the cloud profile that is not"},{"line_number":66,"context_line":"in this spec. Updates to the cloud profile schema version are not tied to"},{"line_number":67,"context_line":"OpenStack releases. A deployer can deploy this cloud profile to a web server"},{"line_number":68,"context_line":"associated with a bexar OpenStack. The entire point of this document is to"},{"line_number":69,"context_line":"help users understand deployer choices. If a choice needs to be communicated"},{"line_number":70,"context_line":"to a user, it belongs in this specification."},{"line_number":71,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"5ff73747_b6caf09d","line":68,"range":{"start_line":68,"start_character":18,"end_line":68,"end_character":23},"updated":"2017-04-28 21:16:40.000000000","message":"First, this should be capitalized. Second, many people may not know the full naming history of OpenStack releases, so it might be better to say something like \"a release from way back in 2010\".","commit_id":"8bddee736ec2fcc8a041e1e7e7be058e77c47c6f"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"85cf09f0d05ae37b3d8b2df029dd36a40456bcc1","unresolved":false,"context_lines":[{"line_number":80,"context_line":"    # Version of the schema for this profile document, not of the document"},{"line_number":81,"context_line":"    # itself. This is a version of the form XXX.YYY. Adding new fields, or"},{"line_number":82,"context_line":"    # new possible values to an enum should increase YYY. Fields in the"},{"line_number":83,"context_line":"    # schema and values in enums should never be removed, thus it is expected"},{"line_number":84,"context_line":"    # that XXX will never increase."},{"line_number":85,"context_line":"    # Required."},{"line_number":86,"context_line":"    schema_version: 2.0"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5ff73747_561f2c07","line":83,"range":{"start_line":83,"start_character":33,"end_line":83,"end_character":56},"updated":"2017-04-28 21:16:40.000000000","message":"If a deployment changes their offering to reduce options, wouldn\u0027t they have to remove a value from an enum? E.g., if they offered an auth plugin at first, but removed that option later. Or if they shut down a particular region, wouldn\u0027t that also require a change in XXX?","commit_id":"8bddee736ec2fcc8a041e1e7e7be058e77c47c6f"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"85cf09f0d05ae37b3d8b2df029dd36a40456bcc1","unresolved":false,"context_lines":[{"line_number":163,"context_line":"      # Optional. Defaults to null."},{"line_number":164,"context_line":"      private_v4_network_pattern: \u0027*LAN*\u0027"},{"line_number":165,"context_line":"    image:"},{"line_number":166,"context_line":"      # list of formats in which an image can be for upload."},{"line_number":167,"context_line":"      # Optional. Defaults to qcow2"},{"line_number":168,"context_line":"      formats:"},{"line_number":169,"context_line":"      - qcow2"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5ff73747_96ac949f","line":166,"range":{"start_line":166,"start_character":24,"end_line":166,"end_character":59},"updated":"2017-04-28 21:16:40.000000000","message":"supported for uploading","commit_id":"8bddee736ec2fcc8a041e1e7e7be058e77c47c6f"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"85cf09f0d05ae37b3d8b2df029dd36a40456bcc1","unresolved":false,"context_lines":[{"line_number":174,"context_line":"      # Boolean - is image upload enabled by default."},{"line_number":175,"context_line":"      # Optional. Defaults to True."},{"line_number":176,"context_line":"      upload_enabled: true"},{"line_number":177,"context_line":"      # If upload_enableed is False, but image upload can be enabled for some"},{"line_number":178,"context_line":"      # users on a request-by-request basis, a link should be provided to docs"},{"line_number":179,"context_line":"      # explaining how to request image upload."},{"line_number":180,"context_line":"      # Optional. Defaults to null"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5ff73747_16988472","line":177,"range":{"start_line":177,"start_character":11,"end_line":177,"end_character":26},"updated":"2017-04-28 21:16:40.000000000","message":"s/bleed/bled","commit_id":"8bddee736ec2fcc8a041e1e7e7be058e77c47c6f"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"85cf09f0d05ae37b3d8b2df029dd36a40456bcc1","unresolved":false,"context_lines":[{"line_number":205,"context_line":"    regions:"},{"line_number":206,"context_line":"    - name: Dallas"},{"line_number":207,"context_line":"      # Whether the region is enabled for everyone, must be requested or is"},{"line_number":208,"context_line":"      # disabled. Values are true, false provisional. If the value is"},{"line_number":209,"context_line":"      # provisional, provisional_url must be provided. Defaults to true"},{"line_number":210,"context_line":"      enabled: true"},{"line_number":211,"context_line":"      # URL describing how to request this region be enabled. Defaults to null"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5ff73747_9685b409","line":208,"range":{"start_line":208,"start_character":35,"end_line":208,"end_character":40},"updated":"2017-04-28 21:16:40.000000000","message":"add a comma after this word","commit_id":"8bddee736ec2fcc8a041e1e7e7be058e77c47c6f"}],"guidelines/example-cloud-profile.json":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"eb89e3046cd412bb5146f8e4bc18797ce4a67f1a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"  \"profile\": {"},{"line_number":3,"context_line":"    \"schema_version\": 1.0,"},{"line_number":4,"context_line":"    \"name\": \"complex.example.com\","},{"line_number":5,"context_line":"    \"auth\": {"},{"line_number":6,"context_line":"      \"url\": \"https://complex.example.com/auth\","}],"source_content_type":"application/json","patch_set":9,"id":"3f1d235d_dc30a80a","line":3,"range":{"start_line":3,"start_character":5,"end_line":3,"end_character":19},"updated":"2017-06-29 20:46:33.000000000","message":"Is this spelled \"schema-version\" (hyphen)?","commit_id":"ea1d271a387c9d83c2d4531ad61dfa7b6da8a238"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"eb89e3046cd412bb5146f8e4bc18797ce4a67f1a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"  \"profile\": {"},{"line_number":3,"context_line":"    \"schema_version\": 1.0,"},{"line_number":4,"context_line":"    \"name\": \"complex.example.com\","},{"line_number":5,"context_line":"    \"auth\": {"},{"line_number":6,"context_line":"      \"url\": \"https://complex.example.com/auth\","}],"source_content_type":"application/json","patch_set":9,"id":"3f1d235d_dc4b0885","line":3,"range":{"start_line":3,"start_character":22,"end_line":3,"end_character":25},"updated":"2017-06-29 20:46:33.000000000","message":"Should this be quoted?  (According to the schema, it\u0027s a string.)","commit_id":"ea1d271a387c9d83c2d4531ad61dfa7b6da8a238"}]}
