Как создать виртуальную машину Azure с диском данных, а затем отформатировать ее через ansible

Я могу сделать это по отдельности, но не могу объединить их вместе, так как я не знаю имени дискового устройства.

Моя конфигурация:

- name: Create Virtual Machine
  azure_rm_virtualmachine:
  resource_group: "{{ resource_group }}"
  name: "{{ item }}"
  vm_size: "{{ flavor }}"
  managed_disk_type: "{{ disks.disk_type }}"
  network_interface_names: "NIC-{{ item }}"
  ssh_password_enabled: false
  admin_username: "{{ cloud_config.admin_username }}"
  image:
    offer:  "{{ image.offer }}"
    publisher: "{{ image.publisher }}"
    sku: "{{ image.sku }}"
    version: "{{ image.version }}"
  tags: 
    Node: "{{ tags.Node }}"
  ssh_public_keys:
    - path: "/home/{{ cloud_config.admin_username }}/.ssh/authorized_keys"
      key_data: "{{ cloud_config.ssh.publickey }}"
  data_disks:
    - lun: 0
      disk_size_gb: "{{ disks.disk_size }}"
      caching: "{{ disks.caching }}"
      managed_disk_type: "{{ disks.disk_type }}"

Другая часть для форматирования и монтирования диска

- name: partition new disk
  shell: 'echo -e "n\np\n1\n\n\nw" | fdisk /dev/sdc'
  args:
    executable: /bin/bash

- name: Makes file system on block device
  filesystem:
    fstype: xfs
    dev: /dev/sdc1

- name: new dir to mount
  file: path=/hadoop state=directory

- name: mount the dir
  mount:
    path: /hadoop
    src: /dev/sdc1
    fstype: xfs
    state: mounted

Мой вопрос: имя устройства не настраивается. Это может быть / dev / sdc или / dev / sdb. Для AWS ec2 я могу установить тома [device_name], но я не нахожу такого поля в Azure. Как я мог это исправить?


person Roy Zeng    schedule 22.03.2018    source источник
comment
В Azure вы не могли изменить буквенное имя устройства.   -  person Shui shengbao    schedule 23.03.2018


Ответы (3)


/ dev / sdb используются для временного диска по умолчанию, но иногда он использовался моим диском с данными. Я нашел обходной путь, чтобы проверить имя устройства перед форматированием. Я знаю, что это неразумно.

- name: check device name which should be parted
  shell: parted -l
  register: device_name

- name: Show middle device name 
  debug:
    msg: "{{ device_name.stderr.split(':')[1] }}"
  register: mid_device

- name: Display real device name 
  debug: 
    msg: "{{ mid_device.msg.split()[0] }}"
  register: real_device

- name: partition new disk
  shell: 'echo -e "n\np\n1\n\n\nw" | fdisk {{ real_device.msg }}'
  args:
    executable: /bin/bash

- name: Makes file system on block device
  filesystem:
    fstype: xfs
    dev: "{{ real_device.msg }}1"

- name: new dir to mount
  file: path=/hadoop state=directory

- name: mount the dir
  mount:
    path: /hadoop
    src: "{{ real_device.msg }}1"
    fstype: xfs
    state: mounted
person Roy Zeng    schedule 23.03.2018
comment
Не подходит, если вы создаете 2 диска с данными. - person Roy Zeng; 26.03.2018
comment
Вы можете использовать device_name.stderr.split(':')[1].strip(), чтобы удалить стадию среднего устройства в приведенном выше фрагменте Ansible. - person Conor Svensson; 20.08.2019

Мы можем использовать softlink вместо / dev / sdb для форматирования диска с данными, ссылка была расположена в / dev / disk / azure.

Вы можете запустить команду «tree / dev / disk / azure», чтобы узнать подробную структуру.

Вот мой пример форматирования одного диска с данными, если дисков больше, вы можете изменить программную ссылку на / dev / disk / azure / scsi1 / lun1, / dev / disk / azure / scsi1 / lun2, / dev / disk / лазурный / scsi1 / lun3 ...

- name: use parted to make label
  shell: "parted /dev/disk/azure/scsi1/lun0 mklabel msdos"
  args:
    executable: /bin/bash

- name: partition new disk
  shell: "parted /dev/disk/azure/scsi1/lun0 mkpart primary 1 100%"
  args:
    executable: /bin/bash

- name: inform the OS of partition table changes (partprobe)
  command: partprobe

- name: Makes file system on block device with xfs file system
  filesystem:
    fstype: xfs
    dev: /dev/disk/azure/scsi1/lun0-part1

- name: create data dir for mounting
  file: path=/data state=directory

- name: Get UUID of the new filesystem
  shell: |
    blkid -s UUID -o value $(readlink -f /dev/disk/azure/scsi1/lun0-part1)
  register: uuid

- name: show real uuid
  debug:
    msg: "{{ uuid.stdout }}"

- name: mount the dir
  mount:
    path: /data
    src: "UUID={{ uuid.stdout }}"
    fstype: xfs
    state: mounted

- name: check disk status
  shell: df -h | grep /dev/sd
  register: df2_status

- debug: var=df2_status.stdout_lines
person Roy Zeng    schedule 25.09.2019

Может быть, можно попробовать модуль azure_rm_managed_disk, а затем подключить его к ВМ. Тогда у вас есть все свойства диска.

person yuizhou    schedule 16.04.2018