Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Avoid generating duplicated security-settings match elements #65

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions molecule/default/converge.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,11 @@
activemq_roles:
- name: admin
permissions: [ createNonDurableQueue, deleteNonDurableQueue, createDurableQueue, deleteDurableQueue, createAddress, deleteAddress, consume, browse, send, manage ]
- name: manager
permissions: [ browse, manage ]
- name: topicsmanager
match: topics.#
permissions: [ createNonDurableQueue, deleteNonDurableQueue, createDurableQueue, deleteDurableQueue, browse, manage ]
- name: consumer
match: topics.#
permissions: [ consume, browse ]
Expand Down
15 changes: 12 additions & 3 deletions roles/activemq/tasks/user_roles.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,17 +31,26 @@
mode: 0640
become: yes

- name: Create security settings matches
ansible.builtin.set_fact:
security_settings_matches: "{{ security_settings_matches | default({}) | combine( { match: { item.1: [ item.0.name ] } }, recursive=True, list_merge='append' ) }}"
vars:
match: "{{ item.0.match | default('#') }}"
loop: "{{ activemq_roles | subelements('permissions') }}"
loop_control:
label: "{{ item.0.match | default('#') }}"

- name: Create security settings
ansible.builtin.set_fact:
security_settings: "{{ security_settings | default([]) + [ lookup('template', 'security_settings.broker.xml.j2') ] }}"
loop: "{{ activemq_roles }}"
security_settings: "{{ security_settings | default([]) + [ lookup('template', 'security_settings.broker.xml.j2', wantlist=True) ] }}"
loop: "{{ security_settings_matches | dict2items(key_name='match', value_name='permissions') }}"

- name: Create messaging roles permissions
middleware_automation.amq.xml:
path: "{{ activemq.instance_home }}/etc/broker.xml"
xpath: /conf:configuration/core:core/core:security-settings
input_type: xml
set_children: "{{ security_settings }}"
set_children: "{{ security_settings | flatten }}"
namespaces:
conf: urn:activemq
core: urn:activemq:core
Expand Down
15 changes: 12 additions & 3 deletions roles/activemq/tasks/validate_config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -88,15 +88,24 @@
run_once: yes
delegate_to: localhost

- name: Create security settings matches
ansible.builtin.set_fact:
validate_security_settings_matches: "{{ validate_security_settings_matches | default({}) | combine( { match: { item.1: [ item.0.name ] } }, recursive=True, list_merge='append' ) }}"
vars:
match: "{{ item.0.match | default('#') }}"
loop: "{{ activemq_roles | subelements('permissions') }}"
loop_control:
label: "{{ item.0.match | default('#') }}"

- name: Create security settings
ansible.builtin.set_fact:
validate_security_settings: "{{ validate_security_settings | default([]) + [ lookup('template', 'security_settings.broker.xml.j2') ] }}"
loop: "{{ activemq_roles }}"
validate_security_settings: "{{ validate_security_settings | default([]) + [ lookup('template', 'security_settings.broker.xml.j2', wantlist=True) ] }}"
loop: "{{ validate_security_settings_matches | dict2items(key_name='match', value_name='permissions') }}"

- name: Validate security settings
middleware_automation.amq.xml:
xsd_path: "{{ local_path.stat.path }}/artemis-configuration.xsd"
xmlstring: "<core xmlns=\"urn:activemq:core\"><security-settings>{{ validate_security_settings | join(' ') | trim }}</security-settings></core>"
xmlstring: "<core xmlns=\"urn:activemq:core\"><security-settings>{{ validate_security_settings | flatten | join(' ') | trim }}</security-settings></core>"
validate: yes
input_type: xml
run_once: yes
Expand Down
8 changes: 4 additions & 4 deletions roles/activemq/templates/security_settings.broker.xml.j2
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<security-setting match="{{ item.match | default('#') }}">
{% for permission in item.permissions %}
<permission type="{{ permission }}" roles="{{ item.name }}"/>
<security-setting match="{{ item.match }}">
{% for permission, roles in item.permissions.items() %}
<permission type="{{ permission }}" roles="{{ roles | join(',') }}"/>
{% endfor %}
</security-setting>
</security-setting>