【发布时间】:2019-02-16 22:51:52
【问题描述】:
我是脚本/PowerShell/PowerCLI 新手。我的任务是弄清楚如何最好地扩展我们现有的一些脚本。
我们的脚本从最终用户那里获取 YAML 输入,并根据他们的规范构建 VMware ESXi 集群。我们正在尝试扩展脚本,以便我们可以根据用户在 YAML 中指定的集群类型应用不同的配置。我们希望最终用户能够扩展它以根据需要创建尽可能多的集群。同时根据他们输入的集群类型应用不同的配置。我们还希望将来能够轻松地将 Cluster"X"Type 扩展为我们最终定义的其他类型。
YAML 输入示例:
Cluster1: <Name>
Cluster1Type: <Basic, DR, or Replicate>
Cluster2: <Name>
Cluster2Type: <Basic, DR, or Replicate>
我知道我可以通过硬编码很长的 if 和语句的相当不干净的方式来做到这一点。比如:
If ($Cluster1Type -eq 'DR') {<Code to execute on $Cluster1>}
ElseIf ($Cluster1Type -eq 'Replicate') {<Code to execute on $Cluster1>}
Else {<Code to execute on $Cluster1>}
If ($Cluster2Type -eq 'DR') {<Code to execute on $Cluster2>}
ElseIf ($Cluster2Type -eq 'Replicate') {<Code to execute on $Cluster2>}
Else {<Code to execute on $Cluster2>}
我知道必须有更好的方法来解决这个问题。如果我没记错的话,vSphere 6.5 每个 vCenter 最多可以有 64 个集群,当然,每次我们需要检查最终用户分配给特定集群名称的集群类型时,都不想硬编码 64 个 if else 语句。我一直在寻找一个干净的解决方案,但我的经验不足使得我很难自己找到答案。
我还认为可以为集群名称使用变量数组,然后提示执行我们的 PowerShell 脚本的用户为他们输入到数组中的每个集群名称输入集群类型。我仍然认为可能有比这更好的方法吗?可能是一种在增量方法中对每个 ClusterX 和 ClusterXType 变量运行循环的方法?
【问题讨论】:
-
用字典之类的名称/值集合来处理这种情况会不会更好
-
使用第 3 方 yaml 工具读取所有行。然后做一个foreach集群,写一个集群函数来做需要做的事情,在里面使用switch命令或你上面的if语句。 dbadailystuff.com/yaml-in-powershell
标签: powershell yaml powercli