如何获取真实的EBS设备名称以在Ansible中格式化和安装

问题描述 投票:0回答:1

我正在尝试使用 Ansible 构建、附加、格式化 EBS 卷并将其挂载到 EC2 实例。当我构建并附加卷时,名称在实例中不匹配。我怎样才能得到正确的名字?

我尝试更改 device_name 以匹配 AWS 设置的内容,但这给了我一个“...不是有效的 EBS 设备名称”。错误。

这是我正在尝试的:

---
- name: Get instance ID
  ec2_metadata_facts:
- debug:
    msg: "Adding EBS to {{ ansible_ec2_instance_id }}"
- name: Create EBS
  delegate_to: 127.0.0.1
  run_once: true
  ec2_vol:
    instance: "{{ ansible_ec2_instance_id }}"
    volume_size: '5'
    region: 'us-east-1'
    delete_on_termination: yes
    name: 'wbt_opt_drive'
  register: ec2_vol
- name: Printing the volume information
  debug: var=ec2_vol

卷信息返回此:

"device": "/dev/sdf"

如果我尝试添加文件系统,/dev/sdf 不存在。 检查实例,这就是我运行 lsblk 的结果

nvme1n1     259:1    0    8G  0 disk 
└─nvme1n1p1 259:2    0    8G  0 part /
nvme2n1     259:3    0    5G  0 disk 

如果我将任务更改为使用 device_name AWS 默认为:

---
- name: Get instance ID
  ec2_metadata_facts:
- debug:
    msg: "Adding EBS to {{ ansible_ec2_instance_id }}"
- name: Create EBS
  delegate_to: 127.0.0.1
  run_once: true
  ec2_vol:
    instance: "{{ ansible_ec2_instance_id }}"
    volume_size: '5'
    region: 'us-east-1'
    delete_on_termination: yes
    name: 'wbt_opt_drive'
    device_name: '/dev/nvme2n1'
  register: ec2_vol
- name: Printing the volume information
  debug: var=ec2_vol

我收到此错误:

/dev/nvme2n1 is not a valid EBS device name.

从文档中,我了解 AWS 正在做什么(https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/device_naming.html / https://docs.aws.amazon.com/AWSEC2 /latest/UserGuide/nvme-ebs-volumes.html

但我想让这种动态适用于我可能想要创建的所有类型的实例。有没有办法从返回的设备挂载点或ID中获取真实的端点?

amazon-web-services amazon-ec2 ansible amazon-ebs
1个回答
0
投票

我在 https://flowciety.de/en/development-notes-en/ansible-and-aws/

上找到了一个很好的解决方案

如果链接中断,我将在这里总结他们的解决方案。

# Per question assume that result of ebs_create is registered to `ec2_vol`

- name: Get Linux device for EBS Volume
  ansible.builtin.shell:
    cmd: "lsblk -o PATH,SERIAL | grep {{ ec2_vol.volume_id | replace('-', '') }} | cut -d ' ' -f 1"
  register: lsblk

- name: Store EBS volume device name
  ansible.builtin.set_fact:
    ebs_volume_device_name: "{{ lsblk.stdout }}"

重要:请勿使用此设备名称在系统启动时自动安装设备(例如在

/etc/fstab
中)。根据“文档”,卷到 NVMe 设备的映射对于系统启动时附加的 EBS 设备来说是不确定的。相反,一旦格式化设备,您应该设置并使用标签 LABEL 或提取并使用 UUID,因为无论 NVMe 注册顺序如何,这都不会改变。

Alt:

从现有卷中获取名称(来自与上面相同的链接) - name: Get EC2 volume details delegate_to: localhost amazon.aws.ec2_vol_info: filters: "tag:Name": "some-data" # Assume unique volume name register: ec2_vol_info - name: Get Linux device for EBS Volume ansible.builtin.shell: cmd: "lsblk -o PATH,SERIAL | grep {{ ec2_vol_info.volumes[0].id | replace('-', '') }} | cut -d ' ' -f 1" register: lsblk # ...

© www.soinside.com 2019 - 2024. All rights reserved.