)]}'
{"specs/pike/inventory-pluggable-backends.rst":[{"author":{"_account_id":18784,"name":"Michael Carden","email":"mike.carden@gmail.com","username":"mcarden"},"change_message_id":"60635e1170adbc834c85f716fe376b80903a1224","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Currently, the generated inventory is kept in one place - the"},{"line_number":13,"context_line":"/etc/openstack_deploy/openstack_inventory.json file on the deployment node."},{"line_number":14,"context_line":"While this has worked, it is not very robust. In order to accomodate for more"},{"line_number":15,"context_line":"deployer flexibility, the inventory system should be reworked to use a"},{"line_number":16,"context_line":"pluggable system for storing necessary info. A filesystem plugin would provide"},{"line_number":17,"context_line":"backwards compatibility, and a Craton plugin will also be developed."}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a6eadb0_78a8eb8d","line":14,"range":{"start_line":14,"start_character":58,"end_line":14,"end_character":68},"updated":"2016-12-15 03:26:53.000000000","message":"accommodate","commit_id":"afa57804023feaf74321928f56780fd806637b52"},{"author":{"_account_id":18784,"name":"Michael Carden","email":"mike.carden@gmail.com","username":"mcarden"},"change_message_id":"60635e1170adbc834c85f716fe376b80903a1224","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Currently, the generated inventory is kept in one place - the"},{"line_number":13,"context_line":"/etc/openstack_deploy/openstack_inventory.json file on the deployment node."},{"line_number":14,"context_line":"While this has worked, it is not very robust. In order to accomodate for more"},{"line_number":15,"context_line":"deployer flexibility, the inventory system should be reworked to use a"},{"line_number":16,"context_line":"pluggable system for storing necessary info. A filesystem plugin would provide"},{"line_number":17,"context_line":"backwards compatibility, and a Craton plugin will also be developed."}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a6eadb0_d8973f46","line":14,"range":{"start_line":14,"start_character":69,"end_line":14,"end_character":72},"updated":"2016-12-15 03:26:53.000000000","message":"don\u0027t need the \u0027for\u0027","commit_id":"afa57804023feaf74321928f56780fd806637b52"},{"author":{"_account_id":18784,"name":"Michael Carden","email":"mike.carden@gmail.com","username":"mcarden"},"change_message_id":"60635e1170adbc834c85f716fe376b80903a1224","unresolved":false,"context_lines":[{"line_number":16,"context_line":"pluggable system for storing necessary info. A filesystem plugin would provide"},{"line_number":17,"context_line":"backwards compatibility, and a Craton plugin will also be developed."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"* The filename in the git repository should match the launchpad URL, for"},{"line_number":20,"context_line":"  example a URL of: https://blueprints.launchpad.net/openstack-ansible/+spec/awesome-thing"},{"line_number":21,"context_line":"  should be named awesome-thing.rst"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Problem description"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a6eadb0_988067f9","line":21,"range":{"start_line":19,"start_character":0,"end_line":21,"end_character":35},"updated":"2016-12-15 03:26:53.000000000","message":"This looks like an instruction you\u0027ve carried out already. :)","commit_id":"afa57804023feaf74321928f56780fd806637b52"},{"author":{"_account_id":18784,"name":"Michael Carden","email":"mike.carden@gmail.com","username":"mcarden"},"change_message_id":"60635e1170adbc834c85f716fe376b80903a1224","unresolved":false,"context_lines":[{"line_number":25,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"Since OpenStack-Ansible\u0027s creation in Icehouse, the source of truth for"},{"line_number":28,"context_line":"inventory a completed inventory has been the"},{"line_number":29,"context_line":"``/etc/openstack_deploy/openstack_inventory.json`` file. While this has"},{"line_number":30,"context_line":"worked, it has a few drawbacks:"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a6eadb0_18753731","line":28,"range":{"start_line":28,"start_character":0,"end_line":28,"end_character":9},"updated":"2016-12-15 03:26:53.000000000","message":"repeated word","commit_id":"afa57804023feaf74321928f56780fd806637b52"},{"author":{"_account_id":18784,"name":"Michael Carden","email":"mike.carden@gmail.com","username":"mcarden"},"change_message_id":"60635e1170adbc834c85f716fe376b80903a1224","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"Some new configuration will likely need to be presented to the user, so that"},{"line_number":60,"context_line":"the appropriate plugins for storage can be identified. This configuration is"},{"line_number":61,"context_line":"not well-suited to the ``etc/openstack_deploy/openstack_user_config_file``,"},{"line_number":62,"context_line":"since part of the script\u0027s job entails accessing that file."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"Instead, the ``/etc/ansible/osa.ini`` file is proposed, to match the"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a6eadb0_58b88fc8","line":61,"range":{"start_line":61,"start_character":8,"end_line":61,"end_character":9},"updated":"2016-12-15 03:26:53.000000000","message":"Don\u0027t need the hyphen","commit_id":"afa57804023feaf74321928f56780fd806637b52"},{"author":{"_account_id":538,"name":"Major Hayden","email":"major@mhtx.net","username":"rackerhacker"},"change_message_id":"333c8f67741531d2818ba6ed7b77dfea1d0cc7bf","unresolved":false,"context_lines":[{"line_number":10,"context_line":"  * https://blueprints.launchpad.net/openstack-ansible/+spec/inventory-pluggable-backends"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Currently, the generated inventory is kept in one place - the"},{"line_number":13,"context_line":"/etc/openstack_deploy/openstack_inventory.json file on the deployment node."},{"line_number":14,"context_line":"While this has worked, it is not very robust. In order to accommodate more"},{"line_number":15,"context_line":"deployer flexibility, the inventory system should be reworked to use a"},{"line_number":16,"context_line":"pluggable system for storing necessary info. A filesystem plugin would provide"}],"source_content_type":"text/x-rst","patch_set":3,"id":"1a6eadb0_ec31745b","line":13,"updated":"2016-12-15 21:02:17.000000000","message":"Nit: surround the filename in backticks to make it monospaced","commit_id":"edc34eff96c0731d4e10eb4e7413b13812c8a42c"},{"author":{"_account_id":538,"name":"Major Hayden","email":"major@mhtx.net","username":"rackerhacker"},"change_message_id":"333c8f67741531d2818ba6ed7b77dfea1d0cc7bf","unresolved":false,"context_lines":[{"line_number":128,"context_line":"Security impact"},{"line_number":129,"context_line":"---------------"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"This change introduces communication to outside systems - there is inherit"},{"line_number":132,"context_line":"risk in doing so. These systems are assumed to be using secure channels and"},{"line_number":133,"context_line":"trusted by the deployers."},{"line_number":134,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"1a6eadb0_0c8150c3","line":131,"updated":"2016-12-15 21:02:17.000000000","message":"s/inherit/inherent/","commit_id":"edc34eff96c0731d4e10eb4e7413b13812c8a42c"},{"author":{"_account_id":538,"name":"Major Hayden","email":"major@mhtx.net","username":"rackerhacker"},"change_message_id":"333c8f67741531d2818ba6ed7b77dfea1d0cc7bf","unresolved":false,"context_lines":[{"line_number":130,"context_line":""},{"line_number":131,"context_line":"This change introduces communication to outside systems - there is inherit"},{"line_number":132,"context_line":"risk in doing so. These systems are assumed to be using secure channels and"},{"line_number":133,"context_line":"trusted by the deployers."},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"Secrets could theoretically be stored in these backends, though the"},{"line_number":136,"context_line":"`openstack-ansible.sh` wrapper script currently references the"}],"source_content_type":"text/x-rst","patch_set":3,"id":"1a6eadb0_ccc83825","line":133,"updated":"2016-12-15 21:02:17.000000000","message":"Since secrets are out of scope for this change, this section seems okay to me. We can work on those later with something thoughtful and purpose-built.","commit_id":"edc34eff96c0731d4e10eb4e7413b13812c8a42c"},{"author":{"_account_id":538,"name":"Major Hayden","email":"major@mhtx.net","username":"rackerhacker"},"change_message_id":"333c8f67741531d2818ba6ed7b77dfea1d0cc7bf","unresolved":false,"context_lines":[{"line_number":133,"context_line":"trusted by the deployers."},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"Secrets could theoretically be stored in these backends, though the"},{"line_number":136,"context_line":"`openstack-ansible.sh` wrapper script currently references the"},{"line_number":137,"context_line":"`openstack_user_secrets.yml` file instead of placing those in the inventory."},{"line_number":138,"context_line":""},{"line_number":139,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"1a6eadb0_4c28a8e2","line":136,"updated":"2016-12-15 21:02:17.000000000","message":"Nit: need double backticks for monospace","commit_id":"edc34eff96c0731d4e10eb4e7413b13812c8a42c"},{"author":{"_account_id":538,"name":"Major Hayden","email":"major@mhtx.net","username":"rackerhacker"},"change_message_id":"333c8f67741531d2818ba6ed7b77dfea1d0cc7bf","unresolved":false,"context_lines":[{"line_number":134,"context_line":""},{"line_number":135,"context_line":"Secrets could theoretically be stored in these backends, though the"},{"line_number":136,"context_line":"`openstack-ansible.sh` wrapper script currently references the"},{"line_number":137,"context_line":"`openstack_user_secrets.yml` file instead of placing those in the inventory."},{"line_number":138,"context_line":""},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"Performance impact"}],"source_content_type":"text/x-rst","patch_set":3,"id":"1a6eadb0_6c256407","line":137,"updated":"2016-12-15 21:02:17.000000000","message":"Not: need double backticks for monospace","commit_id":"edc34eff96c0731d4e10eb4e7413b13812c8a42c"},{"author":{"_account_id":538,"name":"Major Hayden","email":"major@mhtx.net","username":"rackerhacker"},"change_message_id":"333c8f67741531d2818ba6ed7b77dfea1d0cc7bf","unresolved":false,"context_lines":[{"line_number":166,"context_line":"relevant data from the file into their new system, which may or may not be"},{"line_number":167,"context_line":"managed externally to an OpenStack-Ansible deployment."},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"Any helper scripts that relied on the `openstack_inventory.json` file will"},{"line_number":170,"context_line":"need to be modified."},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"The `inventory-manage.py` script currently only provides a management"}],"source_content_type":"text/x-rst","patch_set":3,"id":"1a6eadb0_cc61183b","line":169,"updated":"2016-12-15 21:02:17.000000000","message":"Double backticks needed","commit_id":"edc34eff96c0731d4e10eb4e7413b13812c8a42c"},{"author":{"_account_id":538,"name":"Major Hayden","email":"major@mhtx.net","username":"rackerhacker"},"change_message_id":"333c8f67741531d2818ba6ed7b77dfea1d0cc7bf","unresolved":false,"context_lines":[{"line_number":169,"context_line":"Any helper scripts that relied on the `openstack_inventory.json` file will"},{"line_number":170,"context_line":"need to be modified."},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"The `inventory-manage.py` script currently only provides a management"},{"line_number":173,"context_line":"intereface for the JSON file, and is not intended to be a universal"},{"line_number":174,"context_line":"inventory management tool. Different systems will have their own clients"},{"line_number":175,"context_line":"or frontends for doing such management and querying."}],"source_content_type":"text/x-rst","patch_set":3,"id":"1a6eadb0_0c587089","line":172,"updated":"2016-12-15 21:02:17.000000000","message":"Double backticks needed","commit_id":"edc34eff96c0731d4e10eb4e7413b13812c8a42c"},{"author":{"_account_id":6816,"name":"Jesse Pretorius","email":"jesse@odyssey4.me","username":"jesse-pretorius"},"change_message_id":"778979bc6c8bac7bb1789195940109f3e09f44cc","unresolved":false,"context_lines":[{"line_number":25,"context_line":"``/etc/openstack_deploy/openstack_inventory.json`` file. While this has"},{"line_number":26,"context_line":"worked, it has a few drawbacks:"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"* As a single file, it may be deleted by accident."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"* There are only UNIX file permissions managing access to the file."},{"line_number":31,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"1a6eadb0_f5f11996","line":28,"updated":"2016-12-16 12:57:35.000000000","message":"It\u0027s also easily corrupted and cannot be re-engineered.","commit_id":"8d729c448473138aa0f7fc751a218de7d4941007"},{"author":{"_account_id":12807,"name":"Steve Lewis (stevelle)","email":"stevelle@gmail.com","username":"stevelle"},"change_message_id":"8cc45b3ada5114305be1185d0304b722b1d38ac9","unresolved":false,"context_lines":[{"line_number":49,"context_line":"work is already happening, and doesn\u0027t rely on a particular plugin system in"},{"line_number":50,"context_line":"order to be completed."},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"Once that is done, a plugin system based on PluginBase will be used to provide"},{"line_number":53,"context_line":"a generic interface for storage actions to the rest of the codebase. This code"},{"line_number":54,"context_line":"will connect to the plugin library (likely PluginBase), and return a compatible"},{"line_number":55,"context_line":"instance of a storage system."}],"source_content_type":"text/x-rst","patch_set":4,"id":"1a6eadb0_d5ce81b3","line":52,"range":{"start_line":52,"start_character":35,"end_line":52,"end_character":55},"updated":"2016-12-19 20:25:42.000000000","message":"cut this","commit_id":"8d729c448473138aa0f7fc751a218de7d4941007"},{"author":{"_account_id":12807,"name":"Steve Lewis (stevelle)","email":"stevelle@gmail.com","username":"stevelle"},"change_message_id":"8cc45b3ada5114305be1185d0304b722b1d38ac9","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":"Once that is done, a plugin system based on PluginBase will be used to provide"},{"line_number":53,"context_line":"a generic interface for storage actions to the rest of the codebase. This code"},{"line_number":54,"context_line":"will connect to the plugin library (likely PluginBase), and return a compatible"},{"line_number":55,"context_line":"instance of a storage system."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"Some new configuration will likely need to be presented to the user, so that"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1a6eadb0_35bed5ff","line":54,"range":{"start_line":54,"start_character":43,"end_line":54,"end_character":53},"updated":"2016-12-19 20:25:42.000000000","message":"add reference citation","commit_id":"8d729c448473138aa0f7fc751a218de7d4941007"},{"author":{"_account_id":12892,"name":"Nolan Brubaker","email":"nolan.brubaker@rackspace.com","username":"nrb"},"change_message_id":"fbf9ced252317d04e617d50e7a8c7f9037677ade","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":"Once that is done, a plugin system based on PluginBase will be used to provide"},{"line_number":53,"context_line":"a generic interface for storage actions to the rest of the codebase. This code"},{"line_number":54,"context_line":"will connect to the plugin library (likely PluginBase), and return a compatible"},{"line_number":55,"context_line":"instance of a storage system."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"Some new configuration will likely need to be presented to the user, so that"}],"source_content_type":"text/x-rst","patch_set":4,"id":"da4df55a_43440b1a","line":54,"range":{"start_line":54,"start_character":43,"end_line":54,"end_character":53},"in_reply_to":"1a6eadb0_35bed5ff","updated":"2016-12-28 15:46:37.000000000","message":"There\u0027s one on L85 of this changeset. I\u0027ll remove this parenthetical and leave actual discussion of plugin systems for that section.","commit_id":"8d729c448473138aa0f7fc751a218de7d4941007"},{"author":{"_account_id":6816,"name":"Jesse Pretorius","email":"jesse@odyssey4.me","username":"jesse-pretorius"},"change_message_id":"778979bc6c8bac7bb1789195940109f3e09f44cc","unresolved":false,"context_lines":[{"line_number":70,"context_line":"Alternatives"},{"line_number":71,"context_line":"------------"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"What, if any, are the alternatives to the changes you are proposing? What other"},{"line_number":74,"context_line":"ways could we do this thing? Why aren\u0027t we using those? This doesn\u0027t have to be"},{"line_number":75,"context_line":"a full literature review, but it should demonstrate that thought has been put"},{"line_number":76,"context_line":"into why the proposed solution is an appropriate one."},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"Nothing could be done and the inventory could continue to rely on the JSON"},{"line_number":79,"context_line":"backend; it\u0027s worked reliably until now. However, its inherit problems would"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1a6eadb0_1544d5b4","line":76,"range":{"start_line":73,"start_character":0,"end_line":76,"end_character":53},"updated":"2016-12-16 12:57:35.000000000","message":"Remove this.","commit_id":"8d729c448473138aa0f7fc751a218de7d4941007"},{"author":{"_account_id":6816,"name":"Jesse Pretorius","email":"jesse@odyssey4.me","username":"jesse-pretorius"},"change_message_id":"778979bc6c8bac7bb1789195940109f3e09f44cc","unresolved":false,"context_lines":[{"line_number":76,"context_line":"into why the proposed solution is an appropriate one."},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"Nothing could be done and the inventory could continue to rely on the JSON"},{"line_number":79,"context_line":"backend; it\u0027s worked reliably until now. However, its inherit problems would"},{"line_number":80,"context_line":"remain."},{"line_number":81,"context_line":""},{"line_number":82,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"1a6eadb0_9500e567","line":79,"range":{"start_line":79,"start_character":54,"end_line":79,"end_character":61},"updated":"2016-12-16 12:57:35.000000000","message":"inherent","commit_id":"8d729c448473138aa0f7fc751a218de7d4941007"},{"author":{"_account_id":6816,"name":"Jesse Pretorius","email":"jesse@odyssey4.me","username":"jesse-pretorius"},"change_message_id":"778979bc6c8bac7bb1789195940109f3e09f44cc","unresolved":false,"context_lines":[{"line_number":77,"context_line":""},{"line_number":78,"context_line":"Nothing could be done and the inventory could continue to rely on the JSON"},{"line_number":79,"context_line":"backend; it\u0027s worked reliably until now. However, its inherit problems would"},{"line_number":80,"context_line":"remain."},{"line_number":81,"context_line":""},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"Plugin Implementation Alternatives"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1a6eadb0_b570810c","line":80,"updated":"2016-12-16 12:57:35.000000000","message":"It may be worth noting that this would leave it in the hands of a deployer to craft their own replacement dynamic inventory. Implementing this spec reduces the barrier to entry for that to be done without requiring a deployer to fork the integrated repo.","commit_id":"8d729c448473138aa0f7fc751a218de7d4941007"},{"author":{"_account_id":12807,"name":"Steve Lewis (stevelle)","email":"stevelle@gmail.com","username":"stevelle"},"change_message_id":"8cc45b3ada5114305be1185d0304b722b1d38ac9","unresolved":false,"context_lines":[{"line_number":78,"context_line":"Nothing could be done and the inventory could continue to rely on the JSON"},{"line_number":79,"context_line":"backend; it\u0027s worked reliably until now. However, its inherit problems would"},{"line_number":80,"context_line":"remain."},{"line_number":81,"context_line":""},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"Plugin Implementation Alternatives"},{"line_number":84,"context_line":"**********************************"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1a6eadb0_35f2559b","line":81,"updated":"2016-12-19 20:25:42.000000000","message":"An alternative would be to rely on ENV vars instead of an osa.ini file for configuration of plugin behaviors and the plugin\u0027s associated configurations. Review of the reasoning to be done.","commit_id":"8d729c448473138aa0f7fc751a218de7d4941007"},{"author":{"_account_id":6816,"name":"Jesse Pretorius","email":"jesse@odyssey4.me","username":"jesse-pretorius"},"change_message_id":"778979bc6c8bac7bb1789195940109f3e09f44cc","unresolved":false,"context_lines":[{"line_number":84,"context_line":"**********************************"},{"line_number":85,"context_line":"Existing plugin implementations include `PluginBase`_ and `Stevedore`_."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"Stevedore is an OpenStack project, and using it would align the project more"},{"line_number":88,"context_line":"closely with the community. However, Stevedore requires registering plugins"},{"line_number":89,"context_line":"via `setup.py` `entry_points`. OpenStack-Ansible\u0027s inventory code cannot"},{"line_number":90,"context_line":"currently be installed via `setup.py` despite one being in the project. A"},{"line_number":91,"context_line":"separate `setup.py` file for the `lib` directory would be necessary. The"},{"line_number":92,"context_line":"external requirements for Stevedore are pbr and six, so the footprint is"},{"line_number":93,"context_line":"fairly small."},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"PluginBase is not directly part of the OpenStack ecosystem, but is simple,"},{"line_number":96,"context_line":"standalone plugin system. It has no external dependencies, and can be used via"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1a6eadb0_b505e146","line":93,"range":{"start_line":87,"start_character":0,"end_line":93,"end_character":13},"updated":"2016-12-16 12:57:35.000000000","message":"It may be interesting to explore our dynamic inventory being installable via pip and held in its own repository. Is there a reason why we think this is a bad idea? It could be useful to treat it as a library rather than as a series-specific item.","commit_id":"8d729c448473138aa0f7fc751a218de7d4941007"},{"author":{"_account_id":12892,"name":"Nolan Brubaker","email":"nolan.brubaker@rackspace.com","username":"nrb"},"change_message_id":"fbf9ced252317d04e617d50e7a8c7f9037677ade","unresolved":false,"context_lines":[{"line_number":84,"context_line":"**********************************"},{"line_number":85,"context_line":"Existing plugin implementations include `PluginBase`_ and `Stevedore`_."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"Stevedore is an OpenStack project, and using it would align the project more"},{"line_number":88,"context_line":"closely with the community. However, Stevedore requires registering plugins"},{"line_number":89,"context_line":"via `setup.py` `entry_points`. OpenStack-Ansible\u0027s inventory code cannot"},{"line_number":90,"context_line":"currently be installed via `setup.py` despite one being in the project. A"},{"line_number":91,"context_line":"separate `setup.py` file for the `lib` directory would be necessary. The"},{"line_number":92,"context_line":"external requirements for Stevedore are pbr and six, so the footprint is"},{"line_number":93,"context_line":"fairly small."},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"PluginBase is not directly part of the OpenStack ecosystem, but is simple,"},{"line_number":96,"context_line":"standalone plugin system. It has no external dependencies, and can be used via"}],"source_content_type":"text/x-rst","patch_set":4,"id":"da4df55a_43a88bdb","line":93,"range":{"start_line":87,"start_character":0,"end_line":93,"end_character":13},"in_reply_to":"1a6eadb0_b505e146","updated":"2016-12-28 15:46:37.000000000","message":"I personally find adding more repositories to be overhead, and I\u0027m not immediately seeing the benefit of versioning inventory in a series-less concept. In particular, inventory changes like API/data format should probably be changed in major revisions in order to avoid minor releases introducing big changes. That being said, the roles face similar issues and those have been mostly mitigated.\n\nI also think the inventory system is integral to openstack-ansible, and thus doesn\u0027t make sense to move. It currently relies on hardcoded paths in the tree, which could be mitigated, but it seems like extra work to little benefit.\n\nOne benefit I can see is that externally implemented plugins could then rely on it using the pip mechanisms. That said, the openstack-ansible repo is checked out via git regardless.\n\nI\u0027m curious what others think here. Moving to a separate repo/package is certainly doable, and may be necessary. I\u0027m willing to admit that a bunch of my objections boil down to a matter of taste and not knowing what other use cases might be.","commit_id":"8d729c448473138aa0f7fc751a218de7d4941007"},{"author":{"_account_id":18784,"name":"Michael Carden","email":"mike.carden@gmail.com","username":"mcarden"},"change_message_id":"d33bdcef468df9ef7ee1f5bf208d30a8898e0106","unresolved":false,"context_lines":[{"line_number":106,"context_line":"--------------------"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"Ideally, playbook impact should be minimal or non-existant. The inventory"},{"line_number":109,"context_line":"generated should looke the same from a playbook perspective, regardless of"},{"line_number":110,"context_line":"backend plugins used."},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"Upgrade impact"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1a6eadb0_155e6776","line":109,"range":{"start_line":109,"start_character":17,"end_line":109,"end_character":22},"updated":"2016-12-18 22:51:58.000000000","message":"look","commit_id":"8d729c448473138aa0f7fc751a218de7d4941007"},{"author":{"_account_id":6816,"name":"Jesse Pretorius","email":"jesse@odyssey4.me","username":"jesse-pretorius"},"change_message_id":"778979bc6c8bac7bb1789195940109f3e09f44cc","unresolved":false,"context_lines":[{"line_number":134,"context_line":""},{"line_number":135,"context_line":"Secrets could theoretically be stored in these backends, though the"},{"line_number":136,"context_line":"``openstack-ansible.sh`` wrapper script currently references the"},{"line_number":137,"context_line":"``openstack_user_secrets.yml`` file instead of placing those in the inventory."},{"line_number":138,"context_line":""},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"Performance impact"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1a6eadb0_900b9323","line":137,"range":{"start_line":137,"start_character":2,"end_line":137,"end_character":28},"updated":"2016-12-16 12:57:35.000000000","message":"s/openstack_user_secrets.yml/user_secrets.yml/\n\nNote that this is only used if it\u0027s present. If a deployer has implemented some sort of other way of injecting secrets, then that will work.\n\nIdeally the pluggable back-end should be capable of implementing an alternative back-end for secrets too. The secrets and config back-ends should be allowed to be different.","commit_id":"8d729c448473138aa0f7fc751a218de7d4941007"},{"author":{"_account_id":12892,"name":"Nolan Brubaker","email":"nolan.brubaker@rackspace.com","username":"nrb"},"change_message_id":"fbf9ced252317d04e617d50e7a8c7f9037677ade","unresolved":false,"context_lines":[{"line_number":134,"context_line":""},{"line_number":135,"context_line":"Secrets could theoretically be stored in these backends, though the"},{"line_number":136,"context_line":"``openstack-ansible.sh`` wrapper script currently references the"},{"line_number":137,"context_line":"``openstack_user_secrets.yml`` file instead of placing those in the inventory."},{"line_number":138,"context_line":""},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"Performance impact"}],"source_content_type":"text/x-rst","patch_set":4,"id":"da4df55a_2810c458","line":137,"range":{"start_line":137,"start_character":2,"end_line":137,"end_character":28},"in_reply_to":"1a6eadb0_900b9323","updated":"2016-12-28 15:46:37.000000000","message":"Agreed - and that was the intent of \"Secrets could theoretically be stored in these backends\". I should probably spell that out, though I haven\u0027t looked at explicitly communicating with ansible-vault or other accepted solutions. It\u0027s my understanding Ansible accesses vault separately from the inventory, but that could be wrong.","commit_id":"8d729c448473138aa0f7fc751a218de7d4941007"},{"author":{"_account_id":12807,"name":"Steve Lewis (stevelle)","email":"stevelle@gmail.com","username":"stevelle"},"change_message_id":"8cc45b3ada5114305be1185d0304b722b1d38ac9","unresolved":false,"context_lines":[{"line_number":167,"context_line":"managed externally to an OpenStack-Ansible deployment."},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"Any helper scripts that relied on the ``openstack_inventory.json`` file will"},{"line_number":170,"context_line":"need to be modified."},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"The ``inventory-manage.py`` script currently only provides a management"},{"line_number":173,"context_line":"intereface for the JSON file, and is not intended to be a universal"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1a6eadb0_e853a46a","line":170,"range":{"start_line":170,"start_character":11,"end_line":170,"end_character":19},"updated":"2016-12-19 20:25:42.000000000","message":"perhaps:\nmodified to make use of the plugin APIs and potential new support functions to facilitate that.","commit_id":"8d729c448473138aa0f7fc751a218de7d4941007"},{"author":{"_account_id":6816,"name":"Jesse Pretorius","email":"jesse@odyssey4.me","username":"jesse-pretorius"},"change_message_id":"778979bc6c8bac7bb1789195940109f3e09f44cc","unresolved":false,"context_lines":[{"line_number":170,"context_line":"need to be modified."},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"The ``inventory-manage.py`` script currently only provides a management"},{"line_number":173,"context_line":"intereface for the JSON file, and is not intended to be a universal"},{"line_number":174,"context_line":"inventory management tool. Different systems will have their own clients"},{"line_number":175,"context_line":"or frontends for doing such management and querying."},{"line_number":176,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"1a6eadb0_30771fa1","line":173,"range":{"start_line":173,"start_character":0,"end_line":173,"end_character":10},"updated":"2016-12-16 12:57:35.000000000","message":"interface","commit_id":"8d729c448473138aa0f7fc751a218de7d4941007"},{"author":{"_account_id":6816,"name":"Jesse Pretorius","email":"jesse@odyssey4.me","username":"jesse-pretorius"},"change_message_id":"778979bc6c8bac7bb1789195940109f3e09f44cc","unresolved":false,"context_lines":[{"line_number":172,"context_line":"The ``inventory-manage.py`` script currently only provides a management"},{"line_number":173,"context_line":"intereface for the JSON file, and is not intended to be a universal"},{"line_number":174,"context_line":"inventory management tool. Different systems will have their own clients"},{"line_number":175,"context_line":"or frontends for doing such management and querying."},{"line_number":176,"context_line":""},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"Developer impact"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1a6eadb0_108b0369","line":175,"updated":"2016-12-16 12:57:35.000000000","message":"If the inventory-manage script is able to use the same pluggable back-end, then it may provide a nice consistent interface for a limited set of tasks.","commit_id":"8d729c448473138aa0f7fc751a218de7d4941007"},{"author":{"_account_id":12892,"name":"Nolan Brubaker","email":"nolan.brubaker@rackspace.com","username":"nrb"},"change_message_id":"fbf9ced252317d04e617d50e7a8c7f9037677ade","unresolved":false,"context_lines":[{"line_number":172,"context_line":"The ``inventory-manage.py`` script currently only provides a management"},{"line_number":173,"context_line":"intereface for the JSON file, and is not intended to be a universal"},{"line_number":174,"context_line":"inventory management tool. Different systems will have their own clients"},{"line_number":175,"context_line":"or frontends for doing such management and querying."},{"line_number":176,"context_line":""},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"Developer impact"}],"source_content_type":"text/x-rst","patch_set":4,"id":"da4df55a_23070719","line":175,"in_reply_to":"1a6eadb0_108b0369","updated":"2016-12-28 15:46:37.000000000","message":"Perhaps. Most Ansible inventory systems seem to leave all the management out of the logic that connects to Ansible in favor of their own front ends (think AWS, Nova with Horizon and its own client).\n\nA minimal common surface area might be nice, but I\u0027m personally a bit wary of going too far down that path for maintenance purposes.","commit_id":"8d729c448473138aa0f7fc751a218de7d4941007"},{"author":{"_account_id":6816,"name":"Jesse Pretorius","email":"jesse@odyssey4.me","username":"jesse-pretorius"},"change_message_id":"778979bc6c8bac7bb1789195940109f3e09f44cc","unresolved":false,"context_lines":[{"line_number":199,"context_line":"Assignee(s)"},{"line_number":200,"context_line":"-----------"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"Who is leading the writing of the code? Or is this a blueprint where you\u0027re"},{"line_number":203,"context_line":"throwing it out there to see who picks it up?"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"If more than one person is working on the implementation, please designate the"},{"line_number":206,"context_line":"primary author and contact."},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"Primary assignee:"},{"line_number":209,"context_line":"  nolan-brubaker (IRC: palendae)"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1a6eadb0_d0db4b7a","line":206,"range":{"start_line":202,"start_character":0,"end_line":206,"end_character":27},"updated":"2016-12-16 12:57:35.000000000","message":"Remove this.","commit_id":"8d729c448473138aa0f7fc751a218de7d4941007"},{"author":{"_account_id":6816,"name":"Jesse Pretorius","email":"jesse@odyssey4.me","username":"jesse-pretorius"},"change_message_id":"778979bc6c8bac7bb1789195940109f3e09f44cc","unresolved":false,"context_lines":[{"line_number":209,"context_line":"  nolan-brubaker (IRC: palendae)"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"Other contributors:"},{"line_number":212,"context_line":"  \u003claunchpad-id or None\u003e"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"Please add **IRC nicknames** where applicable."},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"Work items"},{"line_number":217,"context_line":"----------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1a6eadb0_7040b707","line":214,"range":{"start_line":212,"start_character":0,"end_line":214,"end_character":46},"updated":"2016-12-16 12:57:35.000000000","message":"Perhaps add stevelle here as he\u0027s worked with you on this already?","commit_id":"8d729c448473138aa0f7fc751a218de7d4941007"},{"author":{"_account_id":6816,"name":"Jesse Pretorius","email":"jesse@odyssey4.me","username":"jesse-pretorius"},"change_message_id":"778979bc6c8bac7bb1789195940109f3e09f44cc","unresolved":false,"context_lines":[{"line_number":216,"context_line":"Work items"},{"line_number":217,"context_line":"----------"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"Work items or tasks -- break the feature up into the things that need to be"},{"line_number":220,"context_line":"done to implement it. Those parts might end up being done by different people,"},{"line_number":221,"context_line":"but we\u0027re mostly trying to understand the timeline for implementation."},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"* Implement existing code as a separate module. This work has largely been"},{"line_number":224,"context_line":"  done, see code reviews `https://review.openstack.org/#/c/392056/`,"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1a6eadb0_3061dfa9","line":221,"range":{"start_line":219,"start_character":0,"end_line":221,"end_character":70},"updated":"2016-12-16 12:57:35.000000000","message":"Remove this.","commit_id":"8d729c448473138aa0f7fc751a218de7d4941007"},{"author":{"_account_id":18784,"name":"Michael Carden","email":"mike.carden@gmail.com","username":"mcarden"},"change_message_id":"d33bdcef468df9ef7ee1f5bf208d30a8898e0106","unresolved":false,"context_lines":[{"line_number":225,"context_line":"  `https://review.openstack.org/392417`, and `https://review.openstack.org/399303`."},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"* Implement plugin system. Whether this is Stevedore or PluginBase, the code"},{"line_number":228,"context_line":"  for interfacing with the system will need to be written. Also"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"* Implement the file system code as a plugin. This may be done in tandem with"},{"line_number":231,"context_line":"  the previous item in order to fully test it."}],"source_content_type":"text/x-rst","patch_set":4,"id":"1a6eadb0_95f8b74b","line":228,"range":{"start_line":228,"start_character":59,"end_line":228,"end_character":63},"updated":"2016-12-18 22:51:58.000000000","message":"Also.... (the suspense!)","commit_id":"8d729c448473138aa0f7fc751a218de7d4941007"},{"author":{"_account_id":17068,"name":"Jean-Philippe Evrard","email":"openstack@a.spamming.party","username":"evrardjp"},"change_message_id":"7e6c04316695d83816da6e32c7912df8962247ca","unresolved":false,"context_lines":[{"line_number":25,"context_line":"``/etc/openstack_deploy/openstack_inventory.json`` file. While this has"},{"line_number":26,"context_line":"worked, it has a few drawbacks:"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"* As a single file, it may be deleted by accident. If the configuration files"},{"line_number":29,"context_line":"  have changed, getting an exact copy back without the tar backup files is"},{"line_number":30,"context_line":"  impossible due to UUID suffixes."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"* There are only UNIX file permissions managing access to the file."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"* No accounting of changes, besides a simple tar backup, exists. This is"},{"line_number":35,"context_line":"  useful for documentation and auditing of a running cluster."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"This spec does not aim to define a fully robust inventory management"},{"line_number":38,"context_line":"system. Instead, the OpenStack-Ansible inventory system can be made more"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ba5201f7_5d961f4d","line":35,"range":{"start_line":28,"start_character":2,"end_line":35,"end_character":61},"updated":"2017-01-03 14:57:19.000000000","message":"I do not think that\u0027s the *DIRECT* problem to solve.\n\nThe problem is, for me, the lack of user friendliness of the edition of the inventory.\n\n1) We cannot easily re-create the inventory in case of disaster (if loss of backups/deploy node)\n2) We cannot edit the content easily (change IPs/groups)\n3) We cannot assign variables to nodes easily\n4) We cannot re-arrange nodes in a different manner (regions)\n5) The group names edition seems obscure for some ppl.","commit_id":"61b22090ca4aeaafddb727a4cfe235969cf189aa"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"92f638025a626bf94b2ad53479a46abe074caee3","unresolved":false,"context_lines":[{"line_number":32,"context_line":"* There are only UNIX file permissions managing access to the file."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"* No accounting of changes, besides a simple tar backup, exists. This is"},{"line_number":35,"context_line":"  useful for documentation and auditing of a running cluster."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"This spec does not aim to define a fully robust inventory management"},{"line_number":38,"context_line":"system. Instead, the OpenStack-Ansible inventory system can be made more"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ba5201f7_f2637d18","line":35,"updated":"2017-01-03 15:20:06.000000000","message":"JP, that is definitely a problem that requires solving. Being able to audit who makes changes to the inventory is important. That said, your problems are just as valid. This item, plus yours, should all be included.","commit_id":"61b22090ca4aeaafddb727a4cfe235969cf189aa"},{"author":{"_account_id":12892,"name":"Nolan Brubaker","email":"nolan.brubaker@rackspace.com","username":"nrb"},"change_message_id":"af20a1cedf8935c7c3de20a92e8a5a1b9a5334c2","unresolved":false,"context_lines":[{"line_number":32,"context_line":"* There are only UNIX file permissions managing access to the file."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"* No accounting of changes, besides a simple tar backup, exists. This is"},{"line_number":35,"context_line":"  useful for documentation and auditing of a running cluster."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"This spec does not aim to define a fully robust inventory management"},{"line_number":38,"context_line":"system. Instead, the OpenStack-Ansible inventory system can be made more"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ba5201f7_16a8b11f","line":35,"in_reply_to":"ba5201f7_0b57d2ce","updated":"2017-01-11 18:08:24.000000000","message":"Right - they\u0027re all problems, but this spec is specifically meant to target the storage concerns, not necessarily an entire rewrite. My intent with the first sentence was to scope this to that, but I\u0027ll expand for clarity.","commit_id":"61b22090ca4aeaafddb727a4cfe235969cf189aa"},{"author":{"_account_id":12892,"name":"Nolan Brubaker","email":"nolan.brubaker@rackspace.com","username":"nrb"},"change_message_id":"369880d0b46a5c6161be281d5a589322c5718f78","unresolved":false,"context_lines":[{"line_number":25,"context_line":"``/etc/openstack_deploy/openstack_inventory.json`` file. While this has"},{"line_number":26,"context_line":"worked, it has a few drawbacks:"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"* As a single file, it may be deleted by accident. If the configuration files"},{"line_number":29,"context_line":"  have changed, getting an exact copy back without the tar backup files is"},{"line_number":30,"context_line":"  impossible due to UUID suffixes."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"* There are only UNIX file permissions managing access to the file."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"* No accounting of changes, besides a simple tar backup, exists. This is"},{"line_number":35,"context_line":"  useful for documentation and auditing of a running cluster."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"This spec does not aim to define a fully robust inventory management"},{"line_number":38,"context_line":"system. Instead, the OpenStack-Ansible inventory system can be made more"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ba5201f7_92695128","line":35,"range":{"start_line":28,"start_character":2,"end_line":35,"end_character":61},"in_reply_to":"ba5201f7_5d961f4d","updated":"2017-01-03 15:15:16.000000000","message":"That\u0027s the problem *this spec* is trying to solve. I\u0027m not doing a complete overhaul of the inventory here. This is only for the storage mechanisms, not a complete rewrite.\n\nI don\u0027t disagree that these things are problems. I do, however, think we need to solve things one at a time, especially given that I\u0027m the only person working on this full time.","commit_id":"61b22090ca4aeaafddb727a4cfe235969cf189aa"},{"author":{"_account_id":17068,"name":"Jean-Philippe Evrard","email":"openstack@a.spamming.party","username":"evrardjp"},"change_message_id":"65d692a1cbee9ff76acb5e0957031d481090daab","unresolved":false,"context_lines":[{"line_number":32,"context_line":"* There are only UNIX file permissions managing access to the file."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"* No accounting of changes, besides a simple tar backup, exists. This is"},{"line_number":35,"context_line":"  useful for documentation and auditing of a running cluster."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"This spec does not aim to define a fully robust inventory management"},{"line_number":38,"context_line":"system. Instead, the OpenStack-Ansible inventory system can be made more"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ba5201f7_0b57d2ce","line":35,"in_reply_to":"ba5201f7_f2637d18","updated":"2017-01-04 08:47:31.000000000","message":"Well I guess all of these are problems, it\u0027s just a question of priorities.\n\nWhile I agree that all the topics above are problematic, I don\u0027t think they all deserve this priority INSIDE the openstack-ansible project.\n\nExample: Bringing a solution to the inventory accounting or permissions seems out of the scope of openstack-ansible, and more in the scope of an inventory system. \n\nIf this text above means providing a way for the deployers to use an external inventory system that has these features but requires some configuration, then the spec deserved more explanation/clarifications.","commit_id":"61b22090ca4aeaafddb727a4cfe235969cf189aa"},{"author":{"_account_id":17068,"name":"Jean-Philippe Evrard","email":"openstack@a.spamming.party","username":"evrardjp"},"change_message_id":"7e6c04316695d83816da6e32c7912df8962247ca","unresolved":false,"context_lines":[{"line_number":39,"context_line":"modular, especially in its storage, so that deployers can take advantage of"},{"line_number":40,"context_line":"other, dedicated systems."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"Doing so requires refactoring the dynamic inventory generation code so that"},{"line_number":43,"context_line":"storage concerns, such as writing the output and reading output from previous"},{"line_number":44,"context_line":"runs, are no longer directly tied to the generation of values."},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"Proposed change"},{"line_number":47,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ba5201f7_fdb993cc","line":44,"range":{"start_line":42,"start_character":0,"end_line":44,"end_character":62},"updated":"2017-01-03 14:57:19.000000000","message":"And that\u0027s the 6) for me.","commit_id":"61b22090ca4aeaafddb727a4cfe235969cf189aa"},{"author":{"_account_id":17068,"name":"Jean-Philippe Evrard","email":"openstack@a.spamming.party","username":"evrardjp"},"change_message_id":"7e6c04316695d83816da6e32c7912df8962247ca","unresolved":false,"context_lines":[{"line_number":62,"context_line":"Plugins should support the following public methods:"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"register"},{"line_number":66,"context_line":"  registers a plugin with the plugin system. Receives a dictionary"},{"line_number":67,"context_line":"  of all arguments specified for plugins, and should extract any information"},{"line_number":68,"context_line":"  it needs, such as file locations, connection strings, or URLs."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"load"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ba5201f7_6f3b2ad2","line":68,"range":{"start_line":65,"start_character":0,"end_line":68,"end_character":64},"updated":"2017-01-03 14:57:19.000000000","message":"How will this leverage ansible behavior? It seems unclear to me.\n\nI\u0027d rather avoid we ship complex code where we could drop files that could be used by ansible (example, python files that produces json files or INI files).","commit_id":"61b22090ca4aeaafddb727a4cfe235969cf189aa"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"92f638025a626bf94b2ad53479a46abe074caee3","unresolved":false,"context_lines":[{"line_number":65,"context_line":"register"},{"line_number":66,"context_line":"  registers a plugin with the plugin system. Receives a dictionary"},{"line_number":67,"context_line":"  of all arguments specified for plugins, and should extract any information"},{"line_number":68,"context_line":"  it needs, such as file locations, connection strings, or URLs."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"load"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ba5201f7_12672126","line":68,"updated":"2017-01-03 15:20:06.000000000","message":"JP, I think the goal is to design a system that\u0027s more flexible, usable, and auditable than the nonsense Ansible uses.","commit_id":"61b22090ca4aeaafddb727a4cfe235969cf189aa"},{"author":{"_account_id":17068,"name":"Jean-Philippe Evrard","email":"openstack@a.spamming.party","username":"evrardjp"},"change_message_id":"65d692a1cbee9ff76acb5e0957031d481090daab","unresolved":false,"context_lines":[{"line_number":65,"context_line":"register"},{"line_number":66,"context_line":"  registers a plugin with the plugin system. Receives a dictionary"},{"line_number":67,"context_line":"  of all arguments specified for plugins, and should extract any information"},{"line_number":68,"context_line":"  it needs, such as file locations, connection strings, or URLs."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"load"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ba5201f7_cb96aa4b","line":68,"in_reply_to":"ba5201f7_12672126","updated":"2017-01-04 08:47:31.000000000","message":"That\u0027s noble, but ansible basically simply consumes a .json output. \nAll of these features are features of a good inventory system.\n\nIMO openstack-ansible should work with any inventory system that the deployer decides to use, whether it\u0027s static INI files, our current dynamic inventory, an AWS dynamic inventory, a cobbler inventory, or Craton...","commit_id":"61b22090ca4aeaafddb727a4cfe235969cf189aa"},{"author":{"_account_id":12892,"name":"Nolan Brubaker","email":"nolan.brubaker@rackspace.com","username":"nrb"},"change_message_id":"369880d0b46a5c6161be281d5a589322c5718f78","unresolved":false,"context_lines":[{"line_number":62,"context_line":"Plugins should support the following public methods:"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"register"},{"line_number":66,"context_line":"  registers a plugin with the plugin system. Receives a dictionary"},{"line_number":67,"context_line":"  of all arguments specified for plugins, and should extract any information"},{"line_number":68,"context_line":"  it needs, such as file locations, connection strings, or URLs."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"load"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ba5201f7_d2ee79b3","line":68,"range":{"start_line":65,"start_character":0,"end_line":68,"end_character":64},"in_reply_to":"ba5201f7_6f3b2ad2","updated":"2017-01-03 15:15:16.000000000","message":"It doesn\u0027t. Please revisit our current, in-tree dynamic inventory files. They don\u0027t rely on Ansible code at all.","commit_id":"61b22090ca4aeaafddb727a4cfe235969cf189aa"},{"author":{"_account_id":12892,"name":"Nolan Brubaker","email":"nolan.brubaker@rackspace.com","username":"nrb"},"change_message_id":"af20a1cedf8935c7c3de20a92e8a5a1b9a5334c2","unresolved":false,"context_lines":[{"line_number":65,"context_line":"register"},{"line_number":66,"context_line":"  registers a plugin with the plugin system. Receives a dictionary"},{"line_number":67,"context_line":"  of all arguments specified for plugins, and should extract any information"},{"line_number":68,"context_line":"  it needs, such as file locations, connection strings, or URLs."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"load"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ba5201f7_b69b6565","line":68,"in_reply_to":"ba5201f7_cb96aa4b","updated":"2017-01-11 18:08:24.000000000","message":"\u003e IMO openstack-ansible should work with any inventory system that the deployer decides to use, whether it\u0027s static INI files, our current dynamic inventory, an AWS dynamic inventory, a cobbler inventory, or Craton...\n\nYes, that\u0027s true; this change is seeking to provide a way for our env.d mapping to be stored externally.\n\nThis spec is specifically for updating our existing code, not replacing the current inventory code entirely. I\u0027m not against that as an idea or proposal, but I\u0027d like to see such a proposal in another spec for a more holistic view.","commit_id":"61b22090ca4aeaafddb727a4cfe235969cf189aa"},{"author":{"_account_id":17068,"name":"Jean-Philippe Evrard","email":"openstack@a.spamming.party","username":"evrardjp"},"change_message_id":"65d692a1cbee9ff76acb5e0957031d481090daab","unresolved":false,"context_lines":[{"line_number":62,"context_line":"Plugins should support the following public methods:"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"register"},{"line_number":66,"context_line":"  registers a plugin with the plugin system. Receives a dictionary"},{"line_number":67,"context_line":"  of all arguments specified for plugins, and should extract any information"},{"line_number":68,"context_line":"  it needs, such as file locations, connection strings, or URLs."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"load"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ba5201f7_4bbb9ae5","line":68,"range":{"start_line":65,"start_character":0,"end_line":68,"end_character":64},"in_reply_to":"ba5201f7_d2ee79b3","updated":"2017-01-04 08:47:31.000000000","message":"It does!\n\nWe are leveraging the merge functionality to merge static group_vars on top of our dynamic inventory script.\n\nAdding another dynamic inventory script would basically continue this behavior.\n\nThe merge is horrible, I agree, but still it\u0027s something we can do with, we\u0027ve done with it in the past.","commit_id":"61b22090ca4aeaafddb727a4cfe235969cf189aa"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"92f638025a626bf94b2ad53479a46abe074caee3","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"load"},{"line_number":72,"context_line":"  loads data from source into a Python dictionary. "},{"line_number":73,"context_line":""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"write"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ba5201f7_326ee501","line":72,"updated":"2017-01-03 15:20:06.000000000","message":"JP I disagree. Re-using ansible inventory objects will likely force the code to be GPLv3 which is /incompatible/ with the licensing requirementst and allowances of the OpenStack Foundation and its CLA. Using Python dictionaries should allow for maximum flexibility. On the one hand, you can use them directly. On the other, if you are writing a GPLv3\u0027d plugin, then you can use Ansible\u0027s inventory objects and (probably) easily translate the dictionaries to those obejcts.","commit_id":"61b22090ca4aeaafddb727a4cfe235969cf189aa"},{"author":{"_account_id":17068,"name":"Jean-Philippe Evrard","email":"openstack@a.spamming.party","username":"evrardjp"},"change_message_id":"7e6c04316695d83816da6e32c7912df8962247ca","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"load"},{"line_number":72,"context_line":"  loads data from source into a Python dictionary. "},{"line_number":73,"context_line":""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"write"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ba5201f7_cf47b649","line":72,"updated":"2017-01-03 14:57:19.000000000","message":"While you could re-define completely what is an inventory object with a dict, it would be maybe good to re-use ansible inventory objects.","commit_id":"61b22090ca4aeaafddb727a4cfe235969cf189aa"},{"author":{"_account_id":12892,"name":"Nolan Brubaker","email":"nolan.brubaker@rackspace.com","username":"nrb"},"change_message_id":"369880d0b46a5c6161be281d5a589322c5718f78","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"load"},{"line_number":72,"context_line":"  loads data from source into a Python dictionary. "},{"line_number":73,"context_line":""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"write"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ba5201f7_72d22d02","line":72,"in_reply_to":"ba5201f7_cf47b649","updated":"2017-01-03 15:15:16.000000000","message":"Why is that? Our current inventory lives in a dictionary in the python scripts, we don\u0027t import anything from the Ansible codebase.","commit_id":"61b22090ca4aeaafddb727a4cfe235969cf189aa"},{"author":{"_account_id":17068,"name":"Jean-Philippe Evrard","email":"openstack@a.spamming.party","username":"evrardjp"},"change_message_id":"7e6c04316695d83816da6e32c7912df8962247ca","unresolved":false,"context_lines":[{"line_number":72,"context_line":"  loads data from source into a Python dictionary. "},{"line_number":73,"context_line":""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"write"},{"line_number":76,"context_line":"  Writes the inventory dictionary to the specified backend. Receives"},{"line_number":77,"context_line":"  the inventory dictionary as an argument"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"Configuration Changes"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ba5201f7_cfb5f631","line":77,"range":{"start_line":75,"start_character":0,"end_line":77,"end_character":41},"updated":"2017-01-03 14:57:19.000000000","message":"Does that mean a json file for ansible consumption? Or Am I completely wrong, and this system will use a config file to know which scripts to load, and drop them in the appropriate folders, for then be simply used by ansible?","commit_id":"61b22090ca4aeaafddb727a4cfe235969cf189aa"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"92f638025a626bf94b2ad53479a46abe074caee3","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"write"},{"line_number":76,"context_line":"  Writes the inventory dictionary to the specified backend. Receives"},{"line_number":77,"context_line":"  the inventory dictionary as an argument"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"Configuration Changes"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ba5201f7_5271a9df","line":77,"updated":"2017-01-03 15:20:06.000000000","message":"No, I think this is purely for allowing Ansible to interact with the Inventory backend. Am I correct, Nolan?\n\nI believe that the rest of the existing dynamic inventory work will handle the work to make the Inventory usable for Ansible.","commit_id":"61b22090ca4aeaafddb727a4cfe235969cf189aa"},{"author":{"_account_id":17068,"name":"Jean-Philippe Evrard","email":"openstack@a.spamming.party","username":"evrardjp"},"change_message_id":"65d692a1cbee9ff76acb5e0957031d481090daab","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"write"},{"line_number":76,"context_line":"  Writes the inventory dictionary to the specified backend. Receives"},{"line_number":77,"context_line":"  the inventory dictionary as an argument"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"Configuration Changes"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ba5201f7_0bafd281","line":77,"in_reply_to":"ba5201f7_5271a9df","updated":"2017-01-04 08:47:31.000000000","message":"This is more clear. -\u003e Deserves to be written in the spec.\nHere we consider a middleware inventory that has a config system that allows to plug dynamic inventory. (Example database credentials, path to inventory script etc...).\n\nIf that\u0027s the goal of this spec, it is more clear.\n\nWhether I agree or not would be a different matter, and will be voted. \nAt the moment, I\u0027m only trying to understand the spec and its scope :p","commit_id":"61b22090ca4aeaafddb727a4cfe235969cf189aa"},{"author":{"_account_id":17068,"name":"Jean-Philippe Evrard","email":"openstack@a.spamming.party","username":"evrardjp"},"change_message_id":"65d692a1cbee9ff76acb5e0957031d481090daab","unresolved":false,"context_lines":[{"line_number":72,"context_line":"  loads data from source into a Python dictionary. "},{"line_number":73,"context_line":""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"write"},{"line_number":76,"context_line":"  Writes the inventory dictionary to the specified backend. Receives"},{"line_number":77,"context_line":"  the inventory dictionary as an argument"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"Configuration Changes"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ba5201f7_8b9ae261","line":77,"range":{"start_line":75,"start_character":0,"end_line":77,"end_character":41},"in_reply_to":"ba5201f7_52b449d0","updated":"2017-01-04 08:47:31.000000000","message":"that\u0027s true, as long as it\u0027s formatted in JSON formatted with ansible structure.\n\nI meant ansible json formatted.","commit_id":"61b22090ca4aeaafddb727a4cfe235969cf189aa"},{"author":{"_account_id":12892,"name":"Nolan Brubaker","email":"nolan.brubaker@rackspace.com","username":"nrb"},"change_message_id":"369880d0b46a5c6161be281d5a589322c5718f78","unresolved":false,"context_lines":[{"line_number":72,"context_line":"  loads data from source into a Python dictionary. "},{"line_number":73,"context_line":""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"write"},{"line_number":76,"context_line":"  Writes the inventory dictionary to the specified backend. Receives"},{"line_number":77,"context_line":"  the inventory dictionary as an argument"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"Configuration Changes"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ba5201f7_52b449d0","line":77,"range":{"start_line":75,"start_character":0,"end_line":77,"end_character":41},"in_reply_to":"ba5201f7_cfb5f631","updated":"2017-01-03 15:15:16.000000000","message":"It means writing to whatever data store the plugin implements. It could be a database, a JSON file, whatever.\n\nAnsible itself uses stdout from scripts, not a JSON file.","commit_id":"61b22090ca4aeaafddb727a4cfe235969cf189aa"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"92f638025a626bf94b2ad53479a46abe074caee3","unresolved":false,"context_lines":[{"line_number":85,"context_line":"since part of the script\u0027s job entails accessing that file."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"Instead, the ``/etc/ansible/osa.ini`` file is proposed, to match the"},{"line_number":88,"context_line":"convention laid out in `Ansible\u0027s dynamic inventory documentation`_."},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"The specific format of this file will be left to implementation reviews,"},{"line_number":91,"context_line":"however at a high level it will likely include a Python import path to the"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ba5201f7_72786dc5","line":88,"updated":"2017-01-03 15:20:06.000000000","message":"JP, no one is stating a standard. A standard would be documented. We\u0027re merely following Ansible\u0027s lead (a.k.a., convention) as documented. It\u0027s also worth noting that we could use ini, toml, yaml, or really anything. If people are using Ansible, they\u0027ll be familiar with INI. If they\u0027re using OSA and Ansible they should be familiar with INI or YAML. So really I don\u0027t think it\u0027s productive to try to shave a yak over file extensions.\n\nAlso it\u0027s important and appropriate for the spec to lay out and discern the file extension/format. Otherwise, code reviews will be held up over the very same bike shed.","commit_id":"61b22090ca4aeaafddb727a4cfe235969cf189aa"},{"author":{"_account_id":17068,"name":"Jean-Philippe Evrard","email":"openstack@a.spamming.party","username":"evrardjp"},"change_message_id":"7e6c04316695d83816da6e32c7912df8962247ca","unresolved":false,"context_lines":[{"line_number":84,"context_line":"not well suited to the ``etc/openstack_deploy/openstack_user_config_file``,"},{"line_number":85,"context_line":"since part of the script\u0027s job entails accessing that file."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"Instead, the ``/etc/ansible/osa.ini`` file is proposed, to match the"},{"line_number":88,"context_line":"convention laid out in `Ansible\u0027s dynamic inventory documentation`_."},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"The specific format of this file will be left to implementation reviews,"},{"line_number":91,"context_line":"however at a high level it will likely include a Python import path to the"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ba5201f7_8f1cce14","line":88,"range":{"start_line":87,"start_character":56,"end_line":88,"end_character":68},"updated":"2017-01-03 14:57:19.000000000","message":"there is no convention in ansible for that. The extract is only for AWS, while openstack dynamic inventory is using os-client-config which uses clouds.yaml in a completely different folder. \n\nThe \"standard\" cobbler dynamic inventory uses another config file, but not INI formatted, IIRC.\n\nSo I think we shouldn\u0027t state standard. The location/type of file could be discussed in the reviews.","commit_id":"61b22090ca4aeaafddb727a4cfe235969cf189aa"},{"author":{"_account_id":17068,"name":"Jean-Philippe Evrard","email":"openstack@a.spamming.party","username":"evrardjp"},"change_message_id":"65d692a1cbee9ff76acb5e0957031d481090daab","unresolved":false,"context_lines":[{"line_number":85,"context_line":"since part of the script\u0027s job entails accessing that file."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"Instead, the ``/etc/ansible/osa.ini`` file is proposed, to match the"},{"line_number":88,"context_line":"convention laid out in `Ansible\u0027s dynamic inventory documentation`_."},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"The specific format of this file will be left to implementation reviews,"},{"line_number":91,"context_line":"however at a high level it will likely include a Python import path to the"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ba5201f7_0be7d2b0","line":88,"in_reply_to":"ba5201f7_72786dc5","updated":"2017-01-04 08:47:31.000000000","message":"My point was:\n- Don\u0027t mention a convention when there is none to avoid bike shedding\n- I don\u0027t think the format of the file is important, and no code should deserve bike shedding for this.\n\nI understand your statement. Fine for me to specify anything.","commit_id":"61b22090ca4aeaafddb727a4cfe235969cf189aa"},{"author":{"_account_id":12892,"name":"Nolan Brubaker","email":"nolan.brubaker@rackspace.com","username":"nrb"},"change_message_id":"369880d0b46a5c6161be281d5a589322c5718f78","unresolved":false,"context_lines":[{"line_number":84,"context_line":"not well suited to the ``etc/openstack_deploy/openstack_user_config_file``,"},{"line_number":85,"context_line":"since part of the script\u0027s job entails accessing that file."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"Instead, the ``/etc/ansible/osa.ini`` file is proposed, to match the"},{"line_number":88,"context_line":"convention laid out in `Ansible\u0027s dynamic inventory documentation`_."},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"The specific format of this file will be left to implementation reviews,"},{"line_number":91,"context_line":"however at a high level it will likely include a Python import path to the"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ba5201f7_727dcd1b","line":88,"range":{"start_line":87,"start_character":56,"end_line":88,"end_character":68},"in_reply_to":"ba5201f7_8f1cce14","updated":"2017-01-03 15:15:16.000000000","message":"In that case, we can do what we want, but I still don\u0027t think it belongs in the current config file.","commit_id":"61b22090ca4aeaafddb727a4cfe235969cf189aa"},{"author":{"_account_id":17068,"name":"Jean-Philippe Evrard","email":"openstack@a.spamming.party","username":"evrardjp"},"change_message_id":"7e6c04316695d83816da6e32c7912df8962247ca","unresolved":false,"context_lines":[{"line_number":95,"context_line":"Alternatives"},{"line_number":96,"context_line":"------------"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"Nothing could be done and the inventory could continue to rely on the JSON"},{"line_number":99,"context_line":"backend; it\u0027s worked reliably until now. However, its inherent problems would"},{"line_number":100,"context_line":"remain."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"In the current state, deployers must fork the repository to modify the dynamic"},{"line_number":103,"context_line":"inventory code, which is a maintenance burden long term, likely unsustainable."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"Configuration Alternatives"},{"line_number":106,"context_line":"**************************"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ba5201f7_6fdeca6e","line":103,"range":{"start_line":98,"start_character":0,"end_line":103,"end_character":78},"updated":"2017-01-03 14:57:19.000000000","message":"\"Alternative\" could be to write a cli tool (or extend our existing inventory-manage) to allow more edition capabilities of the current  inventory","commit_id":"61b22090ca4aeaafddb727a4cfe235969cf189aa"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"92f638025a626bf94b2ad53479a46abe074caee3","unresolved":false,"context_lines":[{"line_number":100,"context_line":"remain."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"In the current state, deployers must fork the repository to modify the dynamic"},{"line_number":103,"context_line":"inventory code, which is a maintenance burden long term, likely unsustainable."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"Configuration Alternatives"},{"line_number":106,"context_line":"**************************"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ba5201f7_927311e7","line":103,"updated":"2017-01-03 15:20:06.000000000","message":"I believe that Nolan is discussing storage of inventory data, not editing it. At the moment, inventory-manage doesn\u0027t haandle that so mentioning it or how to edit the existing inventory files is off-topic.","commit_id":"61b22090ca4aeaafddb727a4cfe235969cf189aa"},{"author":{"_account_id":12892,"name":"Nolan Brubaker","email":"nolan.brubaker@rackspace.com","username":"nrb"},"change_message_id":"369880d0b46a5c6161be281d5a589322c5718f78","unresolved":false,"context_lines":[{"line_number":95,"context_line":"Alternatives"},{"line_number":96,"context_line":"------------"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"Nothing could be done and the inventory could continue to rely on the JSON"},{"line_number":99,"context_line":"backend; it\u0027s worked reliably until now. However, its inherent problems would"},{"line_number":100,"context_line":"remain."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"In the current state, deployers must fork the repository to modify the dynamic"},{"line_number":103,"context_line":"inventory code, which is a maintenance burden long term, likely unsustainable."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"Configuration Alternatives"},{"line_number":106,"context_line":"**************************"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ba5201f7_b2f2d5d0","line":103,"range":{"start_line":98,"start_character":0,"end_line":103,"end_character":78},"in_reply_to":"ba5201f7_6fdeca6e","updated":"2017-01-03 15:15:16.000000000","message":"How is that different from what this is already proposing?","commit_id":"61b22090ca4aeaafddb727a4cfe235969cf189aa"},{"author":{"_account_id":17068,"name":"Jean-Philippe Evrard","email":"openstack@a.spamming.party","username":"evrardjp"},"change_message_id":"65d692a1cbee9ff76acb5e0957031d481090daab","unresolved":false,"context_lines":[{"line_number":100,"context_line":"remain."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"In the current state, deployers must fork the repository to modify the dynamic"},{"line_number":103,"context_line":"inventory code, which is a maintenance burden long term, likely unsustainable."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"Configuration Alternatives"},{"line_number":106,"context_line":"**************************"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ba5201f7_ee0ffc2b","line":103,"in_reply_to":"ba5201f7_927311e7","updated":"2017-01-04 08:47:31.000000000","message":"Let me give an example:\nIf I want to replace the inventory with cobbler inventory, I\u0027d basically replace one file (the dynamic inventory), drop a config file, and handle the host details in cobbler.\n\nIs that hard? No. Does that deserves docs? Yes. Does that deserves more code? To be decided -- That\u0027s for me the essence of the \"alternatives\" section of a spec. \n\nSo for my example, the alternative would be \"Only documentation of how to use another external inventory system handling all the features required in the problem description\"","commit_id":"61b22090ca4aeaafddb727a4cfe235969cf189aa"},{"author":{"_account_id":17068,"name":"Jean-Philippe Evrard","email":"openstack@a.spamming.party","username":"evrardjp"},"change_message_id":"65d692a1cbee9ff76acb5e0957031d481090daab","unresolved":false,"context_lines":[{"line_number":95,"context_line":"Alternatives"},{"line_number":96,"context_line":"------------"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"Nothing could be done and the inventory could continue to rely on the JSON"},{"line_number":99,"context_line":"backend; it\u0027s worked reliably until now. However, its inherent problems would"},{"line_number":100,"context_line":"remain."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"In the current state, deployers must fork the repository to modify the dynamic"},{"line_number":103,"context_line":"inventory code, which is a maintenance burden long term, likely unsustainable."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"Configuration Alternatives"},{"line_number":106,"context_line":"**************************"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ba5201f7_0b9512dd","line":103,"range":{"start_line":98,"start_character":0,"end_line":103,"end_character":78},"in_reply_to":"ba5201f7_b2f2d5d0","updated":"2017-01-04 08:47:31.000000000","message":"good question, it shows really how obscure this spec is, at the moment, for me.\n\nSome rephrasing would be great.","commit_id":"61b22090ca4aeaafddb727a4cfe235969cf189aa"},{"author":{"_account_id":12892,"name":"Nolan Brubaker","email":"nolan.brubaker@rackspace.com","username":"nrb"},"change_message_id":"1b5f2a197faf07dcf760ec81699044121b6b0228","unresolved":false,"context_lines":[{"line_number":100,"context_line":"remain."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"In the current state, deployers must fork the repository to modify the dynamic"},{"line_number":103,"context_line":"inventory code, which is a maintenance burden long term, likely unsustainable."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"Configuration Alternatives"},{"line_number":106,"context_line":"**************************"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ba5201f7_b1b28fe3","line":103,"in_reply_to":"ba5201f7_ee0ffc2b","updated":"2017-01-11 18:18:16.000000000","message":"Would the env.d mappings work then? I\u0027m skeptical that this is as simple as you say. A prototype would help me understand your argument, I think.","commit_id":"61b22090ca4aeaafddb727a4cfe235969cf189aa"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"92f638025a626bf94b2ad53479a46abe074caee3","unresolved":false,"context_lines":[{"line_number":115,"context_line":"Stevedore is an OpenStack project, and using it would align the project more"},{"line_number":116,"context_line":"closely with the community. However, Stevedore requires registering plugins"},{"line_number":117,"context_line":"via `setup.py` `entry_points`. OpenStack-Ansible\u0027s inventory code cannot"},{"line_number":118,"context_line":"currently be installed via `setup.py` despite one being in the project. A"},{"line_number":119,"context_line":"separate `setup.py` file for the `lib` directory would be necessary. The"},{"line_number":120,"context_line":"external requirements for Stevedore are pbr and six, so the footprint is"},{"line_number":121,"context_line":"fairly small."}],"source_content_type":"text/x-rst","patch_set":6,"id":"ba5201f7_b282d592","line":118,"updated":"2017-01-03 15:20:06.000000000","message":"Having multiple setup.py files is not uncommon. I believe Heat uses this for some of it\u0027s extensions that it has in tree. This, however, tends to confuse PBR terribly if you intend to version the inner library and OSA differently.","commit_id":"61b22090ca4aeaafddb727a4cfe235969cf189aa"},{"author":{"_account_id":17068,"name":"Jean-Philippe Evrard","email":"openstack@a.spamming.party","username":"evrardjp"},"change_message_id":"7e6c04316695d83816da6e32c7912df8962247ca","unresolved":false,"context_lines":[{"line_number":115,"context_line":"Stevedore is an OpenStack project, and using it would align the project more"},{"line_number":116,"context_line":"closely with the community. However, Stevedore requires registering plugins"},{"line_number":117,"context_line":"via `setup.py` `entry_points`. OpenStack-Ansible\u0027s inventory code cannot"},{"line_number":118,"context_line":"currently be installed via `setup.py` despite one being in the project. A"},{"line_number":119,"context_line":"separate `setup.py` file for the `lib` directory would be necessary. The"},{"line_number":120,"context_line":"external requirements for Stevedore are pbr and six, so the footprint is"},{"line_number":121,"context_line":"fairly small."}],"source_content_type":"text/x-rst","patch_set":6,"id":"ba5201f7_6f7dea1b","line":118,"updated":"2017-01-03 14:57:19.000000000","message":"What is the cause for \"the inventory cannot be installed via setup.py\"? \nMaybe this is a problem we could fix -- 2 birds one stone. I think this deserves more explanations.","commit_id":"61b22090ca4aeaafddb727a4cfe235969cf189aa"},{"author":{"_account_id":17068,"name":"Jean-Philippe Evrard","email":"openstack@a.spamming.party","username":"evrardjp"},"change_message_id":"65d692a1cbee9ff76acb5e0957031d481090daab","unresolved":false,"context_lines":[{"line_number":115,"context_line":"Stevedore is an OpenStack project, and using it would align the project more"},{"line_number":116,"context_line":"closely with the community. However, Stevedore requires registering plugins"},{"line_number":117,"context_line":"via `setup.py` `entry_points`. OpenStack-Ansible\u0027s inventory code cannot"},{"line_number":118,"context_line":"currently be installed via `setup.py` despite one being in the project. A"},{"line_number":119,"context_line":"separate `setup.py` file for the `lib` directory would be necessary. The"},{"line_number":120,"context_line":"external requirements for Stevedore are pbr and six, so the footprint is"},{"line_number":121,"context_line":"fairly small."}],"source_content_type":"text/x-rst","patch_set":6,"id":"ba5201f7_4e2728b6","line":118,"in_reply_to":"ba5201f7_5213690d","updated":"2017-01-04 08:47:31.000000000","message":"thanks","commit_id":"61b22090ca4aeaafddb727a4cfe235969cf189aa"},{"author":{"_account_id":12892,"name":"Nolan Brubaker","email":"nolan.brubaker@rackspace.com","username":"nrb"},"change_message_id":"369880d0b46a5c6161be281d5a589322c5718f78","unresolved":false,"context_lines":[{"line_number":115,"context_line":"Stevedore is an OpenStack project, and using it would align the project more"},{"line_number":116,"context_line":"closely with the community. However, Stevedore requires registering plugins"},{"line_number":117,"context_line":"via `setup.py` `entry_points`. OpenStack-Ansible\u0027s inventory code cannot"},{"line_number":118,"context_line":"currently be installed via `setup.py` despite one being in the project. A"},{"line_number":119,"context_line":"separate `setup.py` file for the `lib` directory would be necessary. The"},{"line_number":120,"context_line":"external requirements for Stevedore are pbr and six, so the footprint is"},{"line_number":121,"context_line":"fairly small."}],"source_content_type":"text/x-rst","patch_set":6,"id":"ba5201f7_5213690d","line":118,"in_reply_to":"ba5201f7_6f7dea1b","updated":"2017-01-03 15:15:16.000000000","message":"It can\u0027t be because of how openstack-ansible relies on setup.py for use with global requirements/pbr. I\u0027ve tried to modify the setup.py we have in the past, and because of the pbr mechanism I cannot customize the one in place. pbr removes a lot of control from the distutils setup function in order to achieve their goals.\n\nI\u0027ll update this.","commit_id":"61b22090ca4aeaafddb727a4cfe235969cf189aa"},{"author":{"_account_id":12892,"name":"Nolan Brubaker","email":"nolan.brubaker@rackspace.com","username":"nrb"},"change_message_id":"af20a1cedf8935c7c3de20a92e8a5a1b9a5334c2","unresolved":false,"context_lines":[{"line_number":115,"context_line":"Stevedore is an OpenStack project, and using it would align the project more"},{"line_number":116,"context_line":"closely with the community. However, Stevedore requires registering plugins"},{"line_number":117,"context_line":"via `setup.py` `entry_points`. OpenStack-Ansible\u0027s inventory code cannot"},{"line_number":118,"context_line":"currently be installed via `setup.py` despite one being in the project. A"},{"line_number":119,"context_line":"separate `setup.py` file for the `lib` directory would be necessary. The"},{"line_number":120,"context_line":"external requirements for Stevedore are pbr and six, so the footprint is"},{"line_number":121,"context_line":"fairly small."}],"source_content_type":"text/x-rst","patch_set":6,"id":"ba5201f7_f6c88d57","line":118,"in_reply_to":"ba5201f7_8e2110a2","updated":"2017-01-11 18:08:24.000000000","message":"This is actually fixed; I\u0027ll supply details in a new revision.","commit_id":"61b22090ca4aeaafddb727a4cfe235969cf189aa"},{"author":{"_account_id":17068,"name":"Jean-Philippe Evrard","email":"openstack@a.spamming.party","username":"evrardjp"},"change_message_id":"65d692a1cbee9ff76acb5e0957031d481090daab","unresolved":false,"context_lines":[{"line_number":115,"context_line":"Stevedore is an OpenStack project, and using it would align the project more"},{"line_number":116,"context_line":"closely with the community. However, Stevedore requires registering plugins"},{"line_number":117,"context_line":"via `setup.py` `entry_points`. OpenStack-Ansible\u0027s inventory code cannot"},{"line_number":118,"context_line":"currently be installed via `setup.py` despite one being in the project. A"},{"line_number":119,"context_line":"separate `setup.py` file for the `lib` directory would be necessary. The"},{"line_number":120,"context_line":"external requirements for Stevedore are pbr and six, so the footprint is"},{"line_number":121,"context_line":"fairly small."}],"source_content_type":"text/x-rst","patch_set":6,"id":"ba5201f7_8e2110a2","line":118,"in_reply_to":"ba5201f7_b282d592","updated":"2017-01-04 08:47:31.000000000","message":"thanks.","commit_id":"61b22090ca4aeaafddb727a4cfe235969cf189aa"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"92f638025a626bf94b2ad53479a46abe074caee3","unresolved":false,"context_lines":[{"line_number":125,"context_line":"the standard Python import system without requiring a `setup.py` file for our"},{"line_number":126,"context_line":"existing code."},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"The PluginBase method is less impactful for in-tree code, however any"},{"line_number":129,"context_line":"external plugins should be pip-installable anyway, thus having a `setup.py`."},{"line_number":130,"context_line":"Therefore, either is viable as an implementation option, with Stevedore"},{"line_number":131,"context_line":"requiring more upfront work."}],"source_content_type":"text/x-rst","patch_set":6,"id":"ba5201f7_d27d99b2","line":128,"updated":"2017-01-03 15:20:06.000000000","message":"Hm, why not use stevedore? It has a fairly usable plugin architecture that is rather robust. I\u0027m not familiar with PluginBase, though. I just think having plugins registered with pkg_resources entry-points (what stevedore uses under the covers) is rather nice and convenient. Lots of existing tools (Flake8 for example) use entry-points with a good deal of success.","commit_id":"61b22090ca4aeaafddb727a4cfe235969cf189aa"},{"author":{"_account_id":10881,"name":"Neill Cox","email":"neill@ingenious.com.au","username":"neillc"},"change_message_id":"02c55781898982d7cd8314c59dcbc638b48c2e31","unresolved":false,"context_lines":[{"line_number":125,"context_line":"the standard Python import system without requiring a `setup.py` file for our"},{"line_number":126,"context_line":"existing code."},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"The PluginBase method is less impactful for in-tree code, however any"},{"line_number":129,"context_line":"external plugins should be pip-installable anyway, thus having a `setup.py`."},{"line_number":130,"context_line":"Therefore, either is viable as an implementation option, with Stevedore"},{"line_number":131,"context_line":"requiring more upfront work."}],"source_content_type":"text/x-rst","patch_set":6,"id":"ba5201f7_22441073","line":128,"updated":"2016-12-29 20:34:21.000000000","message":"s/is less impactful for/will have less impact on/\n\nalthough, see http://grammarist.com/words/impactful/ for why impactful is ok","commit_id":"61b22090ca4aeaafddb727a4cfe235969cf189aa"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"92f638025a626bf94b2ad53479a46abe074caee3","unresolved":false,"context_lines":[{"line_number":143,"context_line":"A migration path from the existing JSON source should be provided, so that"},{"line_number":144,"context_line":"existing environments can move to new systems, should they choose. However,"},{"line_number":145,"context_line":"migrating will likely involve implementation detail knowledge that differs per"},{"line_number":146,"context_line":"system, so each one will likely need to have its own import functionality."},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"An `export function`_ has already been implemented to provide the inventory in"},{"line_number":149,"context_line":"a per-host format. This could be used as a basis for external systems to use"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ba5201f7_f24a9d82","line":146,"updated":"2017-01-03 15:20:06.000000000","message":"JP, I believe Nolan is justifying that part of the API above.","commit_id":"61b22090ca4aeaafddb727a4cfe235969cf189aa"},{"author":{"_account_id":17068,"name":"Jean-Philippe Evrard","email":"openstack@a.spamming.party","username":"evrardjp"},"change_message_id":"7e6c04316695d83816da6e32c7912df8962247ca","unresolved":false,"context_lines":[{"line_number":140,"context_line":"Upgrade impact"},{"line_number":141,"context_line":"--------------"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"A migration path from the existing JSON source should be provided, so that"},{"line_number":144,"context_line":"existing environments can move to new systems, should they choose. However,"},{"line_number":145,"context_line":"migrating will likely involve implementation detail knowledge that differs per"},{"line_number":146,"context_line":"system, so each one will likely need to have its own import functionality."},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"An `export function`_ has already been implemented to provide the inventory in"},{"line_number":149,"context_line":"a per-host format. This could be used as a basis for external systems to use"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ba5201f7_cfa9767d","line":146,"range":{"start_line":143,"start_character":0,"end_line":146,"end_character":74},"updated":"2017-01-03 14:57:19.000000000","message":"wasn\u0027t that the load part you explained above in python plugin api?","commit_id":"61b22090ca4aeaafddb727a4cfe235969cf189aa"},{"author":{"_account_id":17068,"name":"Jean-Philippe Evrard","email":"openstack@a.spamming.party","username":"evrardjp"},"change_message_id":"65d692a1cbee9ff76acb5e0957031d481090daab","unresolved":false,"context_lines":[{"line_number":140,"context_line":"Upgrade impact"},{"line_number":141,"context_line":"--------------"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"A migration path from the existing JSON source should be provided, so that"},{"line_number":144,"context_line":"existing environments can move to new systems, should they choose. However,"},{"line_number":145,"context_line":"migrating will likely involve implementation detail knowledge that differs per"},{"line_number":146,"context_line":"system, so each one will likely need to have its own import functionality."},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"An `export function`_ has already been implemented to provide the inventory in"},{"line_number":149,"context_line":"a per-host format. This could be used as a basis for external systems to use"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ba5201f7_ce6958c0","line":146,"range":{"start_line":143,"start_character":0,"end_line":146,"end_character":74},"in_reply_to":"ba5201f7_72c5cd8c","updated":"2017-01-04 08:47:31.000000000","message":"For example you\u0027d like to have an inventory system that can _manually_ or _automatically_ pull when needed from an external source inside a python dict, do some manipulations to be ansible ready, and export it to something that could stdout some ansible-ready json. Correct?","commit_id":"61b22090ca4aeaafddb727a4cfe235969cf189aa"},{"author":{"_account_id":12892,"name":"Nolan Brubaker","email":"nolan.brubaker@rackspace.com","username":"nrb"},"change_message_id":"af20a1cedf8935c7c3de20a92e8a5a1b9a5334c2","unresolved":false,"context_lines":[{"line_number":140,"context_line":"Upgrade impact"},{"line_number":141,"context_line":"--------------"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"A migration path from the existing JSON source should be provided, so that"},{"line_number":144,"context_line":"existing environments can move to new systems, should they choose. However,"},{"line_number":145,"context_line":"migrating will likely involve implementation detail knowledge that differs per"},{"line_number":146,"context_line":"system, so each one will likely need to have its own import functionality."},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"An `export function`_ has already been implemented to provide the inventory in"},{"line_number":149,"context_line":"a per-host format. This could be used as a basis for external systems to use"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ba5201f7_f66b2d1c","line":146,"range":{"start_line":143,"start_character":0,"end_line":146,"end_character":74},"in_reply_to":"ba5201f7_ce6958c0","updated":"2017-01-11 18:08:24.000000000","message":"Actually, here I\u0027m assuming that this export/import would be more like this:\n\n* Deployer has current openstack_inventory.json for their cluster\n* Deployer wants to use Craton (as an example)\n* Deployer uses our inventory-manage.py --export option\n* The output of the export is then fed to a script/program that formats and uploads that data into Craton\n* OpenStack-Ansible\u0027s then configured to use the Craton plugin for the inventory storage.\n* Running ansible executes the dynamic_inventory.py executable, which uses the Craton plugin to retrieve information and return the stdout JSON.","commit_id":"61b22090ca4aeaafddb727a4cfe235969cf189aa"},{"author":{"_account_id":12892,"name":"Nolan Brubaker","email":"nolan.brubaker@rackspace.com","username":"nrb"},"change_message_id":"369880d0b46a5c6161be281d5a589322c5718f78","unresolved":false,"context_lines":[{"line_number":140,"context_line":"Upgrade impact"},{"line_number":141,"context_line":"--------------"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"A migration path from the existing JSON source should be provided, so that"},{"line_number":144,"context_line":"existing environments can move to new systems, should they choose. However,"},{"line_number":145,"context_line":"migrating will likely involve implementation detail knowledge that differs per"},{"line_number":146,"context_line":"system, so each one will likely need to have its own import functionality."},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"An `export function`_ has already been implemented to provide the inventory in"},{"line_number":149,"context_line":"a per-host format. This could be used as a basis for external systems to use"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ba5201f7_72c5cd8c","line":146,"range":{"start_line":143,"start_character":0,"end_line":146,"end_character":74},"in_reply_to":"ba5201f7_cfa9767d","updated":"2017-01-03 15:15:16.000000000","message":"No - this is for migrating existing openstack_inventory.json files into whatever new system.\n\nThe load call above is for pulling data from those systems into the inventory scripts.","commit_id":"61b22090ca4aeaafddb727a4cfe235969cf189aa"},{"author":{"_account_id":17068,"name":"Jean-Philippe Evrard","email":"openstack@a.spamming.party","username":"evrardjp"},"change_message_id":"7e6c04316695d83816da6e32c7912df8962247ca","unresolved":false,"context_lines":[{"line_number":156,"context_line":"Security impact"},{"line_number":157,"context_line":"---------------"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"This change introduces communication to outside systems - there is inherent"},{"line_number":160,"context_line":"risk in doing so. These systems are assumed to be using secure channels and"},{"line_number":161,"context_line":"trusted by the deployers."},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"Secrets could theoretically be stored in these backends, though the"},{"line_number":164,"context_line":"``openstack-ansible.sh`` wrapper script currently references the"},{"line_number":165,"context_line":"``user_secrets.yml`` file instead of placing those in the inventory. The"},{"line_number":166,"context_line":"system should not dictate that this is the only solution for secrets, however."},{"line_number":167,"context_line":""},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"Performance impact"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ba5201f7_6ff96a80","line":166,"range":{"start_line":159,"start_character":0,"end_line":166,"end_character":78},"updated":"2017-01-03 14:57:19.000000000","message":"Oh, so it means it\u0027s not only for the inventory (hosts/groups) but also for user_* files and many configuration variables.\n\nThis is important to clarify at the beginning of the spec -- I didn\u0027t think it was a revamp that could go as far as group_vars/host_vars of our current implementation. But it\u0027s a welcomed change.","commit_id":"61b22090ca4aeaafddb727a4cfe235969cf189aa"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"92f638025a626bf94b2ad53479a46abe074caee3","unresolved":false,"context_lines":[{"line_number":163,"context_line":"Secrets could theoretically be stored in these backends, though the"},{"line_number":164,"context_line":"``openstack-ansible.sh`` wrapper script currently references the"},{"line_number":165,"context_line":"``user_secrets.yml`` file instead of placing those in the inventory. The"},{"line_number":166,"context_line":"system should not dictate that this is the only solution for secrets, however."},{"line_number":167,"context_line":""},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"Performance impact"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ba5201f7_124e4196","line":166,"updated":"2017-01-03 15:20:06.000000000","message":"The beginning of this spec did mention host variables being difficult to manage with our present dynamic inventory approach","commit_id":"61b22090ca4aeaafddb727a4cfe235969cf189aa"},{"author":{"_account_id":17068,"name":"Jean-Philippe Evrard","email":"openstack@a.spamming.party","username":"evrardjp"},"change_message_id":"65d692a1cbee9ff76acb5e0957031d481090daab","unresolved":false,"context_lines":[{"line_number":163,"context_line":"Secrets could theoretically be stored in these backends, though the"},{"line_number":164,"context_line":"``openstack-ansible.sh`` wrapper script currently references the"},{"line_number":165,"context_line":"``user_secrets.yml`` file instead of placing those in the inventory. The"},{"line_number":166,"context_line":"system should not dictate that this is the only solution for secrets, however."},{"line_number":167,"context_line":""},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"Performance impact"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ba5201f7_8e7d9070","line":166,"in_reply_to":"ba5201f7_124e4196","updated":"2017-01-04 08:47:31.000000000","message":"That\u0027s true but there are many solutions for that, and the problem is to define the boundary of the scope, in order to avoid feature creep in the spec, and bike shedding in the implementation.","commit_id":"61b22090ca4aeaafddb727a4cfe235969cf189aa"},{"author":{"_account_id":17068,"name":"Jean-Philippe Evrard","email":"openstack@a.spamming.party","username":"evrardjp"},"change_message_id":"65d692a1cbee9ff76acb5e0957031d481090daab","unresolved":false,"context_lines":[{"line_number":156,"context_line":"Security impact"},{"line_number":157,"context_line":"---------------"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"This change introduces communication to outside systems - there is inherent"},{"line_number":160,"context_line":"risk in doing so. These systems are assumed to be using secure channels and"},{"line_number":161,"context_line":"trusted by the deployers."},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"Secrets could theoretically be stored in these backends, though the"},{"line_number":164,"context_line":"``openstack-ansible.sh`` wrapper script currently references the"},{"line_number":165,"context_line":"``user_secrets.yml`` file instead of placing those in the inventory. The"},{"line_number":166,"context_line":"system should not dictate that this is the only solution for secrets, however."},{"line_number":167,"context_line":""},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"Performance impact"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ba5201f7_aea974e1","line":166,"range":{"start_line":159,"start_character":0,"end_line":166,"end_character":78},"in_reply_to":"ba5201f7_5280c946","updated":"2017-01-04 08:47:31.000000000","message":"100% agreed.","commit_id":"61b22090ca4aeaafddb727a4cfe235969cf189aa"},{"author":{"_account_id":12892,"name":"Nolan Brubaker","email":"nolan.brubaker@rackspace.com","username":"nrb"},"change_message_id":"369880d0b46a5c6161be281d5a589322c5718f78","unresolved":false,"context_lines":[{"line_number":156,"context_line":"Security impact"},{"line_number":157,"context_line":"---------------"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"This change introduces communication to outside systems - there is inherent"},{"line_number":160,"context_line":"risk in doing so. These systems are assumed to be using secure channels and"},{"line_number":161,"context_line":"trusted by the deployers."},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"Secrets could theoretically be stored in these backends, though the"},{"line_number":164,"context_line":"``openstack-ansible.sh`` wrapper script currently references the"},{"line_number":165,"context_line":"``user_secrets.yml`` file instead of placing those in the inventory. The"},{"line_number":166,"context_line":"system should not dictate that this is the only solution for secrets, however."},{"line_number":167,"context_line":""},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"Performance impact"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ba5201f7_5280c946","line":166,"range":{"start_line":159,"start_character":0,"end_line":166,"end_character":78},"in_reply_to":"ba5201f7_6ff96a80","updated":"2017-01-03 15:15:16.000000000","message":"I\u0027m 100% against adding more than inventory storage to this spec; if the scope grows too big, it won\u0027t get done.\n\nThat said secrets and variables *can* be stored in inventory, which is what I was trying convey here. I don\u0027t think they should, but deployers can put things where they want.","commit_id":"61b22090ca4aeaafddb727a4cfe235969cf189aa"},{"author":{"_account_id":17068,"name":"Jean-Philippe Evrard","email":"openstack@a.spamming.party","username":"evrardjp"},"change_message_id":"7e6c04316695d83816da6e32c7912df8962247ca","unresolved":false,"context_lines":[{"line_number":174,"context_line":"caching are concerns."},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"Since this category is fairly broad and different systems will have different"},{"line_number":177,"context_line":"characteristics, more detail is best left to specific plugin implementations."},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"End user impact"},{"line_number":180,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ba5201f7_6f6eca30","line":177,"updated":"2017-01-03 14:57:19.000000000","message":"Ansible is definitely slow and slower depending on the size of the inventory -- relying on ansible\u0027s cache behavior is welcomed. \nThis should be automatically ok, IMO, but breaking this standard behavior should be a NO-GO.","commit_id":"61b22090ca4aeaafddb727a4cfe235969cf189aa"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"92f638025a626bf94b2ad53479a46abe074caee3","unresolved":false,"context_lines":[{"line_number":174,"context_line":"caching are concerns."},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"Since this category is fairly broad and different systems will have different"},{"line_number":177,"context_line":"characteristics, more detail is best left to specific plugin implementations."},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"End user impact"},{"line_number":180,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ba5201f7_32450570","line":177,"updated":"2017-01-03 15:20:06.000000000","message":"JP, there can be two different caches. A local cache that a plugin relies on and Ansible\u0027s fact cache. They will likely have some intersecting information but also it\u0027s possible for that intersection to not encompass everything. Using both the fact cache and a local cache in the plugin shouldn\u0027t be a \"NO-GO\". I think Nolan is leaving the door open to using both, not replacing Ansible\u0027s fact cache.","commit_id":"61b22090ca4aeaafddb727a4cfe235969cf189aa"},{"author":{"_account_id":17068,"name":"Jean-Philippe Evrard","email":"openstack@a.spamming.party","username":"evrardjp"},"change_message_id":"65d692a1cbee9ff76acb5e0957031d481090daab","unresolved":false,"context_lines":[{"line_number":174,"context_line":"caching are concerns."},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"Since this category is fairly broad and different systems will have different"},{"line_number":177,"context_line":"characteristics, more detail is best left to specific plugin implementations."},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"End user impact"},{"line_number":180,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ba5201f7_8ee830b6","line":177,"in_reply_to":"ba5201f7_32450570","updated":"2017-01-04 08:47:31.000000000","message":"Exactly my point! I am just stating what to avoid.\n\nIf this \"flexibility system\" has issues caused by (one of) its plugin loading failures, it could (not would) negatively impact the deployer. Reliability is important -- We don\u0027t want this dynamic inventory to fail and subsequently have a corrupted/incomplete inventory for ansible usage. That could be disastrous.\n\nFor the facts cache, this could technically be part of the inventory too, so I was just stating the boundary again -- I guess we assume we won\u0027t break current behavior.","commit_id":"61b22090ca4aeaafddb727a4cfe235969cf189aa"},{"author":{"_account_id":12892,"name":"Nolan Brubaker","email":"nolan.brubaker@rackspace.com","username":"nrb"},"change_message_id":"af20a1cedf8935c7c3de20a92e8a5a1b9a5334c2","unresolved":false,"context_lines":[{"line_number":174,"context_line":"caching are concerns."},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"Since this category is fairly broad and different systems will have different"},{"line_number":177,"context_line":"characteristics, more detail is best left to specific plugin implementations."},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"End user impact"},{"line_number":180,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ba5201f7_56ef9986","line":177,"in_reply_to":"ba5201f7_8ee830b6","updated":"2017-01-11 18:08:24.000000000","message":"It\u0027s true a plugin could break if their own caching system didn\u0027t work; I\u0027m not sure OSA can own that failure entirely, though. Part of the intent is to provide a way for deployers to use our environment setup without forking/changing the code, and they could write whatever they want.","commit_id":"61b22090ca4aeaafddb727a4cfe235969cf189aa"},{"author":{"_account_id":17068,"name":"Jean-Philippe Evrard","email":"openstack@a.spamming.party","username":"evrardjp"},"change_message_id":"d7aa5988e716f3260cecac6b1a70c4bfd49292a3","unresolved":false,"context_lines":[{"line_number":83,"context_line":""},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"Configuration Changes"},{"line_number":86,"context_line":"---------------------"},{"line_number":87,"context_line":"Some new configuration will likely need to be presented to the user, so that"},{"line_number":88,"context_line":"the appropriate plugins for storage can be identified. This configuration is"},{"line_number":89,"context_line":"not well suited to the ``etc/openstack_deploy/openstack_user_config_file``,"}],"source_content_type":"text/x-rst","patch_set":8,"id":"3a461143_dd459317","line":86,"updated":"2017-01-27 11:02:34.000000000","message":"nit: new line","commit_id":"062e9cb7a9120b0cafbbfe9f20f249c1c98267a5"}]}
