cbr*_*ars 6 amazon-ec2 amazon-ebs amazon-web-services ansible
我正在尝试使用 Ansible 构建、附加、格式化 EBS 卷并将其挂载到 EC2 实例。当我构建并附加卷时,名称在实例中不匹配。我怎样才能得到正确的名字?
\n\n我尝试更改 device_name 以匹配 AWS 设置的内容,但这给了我一个“...不是有效的 EBS 设备名称”。错误。
\n\n这是我正在尝试的:
\n\n---\n- name: Get instance ID\n ec2_metadata_facts:\n- debug:\n msg: "Adding EBS to {{ ansible_ec2_instance_id }}"\n- name: Create EBS\n delegate_to: 127.0.0.1\n run_once: true\n ec2_vol:\n instance: "{{ ansible_ec2_instance_id }}"\n volume_size: \'5\'\n region: \'us-east-1\'\n delete_on_termination: yes\n name: \'wbt_opt_drive\'\n register: ec2_vol\n- name: Printing the volume information\n debug: var=ec2_vol\n
Run Code Online (Sandbox Code Playgroud)\n\n卷信息返回如下:
\n\n"device": "/dev/sdf"\n
Run Code Online (Sandbox Code Playgroud)\n\n如果我尝试添加文件系统,/dev/sdf 不存在。\n检查实例,这就是我运行 lsblk 得到的结果
\n\nnvme1n1 259:1 0 8G 0 disk \n\xe2\x94\x94\xe2\x94\x80nvme1n1p1 259:2 0 8G 0 part /\nnvme2n1 259:3 0 5G 0 disk \n
Run Code Online (Sandbox Code Playgroud)\n\n如果我将任务更改为使用 device_name AWS 默认为:
\n\n---\n- name: Get instance ID\n ec2_metadata_facts:\n- debug:\n msg: "Adding EBS to {{ ansible_ec2_instance_id }}"\n- name: Create EBS\n delegate_to: 127.0.0.1\n run_once: true\n ec2_vol:\n instance: "{{ ansible_ec2_instance_id }}"\n volume_size: \'5\'\n region: \'us-east-1\'\n delete_on_termination: yes\n name: \'wbt_opt_drive\'\n device_name: \'/dev/nvme2n1\'\n register: ec2_vol\n- name: Printing the volume information\n debug: var=ec2_vol\n
Run Code Online (Sandbox Code Playgroud)\n\n我收到此错误:
\n\n/dev/nvme2n1 is not a valid EBS device name.\n
Run Code Online (Sandbox Code Playgroud)\n\n从文档中,我了解AWS正在做什么(https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/device_naming.html / https://docs.aws.amazon.com/AWSEC2/latest/UserGuide /nvme-ebs-volumes.html)
\n\n但我想让这种动态适用于我可能想要创建的所有类型的实例。有没有办法从返回的设备挂载点或ID中获取真正的端点?
\n小智 1
我在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 }}"
Run Code Online (Sandbox Code Playgroud)
重要信息:请勿使用此设备名称在系统启动时自动安装设备(例如,在 中/etc/fstab
)。根据文档,对于系统启动时附加的 EBS 设备,卷到 NVMe 设备的映射是不确定的。相反,一旦格式化设备,您应该设置并使用标签 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
# ...
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3482 次 |
最近记录: |