0

这是我的 Ansible 任务 -

在 EC2 实例中挂载一个带有外部 ebs 卷的目录,以使Amazon EBS 卷可用

- name: Create Data directory #1 
  file:
    path: "{{ data_directory }}/"
    state: directory
  
- name: Get the EBS volume/block #2
  shell: lsblk -x SIZE | grep disk | tail -1 | awk '{print $1}'
  register: ebs_nvme_block
  check_mode: false

- name: Printout the block #3
  debug: 
    var: ebs_nvme_block.stdout_lines[0]

- name: Create a xfs filesystem on EBS volume #4
  filesystem:
    fstype: xfs
    dev: "/dev/{{ ebs_nvme_block.stdout_lines[0] }}"
  ignore_errors: "{{ ansible_check_mode }}"

- name: Get UUID of ebs volume #5
  shell: lsblk -o +UUID | grep "{{ ebs_nvme_block.stdout_lines[0] }}" |  awk '{print $NF}'
  register: uuid
  check_mode: false

- name: Print UUID #6
  debug:
    var: uuid.stdout

- name: Mount the ebs volume with /data directory #6
  mount:
    backup: yes
    path:  "{{ data_directory }}" 
    src: "/dev/{{ ebs_nvme_block.stdout_lines[0] }}" # or use UUID={{ uuid.stdout }}
    state: mounted
    opts: defaults,nofail
    dump: 0
    passno: 2
    fstype: xfs
  ignore_errors: "{{ ansible_check_mode }}"

现在这个#6代码块安装并创建备份/etc/fstab和更新如下

LABEL=cloudimg-rootfs   /    ext4   defaults,discard    0 0
/dev/nvme1n1 /data xfs defaults,nofail 0 2

如果我使用UUID挂载,则将其/etc/fstab修改为

LABEL=cloudimg-rootfs   /    ext4   defaults,discard    0 0
UUID=XXXXXXXXXXXXXXXX /data xfs defaults,nofail 0 0

#7 块代码更新/etc/fstabas

LABEL=cloudimg-rootfs   /    ext4   defaults,discard    0 0
UUID={{ uuid.stdout }}  {{ data_directory }}  xfs  defaults,nofail  0  2

一切正常。我在安装时没有收到任何错误,但无论 EC2 实例收到状态检查错误 [ 1/2 checks passed] 的原因是什么。

  1. 第一个问题是 - 是否有任何格式的/etc/fstab文件。值之间是否有单空格或双空格?
  2. 从这里如何 fstab 工作并使Amazon EBS 卷可用于 Linux,我得到的是
  • 字段之间有 2 个空格。当 Ansible 修改fstab文件时,它不会创建任何额外的空间。

UUID=aebf131c-6957-451e-8d34-ec978d9581ae /data xfs defaults,nofail 0 2

UUID=aebf131c-6957-451e-8d34-ec978d9581ae /data xfs defaults,nofail 0 2[Ansible 修改]

  • 它对状态检查有任何影响吗?
  1. Ansible 将回溯文件创建为fstab.DATETIME~. 同样的问题,这个备份文件是否有任何状态检查错误的影响。
4

0 回答 0