如何使用 Ansible 创建新分区
How to create a new partition with Ansible
当我在命令行上 运行 它工作正常:
echo -e "n\np\n1\n\n\nw" | sudo fdisk /dev/sdb
但在 Ansible 中它不想在 shell 中 运行:
- name: partition new disk
shell: echo -e "n\np\n1\n\n\nw" | sudo fdisk /dev/sdb
它不会返回错误,但也不会创建分区。
我检查过 Ansible 和 LVM 不能满足我的需要。
有什么建议吗?
默认情况下,Ansible 执行 /bin/sh
shell.
例如,如果 /bin/sh
链接到 dash
,它的构建 echo
与 bash
或 GNU echo
中的不同;所以你最终将 -e
个字符输入 fdisk。
尝试:
- name: partition new disk
shell: echo -e "n\np\n1\n\n\nw" | sudo fdisk /dev/sdb
args:
executable: /bin/bash
或:
- name: partition new disk
shell: /bin/echo -e "n\np\n1\n\n\nw" | sudo fdisk /dev/sdb
使用 Ansible 2.3 及更高版本,您可以使用 parted
module 从块设备创建分区。
例如:
- parted:
device: /dev/sdb
number: 1
flags: [ lvm ]
state: present
要格式化分区,只需使用 filesystem
module,如下所示:
- filesystem:
fstype: ext2
dev: /dev/sdb1
要将分区挂载到 /work
文件夹,只需使用 mount
module,如下所示:
- mount:
fstype: ext2
src: /dev/sdb1
path: /work
state: mounted
如何将所有空闲 space 分配到一个新分区并将其添加到 Ansible 中的 LVM
如果您使用的是 LVM,请查看此内容!
如果您想使用设备的所有免费space,请看这里!
从设备 /dev/sda
和 /dev/sda1
上的现有分区开始 {{ volumeGroup }}
。
使用以下方法在 /dev/sda
的空闲 space 中创建分区 /dev/sda2
,然后将新分区添加到现有的 {{ volumeGroup }}
- name: "Create partitions on devices"
block:
- name: install parted
package:
name: parted
state: present
- name: "Read device information /dev/sda"
parted:
device: "/dev/sda"
unit: MiB
register: device_info
- name: "Add new partition /dev/sda2"
parted:
device: "/dev/sda"
number: "2"
part_type: primary
flags: [ lvm ]
state: present
part_end: "100%"
part_start: "{{ device_info.partitions[0].end + 1}}MiB"
- name: "Add device to exising volume group {{ volumeGroup }}."
lvg:
vg: "{{ volumeGroup }}"
pvs: "/dev/sda1,/dev/sda2"
在我的系统上帮助翻倍"n"
echo -e "\nn\np\n1\n\n\nw" | fdisk /dev/sdb
当我在命令行上 运行 它工作正常:
echo -e "n\np\n1\n\n\nw" | sudo fdisk /dev/sdb
但在 Ansible 中它不想在 shell 中 运行:
- name: partition new disk
shell: echo -e "n\np\n1\n\n\nw" | sudo fdisk /dev/sdb
它不会返回错误,但也不会创建分区。
我检查过 Ansible 和 LVM 不能满足我的需要。
有什么建议吗?
默认情况下,Ansible 执行 /bin/sh
shell.
例如,如果 /bin/sh
链接到 dash
,它的构建 echo
与 bash
或 GNU echo
中的不同;所以你最终将 -e
个字符输入 fdisk。
尝试:
- name: partition new disk
shell: echo -e "n\np\n1\n\n\nw" | sudo fdisk /dev/sdb
args:
executable: /bin/bash
或:
- name: partition new disk
shell: /bin/echo -e "n\np\n1\n\n\nw" | sudo fdisk /dev/sdb
使用 Ansible 2.3 及更高版本,您可以使用 parted
module 从块设备创建分区。
例如:
- parted:
device: /dev/sdb
number: 1
flags: [ lvm ]
state: present
要格式化分区,只需使用 filesystem
module,如下所示:
- filesystem:
fstype: ext2
dev: /dev/sdb1
要将分区挂载到 /work
文件夹,只需使用 mount
module,如下所示:
- mount:
fstype: ext2
src: /dev/sdb1
path: /work
state: mounted
如何将所有空闲 space 分配到一个新分区并将其添加到 Ansible 中的 LVM
如果您使用的是 LVM,请查看此内容!
如果您想使用设备的所有免费space,请看这里!
从设备 /dev/sda
和 /dev/sda1
上的现有分区开始 {{ volumeGroup }}
。
使用以下方法在 /dev/sda
的空闲 space 中创建分区 /dev/sda2
,然后将新分区添加到现有的 {{ volumeGroup }}
- name: "Create partitions on devices"
block:
- name: install parted
package:
name: parted
state: present
- name: "Read device information /dev/sda"
parted:
device: "/dev/sda"
unit: MiB
register: device_info
- name: "Add new partition /dev/sda2"
parted:
device: "/dev/sda"
number: "2"
part_type: primary
flags: [ lvm ]
state: present
part_end: "100%"
part_start: "{{ device_info.partitions[0].end + 1}}MiB"
- name: "Add device to exising volume group {{ volumeGroup }}."
lvg:
vg: "{{ volumeGroup }}"
pvs: "/dev/sda1,/dev/sda2"
在我的系统上帮助翻倍"n"
echo -e "\nn\np\n1\n\n\nw" | fdisk /dev/sdb