)]}'
{"playbooks/inventory/group_vars/hosts.yml":[{"author":{"_account_id":7353,"name":"Kevin Carter","email":"kevin@cloudnull.com","username":"cloudnull"},"change_message_id":"eb415d59b35299e330fdd9439876e8553c9d62ec","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"5a5ae5dd_3202cd70","updated":"2016-02-09 13:54:13.000000000","message":"I think all of this logic can be removed if we simply state that the horizon play will always pull back policy files from the relevant service nodes which I think will be better in the long term for any deployment.","commit_id":"6c9c4fd81e9ce96c9f78cdd2933cd31e52e675a7"},{"author":{"_account_id":20038,"name":"Michael Gugino","email":"michael.gugino@walmart.com","username":"michaelgugino"},"change_message_id":"88b493c478847107198d8365d4f4e0a448ec152e","unresolved":false,"context_lines":[{"line_number":208,"context_line":"horizon_rabbitmq_vhost: /horizon"},{"line_number":209,"context_line":"#\"non-horizon role\" variables for horizon policy distribution"},{"line_number":210,"context_line":"policy_distribution_folder: \"/etc/openstack_deploy/openstack-policies/\""},{"line_number":211,"context_line":"policy_distribution_enabled: \"{% if nova_policy_overrides is defined or cinder_policy_overrides is defined or glance_policy_overrides is defined or neutron_policy_overrides is defined or keystone_policy_overrides is defined or heat_policy_overrides is defined or ceilometer_policy_overrides is defined %}True{% else %}False{% endif %}\""},{"line_number":212,"context_line":"policy_files_distribution_refresh: False"},{"line_number":213,"context_line":"#\"horizon role\" variables for horizon policy distribution"},{"line_number":214,"context_line":"horizon_override_nova_policy: \"{% if nova_policy_overrides is defined %}True{% else %}False{% endif %}\""}],"source_content_type":"text/x-yaml","patch_set":6,"id":"da6ed579_0eec7d28","line":211,"range":{"start_line":211,"start_character":0,"end_line":211,"end_character":27},"updated":"2016-01-15 15:20:53.000000000","message":"This should default to false, be set by a user variable.  Currently, it feels really unclean.","commit_id":"6c9c4fd81e9ce96c9f78cdd2933cd31e52e675a7"},{"author":{"_account_id":17068,"name":"Jean-Philippe Evrard","email":"openstack@a.spamming.party","username":"evrardjp"},"change_message_id":"189ea68ad637cd53ea85c241909a69bf51c409a0","unresolved":false,"context_lines":[{"line_number":208,"context_line":"horizon_rabbitmq_vhost: /horizon"},{"line_number":209,"context_line":"#\"non-horizon role\" variables for horizon policy distribution"},{"line_number":210,"context_line":"policy_distribution_folder: \"/etc/openstack_deploy/openstack-policies/\""},{"line_number":211,"context_line":"policy_distribution_enabled: \"{% if nova_policy_overrides is defined or cinder_policy_overrides is defined or glance_policy_overrides is defined or neutron_policy_overrides is defined or keystone_policy_overrides is defined or heat_policy_overrides is defined or ceilometer_policy_overrides is defined %}True{% else %}False{% endif %}\""},{"line_number":212,"context_line":"policy_files_distribution_refresh: False"},{"line_number":213,"context_line":"#\"horizon role\" variables for horizon policy distribution"},{"line_number":214,"context_line":"horizon_override_nova_policy: \"{% if nova_policy_overrides is defined %}True{% else %}False{% endif %}\""}],"source_content_type":"text/x-yaml","patch_set":6,"id":"da6ed579_5461a8d1","line":211,"in_reply_to":"da6ed579_0eec7d28","updated":"2016-01-15 15:57:08.000000000","message":"This is the intended behaviour: if the user has defined an override, it will automatically deploy the policy changes to horizon for him/her. If not, it will stay disabled. (cf spec: https://review.openstack.org/#/c/249227/)\n\nThe deployer can still override this by setting it to False/True depending on what (s)he wants.","commit_id":"6c9c4fd81e9ce96c9f78cdd2933cd31e52e675a7"},{"author":{"_account_id":6816,"name":"Jesse Pretorius","email":"jesse@odyssey4.me","username":"jesse-pretorius"},"change_message_id":"6f57e9fbdb610ce4a1cbbf3ab782b0f8220db357","unresolved":false,"context_lines":[{"line_number":208,"context_line":"horizon_rabbitmq_vhost: /horizon"},{"line_number":209,"context_line":"#\"non-horizon role\" variables for horizon policy distribution"},{"line_number":210,"context_line":"policy_distribution_folder: \"/etc/openstack_deploy/openstack-policies/\""},{"line_number":211,"context_line":"policy_distribution_enabled: \"{% if nova_policy_overrides is defined or cinder_policy_overrides is defined or glance_policy_overrides is defined or neutron_policy_overrides is defined or keystone_policy_overrides is defined or heat_policy_overrides is defined or ceilometer_policy_overrides is defined %}True{% else %}False{% endif %}\""},{"line_number":212,"context_line":"policy_files_distribution_refresh: False"},{"line_number":213,"context_line":"#\"horizon role\" variables for horizon policy distribution"},{"line_number":214,"context_line":"horizon_override_nova_policy: \"{% if nova_policy_overrides is defined %}True{% else %}False{% endif %}\""}],"source_content_type":"text/x-yaml","patch_set":6,"id":"5a5ae5dd_32e652e9","line":211,"in_reply_to":"da6ed579_5461a8d1","updated":"2016-02-09 12:25:01.000000000","message":"This could be made a bit cleaner by using the horizon_override_*_policy boolean values as each of those are checking if the overrides are defined.","commit_id":"6c9c4fd81e9ce96c9f78cdd2933cd31e52e675a7"},{"author":{"_account_id":20038,"name":"Michael Gugino","email":"michael.gugino@walmart.com","username":"michaelgugino"},"change_message_id":"88b493c478847107198d8365d4f4e0a448ec152e","unresolved":false,"context_lines":[{"line_number":211,"context_line":"policy_distribution_enabled: \"{% if nova_policy_overrides is defined or cinder_policy_overrides is defined or glance_policy_overrides is defined or neutron_policy_overrides is defined or keystone_policy_overrides is defined or heat_policy_overrides is defined or ceilometer_policy_overrides is defined %}True{% else %}False{% endif %}\""},{"line_number":212,"context_line":"policy_files_distribution_refresh: False"},{"line_number":213,"context_line":"#\"horizon role\" variables for horizon policy distribution"},{"line_number":214,"context_line":"horizon_override_nova_policy: \"{% if nova_policy_overrides is defined %}True{% else %}False{% endif %}\""},{"line_number":215,"context_line":"horizon_override_cinder_policy: \"{% if cinder_policy_overrides is defined %}True{% else %}False{% endif %}\""},{"line_number":216,"context_line":"horizon_override_glance_policy: \"{% if glance_policy_overrides is defined %}True{% else %}False{% endif %}\""},{"line_number":217,"context_line":"horizon_override_neutron_policy: \"{% if neutron_policy_overrides is defined %}True{% else %}False{% endif %}\""},{"line_number":218,"context_line":"horizon_override_keystone_policy: \"{% if keystone_policy_overrides is defined %}True{% else %}False{% endif %}\""},{"line_number":219,"context_line":"horizon_override_ceilometer_policy: \"{% if ceilometer_policy_overrides is defined %}True{% else %}False{% endif %}\""},{"line_number":220,"context_line":"horizon_override_heat_policy: \"{% if heat_policy_overrides is defined %}True{% else %}False{% endif %}\""},{"line_number":221,"context_line":"horizon_policy_override: \"{{ policy_distribution_enabled }}\""},{"line_number":222,"context_line":""},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"## Heat"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"da6ed579_ee100902","line":221,"range":{"start_line":214,"start_character":0,"end_line":221,"end_character":60},"updated":"2016-01-15 15:20:53.000000000","message":"These seem like they could be included in the tasks/playbooks themselves instead of here in group vars.","commit_id":"6c9c4fd81e9ce96c9f78cdd2933cd31e52e675a7"},{"author":{"_account_id":17068,"name":"Jean-Philippe Evrard","email":"openstack@a.spamming.party","username":"evrardjp"},"change_message_id":"189ea68ad637cd53ea85c241909a69bf51c409a0","unresolved":false,"context_lines":[{"line_number":218,"context_line":"horizon_override_keystone_policy: \"{% if keystone_policy_overrides is defined %}True{% else %}False{% endif %}\""},{"line_number":219,"context_line":"horizon_override_ceilometer_policy: \"{% if ceilometer_policy_overrides is defined %}True{% else %}False{% endif %}\""},{"line_number":220,"context_line":"horizon_override_heat_policy: \"{% if heat_policy_overrides is defined %}True{% else %}False{% endif %}\""},{"line_number":221,"context_line":"horizon_policy_override: \"{{ policy_distribution_enabled }}\""},{"line_number":222,"context_line":""},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"## Heat"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"da6ed579_f4cbfca1","line":221,"in_reply_to":"da6ed579_ee100902","updated":"2016-01-15 15:57:08.000000000","message":"This shouldn\u0027t be in the tasks, but they could indeed be introduced in the playbooks.\n\nThe advantage of doing it in group vars is that this could be read by other roles/playbooks.\nThe disadvantage is that \"hosts\" group is filled with variables that aren\u0027t necessarily useful.\n\nI\u0027m open to move it to the playbooks if required.","commit_id":"6c9c4fd81e9ce96c9f78cdd2933cd31e52e675a7"},{"author":{"_account_id":6816,"name":"Jesse Pretorius","email":"jesse@odyssey4.me","username":"jesse-pretorius"},"change_message_id":"6f57e9fbdb610ce4a1cbbf3ab782b0f8220db357","unresolved":false,"context_lines":[{"line_number":218,"context_line":"horizon_override_keystone_policy: \"{% if keystone_policy_overrides is defined %}True{% else %}False{% endif %}\""},{"line_number":219,"context_line":"horizon_override_ceilometer_policy: \"{% if ceilometer_policy_overrides is defined %}True{% else %}False{% endif %}\""},{"line_number":220,"context_line":"horizon_override_heat_policy: \"{% if heat_policy_overrides is defined %}True{% else %}False{% endif %}\""},{"line_number":221,"context_line":"horizon_policy_override: \"{{ policy_distribution_enabled }}\""},{"line_number":222,"context_line":""},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"## Heat"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"5a5ae5dd_d2733e14","line":221,"in_reply_to":"da6ed579_f4cbfca1","updated":"2016-02-09 12:25:01.000000000","message":"if horizon_policy_enabled and policy_distribution_enabled are always the same value - why not just have one var that covers them both?\n\nI see the logic for implementing these in the plays, as it seems that\u0027s the only place that these are used. That said, having them here does make it easy to find. We don\u0027t have a pattern convention for this and should probably figure out what we think is best.","commit_id":"6c9c4fd81e9ce96c9f78cdd2933cd31e52e675a7"}],"playbooks/os-horizon-install.yml":[{"author":{"_account_id":20038,"name":"Michael Gugino","email":"michael.gugino@walmart.com","username":"michaelgugino"},"change_message_id":"88b493c478847107198d8365d4f4e0a448ec152e","unresolved":false,"context_lines":[{"line_number":14,"context_line":"# limitations under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"- include: policy_files_distribution.yml"},{"line_number":17,"context_line":"#conditional include only works in ansible2"},{"line_number":18,"context_line":"# when: policy_distribution_enabled | bool"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"- name: Install horizon server"},{"line_number":21,"context_line":"  hosts: horizon_all"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"da6ed579_8eeaadd9","line":18,"range":{"start_line":17,"start_character":0,"end_line":18,"end_character":42},"updated":"2016-01-15 15:20:53.000000000","message":"Delete.","commit_id":"6c9c4fd81e9ce96c9f78cdd2933cd31e52e675a7"},{"author":{"_account_id":7353,"name":"Kevin Carter","email":"kevin@cloudnull.com","username":"cloudnull"},"change_message_id":"eb415d59b35299e330fdd9439876e8553c9d62ec","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"- include: policy_files_distribution.yml"},{"line_number":17,"context_line":"#conditional include only works in ansible2"},{"line_number":18,"context_line":"# when: policy_distribution_enabled | bool"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"- name: Install horizon server"},{"line_number":21,"context_line":"  hosts: horizon_all"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"5a5ae5dd_12af917e","line":18,"in_reply_to":"5a5ae5dd_52f74ef5","updated":"2016-02-09 13:54:13.000000000","message":"++","commit_id":"6c9c4fd81e9ce96c9f78cdd2933cd31e52e675a7"},{"author":{"_account_id":6816,"name":"Jesse Pretorius","email":"jesse@odyssey4.me","username":"jesse-pretorius"},"change_message_id":"6f57e9fbdb610ce4a1cbbf3ab782b0f8220db357","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"- include: policy_files_distribution.yml"},{"line_number":17,"context_line":"#conditional include only works in ansible2"},{"line_number":18,"context_line":"# when: policy_distribution_enabled | bool"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"- name: Install horizon server"},{"line_number":21,"context_line":"  hosts: horizon_all"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"5a5ae5dd_52f74ef5","line":18,"in_reply_to":"7a5de9d1_ec4ebf95","updated":"2016-02-09 12:25:01.000000000","message":"Agreed with Hugh - use the standard formal for TODO\u0027s - it\u0027s easier to search for that way.","commit_id":"6c9c4fd81e9ce96c9f78cdd2933cd31e52e675a7"},{"author":{"_account_id":17068,"name":"Jean-Philippe Evrard","email":"openstack@a.spamming.party","username":"evrardjp"},"change_message_id":"189ea68ad637cd53ea85c241909a69bf51c409a0","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"- include: policy_files_distribution.yml"},{"line_number":17,"context_line":"#conditional include only works in ansible2"},{"line_number":18,"context_line":"# when: policy_distribution_enabled | bool"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"- name: Install horizon server"},{"line_number":21,"context_line":"  hosts: horizon_all"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"da6ed579_b4526465","line":18,"in_reply_to":"da6ed579_8eeaadd9","updated":"2016-01-15 15:57:08.000000000","message":"This is not the only place we\u0027ve done these kind of reminders.\nI\u0027d be happy to remove the comments and the useless lines on the other files when ansible2 will be the official ansible version for openstack-ansible.\n\nIn the meantime, I will follow the majority: if the majority wants to remove this comment, I\u0027ll remove it. Or maybe should I be more clear by mentioning TODO ansible2: remove this comment and the lines in the ... file?","commit_id":"6c9c4fd81e9ce96c9f78cdd2933cd31e52e675a7"},{"author":{"_account_id":7217,"name":"Hugh Saunders","email":"hugh@wherenow.org","username":"hughsaunders"},"change_message_id":"36dfa1e0f4f908cced77dcf4a4e5d895a5f9cc7f","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"- include: policy_files_distribution.yml"},{"line_number":17,"context_line":"#conditional include only works in ansible2"},{"line_number":18,"context_line":"# when: policy_distribution_enabled | bool"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"- name: Install horizon server"},{"line_number":21,"context_line":"  hosts: horizon_all"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"7a5de9d1_ec4ebf95","line":18,"in_reply_to":"da6ed579_b4526465","updated":"2016-01-27 10:43:25.000000000","message":"I think its a good idea to note things that can be improved when we switch to ansible v2. I also think the standard tood format would be better: TODO(evrardjp): ansiblev2 ..","commit_id":"6c9c4fd81e9ce96c9f78cdd2933cd31e52e675a7"}],"playbooks/policy_files_distribution.yml":[{"author":{"_account_id":7353,"name":"Kevin Carter","email":"kevin@cloudnull.com","username":"cloudnull"},"change_message_id":"eb415d59b35299e330fdd9439876e8553c9d62ec","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"5a5ae5dd_1281d1fb","updated":"2016-02-09 13:54:13.000000000","message":"In reading this file I\u0027d almost like to see this done as a post_task/pre_task in the horizon play and executed regardless of overrides. I say this because it\u0027s likely, in the course of the deployment lifecycle, for a deployer to make hardening or other changes to a policy file and in this way horizon would always respect the definitions set within the policy file. \n\nRegarding the process, I think we can accomplish a lot of the conditional logic by using the slurp module instead of a local fetch and push. Being that the play has to know about all of the groups anyway, the main os-horizon-install.yml play could simply slurp all of the policy files in a post_task/pre_task using delegate_to from all of the relevant service nodes and simply write out the the base64 decoded content directly on to all of the horizon nodes. This will save us from having to temporarily store content on the deployment node.","commit_id":"6c9c4fd81e9ce96c9f78cdd2933cd31e52e675a7"},{"author":{"_account_id":6816,"name":"Jesse Pretorius","email":"jesse@odyssey4.me","username":"jesse-pretorius"},"change_message_id":"6f57e9fbdb610ce4a1cbbf3ab782b0f8220db357","unresolved":false,"context_lines":[{"line_number":21,"context_line":"        path: \"{{ policy_distribution_folder }}keystone_policy.json\""},{"line_number":22,"context_line":"      when: \u003e"},{"line_number":23,"context_line":"        policy_distribution_enabled | bool and"},{"line_number":24,"context_line":"        keystone_policy_overrides is defined"},{"line_number":25,"context_line":"      register: keystone_policy_file"},{"line_number":26,"context_line":"      tags:"},{"line_number":27,"context_line":"        - policy_files_distribution"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"5a5ae5dd_126f9693","line":24,"updated":"2016-02-09 12:25:01.000000000","message":"It\u0027d be better to use the list format here, ie:\n\n      when:\n        - policy_distribution_enabled | bool\n        - keystone_policy_overrides is defined","commit_id":"6c9c4fd81e9ce96c9f78cdd2933cd31e52e675a7"},{"author":{"_account_id":6816,"name":"Jesse Pretorius","email":"jesse@odyssey4.me","username":"jesse-pretorius"},"change_message_id":"6f57e9fbdb610ce4a1cbbf3ab782b0f8220db357","unresolved":false,"context_lines":[{"line_number":33,"context_line":"      when: \u003e"},{"line_number":34,"context_line":"        policy_distribution_enabled | bool and"},{"line_number":35,"context_line":"        keystone_policy_overrides is defined and"},{"line_number":36,"context_line":"        ( not keystone_policy_file.stat.exists or horizon_policy_files_distribution_refresh | bool )"},{"line_number":37,"context_line":"      tags:"},{"line_number":38,"context_line":"        - policy_files_distribution"},{"line_number":39,"context_line":"        - policy_files_download"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"5a5ae5dd_b26b2285","line":36,"updated":"2016-02-09 12:25:01.000000000","message":"It\u0027d be better to use the list format here.","commit_id":"6c9c4fd81e9ce96c9f78cdd2933cd31e52e675a7"},{"author":{"_account_id":6816,"name":"Jesse Pretorius","email":"jesse@odyssey4.me","username":"jesse-pretorius"},"change_message_id":"6f57e9fbdb610ce4a1cbbf3ab782b0f8220db357","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        path: \"{{ policy_distribution_folder }}nova_policy.json\""},{"line_number":47,"context_line":"      when: \u003e"},{"line_number":48,"context_line":"        policy_distribution_enabled | bool and"},{"line_number":49,"context_line":"        nova_policy_overrides is defined"},{"line_number":50,"context_line":"      register: nova_policy_file"},{"line_number":51,"context_line":"      tags:"},{"line_number":52,"context_line":"        - policy_files_distribution"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"5a5ae5dd_920946e0","line":49,"updated":"2016-02-09 12:25:01.000000000","message":"It\u0027d be better to use the list format here.","commit_id":"6c9c4fd81e9ce96c9f78cdd2933cd31e52e675a7"},{"author":{"_account_id":6816,"name":"Jesse Pretorius","email":"jesse@odyssey4.me","username":"jesse-pretorius"},"change_message_id":"6f57e9fbdb610ce4a1cbbf3ab782b0f8220db357","unresolved":false,"context_lines":[{"line_number":58,"context_line":"      when: \u003e"},{"line_number":59,"context_line":"        policy_distribution_enabled | bool and"},{"line_number":60,"context_line":"        nova_policy_overrides is defined and"},{"line_number":61,"context_line":"        ( not nova_policy_file.stat.exists or horizon_policy_files_distribution_refresh | bool )"},{"line_number":62,"context_line":"      tags:"},{"line_number":63,"context_line":"        - policy_files_distribution"},{"line_number":64,"context_line":"        - policy_files_download"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"5a5ae5dd_5213ce0d","line":61,"updated":"2016-02-09 12:25:01.000000000","message":"It\u0027d be better to use the list format here.","commit_id":"6c9c4fd81e9ce96c9f78cdd2933cd31e52e675a7"},{"author":{"_account_id":6816,"name":"Jesse Pretorius","email":"jesse@odyssey4.me","username":"jesse-pretorius"},"change_message_id":"6f57e9fbdb610ce4a1cbbf3ab782b0f8220db357","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        path: \"{{ policy_distribution_folder }}cinder_policy.json\""},{"line_number":72,"context_line":"      when: \u003e"},{"line_number":73,"context_line":"        policy_distribution_enabled | bool and"},{"line_number":74,"context_line":"        cinder_policy_overrides is defined"},{"line_number":75,"context_line":"      register: cinder_policy_file"},{"line_number":76,"context_line":"      tags:"},{"line_number":77,"context_line":"        - policy_files_distribution"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"5a5ae5dd_f2f8bac6","line":74,"updated":"2016-02-09 12:25:01.000000000","message":"It\u0027d be better to use the list format here.","commit_id":"6c9c4fd81e9ce96c9f78cdd2933cd31e52e675a7"},{"author":{"_account_id":6816,"name":"Jesse Pretorius","email":"jesse@odyssey4.me","username":"jesse-pretorius"},"change_message_id":"6f57e9fbdb610ce4a1cbbf3ab782b0f8220db357","unresolved":false,"context_lines":[{"line_number":83,"context_line":"      when: \u003e"},{"line_number":84,"context_line":"        policy_distribution_enabled | bool and"},{"line_number":85,"context_line":"        cinder_policy_overrides is defined and"},{"line_number":86,"context_line":"        ( not cinder_policy_file.stat.exists or horizon_policy_files_distribution_refresh | bool )"},{"line_number":87,"context_line":"      tags:"},{"line_number":88,"context_line":"        - policy_files_distribution"},{"line_number":89,"context_line":"        - policy_files_download"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"5a5ae5dd_b219e224","line":86,"updated":"2016-02-09 12:25:01.000000000","message":"It\u0027d be better to use the list format here.","commit_id":"6c9c4fd81e9ce96c9f78cdd2933cd31e52e675a7"},{"author":{"_account_id":6816,"name":"Jesse Pretorius","email":"jesse@odyssey4.me","username":"jesse-pretorius"},"change_message_id":"6f57e9fbdb610ce4a1cbbf3ab782b0f8220db357","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        path: \"{{ policy_distribution_folder }}glance_policy.json\""},{"line_number":97,"context_line":"      when: \u003e"},{"line_number":98,"context_line":"        policy_distribution_enabled | bool and"},{"line_number":99,"context_line":"        glance_policy_overrides is defined"},{"line_number":100,"context_line":"      register: glance_policy_file"},{"line_number":101,"context_line":"      tags:"},{"line_number":102,"context_line":"        - policy_files_distribution"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"5a5ae5dd_92d70623","line":99,"updated":"2016-02-09 12:25:01.000000000","message":"It\u0027d be better to use the list format here.","commit_id":"6c9c4fd81e9ce96c9f78cdd2933cd31e52e675a7"},{"author":{"_account_id":6816,"name":"Jesse Pretorius","email":"jesse@odyssey4.me","username":"jesse-pretorius"},"change_message_id":"6f57e9fbdb610ce4a1cbbf3ab782b0f8220db357","unresolved":false,"context_lines":[{"line_number":108,"context_line":"      when: \u003e"},{"line_number":109,"context_line":"        policy_distribution_enabled | bool and"},{"line_number":110,"context_line":"        glance_policy_overrides is defined and"},{"line_number":111,"context_line":"        ( not glance_policy_file.stat.exists or horizon_policy_files_distribution_refresh | bool )"},{"line_number":112,"context_line":"      tags:"},{"line_number":113,"context_line":"        - policy_files_distribution"},{"line_number":114,"context_line":"        - policy_files_download"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"5a5ae5dd_72d28a36","line":111,"updated":"2016-02-09 12:25:01.000000000","message":"It\u0027d be better to use the list format here.","commit_id":"6c9c4fd81e9ce96c9f78cdd2933cd31e52e675a7"},{"author":{"_account_id":6816,"name":"Jesse Pretorius","email":"jesse@odyssey4.me","username":"jesse-pretorius"},"change_message_id":"6f57e9fbdb610ce4a1cbbf3ab782b0f8220db357","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        path: \"{{ policy_distribution_folder }}heat_policy.json\""},{"line_number":122,"context_line":"      when: \u003e"},{"line_number":123,"context_line":"        policy_distribution_enabled | bool and"},{"line_number":124,"context_line":"        heat_policy_overrides is defined"},{"line_number":125,"context_line":"      register: heat_policy_file"},{"line_number":126,"context_line":"      tags:"},{"line_number":127,"context_line":"        - policy_files_distribution"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"5a5ae5dd_f2e67a15","line":124,"updated":"2016-02-09 12:25:01.000000000","message":"It\u0027d be better to use the list format here.","commit_id":"6c9c4fd81e9ce96c9f78cdd2933cd31e52e675a7"},{"author":{"_account_id":6816,"name":"Jesse Pretorius","email":"jesse@odyssey4.me","username":"jesse-pretorius"},"change_message_id":"6f57e9fbdb610ce4a1cbbf3ab782b0f8220db357","unresolved":false,"context_lines":[{"line_number":133,"context_line":"      when: \u003e"},{"line_number":134,"context_line":"        policy_distribution_enabled | bool and"},{"line_number":135,"context_line":"        heat_policy_overrides is defined and"},{"line_number":136,"context_line":"        ( not heat_policy_file.stat.exists or horizon_policy_files_distribution_refresh | bool )"},{"line_number":137,"context_line":"      tags:"},{"line_number":138,"context_line":"        - policy_files_distribution"},{"line_number":139,"context_line":"        - policy_files_download"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"5a5ae5dd_12e4760b","line":136,"updated":"2016-02-09 12:25:01.000000000","message":"It\u0027d be better to use the list format here.","commit_id":"6c9c4fd81e9ce96c9f78cdd2933cd31e52e675a7"},{"author":{"_account_id":6816,"name":"Jesse Pretorius","email":"jesse@odyssey4.me","username":"jesse-pretorius"},"change_message_id":"6f57e9fbdb610ce4a1cbbf3ab782b0f8220db357","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        path: \"{{ policy_distribution_folder }}neutron_policy.json\""},{"line_number":147,"context_line":"      when: \u003e"},{"line_number":148,"context_line":"        policy_distribution_enabled | bool and"},{"line_number":149,"context_line":"        neutron_policy_overrides is defined"},{"line_number":150,"context_line":"      register: neutron_policy_file"},{"line_number":151,"context_line":"      tags:"},{"line_number":152,"context_line":"        - policy_files_distribution"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"5a5ae5dd_32b3b20c","line":149,"updated":"2016-02-09 12:25:01.000000000","message":"It\u0027d be better to use the list format here.","commit_id":"6c9c4fd81e9ce96c9f78cdd2933cd31e52e675a7"},{"author":{"_account_id":6816,"name":"Jesse Pretorius","email":"jesse@odyssey4.me","username":"jesse-pretorius"},"change_message_id":"6f57e9fbdb610ce4a1cbbf3ab782b0f8220db357","unresolved":false,"context_lines":[{"line_number":158,"context_line":"      when: \u003e"},{"line_number":159,"context_line":"        policy_distribution_enabled | bool and"},{"line_number":160,"context_line":"        neutron_policy_overrides is defined and"},{"line_number":161,"context_line":"        ( not neutron_policy_file.stat.exists or horizon_policy_files_distribution_refresh | bool )"},{"line_number":162,"context_line":"      tags:"},{"line_number":163,"context_line":"        - policy_files_distribution"},{"line_number":164,"context_line":"        - policy_files_download"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"5a5ae5dd_92be26d3","line":161,"updated":"2016-02-09 12:25:01.000000000","message":"It\u0027d be better to use the list format here.","commit_id":"6c9c4fd81e9ce96c9f78cdd2933cd31e52e675a7"},{"author":{"_account_id":6816,"name":"Jesse Pretorius","email":"jesse@odyssey4.me","username":"jesse-pretorius"},"change_message_id":"6f57e9fbdb610ce4a1cbbf3ab782b0f8220db357","unresolved":false,"context_lines":[{"line_number":171,"context_line":"        path: \"{{ policy_distribution_folder }}ceilometer_policy.json\""},{"line_number":172,"context_line":"      when: \u003e"},{"line_number":173,"context_line":"        policy_distribution_enabled | bool and"},{"line_number":174,"context_line":"        ceilometer_policy_overrides is defined"},{"line_number":175,"context_line":"      register: ceilometer_policy_file"},{"line_number":176,"context_line":"      tags:"},{"line_number":177,"context_line":"        - policy_files_distribution"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"5a5ae5dd_f2cd1a87","line":174,"updated":"2016-02-09 12:25:01.000000000","message":"It\u0027d be better to use the list format here.","commit_id":"6c9c4fd81e9ce96c9f78cdd2933cd31e52e675a7"},{"author":{"_account_id":6816,"name":"Jesse Pretorius","email":"jesse@odyssey4.me","username":"jesse-pretorius"},"change_message_id":"6f57e9fbdb610ce4a1cbbf3ab782b0f8220db357","unresolved":false,"context_lines":[{"line_number":183,"context_line":"      when: \u003e"},{"line_number":184,"context_line":"        policy_distribution_enabled | bool and"},{"line_number":185,"context_line":"        ceilometer_policy_overrides is defined and"},{"line_number":186,"context_line":"        ( not ceilometer_policy_file.stat.exists or horizon_policy_files_distribution_refresh | bool )"},{"line_number":187,"context_line":"      tags:"},{"line_number":188,"context_line":"        - policy_files_distribution"},{"line_number":189,"context_line":"        - policy_files_download"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"5a5ae5dd_b2c7a263","line":186,"updated":"2016-02-09 12:25:01.000000000","message":"It\u0027d be better to use the list format here.","commit_id":"6c9c4fd81e9ce96c9f78cdd2933cd31e52e675a7"},{"author":{"_account_id":6816,"name":"Jesse Pretorius","email":"jesse@odyssey4.me","username":"jesse-pretorius"},"change_message_id":"6f57e9fbdb610ce4a1cbbf3ab782b0f8220db357","unresolved":false,"context_lines":[{"line_number":196,"context_line":"        state: directory"},{"line_number":197,"context_line":"        mode: \"0755\""},{"line_number":198,"context_line":"      when: \u003e"},{"line_number":199,"context_line":"        policy_distribution_enabled | bool"},{"line_number":200,"context_line":"    - name: Dropping policy files"},{"line_number":201,"context_line":"      copy:"},{"line_number":202,"context_line":"        src: \"{{ item }}\""}],"source_content_type":"text/x-yaml","patch_set":6,"id":"5a5ae5dd_92a5c6b6","line":199,"updated":"2016-02-09 12:25:01.000000000","message":"It\u0027d be better to use the list format here.","commit_id":"6c9c4fd81e9ce96c9f78cdd2933cd31e52e675a7"},{"author":{"_account_id":6816,"name":"Jesse Pretorius","email":"jesse@odyssey4.me","username":"jesse-pretorius"},"change_message_id":"6f57e9fbdb610ce4a1cbbf3ab782b0f8220db357","unresolved":false,"context_lines":[{"line_number":202,"context_line":"        src: \"{{ item }}\""},{"line_number":203,"context_line":"        dest: \"{{ horizon_policy_folder | default(\u0027/etc/horizon/policies/\u0027) }}\""},{"line_number":204,"context_line":"      when: \u003e"},{"line_number":205,"context_line":"        policy_distribution_enabled | bool"},{"line_number":206,"context_line":"      with_fileglob:"},{"line_number":207,"context_line":"        - \"{{ policy_distribution_folder }}/*.json\""}],"source_content_type":"text/x-yaml","patch_set":6,"id":"5a5ae5dd_32aad286","line":205,"updated":"2016-02-09 12:25:01.000000000","message":"It\u0027d be better to use the list format here.","commit_id":"6c9c4fd81e9ce96c9f78cdd2933cd31e52e675a7"}],"playbooks/roles/os_horizon/templates/horizon_local_settings.py.j2":[{"author":{"_account_id":7353,"name":"Kevin Carter","email":"kevin@cloudnull.com","username":"cloudnull"},"change_message_id":"eb415d59b35299e330fdd9439876e8553c9d62ec","unresolved":false,"context_lines":[{"line_number":421,"context_line":"#}"},{"line_number":422,"context_line":"{% if horizon_policy_override | bool %}"},{"line_number":423,"context_line":"POLICY_FILES_PATH \u003d \u0027{{ horizon_policy_folder }}\u0027"},{"line_number":424,"context_line":"POLICY_FILES \u003d { {% if horizon_override_keystone_policy | bool  %} \u0027identity\u0027: \u0027keystone_policy.json\u0027,{% endif %}"},{"line_number":425,"context_line":"{% if horizon_override_nova_policy | bool %} \u0027compute\u0027: \u0027nova_policy.json\u0027,{% endif %}"},{"line_number":426,"context_line":"{% if horizon_override_cinder_policy | bool %} \u0027volume\u0027: \u0027cinder_policy.json\u0027,{% endif %}"},{"line_number":427,"context_line":"{% if horizon_override_glance_policy | bool %} \u0027image\u0027: \u0027glance_policy.json\u0027,{% endif %}"}],"source_content_type":"text/x-jinja2","patch_set":6,"id":"5a5ae5dd_72cb651f","line":424,"updated":"2016-02-09 13:54:13.000000000","message":"I\u0027d almost like this to be something that is accomplished by a simple ansible library that is in the horizon role which can index and return a dictionary of all of the discovered policy files within the \"horizon_policy_folder\" variable. In that way we can key off of the first word in the policy file as the service name and this list can be generated dynamically over time instead of having to always move this target as we add additional services.","commit_id":"6c9c4fd81e9ce96c9f78cdd2933cd31e52e675a7"}]}
