所以这个问题有点复杂,但我需要在Azure中的一个非常具体的情况下使用它。我试图在Azure k8s vnet中创建一个APIM子网,但是我还没有从k8s terraform调用中找到一个返回值,它给了我ID/vnet的名称。相反,我使用powershell命令查询Azure并获取新vnet的名称。我在Windows上本地处理此代码盒子,它工作得很好:
data "external" "cluster_vnet_name" {
program = [var.runPSVer6 == true ? "pwsh" : "powershell","Select-AzSubscription '${var.subscriptionName}' |out-null; Get-AzVirtualNetwork -ResourceGroupName '${module.kubernetes-service.k8ResourceGroup}' | Select Name | convertto-json}"]
depends_on = [module.kubernetes-service]
}
字符串
我在runpsver 6的变量中有一个token,所以当我在Linux机器上运行时,它会将powershell更改为token。现在,这开始变得有点奇怪。当我在windows机器上运行它时,这不是一个问题,但是当我从linux机器上运行它时,我得到以下错误:
找不到外部程序“Pullsh”
我尝试了许多不同的解决方法(比如使用完整的powershell管理单元路径/snap/bin/powershell,并将命令放在一个.ps1文件中),但都无济于事。
我对local-exec terraform命令使用相同的runPSVer 6切换,没有问题,但我需要Vnet的名称作为响应。
有人知道我错过了什么吗?
9月30日之后添加
所以我尝试了另一种触发命令的方法:
variable "runPSVer6" {
type = bool
default = true
}
variable "subscriptionName" {
type = string
}
variable "ResourceGroup" {
type = string
}
data "external" "runpwsh" {
program = [var.runPSVer6 == true ? "pwsh" : "powershell", "test.ps1"]
query = {
subscriptionName = var.subscriptionName
ResourceGroup = var.ResourceGroup
}
}
output "vnet" {
value = data.external.runpwsh.result.name
}
型
这似乎允许命令执行,但是它没有拉回JSON响应的结果(即使我确认我确实得到了响应)。
这是我在.ps1中使用的:
Param($subscriptionName,$ResourceGroup)
$subscription = Select-AzSubscription $subscriptionName
$name = (Get-AzVirtualNetwork -ResourceGroupName $ResourceGroup | Select Name).Name
Write-Output "{`n`t""name"":""$name""`n}"
型
当我不使用.name时,这就是我得到的:
data.external.runpwsh: Refreshing state...
Apply complete! Resources: 0 added, 0 changed, 0 destroyed.
Outputs:
vnet = { "name" = "" }
型
这是.ps1的输出:
{
"name":"vnettest"
}
型
1条答案
按热度按时间yx2lnoni1#
你能检查一下在终端中是否有PowerShell.exe工作吗?它应该会弹出PowerShell提示符...
必须将
pwsh
的路径添加到PATH中。./usr/bin
在我的PATH
中,如您所见:字符串
2020年9月29日之后添加。
我在Ubuntu 20上又试了一次。
我尝试了下面的测试代码,它工作。
型
输出就像...
型
/tmp/testScript.ps1代码是简单的输出语句.
型
我试图空出路径变量只是为了看看我是否得到你提到的错误消息.我做了,如预期..
型
但是当我使用完整路径时,它又工作了。(甚至/snap/bin/powershell也工作了)
型
我以前错误地指责管理单元与我的问题,但管理单元现在确实工作。这并没有给给予任何线索在这里或针点的问题,你有。但可能是你尝试几件事只是为了确保,1.)问题“”在当前目录中,并看到Powershell提示确实出现。.不知道如果你已经检查了这一点,但有时路径中的其他字符可能会导致问题。2.)你能在导出路径=/snap/bin后运行一次tf吗?(在shell中执行,稍后退出,以便在测试后返回旧路径。或.导出正确路径)3.)如果使用完整路径,错误信息必须是不同其他“错误:找不到外部程序“的”..
这就是我的机器中的pushsh bin和sym链接的样子.
型