我正在使用 cdktf 使用 Python 和 Terraform 来配置我的资源。我想自动化整个过程,因此要求“cdktf部署”成为Python代码的一部分,如下所示:
from constructs import Construct
from cdktf import App, TerraformStack
from imports.azurerm import AzurermProvider, ResourceGroup
import subprocess
class MyStack(TerraformStack):
def __init__(self, scope: Construct, ns: str):
super().__init__(scope, ns)
# define resources here
loca="West Europe"
rg_name="example-rg1"
tag = {
"ENV": "Dev",
"PROJECT": "AZ_TF"
}
AzurermProvider(self, "Azurerm", \
features={}
)
example_rg = ResourceGroup(self, 'example-rg1', \
name=rg_name,
location = loca,
tags = tag
)
app = App()
name = "cdktf5"
MyStack(app, name)
app.synth()
subprocess.run(["cdktf", "deploy"])
但是,这并没有按预期工作,输出如下:
⠼ synthesizing...
⠙ synthesizing...
⠇ synthesizing...
⠸ synthesizing...
⠇ synthesizing...
⠦ synthesizing...
不用说,资源并没有被创建。
CDKTF 程序中不能执行任何 cdktf 命令。您需要一个单独的 python 文件来运行部署。原因是您正在执行的程序正在调用自身,从而创建了无限循环。 CDKTF CLI 在计划/应用/合成操作中调用您的 cdktf 程序作为合成步骤的一部分。这意味着当您从该程序启动进程时,您可以通过 CDKTF CLI 再次启动它。
尝试 subprocess.run(["cdktf", "部署", "--skip-synth"]) 代替 subprocess.run(["cdktf", "部署"])