|
| 1 | +--- |
| 2 | +- name: Get current Kafka features |
| 3 | + ansible.builtin.command: >- |
| 4 | + /usr/bin/kafka-features |
| 5 | + --bootstrap-server {{ hostvars[inventory_hostname]|confluent.platform.resolve_hostname }}:{{kafka_broker_listeners[kafka_broker_inter_broker_listener_name]['port']}} |
| 6 | + --command-config {{ kafka_broker.client_config_file }} |
| 7 | + describe |
| 8 | + register: current_features |
| 9 | + failed_when: false |
| 10 | + changed_when: false |
| 11 | + check_mode: false |
| 12 | + when: kafka_broker_metadata_version is defined |
| 13 | + |
| 14 | +- name: Get Kafka feature metadata.version |
| 15 | + ansible.builtin.set_fact: |
| 16 | + metadata_version_enabled: "{{ 'metadata.version' in current_features.stdout }}" |
| 17 | + metadata_versions: >- |
| 18 | + {{ |
| 19 | + dict(current_features.stdout |
| 20 | + | regex_search('Feature: metadata.version.*$') |
| 21 | + | regex_findall('(SupportedMinVersion|SupportedMaxVersion|FinalizedVersionLevel):\s+(\S+)') |
| 22 | + ) |
| 23 | + }} |
| 24 | + when: current_features is defined |
| 25 | + |
| 26 | +# Create a numeric only representation of the metadata_versions. |
| 27 | +# Used for comparison, could probably be done in the previous task, or |
| 28 | +# a simple function instead, kept open for extension for now. |
| 29 | +- name: Numeric metadata.version |
| 30 | + ansible.builtin.set_fact: |
| 31 | + metadata_versions_numeric: >- |
| 32 | + {{ dict(metadata_versions.keys() | zip(metadata_versions.values() | map('regex_replace', '-IV\d+', '') | map('float') ) ) }} |
| 33 | + upgrade_to_version: >- |
| 34 | + {{ kafka_broker_metadata_version | regex_replace('-IV\d+', '') | float }} |
| 35 | + when: metadata_version_enabled | bool |
| 36 | + |
| 37 | +- name: Status of metadata.version |
| 38 | + ansible.builtin.debug: |
| 39 | + msg: |
| 40 | + - "Required version: {{ kafka_broker_metadata_version }} ({{ upgrade_to_version }})" |
| 41 | + - "Finalized version: {{ metadata_versions.FinalizedVersionLevel }} ({{ metadata_versions_numeric.FinalizedVersionLevel }})" |
| 42 | + - "Supported min version: {{ metadata_versions.SupportedMinVersion }} ({{ metadata_versions_numeric.SupportedMinVersion }})" |
| 43 | + - "Supported max version: {{ metadata_versions.SupportedMaxVersion }} ({{ metadata_versions_numeric.SupportedMaxVersion }})" |
| 44 | + |
| 45 | +- name: Upgrade metadata.version if needed |
| 46 | + ansible.builtin.command: >- |
| 47 | + /usr/bin/kafka-features |
| 48 | + --bootstrap-server {{ hostvars[inventory_hostname]|confluent.platform.resolve_hostname }}:{{kafka_broker_listeners[kafka_broker_inter_broker_listener_name]['port']}} |
| 49 | + --command-config {{ kafka_broker.client_config_file }} |
| 50 | + upgrade --metadata {{ kafka_broker_metadata_version }} |
| 51 | + register: upgrade_metadata_version |
| 52 | + when: |
| 53 | + - upgrade_to_version is defined |
| 54 | + - upgrade_to_version | regex_search('^\d+\.\d+$') |
| 55 | + - (upgrade_to_version | float) >= metadata_versions_numeric.SupportedMinVersion |
| 56 | + - (upgrade_to_version | float) <= metadata_versions_numeric.SupportedMaxVersion |
| 57 | + - (upgrade_to_version | float) > metadata_versions_numeric.FinalizedVersionLevel |
| 58 | + ignore_errors: true |
| 59 | + changed_when: |
| 60 | + - upgrade_metadata_version.rc == 0 |
| 61 | + - "'metadata.version was upgraded' in upgrade_metadata_version.stdout" |
| 62 | + failed_when: |
| 63 | + - upgrade_metadata_version.rc != 0 |
| 64 | + - "'Unsupported' in upgrade_metadata_version.stderr" |
0 commit comments