Я использую 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 секунд