- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 terraform 和 Chef 创建多个 aws ebs 卷并将它们附加到 EC2 实例。
问题是我希望能够为每个 ebs 卷指定一个特定的 Windows 驱动器号。问题是,当实例化 EC2 实例时,窗口只是为其提供连续的驱动器号(D、E、F 等)
一些驱动器大小相同,因此我不一定可以根据驱动器大小进行重命名。有谁知道如何用 terraform 或 Chef 来做到这一点。我的 google foo 没有找到任何东西。
当然,这一定会出现在其他人身上吗?
我确实看到了使用 EC2Config Windows GUI 来设置它们的引用,但重点是自动化该过程,因为最终我希望 Chef 安装 SQL Server,并且某些数据预计会存储在某些驱动器号上。
这似乎有效 - 尽管我确实想知道是否没有更简单的方法。
function Convert-SCSITargetIdToDeviceName
{
param([int]$SCSITargetId)
If ($SCSITargetId -eq 0) {
return "/dev/sda1"
}
$deviceName = "xvd"
If ($SCSITargetId -gt 25) {
$deviceName += [char](0x60 + [int]($SCSITargetId / 26))
}
$deviceName += [char](0x61 + $SCSITargetId % 26)
return $deviceName
}
Get-WmiObject -Class Win32_DiskDrive | ForEach-Object {
$DiskDrive = $_
$Volumes = Get-WmiObject -Query "ASSOCIATORS OF {Win32_DiskDrive.DeviceID='$($DiskDrive.DeviceID)'} WHERE AssocClass=Win32_DiskDriveToDiskPartition" | ForEach-Object {
$DiskPartition = $_
Get-WmiObject -Query "ASSOCIATORS OF {Win32_DiskPartition.DeviceID='$($DiskPartition.DeviceID)'} WHERE AssocClass=Win32_LogicalDiskToPartition"
}
If ($DiskDrive.PNPDeviceID -like "*PROD_PVDISK*") {
$BlockDeviceName = Convert-SCSITargetIdToDeviceName($DiskDrive.SCSITargetId)
If ($BlockDeviceName -eq "xvdf") { $drive = gwmi win32_volume -Filter "DriveLetter = '$($Volumes.DeviceID)'"; Set-WmiInstance -input $drive -Arguments @{DriveLetter="D:"; Label="SQL Data"} };
If ($BlockDeviceName -eq "xvdg") { $drive = gwmi win32_volume -Filter "DriveLetter = '$($Volumes.DeviceID)'"; Set-WmiInstance -input $drive -Arguments @{DriveLetter="L:"; Label="SQL Logs"} };
If ($BlockDeviceName -eq "xvdh") { $drive = gwmi win32_volume -Filter "DriveLetter = '$($Volumes.DeviceID)'"; Set-WmiInstance -input $drive -Arguments @{DriveLetter="R:"; Label="Report Data"} };
If ($BlockDeviceName -eq "xvdi") { $drive = gwmi win32_volume -Filter "DriveLetter = '$($Volumes.DeviceID)'"; Set-WmiInstance -input $drive -Arguments @{DriveLetter="T:"; Label="Temp DB"} };
If ($BlockDeviceName -eq "xvdj") { $drive = gwmi win32_volume -Filter "DriveLetter = '$($Volumes.DeviceID)'"; Set-WmiInstance -input $drive -Arguments @{DriveLetter="M:"; Label="MSDTC"} };
If ($BlockDeviceName -eq "xvdk") { $drive = gwmi win32_volume -Filter "DriveLetter = '$($Volumes.DeviceID)'"; Set-WmiInstance -input $drive -Arguments @{DriveLetter="B:"; Label="Backups"} };
} ElseIf ($DiskDrive.PNPDeviceID -like "*PROD_AMAZON_EC2_NVME*") {
$BlockDeviceName = Get-EC2InstanceMetadata "meta-data/block-device-mapping/ephemeral$($DiskDrive.SCSIPort - 2)"
If ($BlockDeviceName -eq "xvdf") { $drive = gwmi win32_volume -Filter "DriveLetter = '$($Volumes.DeviceID)'"; Set-WmiInstance -input $drive -Arguments @{DriveLetter="D:"; Label="SQL Data"} };
If ($BlockDeviceName -eq "xvdg") { $drive = gwmi win32_volume -Filter "DriveLetter = '$($Volumes.DeviceID)'"; Set-WmiInstance -input $drive -Arguments @{DriveLetter="L:"; Label="SQL Logs"} };
If ($BlockDeviceName -eq "xvdh") { $drive = gwmi win32_volume -Filter "DriveLetter = '$($Volumes.DeviceID)'"; Set-WmiInstance -input $drive -Arguments @{DriveLetter="R:"; Label="Report Data"} };
If ($BlockDeviceName -eq "xvdi") { $drive = gwmi win32_volume -Filter "DriveLetter = '$($Volumes.DeviceID)'"; Set-WmiInstance -input $drive -Arguments @{DriveLetter="T:"; Label="Temp DB"} };
If ($BlockDeviceName -eq "xvdj") { $drive = gwmi win32_volume -Filter "DriveLetter = '$($Volumes.DeviceID)'"; Set-WmiInstance -input $drive -Arguments @{DriveLetter="M:"; Label="MSDTC"} };
If ($BlockDeviceName -eq "xvdk") { $drive = gwmi win32_volume -Filter "DriveLetter = '$($Volumes.DeviceID)'"; Set-WmiInstance -input $drive -Arguments @{DriveLetter="B:"; Label="Backups"} };
} Else {
write-host "Couldn't find disks";
}
}
最佳答案
我需要一个具有 4 个相同大小的驱动器的 Windows Server 2016,但我不关心哪个 block 设备成为哪个驱动器号。以下是我为获得此信息而采取的步骤(使用 Packer):
首先,在模板的构建器区域中,添加所需数量的 block 设备(在我的例子中 - launch_block_device_mapping 下有 4 个条目)。然后,在配置者列表中运行以下命令:
使用任何 Windows 2016 Amazon 实例上可用的脚本初始化磁盘;这将使每个磁盘联机,向其中添加一个分区,将分区扩展到最大可能的大小,对其进行格式化并为其分配一个 Windows 驱动器号。
{
"type": "powershell",
"inline": [
"C:\\ProgramData\\Amazon\\EC2-Windows\\Launch\\Scripts\\InitializeDisks.ps1"
]
}
注释:
如果添加'-Schedule'参数,此时磁盘将不会初始化,因为此选项只会将脚本添加到计划在下次启动时运行一次的任务中实例的(之后它被停用)。
驱动器号按字母顺序分配,从 D 开始(因为 C 是为根驱动器保留的)。
卷附加到实例的顺序与 block 设备名称无关,并且不会具有一对一的对应关系(xvdb 不会成为D:\ 驱动器,xvdc 不会变成 E:\ 等)
为已初始化磁盘的每个驱动器号分配您想要的标签。
{
"type": "powershell",
"inline": [
"write-output \"Label partitions after initializing disks\"",
"label C: \"OS\"",
"label D: \"Programs\"",
"label E: \"Data\"",
"label F: \"Backup\"",
...
]
}
注意:另一种可能的选择是在运行磁盘初始化脚本之前直接在 DriveLetterMapping.json 文件(在任何 Windows 2016 Amazon AMI 上可用)中添加标签(我无法完成这项工作)。
添加您可能需要的任何其他配置程序(例如激活 Windows 组件、安装应用程序或检查 Windows 更新)后,作为配置程序列表中的最后一个条目,请确保添加实例初始化和 SysPrep 脚本
{
"type": "powershell",
"inline": [
"C:/ProgramData/Amazon/EC2-Windows/Launch/Scripts/InitializeInstance.ps1 -Schedule",
"C:/ProgramData/Amazon/EC2-Windows/Launch/Scripts/SysprepInstance.ps1 -NoShutdown"
]
}
注意:最后一步特定于 EC2Launch,并从 Windows 2016 开始适用。对于旧版本(例如 Windows 2012),语法有所不同,并且基于 EC2Config。
从此配置获取 AMI 后,从此配置启动的任何实例的驱动器号都应符合要求。
如果驱动器号及其标签未按预期映射,您还可以尝试使用实例的用户数据强制重新标记驱动器。在启动它之前,可以轻松地以明文形式传递 powershell 脚本;下面只是一个可能的示例:
<powershell>
write-output "Force re-map of drive letters based on labels, after disk initialization"
# remove drive letters, but keep labels
Get-Volume -Drive D | Get-Partition | Remove-PartitionAccessPath -accesspath "D`:\"
Get-Volume -Drive E | Get-Partition | Remove-PartitionAccessPath -accesspath "E`:\"
Get-Volume -Drive F | Get-Partition | Remove-PartitionAccessPath -accesspath "F`:\"
# add drive letters based on labels
get-volume | where filesystemlabel -match "Programs" | Get-Partition | Set-Partition -NewDriveLetter D
get-volume | where filesystemlabel -match "Data" | Get-Partition | Set-Partition -NewDriveLetter E
get-volume | where filesystemlabel -match "Backup" | Get-Partition | Set-Partition -NewDriveLetter F
</powershell>
关于windows - 使用 Terraform、Chef 或 Powershell 以编程方式设置 EBS 卷 Windows 驱动器盘符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46921165/
我有一套用于配置 Web 和 SQL 服务器的说明书,它们目前在我们的持续部署管道中使用。我希望开发人员能够使用相同的 Recipe 来设置他们的本地开发环境,而无需在 Chef 服务器上注册每台开发
我是 Chef 的新手,并且已经成功配置了我的三个节点 - 工作站、客户端和服务器。 Chef 文档提到了一个 Chef “repo”,其内容看起来与 Chef 服务器非常相似。两者有什么区别,或者它
我正在使用Solo Solo并尝试为Oh My Zsh安装食谱!这导致这个麻烦的错误: Failed to read the private key /etc/chef/client.pem: Err
我正在使用 Vagrant 和 Chef-solo 来测试我的食谱,但我有一个需要厨师服务器的特定食谱(它使用搜索)。我希望我的默认配方如下所示: include_recipe 'some_recip
我在计算机上设置了一个 Chef 客户端,以便使用 learnchef.com 提供的实验室进行练习。 我现在如何将我的 Chef 客户指向我们的内部 Chef 服务器(我们有 2 个非生产和生产服务
我有一个现有的 Chef 服务器设置,其中注册了大约 300 个节点。现在我想转移到另一个具有更新版本的 Chef 服务器。但是我不确定如何将所有节点和其他数据从较旧的 Chef 服务器迁移到较新的服
我正在将我的 Recipe 从 Chef 版本 12.11.18 升级到 13.6.4。某些版本 13 的特定说明在 Chef 版本 12 中不起作用,反之亦然。我现有的服务器仍然使用 Chef Cl
我正在测试一本食谱,其中一个 LWRP 似乎不包含我期望的属性。我需要查看在节点上设置的属性列表。有没有办法在 Vagrant 厨师独奏节点中做到这一点? 我用 kitchen converge它使用
我已经将 Chef 文件从我的 Chef 服务器复制到本地客户端节点,在 ~/.chef 下,我在 ~/.chef/environments 下有所有环境,例如development.rb, prod
对厨师来说完全陌生......我们曾经从 ppa 存储库安装 elasticsearch 但现在我想从头开始构建它(存储库不再更新)每次我更改我的 attributes/default.rb 中的版本
olr以下情况我该如何处理? /etc/init.d/chef-server-webui start * Starting chef-server-webui ~ In 15468 ...fa
尝试在我的 Oracle Linux Box 上安装 Chef。完全按照以下说明进行操作后,我到达了以下位置: 运行 Chef 独奏: (在网址中): http://wiki.opscode.com/
很明显,每个环境都使用一个策略组(如开发、暂存或生产,如 they do here)。然而,当涉及到处理一些与环境相关的属性时,例如名称或种子地址,与旧的角色/环境布局相比,使用策略文件处理起来非常棘
我有一本安装 nginx 并安装自定义 nginx.conf 文件的 Chef Recipe 。基本上就是 Opscode 上的 Cookbook,使用 cookbook_file 来安装文件。 如果
试图在谷歌云引擎上引导一个节点,但我所有的尝试都以失败告终代码 knife bootstrap ipaddress -x raid -i ~/.ssh/google_compute_engine --
我需要创建一个所有者为“testuser”的目录树。 但是,如果我指定“/foo/bar/baz”,则只有在“testuser”、“/foo”和“/foo/bar”下创建的“baz”归“root”用户
也许我错过了文档中的某些内容,但是在阅读了在多个地方定义时使用属性的顺序后,我不明白 中的属性设置的位置节点级别 进入等式 在可以设置和覆盖属性的 1 到 15 个级别中,它提到了配方、环境、角色、属
如何通过厨师将多个成员添加到组中? 我这样试过,但它失败了。 group "git" do action :modify members "foo, bar" append true en
Chef-如何获取命令输出到Ruby变量 我有以下情况,我在grep中获取文件 command "ls /filder1 | grep .txt" grep提供文件名/文件名的输出(如果存在)。 我想
我一直在尝试使用本指南在我的 CentOS 6.5 机器上安装 Chef 服务器 (chef-server-core-12.1.0-1.el6.x86_64.rpm):http://docs.chef
我是一名优秀的程序员,十分优秀!