Skip to content

Commit

Permalink
Merge pull request #65 from guidograzioli/do_not_generate_dup_securit…
Browse files Browse the repository at this point in the history
…ysettings

Avoid generating duplicated security-settings match elements
  • Loading branch information
guidograzioli authored Apr 8, 2023
2 parents 91bc07a + e0cd0f5 commit 689885b
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 10 deletions.
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>

0 comments on commit 689885b

Please sign in to comment.