diff options
| author | Zuul <zuul@review.opendev.org> | 2025-03-24 14:07:09 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2025-03-24 14:07:09 +0000 |
| commit | 7667e2493116534e87ab511b5ff0ba6770f2ee92 (patch) | |
| tree | 2b4582c7bdf44a002e306128c9ac5e929e73314a /docker/kolla-toolbox | |
| parent | dc0fbd20a1b7e0bb12fd2e14a2f27cd283b61967 (diff) | |
| parent | f2fba3842cd520161f5c136297d806e9fe4d7521 (diff) | |
| download | kolla-7667e2493116534e87ab511b5ff0ba6770f2ee92.tar.gz kolla-7667e2493116534e87ab511b5ff0ba6770f2ee92.zip | |
Merge "Remove swift container images"
Diffstat (limited to 'docker/kolla-toolbox')
| -rw-r--r-- | docker/kolla-toolbox/Dockerfile.j2 | 4 | ||||
| -rw-r--r-- | docker/kolla-toolbox/find_disks.py | 360 |
2 files changed, 1 insertions, 363 deletions
diff --git a/docker/kolla-toolbox/Dockerfile.j2 b/docker/kolla-toolbox/Dockerfile.j2 index e9b38fc80..f9d700325 100644 --- a/docker/kolla-toolbox/Dockerfile.j2 +++ b/docker/kolla-toolbox/Dockerfile.j2 @@ -120,14 +120,12 @@ if [ "$fail" -eq 1 ]; then exit 1; fi ENV ANSIBLE_LIBRARY /usr/share/ansible:$ANSIBLE_LIBRARY {% endblock %} -COPY find_disks.py /usr/share/ansible/ COPY ansible.cfg /etc/ansible/ansible.cfg COPY ansible_sudoers /etc/sudoers.d/kolla_ansible_sudoers COPY extend_start.sh /usr/local/bin/kolla_extend_start COPY kolla_toolbox.sh /usr/local/bin/kolla_toolbox -RUN chmod 644 /usr/share/ansible/find_disks.py \ - /etc/ansible/ansible.cfg \ +RUN chmod 644 /etc/ansible/ansible.cfg \ /usr/local/bin/kolla_extend_start \ && chmod 755 /usr/local/bin/kolla_toolbox \ && chmod 440 /etc/sudoers.d/kolla_ansible_sudoers diff --git a/docker/kolla-toolbox/find_disks.py b/docker/kolla-toolbox/find_disks.py deleted file mode 100644 index c6c0bbef3..000000000 --- a/docker/kolla-toolbox/find_disks.py +++ /dev/null @@ -1,360 +0,0 @@ -#!/usr/bin/python - -# Copyright 2015 Sam Yaple -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# This module has been relicensed from the source below: -# https://github.com/SamYaple/yaodu/blob/master/ansible/library/ceph_osd_list - -import json -import pyudev -import re -import subprocess # nosec - -from ansible.module_utils.basic import AnsibleModule - -DOCUMENTATION = ''' ---- -module: find_disks -short_description: Return list of devices containing a specified name or label -description: - - This will return a list of all devices with either GPT partition name - or filesystem label of the name specified. -options: - match_mode: - description: - - Label match mode, either strict or prefix - default: 'strict' - required: False - choices: [ "strict", "prefix" ] - type: str - name: - description: - - Partition name or filesystem label - required: True - type: str - aliases: [ 'partition_name' ] - use_udev: - description: - - When True, use Linux udev to read disk info such as partition labels, - uuid, etc. Some older host operating systems have issues using udev to - get the info this module needs. Set to False to fall back to more low - level commands such as blkid to retrieve this information. Most users - should not need to change this. - default: True - required: False - type: bool -author: Sam Yaple -''' - -EXAMPLES = ''' -- hosts: ceph-osd - tasks: - - name: Return all valid formatted devices with the name KOLLA_CEPH_OSD - find_disks: - name: 'KOLLA_CEPH_OSD' - register: osds - -- hosts: swift-object-server - tasks: - - name: Return all valid devices with the name KOLLA_SWIFT - find_disks: - name: 'KOLLA_SWIFT' - register: swift_disks - -- hosts: swift-object-server - tasks: - - name: Return all valid devices with wildcard name 'swift_d*' - find_disks: - name: 'swift_d' match_mode: 'prefix' - register: swift_disks -''' - - -PREFERRED_DEVICE_LINK_ORDER = [ - '/dev/disk/by-uuid', - '/dev/disk/by-partuuid', - '/dev/disk/by-parttypeuuid', - '/dev/disk/by-label', - '/dev/disk/by-partlabel' -] - - -def get_id_part_entry_name(dev, use_udev): - if use_udev: - dev_name = dev.get('ID_PART_ENTRY_NAME', '') - else: - part = re.sub(r'.*[^\d]', '', dev.device_node) - parent = dev.find_parent('block').device_node - # NOTE(Mech422): Need to use -i as -p truncates the partition name - out = subprocess.Popen(['/usr/sbin/sgdisk', '-i', part, # nosec - parent], - stdout=subprocess.PIPE).communicate() - match = re.search(r'Partition name: \'(\w+)\'', out[0]) - if match: - dev_name = match.group(1) - else: - dev_name = '' - return dev_name - - -def get_id_fs_uuid(dev, use_udev): - if use_udev: - id_fs_uuid = dev.get('ID_FS_UUID', '') - else: - out = subprocess.Popen(['/usr/sbin/blkid', '-o', 'export', # nosec - dev.device_node], - stdout=subprocess.PIPE).communicate() - match = re.search(r'\nUUID=([\w-]+)', out[0]) - if match: - id_fs_uuid = match.group(1) - else: - id_fs_uuid = '' - return id_fs_uuid - - -def is_dev_matched_by_name(dev, name, mode, use_udev): - if dev.get('DEVTYPE', '') == 'partition': - dev_name = get_id_part_entry_name(dev, use_udev) - else: - dev_name = dev.get('ID_FS_LABEL', '') - - if mode == 'strict': - return dev_name == name - elif mode == 'prefix': - return dev_name.startswith(name) - else: - return False - - -def find_disk(ct, name, match_mode, use_udev): - for dev in ct.list_devices(subsystem='block'): - if is_dev_matched_by_name(dev, name, match_mode, use_udev): - yield dev - - -def get_device_link(dev): - for preferred_link in PREFERRED_DEVICE_LINK_ORDER: - for link in dev.device_links: - if link.startswith(preferred_link): - return link - return dev.device_node - - -def extract_disk_info(ct, dev, name, use_udev): - if not dev: - return - kwargs = dict() - kwargs['fs_uuid'] = get_id_fs_uuid(dev, use_udev) - kwargs['fs_label'] = dev.get('ID_FS_LABEL', '') - if dev.get('DEVTYPE', '') == 'partition': - kwargs['partition_label'] = name - kwargs['device'] = dev.find_parent('block').device_node - kwargs['partition'] = dev.device_node - kwargs['partition_num'] = re.sub(r'.*[^\d]', '', dev.device_node) - if is_dev_matched_by_name(dev, name, 'strict', use_udev): - kwargs['external_journal'] = False - # NOTE(jeffrey4l): this is only used for bootstrap osd stage and - # there is no journal partition at all. So it is OK to use - # device_node directly. - kwargs['journal'] = dev.device_node[:-1] + '2' - kwargs['journal_device'] = kwargs['device'] - kwargs['journal_num'] = 2 - else: - kwargs['external_journal'] = True - journal_name = get_id_part_entry_name(dev, use_udev) + '_J' - for journal in find_disk(ct, journal_name, 'strict', use_udev): - kwargs['journal'] = get_device_link(journal) - kwargs['journal_device'] = \ - journal.find_parent('block').device_node - kwargs['journal_num'] = \ - re.sub(r'.*[^\d]', '', journal.device_node) - break - if 'journal' not in kwargs: - # NOTE(SamYaple): Journal not found, not returning info - return - else: - kwargs['device'] = dev.device_node - yield kwargs - - -def extract_disk_info_bs(ct, dev, name, use_udev): - if not dev: - return - kwargs = dict(bs_blk_label='', bs_blk_device='', bs_db_label='', - bs_db_device='', bs_wal_label='', bs_wal_device='', - bs_wal_partition_num='', bs_db_partition_num='', - bs_blk_partition_num='', partition='', partition_label='', - partition_num='', device='', partition_usage='') - kwargs['fs_uuid'] = get_id_fs_uuid(dev, use_udev) - kwargs['fs_label'] = dev.get('ID_FS_LABEL', '') - - if dev.get('DEVTYPE', '') == 'partition': - actual_name = get_id_part_entry_name(dev, use_udev) - - if (('BOOTSTRAP_BS' in name or 'DATA_BS' in name) - and name in actual_name): - if actual_name.endswith("_B"): - kwargs['partition_usage'] = 'block' - kwargs['bs_blk_partition_num'] = \ - re.sub(r'.*[^\d]', '', dev.device_node) - kwargs['bs_blk_device'] = dev.find_parent('block').device_node - kwargs['bs_blk_label'] = actual_name - return kwargs - if actual_name.endswith("_D"): - kwargs['partition_usage'] = 'block.db' - kwargs['bs_db_partition_num'] = \ - re.sub(r'.*[^\d]', '', dev.device_node) - kwargs['bs_db_device'] = dev.find_parent('block').device_node - kwargs['bs_db_label'] = actual_name - return kwargs - if actual_name.endswith("_W"): - kwargs['partition_usage'] = 'block.wal' - kwargs['bs_wal_partition_num'] = \ - re.sub(r'.*[^\d]', '', dev.device_node) - kwargs['bs_wal_device'] = dev.find_parent('block').device_node - kwargs['bs_wal_label'] = actual_name - return kwargs - if '_BS' in actual_name: - kwargs['partition_usage'] = 'osd' - kwargs['partition'] = dev.find_parent('block').device_node - kwargs['partition_label'] = actual_name - kwargs['partition_num'] = \ - re.sub(r'.*[^\d]', '', dev.device_node) - kwargs['device'] = dev.find_parent('block').device_node - return kwargs - return 0 - - -def nb_of_osd(disks): - osd_info = dict() - osd_info['block_label'] = list() - nb_of_osds = 0 - for item in disks: - if item['partition_usage'] == 'osd': - osd_info['block_label'].append(item['partition_label']) - nb_of_osds += 1 - osd_info['nb_of_osd'] = nb_of_osds - return osd_info - - -def combine_info(disks): - info = list() - osds = nb_of_osd(disks) - osd_id = 0 - while osd_id < osds['nb_of_osd']: - final = dict() - idx = 0 - idx_osd = idx_blk = idx_wal = idx_db = -1 - for item in disks: - if (item['partition_usage'] == 'osd' and - item['partition_label'] == osds['block_label'][osd_id]): - idx_osd = idx - elif (item['partition_usage'] == 'block' and - item['bs_blk_label'] == - osds['block_label'][osd_id] + "_B"): - idx_blk = idx - elif (item['partition_usage'] == 'block.wal' and - item['bs_wal_label'] == - osds['block_label'][osd_id] + "_W"): - idx_wal = idx - elif (item['partition_usage'] == 'block.db' and - item['bs_db_label'] == - osds['block_label'][osd_id] + "_D"): - idx_db = idx - idx = idx + 1 - - # write the information of block.db and block.wal to block item - # if block.db and block.wal are found - if idx_blk != -1: - disks[idx_osd]['bs_blk_device'] = disks[idx_blk]['bs_blk_device'] - disks[idx_osd]['bs_blk_label'] = disks[idx_blk]['bs_blk_label'] - disks[idx_osd]['bs_blk_partition_num'] = \ - disks[idx_blk]['bs_blk_partition_num'] - disks[idx_blk]['partition_usage'] = '' - if idx_wal != -1: - disks[idx_osd]['bs_wal_device'] = disks[idx_wal]['bs_wal_device'] - disks[idx_osd]['bs_wal_partition_num'] = \ - disks[idx_wal]['bs_wal_partition_num'] - disks[idx_osd]['bs_wal_label'] = disks[idx_wal]['bs_wal_label'] - disks[idx_wal]['partition_usage'] = '' - if idx_db != -1: - disks[idx_osd]['bs_db_device'] = disks[idx_db]['bs_db_device'] - disks[idx_osd]['bs_db_partition_num'] = \ - disks[idx_db]['bs_db_partition_num'] - disks[idx_osd]['bs_db_label'] = disks[idx_db]['bs_db_label'] - disks[idx_db]['partition_usage'] = '' - - final['fs_uuid'] = disks[idx_osd]['fs_uuid'] - final['fs_label'] = disks[idx_osd]['fs_label'] - final['bs_blk_device'] = disks[idx_osd]['bs_blk_device'] - final['bs_blk_label'] = disks[idx_osd]['bs_blk_label'] - final['bs_blk_partition_num'] = disks[idx_osd]['bs_blk_partition_num'] - final['bs_db_device'] = disks[idx_osd]['bs_db_device'] - final['bs_db_partition_num'] = disks[idx_osd]['bs_db_partition_num'] - final['bs_db_label'] = disks[idx_osd]['bs_db_label'] - final['bs_wal_device'] = disks[idx_osd]['bs_wal_device'] - final['bs_wal_partition_num'] = disks[idx_osd]['bs_wal_partition_num'] - final['bs_wal_label'] = disks[idx_osd]['bs_wal_label'] - final['device'] = disks[idx_osd]['device'] - final['partition'] = disks[idx_osd]['partition'] - final['partition_label'] = disks[idx_osd]['partition_label'] - final['partition_num'] = disks[idx_osd]['partition_num'] - final['external_journal'] = False - final['journal'] = '' - final['journal_device'] = '' - final['journal_num'] = 0 - - info.append(final) - disks[idx_osd]['partition_usage'] = '' - osd_id += 1 - - return info - - -def main(): - argument_spec = dict( - match_mode=dict(required=False, choices=['strict', 'prefix'], - default='strict'), - name=dict(aliases=['partition_name'], required=True, type='str'), - use_udev=dict(required=False, default=True, type='bool') - ) - module = AnsibleModule(argument_spec) - match_mode = module.params.get('match_mode') - name = module.params.get('name') - use_udev = module.params.get('use_udev') - - try: - ret = list() - ct = pyudev.Context() - for dev in find_disk(ct, name, match_mode, use_udev): - if '_BS' in name: - info = extract_disk_info_bs(ct, dev, name, use_udev) - if info: - ret.append(info) - else: - for info in extract_disk_info(ct, dev, name, use_udev): - if info: - ret.append(info) - - if '_BS' in name and len(ret) > 0: - ret = combine_info(ret) - - module.exit_json(disks=json.dumps(ret)) - except Exception as e: - module.exit_json(failed=True, msg=repr(e)) - - -if __name__ == '__main__': - main() |
