проблема с ansible playbook - PullRequest
1 голос
/ 10 июля 2020

Приведенный ниже сценарий работает нормально, но если я запустил команду lsscsi, / u01 всегда будет LUN 0 (/ dev / sd c), а / ora01 должно быть LUN1 (/ dev / sdd), а / data должно быть LUN2 ( / dev / sde). Проблема здесь в том, что иногда его меняют местами. то есть / ora01 будет LUN2, а / data будет LUN1. Пожалуйста, посоветуйте по этому поводу ..

  tasks:
    - name: vgcreate
      lvg:
           vg: "{{ item.vgname }}"
           pvs: "{{ item.pvsdisk }}"
      with_items:
       - { vgname: u01, pvsdisk: /dev/sdc }
       - { vgname: ora01, pvsdisk: /dev/sdd }
       - { vgname: data, pvsdisk: /dev/sde }

    - name: lvcreate
      lvol:
            vg: "{{ item.vgname }}"
            lv: "{{ item.lvname }}"
            size: 100%VG
      with_items:
       - { vgname: u01, lvname: lgvol_1 }
       - { vgname: ora01, lvname: lgvol_2 }
       - { vgname: data, lvname: lgvol_3 }


    - name: create file system
      filesystem:
            fstype: ext4
            dev: /dev/{{ item.vgname }}/{{ item.lvname }}
      with_items:
       - { vgname: u01, lvname: lgvol_1 }
       - { vgname: ora01, lvname: lgvol_2 }
       - { vgname: data, lvname: lgvol_3 }

    - name: mount logical volume
      mount:
            name: /{{ item.vgname }}
            src: /dev/{{ item.vgname }}/{{ item.lvname }}
            fstype: ext4
            state: mounted
      with_items:
       - { vgname: u01, lvname: lgvol_1 }
       - { vgname: ora01, lvname: lgvol_2 }
       - { vgname: data, lvname: lgvol_3 }

1 Ответ

1 голос
/ 10 июля 2020

Это не Ansible. Проблема, с которой вы сталкиваетесь, заключается в том, что имена устройств '/ dev / sda', et c не являются постоянными. Они располагаются в порядке появления, поэтому, если этот порядок отличается, устройства перечислены под разными именами. IRL, есть еще больше проблем с подходом sda, например, если какое-то устройство было отключено из-за ошибки (тайм-аут в случае ISCSI), а затем повторно подключено позже, оно может получить новое имя (например, /dev/sdg). Глубоко внутри ядра будут / dev / sda (невидимый, но занятый) и / dev / sdg - то же устройство с другим именем.

TL; DR; Не полагайтесь на нотацию / dev / sd *, если для вас важен порядок. Думайте об этом как о «наборе» дисков со случайными именами.

Если вам нужно выбрать конкретное c устройство, вам нужно найти инвариант (то, что точно есть на устройстве). Несколько вариантов:

  1. Путь SCSI
  2. Номер слота (в случае реальных устройств в корпусах)
  3. UUID файловой системы
  4. Номер детали и / или присвоенный производителем серийный номер устройства

Некоторые из этих идентификаторов возможны через / dev / disk / по - *:

  • по-id /
  • by-partlabel /
  • by-path /
  • by-label /
  • by-partuuid /
  • by-uuid /

Некоторые требуют очень вдумчивого процесса поиска (зондирование с идентификацией). Возможно, вы захотите изучить вывод нескольких инструментов:

  • blkid
  • isscsi
  • iscsiadm -m session

Или даже посмотреть в / sys / block и символические ссылки на каждом устройстве.

По сути, проблема почти такая же, как если бы какой-то парень случайно подключил ваши диски к новому компьютеру. Для чего нужен привод?

...