当我在命令行上运行它时,它可以正常工作:
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不会做我需要的。
有什么建议吗?
答案 0 :(得分:22)
使用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
答案 1 :(得分:10)
默认情况下,Ansible执行/bin/sh
shell
例如,如果dash
与echo
相关联,则其内置bash
与echo
或GNU -e
中的- 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
个字符输入fdisk。
尝试:
SELECT col1, col2 FROM tab1;
SELECT colA, colB FROM tab2;
SELECT colTest, colBlah FROM tab3;
或者:
+------+------+------+------+---------+---------+
| col1 | col2 | colA | colB | colTest | colBlah |
+------+------+------+------+---------+---------+
| abc | def | Ghi | JkL | 12A | 42BD |
+------+------+------+------+---------+---------+
答案 2 :(得分:5)
如何将所有可用空间分配到新分区并在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"
答案 3 :(得分:0)
在我的系统上,可以使“ n”加倍
echo -e "\nn\np\n1\n\n\nw" | fdisk /dev/sdb