как создать файловую систему zfs/zpool с помощью ansible с помощью zfs-linux

Я хочу, чтобы эквивалент следующего был сгенерирован с использованием модуля zfs в ansible, следующий работает с использованием командной строки, но терпит неудачу при втором запуске, поскольку файловая система уже существует.

{{ part_postgres }} в данном случае имеет значение /dev/sdb.

zpool create -O сжатие = gzip postgres {{ part_postgres }} -O вторичный кеш = все

В настоящее время у меня есть:

- name: Create postgres zpool
    zfs: name=postgres{{ part_postgres }}
         compression=gzip
         state=present
         secondarycache=all
         mountpoint=/postgres
         atime=off

person Damian    schedule 12.11.2013    source источник
comment
Похоже, что в ansible нет поддержки zpool, и для него нужно будет написать новый модуль. github.com/ansible/ansible/issues/4880   -  person Damian    schedule 13.11.2013


Ответы (2)


Хорошо - модуль zfs этого не сделает, нужно будет написать новую модель для zpool. Тем не менее, достаточно легко проверить наличие zpool с помощью аннотации 'creates' для командного модуля в ansible:

  - name: Create postgres zpool
    command: zpool create -O compression=gzip postgres /dev/sdb -o ashift=12 -O    secondarycache=all
             creates=/postgres

Это проверит, существует ли /postgres, и запустит команду, только если это не так.

person Damian    schedule 14.11.2013

Вот еще один пример:

- hosts: all
  vars:
    zfs_pool_name: data
    zfs_pool_mountpoint: /mnt/data
    zfs_pool_mode: mirror
    zfs_pool_devices:
      - sda
      - sdb
    zfs_pool_state: present
    zfs_pool_options:
      - "ashift=12"
  tasks:
    - name: check ZFS pool existance
      command: zpool list -Ho name {{ zfs_pool_name }}
      register: result_pool_list
      ignore_errors: yes
      changed_when: false

    - name: create ZFS pool
      command: >-
        zpool create
        {{ '-o' if zfs_pool_options else '' }} {{ zfs_pool_options | join(' -o ') }}
        {{ '-m ' + zfs_pool_mountpoint if zfs_pool_mountpoint else '' }}
        {{ zfs_pool_name }}
        {{ zfs_pool_mode if zfs_pool_mode else '' }}
        {{ zfs_pool_devices | join(' ') }}
      when:
        - zfs_pool_state | default('present') == 'present'
        - result_pool_list.rc == 1

    - name: destroy ZFS pool
      command: zpool destroy {{ zfs_pool_name }}
      when:
        - zfs_pool_state | default('present') == 'absent'
        - result_pool_list.rc == 0
person Frock81    schedule 06.12.2019