Puncte:0

Montați hard disk-uri virtuale Azure pe sistemul de fișiere în timpul creării VM Azure Linux folosind Terraform

drapel cf

Folosesc Terraform pentru a automatiza crearea de VM pe Microsoft Azure. Scriptul Terraform va accepta configurația discului de date ca mai jos (consultați data_disk_size_gb), creați hard disk-ul virtual și apoi montați-l în calea de sistem de fișiere dată.

modul „jumphost” {
    număr = 1
    sursa = "../module/services/jumphost"
    prefix = "${module.global-vars.project}-${var.environment}"
    rg = azurerm_resource_group.rg
    vm_size = „Standard_D2s_v4”
    subnet = azurerm_subnet.web-subnet
    private_ip_address = "10.0.1.250"
    data_disk_size_gb = [ 
        ["/date", 100],
        ["/data2" , 200]
    ]
    admin_username = "zaidwaqi"
    admin_public_key_path = "../id_rsa.pub"
    nsg_allow_tcp_ports = [22]
    public_ip_address = adevărat
}

Crearea hard disk-urilor virtuale și atașarea la VM se fac ca mai jos, ceea ce cred că funcționează bine și nu este cauza problemei.

resursa „azurerm_managed_disk” „data-disk” {
    număr = lungime (var.data_disk_size_gb)
    nume = "${var.prefix}-${var.service_name}-data-disk-${count.index}"
    locație = var.rg.location
    nume_grup_resurse = var.rg.name
    storage_account_type = „Standard_LRS”
    create_option = "Gol"
    disk_size_gb = var.data_disk_size_gb[count.index][1]
}

resursă „azurerm_virtual_machine_data_disk_attachment” „externă” {
    număr = lungime(azurerm_managed_disk.data-disk)
    managed_disk_id = „${azurerm_managed_disk.data-disk[count.index].id}”  
    virtual_machine_id = azurerm_linux_virtual_machine.vm.id  
    lun = "${count.index + 10}"  
    cache = „Citește scriere”  
}

Pentru a utiliza discurile de date furnizate, configurațiile cloud-init sunt furnizate pentru a gestiona partiționarea, crearea și montarea sistemului de fișiere. Informațiile pentru aceasta sunt furnizate de Terraform config prin data template_cloudinit_config, care va fi transmis VM date_personalizate atribut

date „template_cloudinit_config” „config” {
  gzip = adevărat
  base64_encode = adevărat
  parte {
      nume fișier = "init-cloud-config"
      content_type = "text/cloud-config"
      continut = fisier("../modules/services/${var.service_name}/init.yaml")
  }
  parte {
      filename = "init-shellscript"
      content_type = "text/x-shellscript"
      continut = templatefile("../modules/services/${var.service_name}/init.sh",
        { 
          hostname = "${var.prefix}-${var.service_name}"
          data_disk_size_gb = var.data_disk_size_gb
        }
      )
  }
}

Scriptul shell-init cloud init.sh care acceptă parametrul este ca mai jos

#!/bin/bash

hostnamectl set-hostname ${hostname}

%{ pentru index, disc în 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 ${ disc[0] }
montați /dev/sd${ split("","bcdef")[index] }1 ${ disc[0] }
echo UUID=\"`(blkid /dev/sd${ split("","bcdef")[index] }1 -s UUID -o valoare)`\" ${ disk[0] } xfs defaults,nofail 1 2 >> /etc/fstab
%{ endfor ~}

La finalizarea se aplică terraform, /date și /data2 nu sunt vizibile în df ieșire. Mă aștept să văd intrări pentru /dev/sdb1 și /dev/sdc1 cu puncte de montare ale /date și /data2 respectiv.

[zaidwaqi@starter-stage-jumphost ~]$ ls /
bin boot dev etc home lib lib64 media mnt opt ​​proc root run sbin srv sys tmp usr var
[zaidwaqi@starter-stage-jumphost ~]$ df -h
Filesystem Size Used Avail Use% Montat pe
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% /run
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/sda2 30G 1.8G 28G 7% /
/dev/sda1 496M 73M 424M 15% /boot
/dev/sda15 495M 6,9M 488M 2% /boot/efi
tmpfs 798M 0 798M 0% /run/user/1000

Informații de diagnostic

/var/lib/cloud/instance/scripts/

#!/bin/bash

hostnamectl set-hostname starter-stage-jumphost

parted /dev/sdb --script mklabel gpt mkpart xfspart xfs 0% 100%
mkfs.xfs /dev/sdb1
partprobe /dev/sdb1
mkdir -p /date
montați /dev/sdb1 /data
echo UUID=\"`(blkid /dev/sdb1 -s UUID -o valoare)`\" /data xfs implicite, nofail 1 2 >> /etc/fstab 
parted /dev/sdc --script mklabel gpt mkpart xfspart xfs 0% 100%
mkfs.xfs /dev/sdc1
partprobe /dev/sdc1
mkdir -p /data2
montați /dev/sdc1 /data2
echo UUID=\"`(blkid /dev/sdc1 -s UUID -o valoare)`\" /data2 xfs implicite, nofail 1 2 >> /etc/fstab
[scripturi zaidwaqi@starter-stage-jumphost]$ 

/var/log/cloud-init.log

Conținut parțial al jurnalului. Sper să afișez partea relevantă mai jos.

2021-07-03 05:42:43,635 - cc_disk_setup.py[DEBUG]: se creează un nou tabel/disc de partiții
2021-07-03 05:42:43,635 - util.py[DEBUG]: Rularea comenzii ['udevadm', 'settle'] cu coduri de returnare permise [0] (shell=False, capture=True)
2021-07-03 05:42:43,651 - util.py[DEBUG]: Crearea partiției pe /dev/disk/cloud/azure_resource a durat 0,016 secunde
2021-07-03 05:42:43,651 - util.py[AVERTISMENT]: operațiune de partiționare eșuată
Dispozitivul /dev/disk/cloud/azure_resource nu a existat și nu a fost creat cu o soluție udevadm.
2021-07-03 05:42:43,651 - util.py[DEBUG]: operațiune de partiționare eșuată
Dispozitivul /dev/disk/cloud/azure_resource nu a existat și nu a fost creat cu o soluție udevadm.
Traceback (cel mai recent apel ultimul):
  Fișierul „/usr/lib/python3.6/site-packages/cloudinit/config/cc_disk_setup.py”, linia 140, în handle
    func=mkpart, args=(disc, definiție))
  Fișierul „/usr/lib/python3.6/site-packages/cloudinit/util.py”, linia 2539, în log_time
    ret = func(*args, **kwargs)
  Fișierul „/usr/lib/python3.6/site-packages/cloudinit/config/cc_disk_setup.py”, linia 769, în mkpart
    assert_and_settle_device(dispozitiv)
  Fișierul „/usr/lib/python3.6/site-packages/cloudinit/config/cc_disk_setup.py”, linia 746, în assert_and_settle_device
    „cu un udevadm așez”. % dispozitiv)
RuntimeError: Dispozitivul /dev/disk/cloud/azure_resource nu a existat și nu a fost creat cu o soluție udevadm.
2021-07-03 05:42:43,672 - cc_disk_setup.py[DEBUG]: configurarea sistemelor de fișiere: [{'filesystem': 'ext4', 'device': 'ephemeral0.1'}]
2021-07-03 05:42:43,672 - cc_disk_setup.py[DEBUG]: ephemeral0.1 este mapat pe disc=/dev/disk/cloud/azure_resource part=1
2021-07-03 05:42:43,672 - cc_disk_setup.py[DEBUG]: se creează un nou sistem de fișiere.
2021-07-03 05:42:43,672 - util.py[DEBUG]: Rularea comenzii ['udevadm', 'settle'] cu coduri de returnare permise [0] (shell=False, capture=True)
2021-07-03 05:42:43,684 - util.py[DEBUG]: Crearea fs pentru /dev/disk/cloud/azure_resource a durat 0,012 secunde
2021-07-03 05:42:43,684 - util.py[AVERTISMENT]: Eșuat în timpul funcționării sistemului de fișiere
Dispozitivul /dev/disk/cloud/azure_resource nu a existat și nu a fost creat cu o soluție udevadm.
2021-07-03 05:42:43,684 - util.py[DEBUG]: a eșuat în timpul funcționării sistemului de fișiere
Dispozitivul /dev/disk/cloud/azure_resource nu a existat și nu a fost creat cu o soluție udevadm.
Traceback (cel mai recent apel ultimul):
  Fișierul „/usr/lib/python3.6/site-packages/cloudinit/config/cc_disk_setup.py”, linia 158, în handle
    func=mkfs, args=(definiție,))
  Fișierul „/usr/lib/python3.6/site-packages/cloudinit/util.py”, linia 2539, în log_time
    ret = func(*args, **kwargs)
  Fișierul „/usr/lib/python3.6/site-packages/cloudinit/config/cc_disk_setup.py”, linia 871, în mkfs
    assert_and_settle_device(dispozitiv)
  Fișierul „/usr/lib/python3.6/site-packages/cloudinit/config/cc_disk_setup.py”, linia 746, în assert_and_settle_device
    „cu un udevadm așez”. % dispozitiv)
RuntimeError: Dispozitivul /dev/disk/cloud/azure_resource nu a existat și nu a fost creat cu o soluție udevadm.
2021-07-03 05:42:43,684 - handlers.py[DEBUG]: finish: init-network/config-disk_setup: SUCCES: config-disk_setup a rulat cu succes
2021-07-03 05:42:43,685 - stages.py[DEBUG]: Rulează montarea modulului (<modulul „cloudinit.config.cc_mounts” din „/usr/lib/python3.6/site-packages/cloudinit/config/ cc_mounts.py'>) cu frecvență o dată pe o instanță
2021-07-03 05:42:43,685 - handlers.py[DEBUG]: start: init-network/config-mounts: rulează config-mounts cu frecvența o dată pe instanță
2021-07-03 05:42:43,685 - util.py[DEBUG]: Se scrie în /var/lib/cloud/instances/b7e003ce-7ad3-4840-a4f7-06faefed9cb0/sem/config_mounts - wb: [24 by 644]

/var/log/cloud-init-output.log

Conținut parțial al jurnalului. Sper să afișez partea relevantă mai jos.

Complet!
Cloud-init v. 19.4 rulează „modules:config” la sâmbătă, 03 iulie 2021 05:42:46 +0000. Până în 2268,33 secunde.
meta-data=/dev/sdb1 isize=512 agcount=4, agsize=6553472 blks
         = sectsz=4096 attr=2, projid32bit=1
         = crc=1 finobt=1, rar=1, rmapbt=0
         = reflink=1
date = bsize=4096 blocuri=26213888, imaxpct=25
         = sunit=0 swidth=0 blks
naming =versiunea 2 bsize=4096 ascii-ci=0, ftype=1
jurnal = jurnal intern bsize = 4096 blocuri = 12799, versiunea = 2
         = sectsz=4096 sunit=1 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
meta-data=/dev/sdc1 isize=512 agcount=4, agsize=13107072 blks
         = sectsz=4096 attr=2, projid32bit=1
         = crc=1 finobt=1, rar=1, rmapbt=0
         = reflink=1
date = bsize=4096 blocuri=52428288, imaxpct=25
         = sunit=0 swidth=0 blks
naming =versiunea 2 bsize=4096 ascii-ci=0, ftype=1
jurnal = jurnal intern bsize = 4096 blocuri = 25599, versiunea = 2
         = sectsz=4096 sunit=1 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
Cloud-init v. 19.4 rulează „modules:final” la sâmbătă, 03 iulie 2021 05:45:28 +0000. Până la 2430,85 secunde.
Cloud-init v. 19.4 finalizat la sâmbătă, 03 iulie 2021 05:45:34 +0000. Sursa de date DataSourceAzure [seed=/dev/sr0]. Până în 2436,88 secunde
drapel cf
Lectura mea ulterioară despre aceasta sugerează că acest lucru se datorează faptului că discul de date nu poate fi atașat la azure_linux_virtual_machine la momentul creării. https://github.com/terraform-providers/terraform-provider-azurerm/issues/6117

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.