Я использую Terraform для автоматизации создания виртуальных машин в Microsoft Azure. Сценарий Terraform должен принять конфигурацию диска данных, как показано ниже (см. data_disk_size_gb), создайте виртуальный жесткий диск и впоследствии смонтируйте его по указанному пути файловой системы.
модуль "jumphost" {
    количество = 1
    источник = "../модули/сервисы/jumphost"
    префикс = "${module.global-vars.project}-${var.environment}"
    rg = azurerm_resource_group.rg
    vm_size = "Стандартный_D2s_v4"
    подсеть = azurerm_subnet.веб-подсеть
    private_ip_address = "10.0.1.250"
    data_disk_size_gb = [ 
        ["/данные", 100],
        ["/данные2", 200]
    ]
    admin_username = "зайдваки"
    admin_public_key_path = "../id_rsa.pub"
    nsg_allow_tcp_ports = [22]
    public_ip_address = правда
}
Создание виртуальных жестких дисков и подключение к виртуальной машине выполняются, как показано ниже, что, я считаю, работает хорошо и не является причиной проблемы.
ресурс "azurerm_managed_disk" "диск данных" {
    количество = длина (var.data_disk_size_gb)
    name = "${var.prefix}-${var.service_name}-data-disk-${count.index}"
    местоположение = var.rg.location
    имя_группы_ресурсов = var.rg.name
    storage_account_type = "Стандартный_LRS"
    create_option = "Пусто"
    disk_size_gb = var.data_disk_size_gb[count.index][1]
}
ресурс "azurerm_virtual_machine_data_disk_attachment" "внешний" {
    count = длина (azurerm_managed_disk.data-disk)
    управляемый_диск_ид = "${azurerm_managed_disk.data-disk[count.index].id}"  
    виртуальная_машина_ид = azurerm_linux_virtual_machine.vm.id  
    лун = "${count.index + 10}"  
    кэширование = "Чтение-Запись"  
}
Чтобы использовать предоставленные диски данных, предусмотрены конфигурации cloud-init для обработки разделов, создания и монтирования файловой системы. Информация для этого предоставляется конфигурацией Terraform через данные template_cloudinit_config, который будет передан виртуальной машине custom_data атрибут
данные "template_cloudinit_config" "config" {
  gzip = правда
  base64_encode = истина
  часть {
      имя_файла = "init-cloud-config"
      content_type = "текст/облачная конфигурация"
      содержимое = файл("../modules/services/${var.service_name}/init.yaml")
  }
  часть {
      имя_файла = "init-shellscript"
      content_type = "текст/x-shellscript"
      content = templatefile("../modules/services/${var.service_name}/init.sh",
        { 
          hostname = "${var.prefix}-${var.service_name}"
          data_disk_size_gb = var.data_disk_size_gb
        }
      )
  }
}
Сценарий оболочки cloud-init init.sh который принимает параметр, как показано ниже
#!/бин/баш
hostnamectl set-hostname ${hostname}
%{ для индекса, диск в data_disk_size_gb ~}
parted /dev/sd${ split("","bcdef")[index] } --script mklabel gpt mkpart xfspart xfs 0% 100%
mkfs.xfs /dev/sd${ split("","bcdef")[index] }1
partprobe /dev/sd${ split("","bcdef")[index] }1
mkdir -p ${диск[0]}
mount /dev/sd${ split("","bcdef")[index] }1 ${disk[0] }
echo UUID=\"`(blkid /dev/sd${ split("","bcdef")[index] }1 -s UUID -o значение)`\" ${ disk[0] } xfs по умолчанию, nofail 1 2 >> /etc/fstab
%{конец~}
По завершении применить терраформ, /данные и /данные2 не видны в дф вывод. Я ожидаю увидеть записи для /dev/sdb1 и /dev/sdc1 с точками крепления /данные и /данные2 соответственно.
[zaidwaqi@starter-stage-jumphost ~]$ ls /
bin boot dev и т. д. домашняя библиотека lib64 media mnt opt proc root run sbin srv sys tmp usr var
[zaidwaqi@starter-stage-jumphost ~]$ df -h
Используемый размер файловой системы Доступно Использование % Установлено на
devtmpfs 3.9G 0 3.9G 0% /dev
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 3.9G 8.6M 3.9G 1%/запуск
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/sda2 30G 1.8G 28G 7%/
/dev/sda1 496M 73M 424M 15% /загрузка
/dev/sda15 495M 6,9M 488M 2% /boot/efi
tmpfs 798M 0 798M 0% /выполнить/пользователь/1000
Диагностическая информация
/var/lib/cloud/instance/scripts/
#!/бин/баш
hostnamectl set-hostname starter-stage-jumphost
parted /dev/sdb --script mklabel gpt mkpart xfspart xfs 0% 100%
mkfs.xfs /dev/sdb1
часть зонда /dev/sdb1
mkdir-p/данные
смонтировать /dev/sdb1 /данные
echo UUID=\"`(blkid /dev/sdb1 -s UUID -o value)`\" /data xfs по умолчанию, nofail 1 2 >> /etc/fstab 
parted /dev/sdc --script mklabel gpt mkpart xfspart xfs 0% 100%
mkfs.xfs /dev/sdc1
часть зонда /dev/sdc1
mkdir-p/данные2
смонтировать /dev/sdc1 /data2
echo UUID=\"`(blkid /dev/sdc1 -s UUID -o value)`\" /data2 xfs по умолчанию, nofail 1 2 >> /etc/fstab
[zaidwaqi@starter-stage-jumphost скрипты]$ 
/var/log/cloud-init.log
Частичное содержимое журнала. Надеюсь, я покажу соответствующую часть ниже.
2021-07-03 05:42:43,635 - cc_disk_setup.py[DEBUG]: создание новой таблицы разделов/диска
2021-07-03 05:42:43,635 - util.py[DEBUG]: выполнение команды ['udevadm', 'settle'] с разрешенными кодами возврата [0] (shell=False, capture=True)
2021-07-03 05:42:43,651 - util.py[DEBUG]: создание раздела на /dev/disk/cloud/azure_resource заняло 0,016 секунды
2021-07-03 05:42:43,651 - util.py [ПРЕДУПРЕЖДЕНИЕ]: сбой операции разделения
Устройство /dev/disk/cloud/azure_resource не существует и не было создано с установкой udevadm.
2021-07-03 05:42:43,651 - util.py[DEBUG]: сбой операции разделения
Устройство /dev/disk/cloud/azure_resource не существует и не было создано с установкой udevadm.
Traceback (последний последний вызов):
  Файл "/usr/lib/python3.6/site-packages/cloudinit/config/cc_disk_setup.py", строка 140, в дескрипторе
    func=mkpart, args=(диск, определение))
  Файл "/usr/lib/python3.6/site-packages/cloudinit/util.py", строка 2539, в log_time
    ret = func(*args, **kwargs)
  Файл "/usr/lib/python3.6/site-packages/cloudinit/config/cc_disk_setup.py", строка 769, в mkpart
    assert_and_settle_device(устройство)
  Файл "/usr/lib/python3.6/site-packages/cloudinit/config/cc_disk_setup.py", строка 746, в assert_and_settle_device
    "с udevadm поселиться". % устройство)
Ошибка выполнения: устройство /dev/disk/cloud/azure_resource не существует и не было создано с установкой udevadm.
03.07.2021, 05:42:43,672 — cc_disk_setup.py[DEBUG]: настройка файловых систем: [{'filesystem': 'ext4', 'device': 'ephemeral0.1'}]
2021-07-03 05:42:43,672 - cc_disk_setup.py[DEBUG]: ephemeral0.1 сопоставлен с disk=/dev/disk/cloud/azure_resource part=1
03.07.2021, 05:42:43,672 — cc_disk_setup.py[DEBUG]: создание новой файловой системы.
2021-07-03 05:42:43,672 - util.py[DEBUG]: выполнение команды ['udevadm', 'settle'] с разрешенными кодами возврата [0] (shell=False, capture=True)
2021-07-03 05:42:43,684 - util.py[DEBUG]: создание fs для /dev/disk/cloud/azure_resource заняло 0,012 секунды
2021-07-03 05:42:43,684 - util.py [ПРЕДУПРЕЖДЕНИЕ]: сбой во время работы файловой системы
Устройство /dev/disk/cloud/azure_resource не существует и не было создано с установкой udevadm.
2021-07-03 05:42:43,684 - util.py[DEBUG]: сбой при работе с файловой системой
Устройство /dev/disk/cloud/azure_resource не существует и не было создано с установкой udevadm.
Traceback (последний последний вызов):
  Файл "/usr/lib/python3.6/site-packages/cloudinit/config/cc_disk_setup.py", строка 158, в дескрипторе
    func=mkfs, args=(определение,))
  Файл "/usr/lib/python3.6/site-packages/cloudinit/util.py", строка 2539, в log_time
    ret = func(*args, **kwargs)
  Файл "/usr/lib/python3.6/site-packages/cloudinit/config/cc_disk_setup.py", строка 871, в mkfs
    assert_and_settle_device(устройство)
  Файл "/usr/lib/python3.6/site-packages/cloudinit/config/cc_disk_setup.py", строка 746, в assert_and_settle_device
    "с udevadm поселиться". % устройство)
Ошибка выполнения: устройство /dev/disk/cloud/azure_resource не существует и не было создано с установкой udevadm.
03.07.2021, 05:42:43,684 - handlers.py[DEBUG]: завершение: init-network/config-disk_setup: УСПЕХ: config-disk_setup успешно выполнен
03.07.2021, 05:42:43,685 - stage.py[DEBUG]: запуск монтирования модуля (<модуль 'cloudinit.config.cc_mounts' из '/usr/lib/python3.6/site-packages/cloudinit/config/ cc_mounts.py'>) с периодичностью один раз на экземпляр
2021-07-03 05:42:43,685 - handlers.py[DEBUG]: start: init-network/config-mounts: запуск config-mounts с периодичностью один раз для каждого экземпляра
2021-07-03 05:42:43,685 - util.py[DEBUG]: запись в /var/lib/cloud/instances/b7e003ce-7ad3-4840-a4f7-06faefed9cb0/sem/config_mounts - wb: [644] 24 байта
/var/log/cloud-init-output.log
Частичное содержимое журнала. Надеюсь, я покажу соответствующую часть ниже.
Полный!
Cloud-init v. 19.4 с запуском «modules:config» в субботу, 03 июля 2021 г., 05:42:46 +0000. До 2268,33 секунды.
meta-data=/dev/sdb1 isize=512 agcount=4, agsize=6553472 BLKS
         = sectsz=4096 attr=2, projid32bit=1
         = crc=1 finobt=1, разреженный=1, rmapbt=0
         = рефссылка=1
данные = bsize = 4096 блоков = 26213888, imaxpct = 25
         = солнце = 0 ширина = 0 блоков
наименование = версия 2 bsize = 4096 ascii-ci = 0, ftype = 1
log = внутренний журнал bsize = 4096 блоков = 12799, версия = 2
         = sectsz=4096 sunit=1 BLKS, lazy-count=1
в реальном времени = нет extsz = 4096 блоков = 0, rtextents = 0
meta-data=/dev/sdc1 isize=512 agcount=4, agsize=13107072 BLKS
         = sectsz=4096 attr=2, projid32bit=1
         = crc=1 finobt=1, разреженный=1, rmapbt=0
         = рефссылка=1
данные = bsize = 4096 блоков = 52428288, imaxpct = 25
         = солнце = 0 ширина = 0 блоков
наименование = версия 2 bsize = 4096 ascii-ci = 0, ftype = 1
log = внутренний журнал bsize = 4096 блоков = 25599, версия = 2
         = sectsz=4096 sunit=1 BLKS, lazy-count=1
в реальном времени = нет extsz = 4096 блоков = 0, rtextents = 0
Cloud-init v. 19.4 запускает «modules:final» в субботу, 03 июля 2021 г., 05:45:28 +0000. До 2430,85 секунды.
Cloud-init v. 19.4 завершена в субботу, 03 июля 2021 г., 05:45:34 +0000. Источник данных DataSourceAzure [seed=/dev/sr0]. До 2436,88 секунд