linux-system-roles.storage
Роль хранения в Linux
Эта роль позволяет пользователям настраивать локальное хранилище с минимальным вводом данных.
На данный момент роль поддерживает управление файловыми системами и точками монтирования на:
- дисках
- группах объемов LVM
- пулах Stratis
Также поддерживается шифрование (с использованием LUKS) и RAID (с использованием MD). Поддержка управления существующими устройствами ограничена, но новые объемы LVM и файловые системы Stratis могут быть добавлены в существующие настройки и точки монтирования, а некоторые другие функции могут быть добавлены в (или удалены из) существующих устройствах.
Требования
Смотрите ниже
Требования по коллекции
Роль требует внешние коллекции. Используйте следующую команду для их установки:
ansible-galaxy collection install -vv -r meta/collection-requirements.yml
Переменные роли
ПРИМЕЧАНИЕ: Начиная с версии 1.3.0, неуказанные параметры интерпретируются по-разному для существующих и несуществующих пулов/объемов. Для новых/несуществующих пулов и объемов любые пропущенные параметры будут использовать значение по умолчанию, как описано в defaults/main.yml. Для существующих пулов и объемов пропущенные параметры унаследуют уже имеющиеся настройки. Это означает, что для изменения/замены значений по умолчанию роли в существующем пуле или объеме вы должны явно указать новые значения/настройки в переменных роли.
storage_pools
Переменная storage_pools представляет собой список пулов для управления. Каждый пул содержит вложенный список словарей volume, как описано ниже, а также следующие ключи:
- name- Это указывает имя пула для управления/создания в виде строки. (Пример пула - группа объемов LVM.) 
- type- Это указывает тип пула для управления. Доступные значения для - type:- lvm,- stratis.
- state- Доступные значения: - present(поведение по умолчанию) или- absent. Пулы, помеченные как- absent, будут удалены ролью. Пулы, помеченные как- present, будут либо созданы (если пул с указанным- nameеще не существует), либо сохранены.
- grow_to_fill- При установленном значении физические объёмы пула будут изменены для соответствия размерам их устройств. (например, после увеличения размера диска виртуальной машины) - По умолчанию: - false- ПРИМЕЧАНИЕ: Этот аргумент применим только для LVM пулов. 
- shared- Если установлено в - true, роль создаёт или управляет общим объемом. Требуется настройка и запуск служб lvmlockd и dlm.- По умолчанию: - false- ПРЕДУПРЕЖДЕНИЕ: Изменение значения - sharedдля существующего пула является разрушительной операцией. Сам пул будет удалён в рамках этого процесса.- ПРИМЕЧАНИЕ: Этот аргумент применим только для LVM пулов. 
- disks- Список, который определяет набор дисков, используемых в качестве дискового пространства для пула. Поддерживаются идентификаторы: узел устройства (например, - /dev/sdaили- /dev/mapper/mpathb), базовое имя узла устройства (например,- sdaили- mpathb), символическая ссылка /dev/disk (например,- /dev/disk/by-id/wwn-0x5000c5005bc37f3f).- Для LVM пулов это также может быть использовано для добавления и удаления дисков в/из существующего пула. Диски в списке, которые не используются пулом, будут добавлены в пул. Диски, которые в данный момент используются пулом, но отсутствуют в списке, будут удалены из пула только если - storage_safe_modeустановлен в- false.
- raid_level- При использовании с - type: lvmуправляет группой объемов с массивом mdraid заданного уровня на ней. Входные- disksв данном случае используются в качестве участников RAID. Принятые значения:- linear,- raid0,- raid1,- raid4,- raid5,- raid6,- raid10.
- volumes- Это список объемов, принадлежащих текущему пулу. Он следует тому же шаблону, что и переменная - storage_volumes, описанная ниже.
- encryption- Это указывает, будет ли пул зашифрован с использованием LUKS. 
 ПРЕДУПРЕЖДЕНИЕ: Переключение шифрования для пула является разрушительной операцией, то есть пул будет удалён в рамках процесса добавления/удаления уровня шифрования.
- encryption_password- Эта строка указывает пароль или фразу для разблокировки/открытия объемов LUKS. 
- encryption_key- Эта строка указывает полный путь к ключевому файлу на управляемых узлах, используемому для разблокировки объемов LUKS. Пользователь этой роли должен надежно скопировать этот файл на управляемые узлы или убедиться, что файл находится на управляемых узлах. 
- encryption_cipher- Эта строка указывает не стандартный шифр, который будет использоваться LUKS. 
- encryption_key_size- Этот целое число указывает размер ключа LUKS (в байтах). 
- encryption_luks_version- Этот целое число указывает версию LUKS для использования. 
- encryption_clevis_pin- Для пулов Stratis метод clevis, который должен быть использован для шифрования созданного пула. Принятые значения: - tangи- tpm2.
- encryption_tang_url- При создании пула Stratis, зашифрованного через NBDE, указывает URL сервера. 
- encryption_tang_thumbprint- При создании пула Stratis, зашифрованного через NBDE, указывает отпечаток сервера. 
storage_volumes
Переменная storage_volumes представляет собой список объемов для управления. Каждый объем имеет следующие переменные:
- name- Это указывает имя объема. 
- type- Это указывает тип объема, на котором будет располагаться файловая система. Действительные значения для - type:- lvm,- disk,- partitionили- raid. Значение по умолчанию определяется в зависимости от ОС и версии (в данный момент- lvm).- ПРИМЕЧАНИЕ: Поддержка управления объемами разделов в настоящее время очень ограничена, роль позволяет создавать только один раздел, охватывающий весь диск. 
- state- Доступные значения: - present(поведение по умолчанию) или- absent. Объемы, помеченные как- absent, будут удалены ролью. Объемы, помеченные как- present, будут либо созданы (если объем с указанным- nameне существует), либо сохранены и, возможно, изменены, чтобы соответствовать другим значениям (например, если объем с указанным- nameсуществует, но не имеет требуемого- size, он будет изменён по размеру, если это возможно).
- disks- Это указывает набор дисков, которые будут использоваться для обеспечения файловой системы. Это в настоящее время актуально только для объемов типа - disk, где в списке должно быть только одно значение.
- size- sizeуказывает размер файловой системы. Формат этого значения предназначен для удобства восприятия человеком, например: "10g", "50 GiB". Размеры LVM объемов можно указывать как процент от размера пула/VG, например: "50%" с версии v1.4.2.- При использовании - compressionили- deduplication,- sizeможет быть установлен выше фактического доступного места, например: в 3 раза больше размера объема, основываясь на дублируемости и/или сжимаемости хранимых данных.- ПРИМЕЧАНИЕ: Запрашиваемый размер объема может быть уменьшен по мере необходимости, чтобы объем мог поместиться в доступном пространстве пула, но только если требуемое уменьшение не превышает 2% от запрашиваемого размера объема. 
- fs_type- Это указывает желаемый тип файловой системы для использования, например: "xfs", "ext4", "swap". Значение по умолчанию определяется в зависимости от ОС и версии (в данный момент - xfsдля всех поддерживаемых систем). Используйте "unformatted", если вы не хотите, чтобы файловая система присутствовала. ПРЕДУПРЕЖДЕНИЕ: Использование типа файловой системы "unformatted" на существующей файловой системе является разрушительной операцией и уничтожит все данные на объеме.
- fs_label- fs_labelэто строка для использования в качестве метки файловой системы.
- fs_create_options- fs_create_optionsуказывает кастомные аргументы для- mkfsв виде строки.
- mount_point- mount_pointуказывает директорию, на которой будет смонтирована файловая система.
- mount_options- mount_optionsуказывает кастомные параметры монтирования в виде строки, например: 'ro'.
- mount_user- mount_userуказывает желаемого владельца директории монтирования.
- mount_group- mount_groupуказывает желаемую группу директории монтирования.
- mount_mode- mount_modeуказывает желаемые права доступа для директории монтирования.
- raid_level- Указывает уровень RAID. LVM RAID также может быть создан. "Обычный" объем RAID требует, чтобы тип был - raid. LVM RAID требует, чтобы объем имел родитель- storage_poolsс типом- lvm, также необходимо указать- raid_disks. Принятые значения:- для LVM RAID объема: raid0,raid1,raid4,raid5,raid6,raid10,striped,mirror
- для RAID объема: linear,raid0,raid1,raid4,raid5,raid6,raid10
 - ПРЕДУПРЕЖДЕНИЕ: Изменение - raid_levelдля объема является разрушительной операцией, то есть все данные на этом объеме будут потеряны в процессе удаления старого и добавления нового RAID. Переформирование RAID в настоящее время не поддерживается.
- для LVM RAID объема: 
- raid_device_count- Когда тип равен - raid, указывает количество активных RAID устройств.
- raid_spare_count- Когда тип равен - raid, указывает количество резервных RAID устройств.
- raid_metadata_version- Когда тип равен - raid, указывает версию метаданных RAID в виде строки, например: '1.0'.
- raid_chunk_size- Когда тип равен - raid, указывает размер блока RAID в виде строки, например: '512 KiB'. Размер блока должен быть кратен 4 KiB.
- raid_stripe_size- Когда тип равен - lvm, указывает размер полосы LVM RAID в виде строки, например: '512 KiB'.
- raid_disks- Указывает, какие диски должны быть использованы для объема LVM RAID. необходимо указать - raid_level, и объем должен иметь родитель- storage_poolsс типом- lvm. Принимает подсписок- disksродительского- storage_pools. В случае нескольких LVM RAID объемов в одном и том же пуле хранилища, один и тот же диск может использоваться в нескольких- raid_disks.
- encryption- Это указывает, будет ли объем зашифрован с использованием LUKS. 
 ПРЕДУПРЕЖДЕНИЕ: Переключение шифрования для объема является разрушительной операцией, то есть все данные на этом объеме будут удалены в рамках процесса добавления/удаления уровня шифрования.
- encryption_password- Эта строка указывает пароль или фразу для разблокировки/открытия объемов LUKS. 
- encryption_key- Эта строка указывает полный путь к ключевому файлу на управляемых узлах, используемому для разблокировки объемов LUKS. Пользователь этой роли должен надежно скопировать этот файл на управляемые узлы или убедиться, что файл находится на управляемых узлах. 
- encryption_cipher- Эта строка указывает не стандартный шифр, который будет использоваться LUKS. 
- encryption_key_size- Этот целое число указывает размер ключа LUKS (в битах). 
- encryption_luks_version- Этот целое число указывает версию LUKS для использования. 
- deduplication- Это указывает, будет ли использоваться Оптимизатор Виртуальных Данных (VDO). При установленном значении дублированные данные, хранящиеся на объемах, будут дедуплицированы, что приведет к увеличению места на диске. Может использоваться вместе с - compressionи- vdo_pool_size. Объем должен быть частью LVM- storage_pool. Не более одного VDO- storage_volumeна- storage_pool. Основной объем должен иметь объем не менее 9 ГБ (минимум около 5 GiB).
- compression- Это указывает, будет ли использоваться Оптимизатор Виртуальных Данных (VDO). При установленном значении данные, сохраняемые на объемах, будут сжаты, что приведет к увеличению места на диске. Объем должен быть частью LVM - storage_pool. Может использоваться вместе с- deduplicationи- vdo_pool_size. Не более одного VDO- storage_volumeна- storage_pool.
- vdo_pool_size- Когда используется Оптимизатор Виртуальных Данных (VDO), это указывает фактический размер, который объем займет на устройстве. Виртуальный размер VDO объема устанавливается параметром - size. Формат- vdo_pool_sizeпредназначен для удобства восприятия человеком, например: "30g", "50GiB". Значение по умолчанию равно размеру объема.
- cached- Это указывает, должен ли объем быть кэшируемым или нет. В настоящее время это поддерживается только для объемов LVM, где используется dm-cache. 
- cache_size- Размер кэша. Формат - cache_sizeпредназначен для удобства восприятия человеком, например: "30g", "50GiB".
- cache_mode- Режим для кэша. Поддерживаемые значения включают - writethrough(по умолчанию) и- writeback.
- cache_devices- Список устройств, которые будут использоваться для кэша. Это должны быть либо физические объемы, либо диски, на которых выделены эти физические объемы. Обычно вам следует выбирать быстрые устройства, такие как SSD или NVMe диски для кэша. 
- thin- Указывает, должен ли объем быть тонко выделенным или нет. Это поддерживается только для объемов LVM. 
- thin_pool_name- Для - thinобъемов это можно использовать для указания имени пула LVM thin, который будет использоваться для объема. Если пул с указанным именем уже существует, объем будет добавлен в этот пул. Если он не существует, будет создан новый пул с именем- thin_pool_name. Если не указано:- если существующих тонких пулов нет, будет создан новый тонкий пул с автоматически сгенерированным именем,
- если существует ровно один существующий тонкий пул, тонкий объем будет добавлен в него, и
- если существует несколько тонких пулов, будет вызвано исключение.
 
- thin_pool_size- Размер для тонкого пула. Формат - thin_pool_sizeпредназначен для удобства восприятия человеком, например: "30g", "50GiB".
storage_safe_mode
Когда значение истинно (по умолчанию), возникнет ошибка вместо автоматического удаления существующих устройств и/или форматирования.
storage_udevadm_trigger
Когда значение истинно (по умолчанию является ложным), роль будет использовать udevadm trigger для немедленного применения изменений udev. Это может помочь на некоторых платформах с "ошибочным" udev.
Пример playbook
- name: Управление хранилищем
  hosts: все
  roles:
    - name: linux-system-roles.storage
      storage_pools:
        - name: app
          disks:
            - sdb
            - sdc
          volumes:
            - name: shared
              size: "100 GiB"
              mount_point: "/mnt/app/shared"
              #fs_type: xfs
              state: present
            - name: users
              size: "400g"
              fs_type: ext4
              mount_point: "/mnt/app/users"
      storage_volumes:
        - name: images
          type: диск
          disks: ["mpathc"]
          mount_point: /opt/images
          fs_label: images
rpm-ostree
Смотрите README-ostree.md
Лицензия
MIT
Configure volumes and filesystems
ansible-galaxy install linux-system-roles.storage