如何使用ansfs使用zfs-linux创建zfs文件系统/ zpool

时间:2013-11-12 19:43:44

标签: linux ansible zfs

我希望使用ansible中的zfs模块生成以下等效项,以下使用命令行工作,但在第二次运行时失败,因为文件系统已经存在。

在此实例中,

{{part_postgres}}设置为/ dev / sdb。

zpool create -O compression = gzip postgres {{part_postgres}} -O secondarycache = all

目前在ansible我有:

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

2 个答案:

答案 0 :(得分:4)

好的 - zfs模块不会这样做,需要为zpool编写一个新模型。也就是说,使用ansible中的命令模块的“创建”注释来检查zpool是否足够容易:

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

这将检查/ postgres是否存在,如果不存在则仅运行命令。

答案 1 :(得分:0)

这里是另一个示例:

- 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