Terraform:装载卷
Terraform: Mount volume
根据文档,使用 terraform,我能够在数字海洋上创建一个 droplet:
resource "digitalocean_volume" "foobar" {
region = "nyc1"
name = "baz"
size = 100
description = "an example volume"
}
所以,我也可以给它添加一个卷:
resource "digitalocean_droplet" "foobar" {
name = "baz"
size = "1gb"
image = "coreos-stable"
region = "nyc1"
volume_ids = ["${digitalocean_volume.foobar.id}"]
}
我想知道如何将其安装到所需位置。
我需要自动安装它。我的意思是,当 droplet 启动时,我需要安装卷。 我正在考虑使用 chef...
有什么想法吗?
需要使用 mount
、fstab
等从客户机 OS 本身完成安装卷
数字海洋文档对此进行了介绍 here。
使用 Chef,您可以使用 resource_mount 以自动方式安装它。
设备名称将是/dev/disk/by-id/scsi-0DO_Volume_YOUR_VOLUME_NAME
。因此,使用 Terraform 文档中的示例,它将是 /dev/disk/by-id/scsi-0DO_Volume_baz
.
要自动挂载卷,您可以使用 user_data 通过 cloud init 到 运行 脚本,如下所示:
这就是您的 digitalocean_droplet 资源应反映的方式:
resource "digitalocean_droplet" "foobar" {
name = "baz"
size = "1gb"
image = "coreos-stable"
region = "nyc1"
volume_ids = ["${digitalocean_volume.foobar.id}"]
# user data
user_data = "${data.template_cloudinit_config.cloudinit-example.rendered}"
}
那么包含 cloudinit_config 的 cloud.init 文件应该如下所示。它将在 ${TERRAFORM_HOME}/scripts/disk.sh 中引用 shell 脚本,该脚本会自动挂载您的卷:
provider "cloudinit" {}
data "template_file" "shell-script" {
template = "${file("scripts/disk.sh")}"
}
data "template_cloudinit_config" "cloudinit-example" {
gzip = false
base64_encode = false
part {
content_type = "text/x-shellscript"
content = "${data.template_file.shell-script.rendered}"
}
}
启动时自动挂载卷的shell脚本在${TERRAFORM_HOME}/scripts/disk.sh
它会首先检查文件系统是否存在。如果为 true 则不会格式化磁盘,否则它会
#!/bin/bash
DEVICE_FS=`blkid -o value -s TYPE ${DEVICE}`
if [ "`echo -n $DEVICE_FS`" == "" ] ; then
mkfs.ext4 ${DEVICE}
fi
mkdir -p /data
echo '${DEVICE} /data ext4 defaults 0 0' >> /etc/fstab
mount /data
希望对您有所帮助
根据文档,使用 terraform,我能够在数字海洋上创建一个 droplet:
resource "digitalocean_volume" "foobar" {
region = "nyc1"
name = "baz"
size = 100
description = "an example volume"
}
所以,我也可以给它添加一个卷:
resource "digitalocean_droplet" "foobar" {
name = "baz"
size = "1gb"
image = "coreos-stable"
region = "nyc1"
volume_ids = ["${digitalocean_volume.foobar.id}"]
}
我想知道如何将其安装到所需位置。 我需要自动安装它。我的意思是,当 droplet 启动时,我需要安装卷。 我正在考虑使用 chef...
有什么想法吗?
需要使用 mount
、fstab
等从客户机 OS 本身完成安装卷
数字海洋文档对此进行了介绍 here。
使用 Chef,您可以使用 resource_mount 以自动方式安装它。
设备名称将是/dev/disk/by-id/scsi-0DO_Volume_YOUR_VOLUME_NAME
。因此,使用 Terraform 文档中的示例,它将是 /dev/disk/by-id/scsi-0DO_Volume_baz
.
要自动挂载卷,您可以使用 user_data 通过 cloud init 到 运行 脚本,如下所示:
这就是您的 digitalocean_droplet 资源应反映的方式:
resource "digitalocean_droplet" "foobar" {
name = "baz"
size = "1gb"
image = "coreos-stable"
region = "nyc1"
volume_ids = ["${digitalocean_volume.foobar.id}"]
# user data
user_data = "${data.template_cloudinit_config.cloudinit-example.rendered}"
}
那么包含 cloudinit_config 的 cloud.init 文件应该如下所示。它将在 ${TERRAFORM_HOME}/scripts/disk.sh 中引用 shell 脚本,该脚本会自动挂载您的卷:
provider "cloudinit" {}
data "template_file" "shell-script" {
template = "${file("scripts/disk.sh")}"
}
data "template_cloudinit_config" "cloudinit-example" {
gzip = false
base64_encode = false
part {
content_type = "text/x-shellscript"
content = "${data.template_file.shell-script.rendered}"
}
}
启动时自动挂载卷的shell脚本在${TERRAFORM_HOME}/scripts/disk.sh
它会首先检查文件系统是否存在。如果为 true 则不会格式化磁盘,否则它会
#!/bin/bash
DEVICE_FS=`blkid -o value -s TYPE ${DEVICE}`
if [ "`echo -n $DEVICE_FS`" == "" ] ; then
mkfs.ext4 ${DEVICE}
fi
mkdir -p /data
echo '${DEVICE} /data ext4 defaults 0 0' >> /etc/fstab
mount /data
希望对您有所帮助