war*_*sen 10 bash disk-partitioning ansible
当我在命令行上运行它时它工作正常:
echo -e "n\np\n1\n\n\nw" | sudo fdisk /dev/sdb
Run Code Online (Sandbox Code Playgroud)
但是在Ansible中它不想在shell中运行:
- name: partition new disk
shell: echo -e "n\np\n1\n\n\nw" | sudo fdisk /dev/sdb
Run Code Online (Sandbox Code Playgroud)
它不会返回错误,但它也不会创建分区.
我检查过Ansible和LVM不会做我需要的.
有什么建议?
Jer*_*u M 30
使用Ansible 2.3及更高版本,您可以使用parted模块从块设备创建分区.例如:
- parted:
device: /dev/sdb
number: 1
flags: [ lvm ]
state: present
Run Code Online (Sandbox Code Playgroud)
要格式化分区,只需使用filesystem模块,如下所示:
- filesystem:
fstype: ext2
dev: /dev/sdb1
Run Code Online (Sandbox Code Playgroud)
要将分区挂载,比方说,/work文件夹只需使用mount模块,如下所示:
- mount:
fstype: ext2
src: /dev/sdb1
path: /work
state: mounted
Run Code Online (Sandbox Code Playgroud)
Kon*_*rov 12
默认情况下,Ansible执行/bin/shshell.
例如,如果/bin/sh链接到dash,则它的构建echo与bashGNU中的不同echo; 所以你最终得到了-e输入fdisk的字符.
尝试:
- name: partition new disk
shell: echo -e "n\np\n1\n\n\nw" | sudo fdisk /dev/sdb
args:
executable: /bin/bash
Run Code Online (Sandbox Code Playgroud)
要么:
- name: partition new disk
shell: /bin/echo -e "n\np\n1\n\n\nw" | sudo fdisk /dev/sdb
Run Code Online (Sandbox Code Playgroud)
如何将所有可用空间分配给新分区并将其添加到 Ansible 中的 LVM
如果您正在使用 LVM,请查看此内容!
如果您想使用设备的所有可用空间,请查看此内容!
从设备开始 /dev/sda并在现有分区/dev/sda1在{{ volumeGroup }}。
使用以下方法/dev/sda2在可用空间中创建一个分区,/dev/sda然后将新分区添加到现有{{ 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"
Run Code Online (Sandbox Code Playgroud)